diff --git a/src/librssguard/services/reddit/definitions.h b/src/librssguard/services/reddit/definitions.h index 6f9d21e3e..b34493edc 100644 --- a/src/librssguard/services/reddit/definitions.h +++ b/src/librssguard/services/reddit/definitions.h @@ -12,7 +12,7 @@ #define REDDIT_API_GET_PROFILE "https://oauth.reddit.com/api/v1/me" #define REDDIT_API_SUBREDDITS "https://oauth.reddit.com/subreddits/mine/subscriber?limit=%1" -#define REDDIT_API_HOT "https://oauth.reddit.com/r/%2/hot?limit=%1&%3" +#define REDDIT_API_HOT "https://oauth.reddit.com%1hot?limit=%2&count=%3&g=%4" #define REDDIT_DEFAULT_BATCH_SIZE 100 #define REDDIT_MAX_BATCH_SIZE 999 diff --git a/src/librssguard/services/reddit/redditnetworkfactory.cpp b/src/librssguard/services/reddit/redditnetworkfactory.cpp index 612bf9415..0b16ab744 100644 --- a/src/librssguard/services/reddit/redditnetworkfactory.cpp +++ b/src/librssguard/services/reddit/redditnetworkfactory.cpp @@ -17,6 +17,7 @@ #include "services/abstract/category.h" #include "services/reddit/definitions.h" #include "services/reddit/redditserviceroot.h" +#include "services/reddit/redditsubscription.h" #include #include @@ -178,12 +179,14 @@ QList RedditNetworkFactory::subreddits(const QNetworkProxy& custom_proxy) for (const QJsonValue& sub_val : root_doc["data"].toObject()["children"].toArray()) { const auto sub_obj = sub_val.toObject()["data"].toObject(); - Feed* new_sub = new Feed(); + RedditSubscription* new_sub = new RedditSubscription(); new_sub->setCustomId(sub_obj["id"].toString()); new_sub->setTitle(sub_obj["title"].toString()); new_sub->setDescription(sub_obj["public_description"].toString()); + new_sub->setPrefixedName(sub_obj["url"].toString()); + QIcon icon; QString icon_url = sub_obj["community_icon"].toString(); @@ -232,9 +235,14 @@ QList RedditNetworkFactory::hot(const QString& sub_name, const QNetwork QString after; QList msgs; + int desired_count = batchSize(); + do { + int next_batch = desired_count <= 0 ? 100 : std::min(100, desired_count - msgs.size()); + QByteArray output; - QString final_url = QSL(REDDIT_API_HOT).arg(QString::number(100), sub_name, QSL("GLOBAL")); + QString final_url = + QSL(REDDIT_API_HOT).arg(sub_name, QString::number(next_batch), QString::number(msgs.size()), QSL("GLOBAL")); if (!after.isEmpty()) { final_url += QSL("&after=%1").arg(after); @@ -282,7 +290,7 @@ QList RedditNetworkFactory::hot(const QString& sub_name, const QNetwork } } } - while (!after.isEmpty()); + while (!after.isEmpty() && (desired_count <= 0 || desired_count > msgs.size())); // posty dle jmena redditu // https://oauth.reddit.com//new diff --git a/src/librssguard/services/reddit/redditserviceroot.cpp b/src/librssguard/services/reddit/redditserviceroot.cpp index 60ce620a6..5d2ac6207 100644 --- a/src/librssguard/services/reddit/redditserviceroot.cpp +++ b/src/librssguard/services/reddit/redditserviceroot.cpp @@ -14,6 +14,7 @@ #include "services/reddit/redditcategory.h" #include "services/reddit/redditentrypoint.h" #include "services/reddit/redditnetworkfactory.h" +#include "services/reddit/redditsubscription.h" #include @@ -71,7 +72,7 @@ QList RedditServiceRoot::obtainNewMessages(Feed* feed, Q_UNUSED(tagged_messages) Q_UNUSED(feed) - QList messages = m_network->hot(feed->title(), networkProxy()); + QList messages = m_network->hot(qobject_cast(feed)->prefixedName(), networkProxy()); return messages; } @@ -101,7 +102,7 @@ bool RedditServiceRoot::supportsCategoryAdding() const { void RedditServiceRoot::start(bool freshly_activated) { if (!freshly_activated) { - DatabaseQueries::loadRootFromDatabase(this); + DatabaseQueries::loadRootFromDatabase(this); loadCacheFromFile(); } diff --git a/src/librssguard/services/reddit/redditsubscription.cpp b/src/librssguard/services/reddit/redditsubscription.cpp index 04107ac12..ec5a7aea4 100644 --- a/src/librssguard/services/reddit/redditsubscription.cpp +++ b/src/librssguard/services/reddit/redditsubscription.cpp @@ -4,8 +4,28 @@ #include "services/reddit/redditserviceroot.h" -RedditSubscription::RedditSubscription(RootItem* parent) : Feed(parent) {} +RedditSubscription::RedditSubscription(RootItem* parent) : Feed(parent), m_prefixedName(QString()) {} RedditServiceRoot* RedditSubscription::serviceRoot() const { return qobject_cast(getParentServiceRoot()); } + +QString RedditSubscription::prefixedName() const { + return m_prefixedName; +} + +void RedditSubscription::setPrefixedName(const QString& prefixed_name) { + m_prefixedName = prefixed_name; +} + +QVariantHash RedditSubscription::customDatabaseData() const { + QVariantHash data; + + data.insert(QSL("prefixed_name"), prefixedName()); + + return data; +} + +void RedditSubscription::setCustomDatabaseData(const QVariantHash& data) { + setPrefixedName(data.value(QSL("prefixed_name")).toString()); +} diff --git a/src/librssguard/services/reddit/redditsubscription.h b/src/librssguard/services/reddit/redditsubscription.h index 137e56ba2..99e774305 100644 --- a/src/librssguard/services/reddit/redditsubscription.h +++ b/src/librssguard/services/reddit/redditsubscription.h @@ -8,12 +8,21 @@ class RedditServiceRoot; class RedditSubscription : public Feed { - Q_OBJECT + Q_OBJECT public: explicit RedditSubscription(RootItem* parent = nullptr); RedditServiceRoot* serviceRoot() const; + + QString prefixedName() const; + void setPrefixedName(const QString& prefixed_name); + + virtual QVariantHash customDatabaseData() const; + virtual void setCustomDatabaseData(const QVariantHash& data); + + private: + QString m_prefixedName; }; #endif // REDDITSUBSCRIPTION_H