comparison src/gui/widgets/anime_info.cc @ 370:ea3a74ed2ef9

*: hm, last commit wasn't quite finished?
author Paper <paper@tflc.us>
date Fri, 25 Jul 2025 10:22:04 -0400
parents 6b0768158dcd
children
comparison
equal deleted inserted replaced
369:47c9f8502269 370:ea3a74ed2ef9
6 #include "gui/widgets/text.h" 6 #include "gui/widgets/text.h"
7 #include "services/services.h" 7 #include "services/services.h"
8 #include <QHBoxLayout> 8 #include <QHBoxLayout>
9 #include <QTextStream> 9 #include <QTextStream>
10 10
11 AnimeInfoWidgetGetMetadataThread::AnimeInfoWidgetGetMetadataThread(QObject* parent) : QThread(parent) {} 11 AnimeInfoWidgetGetMetadataThread::AnimeInfoWidgetGetMetadataThread(QObject *parent) : QThread(parent)
12 {
13 }
12 14
13 void AnimeInfoWidgetGetMetadataThread::AddToQueue(int id) { 15 void AnimeInfoWidgetGetMetadataThread::AddToQueue(int id)
16 {
14 const std::lock_guard<std::mutex> guard(queue_mutex_); 17 const std::lock_guard<std::mutex> guard(queue_mutex_);
15 queue_.push(id); 18 queue_.push(id);
16 } 19 }
17 20
18 /* processes the queue... */ 21 /* processes the queue... */
19 void AnimeInfoWidgetGetMetadataThread::run() { 22 void AnimeInfoWidgetGetMetadataThread::run()
23 {
20 queue_mutex_.lock(); 24 queue_mutex_.lock();
21 while (!queue_.empty() && !isInterruptionRequested()) { 25 while (!queue_.empty() && !isInterruptionRequested()) {
22 int id = queue_.front(); 26 int id = queue_.front();
23 27
24 queue_mutex_.unlock(); 28 queue_mutex_.unlock();
34 } 38 }
35 39
36 /* all widgets share this thread */ 40 /* all widgets share this thread */
37 static AnimeInfoWidgetGetMetadataThread get_metadata_thread; 41 static AnimeInfoWidgetGetMetadataThread get_metadata_thread;
38 42
39 AnimeInfoWidget::AnimeInfoWidget(QWidget* parent) : QWidget(parent) { 43 AnimeInfoWidget::AnimeInfoWidget(QWidget *parent) : QWidget(parent)
40 QVBoxLayout* layout = new QVBoxLayout(this); 44 {
45 QVBoxLayout *layout = new QVBoxLayout(this);
41 46
42 _title.GetHeader().SetText(Strings::Translate("Alternative titles")); 47 _title.GetHeader().SetText(Strings::Translate("Alternative titles"));
43 layout->addWidget(&_title); 48 layout->addWidget(&_title);
44 49
45 _details.GetHeader().SetText(Strings::Translate("Details")); 50 _details.GetHeader().SetText(Strings::Translate("Details"));
46 51
47 const std::vector<std::pair<std::string, std::string>> items = { 52 const std::vector<std::pair<std::string, std::string>> items = {
48 {Strings::Translate("Type:"), ""}, 53 {Strings::Translate("Type:"), ""},
49 {Strings::Translate("Episodes:"), ""}, 54 {Strings::Translate("Episodes:"), ""},
50 {Strings::Translate("Status:"), ""}, 55 {Strings::Translate("Status:"), ""},
51 {Strings::Translate("Season:"), ""}, 56 {Strings::Translate("Season:"), ""},
52 {Strings::Translate("Genres:"), ""}, 57 {Strings::Translate("Genres:"), ""},
53 {Strings::Translate("Producers:"), ""}, 58 {Strings::Translate("Producers:"), ""},
54 {Strings::Translate("Score:"), ""}, 59 {Strings::Translate("Score:"), ""},
55 }; 60 };
56 61
57 _details.GetContent().SetData(items); 62 _details.GetContent().SetData(items);
58 63
59 layout->addWidget(&_details); 64 layout->addWidget(&_details);
72 77
73 setUpdatesEnabled(true); 78 setUpdatesEnabled(true);
74 }); 79 });
75 } 80 }
76 81
77 AnimeInfoWidget::AnimeInfoWidget(const Anime::Anime& anime, QWidget* parent) : AnimeInfoWidget(parent) { 82 AnimeInfoWidget::AnimeInfoWidget(const Anime::Anime &anime, QWidget *parent) : AnimeInfoWidget(parent)
83 {
78 SetAnime(anime); 84 SetAnime(anime);
79 } 85 }
80 86
81 void AnimeInfoWidget::SetAnime(const Anime::Anime& anime) { 87 void AnimeInfoWidget::SetAnime(const Anime::Anime &anime)
88 {
82 setUpdatesEnabled(false); 89 setUpdatesEnabled(false);
83 90
84 id_ = anime.GetId(); 91 id_ = anime.GetId();
85 92
86 get_metadata_thread.AddToQueue(id_); 93 get_metadata_thread.AddToQueue(id_);
97 setUpdatesEnabled(true); 104 setUpdatesEnabled(true);
98 105
99 updateGeometry(); 106 updateGeometry();
100 } 107 }
101 108
102 void AnimeInfoWidget::RefreshGenres(const Anime::Anime& anime) { 109 void AnimeInfoWidget::RefreshGenres(const Anime::Anime &anime)
110 {
103 /* we have to convert ALL of these strings to 111 /* we have to convert ALL of these strings to
104 * QString because QTextStream sucks and assumes 112 * QString because QTextStream sucks and assumes
105 * Latin-1 (on Windows?) */ 113 * Latin-1 (on Windows?) */
106 const auto genres = anime.GetGenres(); 114 const auto genres = anime.GetGenres();
107 const auto producers = anime.GetProducers(); 115 const auto producers = anime.GetProducers();
108 116
109 const std::vector<std::pair<std::string, std::string>> items = { 117 const std::vector<std::pair<std::string, std::string>> items = {
110 {Strings::Translate("Type:"), Translate::ToLocalString(anime.GetFormat())}, 118 {Strings::Translate("Type:"), Translate::ToLocalString(anime.GetFormat())},
111 {Strings::Translate("Episodes:"), Strings::ToUtf8String(anime.GetEpisodes())}, 119 {Strings::Translate("Episodes:"), Strings::ToUtf8String(anime.GetEpisodes())},
112 {Strings::Translate("Status:"), Translate::ToLocalString(anime.GetAiringStatus())}, 120 {Strings::Translate("Status:"), Translate::ToLocalString(anime.GetAiringStatus())},
113 {Strings::Translate("Season:"), Translate::ToLocalString(anime.GetSeason())}, 121 {Strings::Translate("Season:"), Translate::ToLocalString(anime.GetSeason())},
114 {Strings::Translate("Genres:"), (genres.size() > 1) ? Strings::Implode(genres, ", ") : "-"}, 122 {Strings::Translate("Genres:"), (genres.size() > 1) ? Strings::Implode(genres, ", ") : "-"},
115 {Strings::Translate("Producers:"), (producers.size() > 1) ? Strings::Implode(producers, ", ") : "-"}, 123 {Strings::Translate("Producers:"), (producers.size() > 1) ? Strings::Implode(producers, ", ") : "-"},
116 {Strings::Translate("Score:"), Strings::ToUtf8String(anime.GetAudienceScore()) + "%"}, 124 {Strings::Translate("Score:"), Strings::ToUtf8String(anime.GetAudienceScore()) + "%"},
117 }; 125 };
118 126
119 _details.GetContent().SetData(items); 127 _details.GetContent().SetData(items);
120 } 128 }