Mercurial > minori
changeset 183:01d259b9c89f
pages/torrents.cc: parse feed descriptions separately
services/anilist.cc: use constexpr STL string_view for HTTP queries
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Mon, 04 Dec 2023 13:40:42 -0500 |
parents | c413e475f496 |
children | 09492158bcc5 |
files | include/gui/pages/torrents.h src/core/anime.cc src/core/config.cc src/gui/pages/torrents.cc src/gui/theme.cc src/gui/widgets/text.cc src/services/anilist.cc |
diffstat | 7 files changed, 54 insertions(+), 44 deletions(-) [+] |
line wrap: on
line diff
--- a/include/gui/pages/torrents.h Mon Dec 04 13:19:54 2023 -0500 +++ b/include/gui/pages/torrents.h Mon Dec 04 13:40:42 2023 -0500 @@ -46,6 +46,7 @@ Qt::ItemFlags flags(const QModelIndex& index) const override; QByteArray DownloadTorrentList(); + void ParseFeedDescription(const std::string& description, Torrent& torrent); void ParseTorrentList(const QByteArray& ba); void RefreshTorrentList();
--- a/src/core/anime.cc Mon Dec 04 13:19:54 2023 -0500 +++ b/src/core/anime.cc Mon Dec 04 13:40:42 2023 -0500 @@ -206,6 +206,7 @@ } std::string Anime::GetServiceUrl() const { + /* todo: add support for other services... */ return "https://anilist.co/anime/" + std::to_string(GetId()); }
--- a/src/core/config.cc Mon Dec 04 13:19:54 2023 -0500 +++ b/src/core/config.cc Mon Dec 04 13:40:42 2023 -0500 @@ -39,7 +39,11 @@ anime_list.display_aired_episodes = INI::GetIniValue<bool>(ini, "Anime List", "Display only aired episodes", true); anime_list.display_available_episodes = INI::GetIniValue<bool>(ini, "Anime List", "Display only available episodes in library", true); anime_list.highlight_anime_if_available = INI::GetIniValue<bool>(ini, "Anime List", "Highlight anime if available", true); - anime_list.highlighted_anime_above_others = INI::GetIniValue<bool>(ini, "Anime List", "Display highlighted anime above others", false); + + if (anime_list.highlight_anime_if_available) // sanity check + anime_list.highlighted_anime_above_others = INI::GetIniValue<bool>(ini, "Anime List", "Display highlighted anime above others", false); + else + anime_list.highlighted_anime_above_others = false; auth.anilist.auth_token = INI::GetIniValue<std::string>(ini, "Authentication/AniList", "Auth Token", ""); auth.anilist.user_id = INI::GetIniValue<int>(ini, "Authentication/AniList", "User ID", 0);
--- a/src/gui/pages/torrents.cc Mon Dec 04 13:19:54 2023 -0500 +++ b/src/gui/pages/torrents.cc Mon Dec 04 13:40:42 2023 -0500 @@ -54,6 +54,41 @@ return HTTP::Get(session.config.torrents.feed_link); } +void TorrentsPageListModel::ParseFeedDescription(const std::string& description, Torrent& torrent) { + /* Parse description... */ + enum class Keys { SIZE, AUTHORIZED, SUBMITTER, COMMENT }; + + const std::unordered_map<std::string, Keys> KeyMap = { + {"Size", Keys::SIZE}, + {"Authorized", Keys::AUTHORIZED}, + {"Submitter", Keys::SUBMITTER}, + {"Comment", Keys::COMMENT} + }; + + /* Parse size from description */ + std::istringstream descstream(description); + + for (std::string line; std::getline(descstream, line);) { + const size_t pos = line.find_first_of(':', 0); + if (pos == std::string::npos) + continue; + + const std::string key = line.substr(0, pos); + const std::string value = line.substr(line.find_first_not_of(": ", pos)); + + switch (KeyMap.at(key)) { + case Keys::COMMENT: + torrent.SetDescription(value); + break; + case Keys::SIZE: + torrent.SetSize(Strings::HumanReadableSizeToBytes(value)); + break; + default: + break; + } + } +} + void TorrentsPageListModel::ParseTorrentList(const QByteArray& ba) { std::istringstream stdstream(Strings::ToUtf8String(ba)); @@ -86,43 +121,9 @@ torrent.SetGroup(Strings::ToUtf8String(elements.get(anitomy::kElementReleaseGroup))); torrent.SetResolution(Strings::ToUtf8String(elements.get(anitomy::kElementVideoResolution))); } - torrent.SetDescription(Strings::TextifySynopsis(item.child_value("description"))); - { - /* Parse description... */ - enum class Keys { SIZE, AUTHORIZED, SUBMITTER, COMMENT }; - - const std::unordered_map<std::string, Keys> KeyMap = { - {"Size", Keys::SIZE}, - {"Authorized", Keys::AUTHORIZED}, - {"Submitter", Keys::SUBMITTER}, - {"Comment", Keys::COMMENT} - }; - - const std::string description = Strings::TextifySynopsis(item.child_value("description")); - - /* Parse size from description */ - std::istringstream descstream(description); - for (std::string line; std::getline(descstream, line);) { - const size_t pos = line.find_first_of(':', 0); - if (pos == std::string::npos) - continue; - - const std::string key = line.substr(0, pos); - const std::string value = line.substr(line.find_first_not_of(": ", pos)); + ParseFeedDescription(Strings::TextifySynopsis(item.child_value("description")), torrent); - switch (KeyMap.at(key)) { - case Keys::COMMENT: - torrent.SetDescription(value); - break; - case Keys::SIZE: - torrent.SetSize(Strings::HumanReadableSizeToBytes(value)); - break; - default: - break; - } - } - } torrent.SetLink(item.child_value("link")); torrent.SetGuid(item.child_value("guid")); {
--- a/src/gui/theme.cc Mon Dec 04 13:19:54 2023 -0500 +++ b/src/gui/theme.cc Mon Dec 04 13:40:42 2023 -0500 @@ -17,7 +17,7 @@ 3. I don't want to use the Fusion style on every single platform 4. Windows dark mode support in Qt 6.5 (with Fusion) is completely unavoidable (not a joke btw, it's retarded) - These three already make it really hard, but along with that, I don't even remember if + These four already make it really difficult, but along with that, I don't even remember if OS X dark mode support even works still; I remember the background of some of the widgets would refuse to update for whatever reason. */
--- a/src/gui/widgets/text.cc Mon Dec 04 13:19:54 2023 -0500 +++ b/src/gui/widgets/text.cc Mon Dec 04 13:40:42 2023 -0500 @@ -14,9 +14,12 @@ static_text_title = new QLabel(title, this); static_text_title->setTextFormat(Qt::PlainText); - QFont font = static_text_title->font(); - font.setWeight(QFont::Bold); - static_text_title->setFont(font); + + { + QFont font = static_text_title->font(); + font.setWeight(QFont::Bold); + static_text_title->setFont(font); + } static_text_line = new QFrame(this); static_text_line->setFrameShape(QFrame::HLine);
--- a/src/services/anilist.cc Mon Dec 04 13:19:54 2023 -0500 +++ b/src/services/anilist.cc Mon Dec 04 13:40:42 2023 -0500 @@ -177,8 +177,8 @@ return 0; } - /* NOTE: these should be in the qrc file */ - const std::string query = "query ($id: Int) {\n" + /* NOTE: these really ought to be in the qrc file */ + constexpr std::string_view query = "query ($id: Int) {\n" " MediaListCollection (userId: $id, type: ANIME) {\n" " lists {\n" " name\n" @@ -265,7 +265,7 @@ * Date completedAt **/ Anime::Anime& anime = Anime::db.items[id]; - const std::string query = "mutation ($media_id: Int, $progress: Int, $status: MediaListStatus, $score: Int, " + constexpr std::string_view query = "mutation ($media_id: Int, $progress: Int, $status: MediaListStatus, $score: Int, " "$notes: String, $start: FuzzyDateInput, $comp: FuzzyDateInput) {\n" " SaveMediaListEntry (mediaId: $media_id, progress: $progress, status: $status, " "scoreRaw: $score, notes: $notes, startedAt: $start, completedAt: $comp) {\n" @@ -313,7 +313,7 @@ account.SetAuthToken(Strings::ToUtf8String(token)); - const std::string query = "query {\n" + constexpr std::string_view query = "query {\n" " Viewer {\n" " id\n" " name\n"