aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Galen Abell <galen@galenabell.com> 2020-08-06 16:54:34 +0200
committerGravatar Galen Abell <galen@galenabell.com> 2020-08-08 18:21:59 +0200
commite88b51ecc10b0e85db13afc43f0a6fd78753d546 (patch)
tree19a5495b9b4e88d56efe50715cbb4c33227eed8d
parent5910794bca5b24bc224e2a4323c208f89e641db6 (diff)
downloadnewsboat-e88b51ecc10b0e85db13afc43f0a6fd78753d546.tar.gz
newsboat-e88b51ecc10b0e85db13afc43f0a6fd78753d546.tar.zst
newsboat-e88b51ecc10b0e85db13afc43f0a6fd78753d546.zip
Integrate Miniflux into existing implementation
-rw-r--r--include/rssparser.h2
-rw-r--r--rss/feed.h3
-rw-r--r--src/configcontainer.cpp7
-rw-r--r--src/controller.cpp10
-rw-r--r--src/rssparser.cpp27
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;
};
diff --git a/rss/feed.h b/rss/feed.h
index 949af73e..bc5bc4da 100644
--- a/rss/feed.h
+++ b/rss/feed.h
@@ -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