summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/configcontainer.cpp4
-rw-r--r--src/controller.cpp3
-rw-r--r--src/minifluxapi.cpp43
-rw-r--r--src/minifluxurlreader.cpp18
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()) {