diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/configcontainer.cpp | 4 | ||||
-rw-r--r-- | src/controller.cpp | 3 | ||||
-rw-r--r-- | src/minifluxapi.cpp | 43 | ||||
-rw-r--r-- | src/minifluxurlreader.cpp | 18 |
4 files changed, 58 insertions, 10 deletions
diff --git a/src/configcontainer.cpp b/src/configcontainer.cpp index 93420416..6e27cd2c 100644 --- a/src/configcontainer.cpp +++ b/src/configcontainer.cpp @@ -267,11 +267,15 @@ ConfigContainer::ConfigContainer() {"ocnews-passwordeval", ConfigData("", ConfigDataType::STR)}, {"ocnews-flag-star", ConfigData("", ConfigDataType::STR)}, {"ocnews-url", ConfigData("", ConfigDataType::STR)}, + {"miniflux-flag-star", ConfigData("", ConfigDataType::STR)}, {"miniflux-login", ConfigData("", ConfigDataType::STR)}, {"miniflux-min-items", ConfigData("100", ConfigDataType::INT)}, {"miniflux-password", ConfigData("", ConfigDataType::STR)}, {"miniflux-passwordfile", ConfigData("", ConfigDataType::PATH)}, {"miniflux-passwordeval", ConfigData("", ConfigDataType::STR)}, + { + "miniflux-show-special-feeds", + ConfigData("yes", ConfigDataType::BOOL)}, {"miniflux-token", ConfigData("", ConfigDataType::STR)}, {"miniflux-tokenfile", ConfigData("", ConfigDataType::PATH)}, {"miniflux-tokeneval", ConfigData("", ConfigDataType::STR)}, diff --git a/src/controller.cpp b/src/controller.cpp index b77bab7b..f0d90d25 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -357,7 +357,7 @@ int Controller::run(const CliArgsParser& args) } api = new MinifluxApi(cfg); - urlcfg = new MinifluxUrlReader(configpaths.url_file(), api); + urlcfg = new MinifluxUrlReader(&cfg, 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(); @@ -507,7 +507,6 @@ int Controller::run(const CliArgsParser& args) return EXIT_SUCCESS; } - // if configured, we fill all query feeds with some data; no need to // sort it, it will be refilled when actually opening it. if (cfg.get_configvalue_as_bool("prepopulate-query-feeds")) { diff --git a/src/minifluxapi.cpp b/src/minifluxapi.cpp index 89458611..b21df56e 100644 --- a/src/minifluxapi.cpp +++ b/src/minifluxapi.cpp @@ -139,11 +139,41 @@ bool MinifluxApi::mark_article_read(const std::string& guid, bool read) return true; } -bool MinifluxApi::update_article_flags(const std::string& /* oldflags */, - const std::string& /* newflags */, - const std::string& /* guid */) +bool MinifluxApi::star_article(const std::string& guid, bool star) { - return false; + std::string getstate; + getstate = strprintf::fmt( + "/v1/entries/%s", + guid); + const json status = run_op(getstate, json(), HTTPMethod::GET); + bool current_star = status["starred"]; + + if (star != current_star) { + std::string putcontent; + putcontent = strprintf::fmt( + "/v1/entries/%s/bookmark", + guid); + const json content = run_op(putcontent, json(), HTTPMethod::PUT); + return content.is_null(); + } else { + return true; + } +} + +bool MinifluxApi::update_article_flags(const std::string& oldflags, + const std::string& newflags, + const std::string& guid ) +{ + std::string star_flag = cfg.get_configvalue("miniflux-flag-star"); + bool success = true; + + if (star_flag.length() > 0) { + update_flag(oldflags, newflags, star_flag[0], [&](bool added) { + success = star_article(guid, added); + }); + } + + return success; } rsspp::Feed MinifluxApi::fetch_feed(const std::string& id) @@ -158,7 +188,9 @@ rsspp::Feed MinifluxApi::fetch_feed(const std::string& id, CurlHandle& cached_ha feed.rss_version = rsspp::Feed::MINIFLUX_JSON; const std::string query = - strprintf::fmt("/v1/feeds/%s/entries?order=published_at&direction=desc&limit=%u", + id == "starred" ? + "/v1/entries?starred=true" + : strprintf::fmt("/v1/feeds/%s/entries?order=published_at&direction=desc&limit=%u", id, cfg.get_configvalue_as_int("miniflux-min-items")); @@ -268,7 +300,6 @@ json MinifluxApi::run_op(const std::string& path, const std::string result = utils::retrieve_url( url, easyhandle, cfg, auth_info, body, method); - LOG(Level::DEBUG, "MinifluxApi::run_op(%s %s,...): body=%s reply = %s", utils::http_method_str(method), diff --git a/src/minifluxurlreader.cpp b/src/minifluxurlreader.cpp index cc5bda5f..bfd26ebc 100644 --- a/src/minifluxurlreader.cpp +++ b/src/minifluxurlreader.cpp @@ -1,5 +1,6 @@ #include "minifluxurlreader.h" +#include "configcontainer.h" #include "fileurlreader.h" #include "logger.h" #include "remoteapi.h" @@ -7,8 +8,11 @@ namespace newsboat { -MinifluxUrlReader::MinifluxUrlReader(const std::string& url_file, RemoteApi* a) - : file(url_file) +MinifluxUrlReader::MinifluxUrlReader(ConfigContainer* c, + const std::string& url_file, + RemoteApi* a) + : cfg(c) + , file(url_file) , api(a) { } @@ -21,6 +25,16 @@ nonstd::optional<utils::ReadTextFileError> MinifluxUrlReader::reload() tags.clear(); alltags.clear(); + if (cfg->get_configvalue_as_bool("miniflux-show-special-feeds")) { + std::vector<std::string> tmptags; + const std::string star_url = "starred"; + urls.push_back(star_url); + std::string star_tag = std::string("~") + _("Starred items"); + tmptags.push_back(star_tag); + alltags.insert(star_tag); + tags[star_url] = tmptags; + } + FileUrlReader ur(file); const auto error_message = ur.reload(); if (error_message.has_value()) { |