Mercurial > minori
comparison src/core/config.cc @ 276:ec0a2b5493f8
ini: simplify INI code, use templates less
less magic voodoo code
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Mon, 22 Apr 2024 19:10:28 -0400 |
parents | 862d0d8619f6 |
children | 53e3c015a973 |
comparison
equal
deleted
inserted
replaced
275:22f9aacf6ac1 | 276:ec0a2b5493f8 |
---|---|
37 | 37 |
38 mINI::INIFile file(cfg_path.u8string()); | 38 mINI::INIFile file(cfg_path.u8string()); |
39 mINI::INIStructure ini; | 39 mINI::INIStructure ini; |
40 file.read(ini); | 40 file.read(ini); |
41 | 41 |
42 service = Translate::ToService(INI::GetIniValue<std::string>(ini, "General", "Service", "None")); | 42 service = Translate::ToService(INI::GetIniString(ini, "General", "Service", "None")); |
43 | 43 |
44 anime_list.score_format = | 44 anime_list.score_format = |
45 Translate::ToScoreFormat(INI::GetIniValue<std::string>(ini, "Anime List", "Score format", "POINT_100")); | 45 Translate::ToScoreFormat(INI::GetIniString(ini, "Anime List", "Score format", "POINT_100")); |
46 anime_list.language = | 46 anime_list.language = |
47 Translate::ToLanguage(INI::GetIniValue<std::string>(ini, "Anime List", "Title language", "Romaji")); | 47 Translate::ToLanguage(INI::GetIniString(ini, "Anime List", "Title language", "Romaji")); |
48 anime_list.display_aired_episodes = INI::GetIniValue<bool>(ini, "Anime List", "Display only aired episodes", true); | 48 anime_list.display_aired_episodes = INI::GetIniBool(ini, "Anime List", "Display only aired episodes", true); |
49 anime_list.display_available_episodes = | 49 anime_list.display_available_episodes = |
50 INI::GetIniValue<bool>(ini, "Anime List", "Display only available episodes in library", true); | 50 INI::GetIniBool(ini, "Anime List", "Display only available episodes in library", true); |
51 anime_list.highlight_anime_if_available = | 51 anime_list.highlight_anime_if_available = |
52 INI::GetIniValue<bool>(ini, "Anime List", "Highlight anime if available", true); | 52 INI::GetIniBool(ini, "Anime List", "Highlight anime if available", true); |
53 | 53 |
54 if (anime_list.highlight_anime_if_available) // sanity check | 54 if (anime_list.highlight_anime_if_available) // sanity check |
55 anime_list.highlighted_anime_above_others = | 55 anime_list.highlighted_anime_above_others = |
56 INI::GetIniValue<bool>(ini, "Anime List", "Display highlighted anime above others", false); | 56 INI::GetIniBool(ini, "Anime List", "Display highlighted anime above others", false); |
57 else | 57 else |
58 anime_list.highlighted_anime_above_others = false; | 58 anime_list.highlighted_anime_above_others = false; |
59 | 59 |
60 auth.anilist.auth_token = INI::GetIniValue<std::string>(ini, "Authentication/AniList", "Auth Token", ""); | 60 auth.anilist.auth_token = INI::GetIniString(ini, "Authentication/AniList", "Auth Token", ""); |
61 auth.anilist.user_id = INI::GetIniValue<int>(ini, "Authentication/AniList", "User ID", 0); | 61 auth.anilist.user_id = INI::GetIniInteger<int>(ini, "Authentication/AniList", "User ID", 0); |
62 | 62 |
63 torrents.feed_link = INI::GetIniValue<std::string>(ini, "Torrents", "RSS feed", | 63 torrents.feed_link = INI::GetIniString(ini, "Torrents", "RSS feed", |
64 "https://www.tokyotosho.info/rss.php?filter=1,11&zwnj=0"); | 64 "https://www.tokyotosho.info/rss.php?filter=1,11&zwnj=0"); |
65 | 65 |
66 recognition.detect_media_players = INI::GetIniValue<bool>(ini, "Recognition", "Detect media players", true); | 66 recognition.detect_media_players = INI::GetIniBool(ini, "Recognition", "Detect media players", true); |
67 | 67 |
68 /* lots of dumb logic to import the player data */ | 68 /* lots of dumb logic to import the player data */ |
69 { | 69 { |
70 /* load the player data */ | 70 /* load the player data */ |
71 QFile f(":/players.anisthesia"); | 71 QFile f(":/players.anisthesia"); |
87 | 87 |
88 for (auto& [enabled, player] : recognition.players) { | 88 for (auto& [enabled, player] : recognition.players) { |
89 switch (player.type) { | 89 switch (player.type) { |
90 default: | 90 default: |
91 case animone::PlayerType::Default: | 91 case animone::PlayerType::Default: |
92 enabled = INI::GetIniValue<bool>(ini, "Recognition/Players", player.name, true); | 92 enabled = INI::GetIniBool(ini, "Recognition/Players", player.name, true); |
93 break; | 93 break; |
94 case animone::PlayerType::WebBrowser: | 94 case animone::PlayerType::WebBrowser: |
95 enabled = INI::GetIniValue<bool>(ini, "Recognition/Browsers", player.name, true); | 95 enabled = INI::GetIniBool(ini, "Recognition/Browsers", player.name, true); |
96 break; | 96 break; |
97 } | 97 } |
98 } | 98 } |
99 | 99 |
100 locale.RefreshAvailableLocales(); | 100 locale.RefreshAvailableLocales(); |
101 locale.SetActiveLocale( | 101 locale.SetActiveLocale( |
102 QLocale(Strings::ToQString(INI::GetIniValue<std::string>(ini, "General", "Locale", "en_US")))); | 102 QLocale(Strings::ToQString(INI::GetIniString(ini, "General", "Locale", "en_US")))); |
103 | 103 |
104 theme.SetTheme(Translate::ToTheme(INI::GetIniValue<std::string>(ini, "Appearance", "Theme", "Default"))); | 104 theme.SetTheme(Translate::ToTheme(INI::GetIniString(ini, "Appearance", "Theme", "Default"))); |
105 | 105 |
106 { | 106 { |
107 std::vector<std::string> v = Strings::Split(INI::GetIniValue<std::string>(ini, "Library", "Folders", ""), ";"); | 107 std::vector<std::string> v = Strings::Split(INI::GetIniString(ini, "Library", "Folders", ""), ";"); |
108 for (const auto& s : v) | 108 for (const auto& s : v) |
109 if (!library.paths.count(s)) | 109 if (!library.paths.count(s)) |
110 library.paths.insert(s); | 110 library.paths.insert(s); |
111 } | 111 } |
112 | 112 |
113 library.real_time_monitor = INI::GetIniValue<bool>(ini, "Library", "Real-time monitor", true); | 113 library.real_time_monitor = INI::GetIniBool(ini, "Library", "Real-time monitor", true); |
114 | 114 |
115 return 0; | 115 return 0; |
116 } | 116 } |
117 | 117 |
118 int Config::Save() { | 118 int Config::Save() { |
120 Filesystem::CreateDirectories(cfg_path); | 120 Filesystem::CreateDirectories(cfg_path); |
121 | 121 |
122 mINI::INIFile file(cfg_path.string()); | 122 mINI::INIFile file(cfg_path.string()); |
123 mINI::INIStructure ini; | 123 mINI::INIStructure ini; |
124 | 124 |
125 INI::SetIniValue(ini, "General", "Service", service); | 125 ini["General"]["Service"] = Translate::ToString(service); |
126 INI::SetIniValue(ini, "General", "Locale", locale.GetLocale().name()); | 126 ini["General"]["Locale"] = Strings::ToUtf8String(locale.GetLocale().name()); |
127 | 127 |
128 INI::SetIniValue(ini, "Anime List", "Score format", Translate::ToString(anime_list.score_format)); | 128 ini["Anime List"]["Score format"] = Translate::ToString(anime_list.score_format); |
129 INI::SetIniValue(ini, "Anime List", "Title language", anime_list.language); | 129 ini["Anime List"]["Title language"] = Translate::ToString(anime_list.language); |
130 INI::SetIniValue(ini, "Anime List", "Display only aired episodes", anime_list.display_aired_episodes); | 130 ini["Anime List"]["Display only aired episodes"] = Strings::ToUtf8String(anime_list.display_aired_episodes); |
131 INI::SetIniValue(ini, "Anime List", "Display only available episodes in library", | 131 ini["Anime List"]["Display only available episodes in library"] = Strings::ToUtf8String(anime_list.display_available_episodes); |
132 anime_list.display_available_episodes); | 132 ini["Anime List"]["Highlight anime if available"] = Strings::ToUtf8String(anime_list.highlight_anime_if_available); |
133 INI::SetIniValue(ini, "Anime List", "Highlight anime if available", anime_list.highlight_anime_if_available); | 133 ini["Anime List"]["Display highlighted anime above others"] = Strings::ToUtf8String(anime_list.highlighted_anime_above_others); |
134 INI::SetIniValue(ini, "Anime List", "Display highlighted anime above others", | |
135 anime_list.highlighted_anime_above_others); | |
136 | 134 |
137 INI::SetIniValue(ini, "Authentication/AniList", "Auth Token", auth.anilist.auth_token); | 135 ini["Authentication/AniList"]["Auth Token"] = auth.anilist.auth_token; |
138 INI::SetIniValue(ini, "Authentication/AniList", "User ID", auth.anilist.user_id); | 136 ini["Authentication/AniList"]["User ID"] = auth.anilist.user_id; |
139 | 137 |
140 INI::SetIniValue(ini, "Appearance", "Theme", theme.GetTheme()); | 138 ini["Appearance"]["Theme"] = Translate::ToString(theme.GetTheme()); |
141 | 139 |
142 INI::SetIniValue(ini, "Torrents", "RSS feed", torrents.feed_link); | 140 ini["Torrents"]["RSS feed"] = torrents.feed_link; |
143 | 141 |
144 INI::SetIniValue(ini, "Recognition", "Detect media players", recognition.detect_media_players); | 142 ini["Recognition"]["Detect media players"] = Strings::ToUtf8String(recognition.detect_media_players); |
145 | 143 |
146 for (const auto& [enabled, player] : recognition.players) { | 144 for (const auto& [enabled, player] : recognition.players) { |
147 switch (player.type) { | 145 const std::string section = (player.type == animone::PlayerType::WebBrowser) ? "Recognition/Players" : "Recognition/Browsers"; |
148 default: | 146 ini[section][player.name] = Strings::ToUtf8String(enabled); |
149 case animone::PlayerType::Default: INI::SetIniValue(ini, "Recognition/Players", player.name, enabled); break; | |
150 case animone::PlayerType::WebBrowser: | |
151 INI::SetIniValue(ini, "Recognition/Browsers", player.name, enabled); | |
152 break; | |
153 } | |
154 } | 147 } |
155 | 148 |
156 INI::SetIniValue(ini, "Library", "Folders", Strings::Implode(library.paths, ";")); | 149 ini["Library"]["Folders"] = Strings::Implode(library.paths, ";"); |
157 INI::SetIniValue(ini, "Library", "Real-time monitor", library.real_time_monitor); | 150 ini["Library"]["Real-time monitor"] = Strings::ToUtf8String(library.real_time_monitor); |
158 | 151 |
159 file.write(ini); | 152 file.write(ini); |
160 | 153 |
161 return 0; | 154 return 0; |
162 } | 155 } |