diff --git a/src/webui/api/appcontroller.cpp b/src/webui/api/appcontroller.cpp index f51e2876c..83d61706e 100644 --- a/src/webui/api/appcontroller.cpp +++ b/src/webui/api/appcontroller.cpp @@ -165,7 +165,7 @@ void AppController::preferencesAction() data["ip_filter_enabled"] = session->isIPFilteringEnabled(); data["ip_filter_path"] = Utils::Fs::toNativePath(session->IPFilterFile()); data["ip_filter_trackers"] = session->isTrackerFilteringEnabled(); - data["banned_IPs"] = session->bannedIPs().join("\n"); + data["banned_IPs"] = session->bannedIPs().join('\n'); // Speed // Global Rate Limits @@ -231,7 +231,7 @@ void AppController::preferencesAction() QStringList authSubnetWhitelistStringList; for (const Utils::Net::Subnet &subnet : asConst(pref->getWebUiAuthSubnetWhitelist())) authSubnetWhitelistStringList << Utils::Net::subnetToString(subnet); - data["bypass_auth_subnet_whitelist"] = authSubnetWhitelistStringList.join("\n"); + data["bypass_auth_subnet_whitelist"] = authSubnetWhitelistStringList.join('\n'); data["web_ui_max_auth_fail_count"] = pref->getWebUIMaxAuthFailCount(); data["web_ui_ban_duration"] = static_cast(pref->getWebUIBanDuration().count()); data["web_ui_session_timeout"] = pref->getWebUISessionTimeout(); @@ -258,6 +258,8 @@ void AppController::preferencesAction() data["rss_max_articles_per_feed"] = RSS::Session::instance()->maxArticlesPerFeed(); data["rss_processing_enabled"] = RSS::Session::instance()->isProcessingEnabled(); data["rss_auto_downloading_enabled"] = RSS::AutoDownloader::instance()->isProcessingEnabled(); + data["rss_download_repack_proper_episodes"] = RSS::AutoDownloader::instance()->downloadRepacks(); + data["rss_smart_episode_filters"] = RSS::AutoDownloader::instance()->smartEpisodeFilters().join('\n'); // Advanced settings // qBitorrent preferences @@ -651,6 +653,10 @@ void AppController::setPreferencesAction() RSS::Session::instance()->setProcessingEnabled(it.value().toBool()); if (hasKey("rss_auto_downloading_enabled")) RSS::AutoDownloader::instance()->setProcessingEnabled(it.value().toBool()); + if (hasKey("rss_download_repack_proper_episodes")) + RSS::AutoDownloader::instance()->setDownloadRepacks(it.value().toBool()); + if (hasKey("rss_smart_episode_filters")) + RSS::AutoDownloader::instance()->setSmartEpisodeFilters(it.value().toString().split('\n')); // Advanced settings // qBittorrent preferences diff --git a/src/webui/api/rsscontroller.cpp b/src/webui/api/rsscontroller.cpp index c2f951622..862a19414 100644 --- a/src/webui/api/rsscontroller.cpp +++ b/src/webui/api/rsscontroller.cpp @@ -28,12 +28,15 @@ #include "rsscontroller.h" +#include #include #include #include +#include "base/rss/rss_article.h" #include "base/rss/rss_autodownloader.h" #include "base/rss/rss_autodownloadrule.h" +#include "base/rss/rss_feed.h" #include "base/rss/rss_folder.h" #include "base/rss/rss_session.h" #include "base/utils/string.h" @@ -91,6 +94,29 @@ void RSSController::itemsAction() setResult(jsonVal.toObject()); } +void RSSController::markAsReadAction() +{ + requireParams({"itemPath"}); + + const QString itemPath {params()["itemPath"]}; + const QString articleId {params()["articleId"]}; + + RSS::Item *item = RSS::Session::instance()->itemByPath(itemPath); + if (!item) return; + + if (!articleId.isNull()) { + RSS::Feed *feed = qobject_cast(item); + if (feed) { + RSS::Article *article = feed->articleByGUID(articleId); + if (article) + article->markAsRead(); + } + } + else { + item->markAsRead(); + } +} + void RSSController::refreshItemAction() { requireParams({"itemPath"}); @@ -139,3 +165,27 @@ void RSSController::rulesAction() setResult(jsonObj); } + +void RSSController::matchingArticlesAction() +{ + requireParams({"ruleName"}); + + const QString ruleName {params()["ruleName"]}; + const RSS::AutoDownloadRule rule = RSS::AutoDownloader::instance()->ruleByName(ruleName); + + QJsonObject jsonObj; + for (const QString &feedURL : rule.feedURLs()) { + const RSS::Feed *feed = RSS::Session::instance()->feedByURL(feedURL); + if (!feed) continue; // feed doesn't exist + + QJsonArray matchingArticles; + for (const RSS::Article *article : feed->articles()) { + if (rule.matches(article->data())) + matchingArticles << article->title(); + } + if (!matchingArticles.isEmpty()) + jsonObj.insert(feed->name(), matchingArticles); + } + + setResult(jsonObj); +} diff --git a/src/webui/api/rsscontroller.h b/src/webui/api/rsscontroller.h index a4d22e051..ff99a685d 100644 --- a/src/webui/api/rsscontroller.h +++ b/src/webui/api/rsscontroller.h @@ -44,9 +44,11 @@ private slots: void removeItemAction(); void moveItemAction(); void itemsAction(); + void markAsReadAction(); void refreshItemAction(); void setRuleAction(); void renameRuleAction(); void removeRuleAction(); void rulesAction(); + void matchingArticlesAction(); };