1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#ifndef NEWSBOAT_CONFIGCONTAINER_H_
#define NEWSBOAT_CONFIGCONTAINER_H_
#include <map>
#include <mutex>
#include <string>
#include <vector>
#include "configactionhandler.h"
namespace newsboat {
class ConfigData;
class ConfigParser;
enum class FeedSortMethod {
NONE,
FIRST_TAG,
TITLE,
ARTICLE_COUNT,
UNREAD_ARTICLE_COUNT,
LAST_UPDATED
};
enum class ArtSortMethod { TITLE, FLAGS, AUTHOR, LINK, GUID, DATE, RANDOM };
enum class SortDirection { ASC, DESC };
struct FeedSortStrategy {
FeedSortMethod sm = FeedSortMethod::NONE;
SortDirection sd = SortDirection::DESC;
bool operator==(const FeedSortStrategy& other) const
{
return sm == other.sm && sd == other.sd;
}
bool operator!=(const FeedSortStrategy& other) const
{
return !(*this == other);
}
};
struct ArticleSortStrategy {
ArtSortMethod sm = ArtSortMethod::DATE;
SortDirection sd = SortDirection::ASC;
bool operator==(const ArticleSortStrategy& other) const
{
return sm == other.sm && sd == other.sd;
}
bool operator!=(const ArticleSortStrategy& other) const
{
return !(*this == other);
}
};
class ConfigContainer : public ConfigActionHandler {
public:
ConfigContainer();
~ConfigContainer() override;
void register_commands(ConfigParser& cfgparser);
void handle_action(const std::string& action,
const std::vector<std::string>& params) override;
void dump_config(std::vector<std::string>& config_output) const override;
bool get_configvalue_as_bool(const std::string& key) const;
int get_configvalue_as_int(const std::string& key) const;
std::string get_configvalue(const std::string& key) const;
void set_configvalue(const std::string& key, const std::string& value);
void reset_to_default(const std::string& key);
void toggle(const std::string& key);
std::vector<std::string> get_suggestions(const std::string& fragment) const;
FeedSortStrategy get_feed_sort_strategy() const;
ArticleSortStrategy get_article_sort_strategy() const;
static const std::string PARTIAL_FILE_SUFFIX;
private:
std::map<std::string, ConfigData> config_data;
mutable std::recursive_mutex config_data_mtx;
};
} // namespace newsboat
#endif /* NEWSBOAT_CONFIGCONTAINER_H_ */
|