mirror of
https://github.com/martinrotter/rssguard.git
synced 2025-02-06 04:14:22 +01:00
More or less working message downloading - no state changes so far.
This commit is contained in:
parent
e5e12c30c9
commit
6fa5594665
@ -24,12 +24,18 @@
|
||||
#define INOREADER_OAUTH_AUTH_URL "https://www.inoreader.com/oauth2/auth"
|
||||
#define INOREADER_OAUTH_CLI_ID "1000000604"
|
||||
#define INOREADER_OAUTH_CLI_KEY "gsStoZ3aAoQJCgQxoFSuXkWI7Sly87yK"
|
||||
|
||||
#define INOREADER_REFRESH_TOKEN_KEY "refresh_token"
|
||||
#define INOREADER_ACCESS_TOKEN_KEY "access_token"
|
||||
|
||||
#define INOREADER_DEFAULT_BATCH_SIZE 100
|
||||
#define INOREADER_MAX_BATCH_SIZE 999
|
||||
#define INOREADER_MIN_BATCH_SIZE 20
|
||||
|
||||
#define INOREADER_STATE_READING_LIST "state/com.google/reading-list"
|
||||
#define INOREADER_STATE_READ "state/com.google/read"
|
||||
#define INOREADER_STATE_IMPORTANT "state/com.google/starred"
|
||||
|
||||
#define INOREADER_API_FEED_CONTENTS "https://www.inoreader.com/reader/api/0/stream/contents"
|
||||
#define INOREADER_API_LIST_LABELS "https://www.inoreader.com/reader/api/0/tag/list"
|
||||
#define INOREADER_API_LIST_FEEDS "https://www.inoreader.com/reader/api/0/subscription/list"
|
||||
|
@ -102,20 +102,91 @@ RootItem* InoreaderNetworkFactory::feedsCategories(bool obtain_icons) {
|
||||
}
|
||||
|
||||
QList<Message> InoreaderNetworkFactory::messages(const QString& stream_id, bool* is_error) {
|
||||
QList<Message> messages;
|
||||
Downloader downloader;
|
||||
QEventLoop loop;
|
||||
QString target_url = INOREADER_API_FEED_CONTENTS;
|
||||
|
||||
target_url += QSL("/") + QUrl::toPercentEncoding(stream_id) + QString("/?n=").arg(batchSize());
|
||||
|
||||
target_url += QSL("/") + QUrl::toPercentEncoding(stream_id) + QString("?n=%1").arg(batchSize());
|
||||
downloader.appendRawHeader(QString("Authorization").toLocal8Bit(), m_oauth2->bearer().toLocal8Bit());
|
||||
|
||||
IOFactory::writeTextFile("aa.bb", target_url.toUtf8());
|
||||
|
||||
// We need to quit event loop when the download finishes.
|
||||
connect(&downloader, &Downloader::completed, &loop, &QEventLoop::quit);
|
||||
downloader.manipulateData(INOREADER_API_FEED_CONTENTS, QNetworkAccessManager::Operation::GetOperation);
|
||||
downloader.manipulateData(target_url, QNetworkAccessManager::Operation::GetOperation);
|
||||
loop.exec();
|
||||
|
||||
if (downloader.lastOutputError() != QNetworkReply::NetworkError::NoError) {
|
||||
*is_error = true;
|
||||
return QList<Message>();
|
||||
}
|
||||
else {
|
||||
QString messages_data = downloader.lastOutputData();
|
||||
|
||||
return decodeMessages(messages_data, stream_id);
|
||||
}
|
||||
}
|
||||
|
||||
QList<Message> InoreaderNetworkFactory::decodeMessages(const QString& messages_json_data, const QString& stream_id) {
|
||||
QList<Message> messages;
|
||||
QJsonArray json = QJsonDocument::fromJson(messages_json_data.toUtf8()).object()["items"].toArray();
|
||||
|
||||
IOFactory::writeTextFile("aa.aa", messages_json_data.toUtf8());
|
||||
|
||||
messages.reserve(json.count());
|
||||
|
||||
foreach (const QJsonValue& obj, json) {
|
||||
auto message_obj = obj.toObject();
|
||||
Message message;
|
||||
|
||||
message.m_title = message_obj["title"].toString();
|
||||
message.m_author = message_obj["author"].toString();
|
||||
message.m_created = QDateTime::fromMSecsSinceEpoch(message_obj["published"].toInt());
|
||||
message.m_createdFromFeed = true;
|
||||
message.m_customId = message_obj["id"].toString();
|
||||
|
||||
auto alternates = message_obj["alternate"].toArray();
|
||||
auto enclosures = message_obj["enclosure"].toArray();
|
||||
auto categories = message_obj["categories"].toArray();
|
||||
|
||||
foreach (const QJsonValue& alt, alternates) {
|
||||
auto alt_obj = alt.toObject();
|
||||
QString mime = alt_obj["type"].toString();
|
||||
QString href = alt_obj["href"].toString();
|
||||
|
||||
if (mime == QL1S("text/html")) {
|
||||
message.m_url = href;
|
||||
}
|
||||
else {
|
||||
message.m_enclosures.append(Enclosure(href, mime));
|
||||
}
|
||||
}
|
||||
|
||||
foreach (const QJsonValue& enc, enclosures) {
|
||||
auto enc_obj = enc.toObject();
|
||||
QString mime = enc_obj["type"].toString();
|
||||
QString href = enc_obj["href"].toString();
|
||||
|
||||
message.m_enclosures.append(Enclosure(href, mime));
|
||||
}
|
||||
|
||||
foreach (const QJsonValue& cat, categories) {
|
||||
QString category = cat.toString();
|
||||
|
||||
if (category.contains(INOREADER_STATE_READ)) {
|
||||
message.m_isRead = !category.contains(INOREADER_STATE_READING_LIST);
|
||||
}
|
||||
else if (category.contains(INOREADER_STATE_IMPORTANT)) {
|
||||
message.m_isImportant = category.contains(INOREADER_STATE_IMPORTANT);
|
||||
}
|
||||
}
|
||||
|
||||
message.m_contents = message_obj["summary"].toObject()["content"].toString();
|
||||
message.m_feedId = stream_id;
|
||||
|
||||
messages.append(message);
|
||||
}
|
||||
|
||||
return messages;
|
||||
}
|
||||
|
||||
|
@ -51,6 +51,7 @@ class InoreaderNetworkFactory : public QObject {
|
||||
QList<Message> messages(const QString& stream_id, bool* is_error);
|
||||
|
||||
private:
|
||||
QList<Message> decodeMessages(const QString& messages_json_data, const QString& stream_id);
|
||||
RootItem* decodeFeedCategoriesData(const QString& categories, const QString& feeds, bool obtain_icons);
|
||||
|
||||
void initializeOauth();
|
||||
|
Loading…
x
Reference in New Issue
Block a user