diff options
author | 2020-08-06 16:54:34 +0200 | |
---|---|---|
committer | 2020-08-08 18:21:59 +0200 | |
commit | e88b51ecc10b0e85db13afc43f0a6fd78753d546 (patch) | |
tree | 19a5495b9b4e88d56efe50715cbb4c33227eed8d | |
parent | 5910794bca5b24bc224e2a4323c208f89e641db6 (diff) | |
download | newsboat-e88b51ecc10b0e85db13afc43f0a6fd78753d546.tar.gz newsboat-e88b51ecc10b0e85db13afc43f0a6fd78753d546.tar.zst newsboat-e88b51ecc10b0e85db13afc43f0a6fd78753d546.zip |
Integrate Miniflux into existing implementation
-rw-r--r-- | include/rssparser.h | 2 | ||||
-rw-r--r-- | rss/feed.h | 3 | ||||
-rw-r--r-- | src/configcontainer.cpp | 7 | ||||
-rw-r--r-- | src/controller.cpp | 10 | ||||
-rw-r--r-- | src/rssparser.cpp | 27 |
5 files changed, 47 insertions, 2 deletions
diff --git a/include/rssparser.h b/include/rssparser.h index c1e75997..ad048d53 100644 --- a/include/rssparser.h +++ b/include/rssparser.h @@ -75,6 +75,7 @@ private: void fetch_ttrss(const std::string& feed_id); void fetch_newsblur(const std::string& feed_id); void fetch_ocnews(const std::string& feed_id); + void fetch_miniflux(const std::string& feed_id); std::string my_uri; Cache* ch; @@ -85,6 +86,7 @@ private: bool is_ttrss; bool is_newsblur; bool is_ocnews; + bool is_miniflux; CurlHandle* easyhandle; }; @@ -22,7 +22,8 @@ public: ATOM_0_3_NONS, TTRSS_JSON, NEWSBLUR_JSON, - OCNEWS_JSON + OCNEWS_JSON, + MINIFLUX_JSON }; Feed() diff --git a/src/configcontainer.cpp b/src/configcontainer.cpp index fedb89da..d7b9f95d 100644 --- a/src/configcontainer.cpp +++ b/src/configcontainer.cpp @@ -245,6 +245,12 @@ ConfigContainer::ConfigContainer() {"ocnews-passwordeval", ConfigData("", ConfigDataType::STR)}, {"ocnews-flag-star", ConfigData("", ConfigDataType::STR)}, {"ocnews-url", ConfigData("", ConfigDataType::STR)}, + {"miniflux-login", ConfigData("", ConfigDataType::STR)}, + {"miniflux-password", ConfigData("", ConfigDataType::STR)}, + {"miniflux-passwordfile", ConfigData("", ConfigDataType::PATH)}, + {"miniflux-passwordeval", ConfigData("", ConfigDataType::STR)}, + {"miniflux-flag-star", ConfigData("", ConfigDataType::STR)}, + {"miniflux-url", ConfigData("", ConfigDataType::STR)}, { "urls-source", ConfigData("local", @@ -255,6 +261,7 @@ ConfigContainer::ConfigContainer() "newsblur", "feedhq", "ocnews", + "miniflux", "inoreader"}))}, {"use-proxy", ConfigData("no", ConfigDataType::BOOL)}, {"user-agent", ConfigData("", ConfigDataType::STR)}, diff --git a/src/controller.cpp b/src/controller.cpp index 59078ed9..e8b6dd54 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -41,6 +41,8 @@ #include "inoreaderurlreader.h" #include "itemrenderer.h" #include "logger.h" +#include "minifluxapi.h" +#include "minifluxurlreader.h" #include "newsblurapi.h" #include "newsblururlreader.h" #include "ocnewsapi.h" @@ -288,6 +290,9 @@ int Controller::run(const CliArgsParser& args) } else if (type == "ocnews") { api = new OcNewsApi(&cfg); urlcfg = new OcNewsUrlReader(configpaths.url_file(), api); + } else if (type == "miniflux") { + api = new MinifluxApi(&cfg); + urlcfg = new MinifluxUrlReader(configpaths.url_file(), api); } else if (type == "inoreader") { const auto all_set = !cfg.get_configvalue("inoreader-app-id").empty() && !cfg.get_configvalue("inoreader-app-key").empty(); @@ -355,6 +360,11 @@ int Controller::run(const CliArgsParser& args) _("It looks like you haven't configured any " "feeds in your Inoreader account. Please do " "so, and try again.")); + } else if (type == "miniflux") { + msg = strprintf::fmt( + _("It looks like you haven't configured any " + "feeds in your Miniflux account. Please do " + "so, and try again.")); } else { assert(0); // shouldn't happen } diff --git a/src/rssparser.cpp b/src/rssparser.cpp index 545e6dca..b4097f7b 100644 --- a/src/rssparser.cpp +++ b/src/rssparser.cpp @@ -13,6 +13,7 @@ #include "curlhandle.h" #include "htmlrenderer.h" #include "logger.h" +#include "minifluxapi.h" #include "newsblurapi.h" #include "ocnewsapi.h" #include "rss/exception.h" @@ -41,6 +42,7 @@ RssParser::RssParser(const std::string& uri, is_ttrss = cfgcont->get_configvalue("urls-source") == "ttrss"; is_newsblur = cfgcont->get_configvalue("urls-source") == "newsblur"; is_ocnews = cfgcont->get_configvalue("urls-source") == "ocnews"; + is_miniflux = cfgcont->get_configvalue("urls-source") == "miniflux"; } RssParser::~RssParser() {} @@ -160,6 +162,8 @@ void RssParser::retrieve_uri(const std::string& uri) fetch_newsblur(uri); } else if (is_ocnews) { fetch_ocnews(uri); + } else if (is_miniflux) { + fetch_miniflux(uri); } else if (utils::is_http_url(uri)) { download_http(uri); } else if (utils::is_exec_url(uri)) { @@ -361,7 +365,8 @@ void RssParser::fill_feed_items(std::shared_ptr<RssFeed> feed) if ((f.rss_version == rsspp::Feed::ATOM_1_0 || f.rss_version == rsspp::Feed::TTRSS_JSON || f.rss_version == rsspp::Feed::NEWSBLUR_JSON || - f.rss_version == rsspp::Feed::OCNEWS_JSON) && + f.rss_version == rsspp::Feed::OCNEWS_JSON || + f.rss_version == rsspp::Feed::MINIFLUX_JSON) && item.labels.size() > 0) { auto start = item.labels.begin(); auto finish = item.labels.end(); @@ -406,6 +411,15 @@ void RssParser::fill_feed_items(std::shared_ptr<RssFeed> feed) x->set_unread_nowrite(false); x->set_override_unread(true); } + if (std::find(start, finish, "miniflux:unread") != + finish) { + x->set_unread_nowrite(true); + x->set_override_unread(true); + } + if (std::find(start, finish, "miniflux:read") != finish) { + x->set_unread_nowrite(false); + x->set_override_unread(true); + } } set_item_content(x, item); @@ -638,4 +652,15 @@ void RssParser::fetch_ocnews(const std::string& feed_id) static_cast<uint64_t>(f.items.size())); } +void RssParser::fetch_miniflux(const std::string& feed_id) +{ + MinifluxApi* mapi = dynamic_cast<MinifluxApi*>(api); + if (mapi) { + f = mapi->fetch_feed(feed_id, easyhandle ? easyhandle->ptr() : nullptr); + } + LOG(Level::INFO, + "RssParser::fetch_miniflux: f.items.size = %" PRIu64, + static_cast<uint64_t>(f.items.size())); +} + } // namespace newsboat |