comparison src/gui/pages/anime_list.cc @ 202:71832ffe425a

animia: re-add kvm fd source this is all being merged from my wildly out-of-date laptop. SORRY! in other news, I edited the CI file to install the wayland client as well, so the linux CI build might finally get wayland stuff.
author Paper <paper@paper.us.eu.org>
date Tue, 02 Jan 2024 06:05:06 -0500
parents bc1ae1810855
children 7cf53145de11
comparison
equal deleted inserted replaced
201:8f6f8dd2eb23 202:71832ffe425a
15 #include "core/strings.h" 15 #include "core/strings.h"
16 #include "core/time.h" 16 #include "core/time.h"
17 #include "gui/dialog/information.h" 17 #include "gui/dialog/information.h"
18 #include "gui/translate/anime.h" 18 #include "gui/translate/anime.h"
19 #include "services/services.h" 19 #include "services/services.h"
20
21 #include <QDate>
20 #include <QDebug> 22 #include <QDebug>
21 #include <QHBoxLayout> 23 #include <QHBoxLayout>
22 #include <QHeaderView> 24 #include <QHeaderView>
23 #include <QMenu> 25 #include <QMenu>
24 #include <QProgressBar> 26 #include <QProgressBar>
25 #include <QShortcut> 27 #include <QShortcut>
26 #include <QTreeView> 28 #include <QTreeView>
27 #include <QStylePainter> 29 #include <QStylePainter>
28 #include <QStyledItemDelegate> 30 #include <QStyledItemDelegate>
29 #include <QThreadPool> 31 #include <QThreadPool>
32
30 #include <set> 33 #include <set>
31 34
32 AnimeListPageSortFilter::AnimeListPageSortFilter(QObject* parent) : QSortFilterProxyModel(parent) { 35 AnimeListPageSortFilter::AnimeListPageSortFilter(QObject* parent) : QSortFilterProxyModel(parent) {
33 } 36 }
34 37
103 if (!index.isValid()) 106 if (!index.isValid())
104 return QVariant(); 107 return QVariant();
105 switch (role) { 108 switch (role) {
106 case Qt::DisplayRole: 109 case Qt::DisplayRole:
107 switch (index.column()) { 110 switch (index.column()) {
108 case AL_TITLE: return QString::fromUtf8(list[index.row()].GetUserPreferredTitle().c_str()); 111 case AL_TITLE: return Strings::ToQString(list[index.row()].GetUserPreferredTitle());
109 case AL_PROGRESS: 112 case AL_PROGRESS:
110 return QString::number(list[index.row()].GetUserProgress()) + "/" + 113 return QString::number(list[index.row()].GetUserProgress()) + "/" +
111 QString::number(list[index.row()].GetEpisodes()); 114 QString::number(list[index.row()].GetEpisodes());
112 case AL_EPISODES: return list[index.row()].GetEpisodes(); 115 case AL_EPISODES: return list[index.row()].GetEpisodes();
113 case AL_SCORE: return list[index.row()].GetUserScore(); 116 case AL_SCORE: return Strings::ToQString(list[index.row()].GetUserPresentableScore());
114 case AL_TYPE: return Strings::ToQString(Translate::ToString(list[index.row()].GetFormat())); 117 case AL_TYPE: return Strings::ToQString(Translate::ToString(list[index.row()].GetFormat()));
115 case AL_SEASON: 118 case AL_SEASON: {
116 return Strings::ToQString(Translate::ToString(list[index.row()].GetSeason())) + " " + 119 std::optional<unsigned int> year = list[index.row()].GetAirDate().GetYear();
117 QString::number(list[index.row()].GetAirDate().GetYear()); 120 if (!year)
121 return "Unknown Unknown";
122 return Strings::ToQString(Translate::ToLocalString(list[index.row()].GetSeason()) + " " + std::to_string(year.value()));
123 }
118 case AL_AVG_SCORE: return QString::number(list[index.row()].GetAudienceScore()) + "%"; 124 case AL_AVG_SCORE: return QString::number(list[index.row()].GetAudienceScore()) + "%";
119 case AL_STARTED: return list[index.row()].GetUserDateStarted().GetAsQDate(); 125 case AL_STARTED: return list[index.row()].GetUserDateStarted().GetAsQDate();
120 case AL_COMPLETED: return list[index.row()].GetUserDateCompleted().GetAsQDate(); 126 case AL_COMPLETED: return list[index.row()].GetUserDateCompleted().GetAsQDate();
121 case AL_UPDATED: { 127 case AL_UPDATED: {
122 if (list[index.row()].GetUserTimeUpdated() == 0) 128 if (list[index.row()].GetUserTimeUpdated() == 0)
123 return QString("-"); 129 return QString("-");
124 Time::Duration duration(Time::GetSystemTime() - list[index.row()].GetUserTimeUpdated()); 130 Time::Duration duration(Time::GetSystemTime() - list[index.row()].GetUserTimeUpdated());
125 return QString::fromUtf8(duration.AsRelativeString().c_str()); 131 return Strings::ToQString(duration.AsRelativeString());
126 } 132 }
127 case AL_NOTES: return QString::fromUtf8(list[index.row()].GetUserNotes().c_str()); 133 case AL_NOTES: return Strings::ToQString(list[index.row()].GetUserNotes());
128 default: return ""; 134 default: return "";
129 } 135 }
130 break; 136 break;
131 case Qt::UserRole: 137 case Qt::UserRole:
132 switch (index.column()) { 138 switch (index.column()) {
133 case AL_PROGRESS: return list[index.row()].GetUserProgress(); 139 case AL_PROGRESS: return list[index.row()].GetUserProgress();
140 case AL_SCORE: return list[index.row()].GetUserScore();
134 case AL_TYPE: return static_cast<int>(list[index.row()].GetFormat()); 141 case AL_TYPE: return static_cast<int>(list[index.row()].GetFormat());
135 case AL_SEASON: return list[index.row()].GetAirDate().GetAsQDate(); 142 case AL_SEASON: return list[index.row()].GetAirDate().GetAsQDate();
136 case AL_AVG_SCORE: return list[index.row()].GetAudienceScore(); 143 case AL_AVG_SCORE: return list[index.row()].GetAudienceScore();
137 case AL_UPDATED: return QVariant::fromValue(list[index.row()].GetUserTimeUpdated()); 144 case AL_UPDATED: return QVariant::fromValue(list[index.row()].GetUserTimeUpdated());
138 default: return data(index, Qt::DisplayRole); 145 default: return data(index, Qt::DisplayRole);
340 reinterpret_cast<AnimeListPageModel*>(sort_models[i]->sourceModel())->RefreshList(); 347 reinterpret_cast<AnimeListPageModel*>(sort_models[i]->sourceModel())->RefreshList();
341 } 348 }
342 349
343 void AnimeListPage::RefreshTabs() { 350 void AnimeListPage::RefreshTabs() {
344 for (unsigned int i = 0; i < sort_models.size(); i++) 351 for (unsigned int i = 0; i < sort_models.size(); i++)
345 tab_bar->setTabText(i, Strings::ToQString(Translate::ToString(Anime::ListStatuses[i])) + " (" + 352 tab_bar->setTabText(i, Strings::ToQString(Translate::ToString(Anime::ListStatuses[i]) + " (" +
346 QString::number(Anime::db.GetListsAnimeAmount(Anime::ListStatuses[i])) + ")"); 353 std::to_string(Anime::db.GetListsAnimeAmount(Anime::ListStatuses[i])) + ")"));
347 } 354 }
348 355
349 void AnimeListPage::Refresh() { 356 void AnimeListPage::Refresh() {
350 RefreshList(); 357 RefreshList();
351 RefreshTabs(); 358 RefreshTabs();