More or less working message downloading - no state changes so far.

This commit is contained in:
Martin Rotter 2017-09-27 11:42:41 +02:00
parent e5e12c30c9
commit 6fa5594665
3 changed files with 82 additions and 4 deletions

View File

@ -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"

View File

@ -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;
}

View File

@ -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();