Mercurial > minori
comparison src/gui/pages/statistics.cpp @ 64:fe719c109dbc
*: update
1. add media tracking ability, and it displays info on the `now playing` page
2. the `now playing` page now actually shows something
3. renamed every page class to be more accurate to what it is
4. ...
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Sun, 01 Oct 2023 23:15:43 -0400 |
| parents | 3d2decf093bb |
| children | d3e9310598b1 |
comparison
equal
deleted
inserted
replaced
| 63:3d2decf093bb | 64:fe719c109dbc |
|---|---|
| 9 #include <QTimer> | 9 #include <QTimer> |
| 10 #include <QVBoxLayout> | 10 #include <QVBoxLayout> |
| 11 #include <QWidget> | 11 #include <QWidget> |
| 12 #include <sstream> | 12 #include <sstream> |
| 13 | 13 |
| 14 StatisticsWidget::StatisticsWidget(QWidget* parent) : QFrame(parent) { | 14 StatisticsPage::StatisticsPage(QWidget* parent) : QFrame(parent) { |
| 15 setLayout(new QVBoxLayout); | 15 QVBoxLayout* layout = new QVBoxLayout(this); |
| 16 | 16 |
| 17 setFrameShape(QFrame::Panel); | 17 setFrameShape(QFrame::Box); |
| 18 setFrameShadow(QFrame::Sunken); | 18 setFrameShadow(QFrame::Sunken); |
| 19 | 19 |
| 20 QPalette pal = QPalette(); | 20 QPalette pal = QPalette(); |
| 21 pal.setColor(QPalette::Window, pal.color(QPalette::Base)); | 21 pal.setColor(QPalette::Window, pal.color(QPalette::Base)); |
| 22 setPalette(pal); | 22 setPalette(pal); |
| 30 | 30 |
| 31 TextWidgets::LabelledTextParagraph* application_paragraph = | 31 TextWidgets::LabelledTextParagraph* application_paragraph = |
| 32 new TextWidgets::LabelledTextParagraph(tr("Minori"), tr("Uptime:\nRequests made:"), "\n\n", this); | 32 new TextWidgets::LabelledTextParagraph(tr("Minori"), tr("Uptime:\nRequests made:"), "\n\n", this); |
| 33 application_data = application_paragraph->GetParagraph(); | 33 application_data = application_paragraph->GetParagraph(); |
| 34 | 34 |
| 35 layout()->addWidget(anime_list_paragraph); | 35 layout->addWidget(anime_list_paragraph); |
| 36 layout()->addWidget(application_paragraph); | 36 layout->addWidget(application_paragraph); |
| 37 ((QBoxLayout*)layout())->addStretch(); | 37 layout->addStretch(); |
| 38 | 38 |
| 39 QTimer* timer = new QTimer(this); | 39 QTimer* timer = new QTimer(this); |
| 40 connect(timer, &QTimer::timeout, this, [this] { | 40 connect(timer, &QTimer::timeout, this, [this] { |
| 41 if (isVisible()) | 41 if (isVisible()) |
| 42 UpdateStatistics(); | 42 UpdateStatistics(); |
| 43 }); | 43 }); |
| 44 timer->start(1000); // update statistics every second | 44 timer->start(1000); // update statistics every second |
| 45 } | 45 } |
| 46 | 46 |
| 47 void StatisticsWidget::showEvent(QShowEvent*) { | 47 void StatisticsPage::showEvent(QShowEvent*) { |
| 48 UpdateStatistics(); | 48 UpdateStatistics(); |
| 49 } | 49 } |
| 50 | 50 |
| 51 /* me abusing macros :) */ | 51 /* me abusing macros :) */ |
| 52 #define ADD_TIME_SEGMENT(r, x, s, p) \ | 52 #define ADD_TIME_SEGMENT(r, x, s, p) \ |
| 53 { \ | 53 if (x > 0) \ |
| 54 if (x > 0) \ | 54 r << x << ((x == 1) ? s : p) |
| 55 r << x << ((x == 1) ? s : p); \ | 55 std::string StatisticsPage::MinutesToDateString(int minutes) { |
| 56 } | |
| 57 std::string StatisticsWidget::MinutesToDateString(int minutes) { | |
| 58 /* ew */ | 56 /* ew */ |
| 59 int years = (minutes * (1 / 525949.2F)); | 57 int years = (minutes * (1 / 525949.2F)); |
| 60 int months = (minutes * (1 / 43829.1F)) - (years * 12); | 58 int months = (minutes * (1 / 43829.1F)) - (years * 12); |
| 61 int days = (minutes * (1 / 1440.0F)) - (years * 365.2425F) - (months * 30.436875F); | 59 int days = (minutes * (1 / 1440.0F)) - (years * 365.2425F) - (months * 30.436875F); |
| 62 int hours = (minutes * (1 / 60.0F)) - (years * 8765.82F) - (months * 730.485F) - (days * 24); | 60 int hours = (minutes * (1 / 60.0F)) - (years * 8765.82F) - (months * 730.485F) - (days * 24); |
| 69 if (rest_minutes > 0 || return_stream.str().size() == 0) | 67 if (rest_minutes > 0 || return_stream.str().size() == 0) |
| 70 return_stream << rest_minutes << ((rest_minutes == 1) ? " minute" : " minutes"); | 68 return_stream << rest_minutes << ((rest_minutes == 1) ? " minute" : " minutes"); |
| 71 return return_stream.str(); | 69 return return_stream.str(); |
| 72 } | 70 } |
| 73 | 71 |
| 74 std::string StatisticsWidget::SecondsToDateString(int sec) { | 72 std::string StatisticsPage::SecondsToDateString(int sec) { |
| 75 /* this is all fairly unnecessary, but works:tm: */ | 73 /* this is all fairly unnecessary, but works:tm: */ |
| 76 int years = sec * (1 / 31556952.0F); | 74 int years = sec * (1 / 31556952.0F); |
| 77 int months = sec * (1 / 2629746.0F) - (years * 12); | 75 int months = sec * (1 / 2629746.0F) - (years * 12); |
| 78 int days = sec * (1 / 86400.0F) - (years * 365.2425F) - (months * 30.436875F); | 76 int days = sec * (1 / 86400.0F) - (years * 365.2425F) - (months * 30.436875F); |
| 79 int hours = sec * (1 / 3600.0F) - (years * 8765.82F) - (months * 730.485F) - (days * 24); | 77 int hours = sec * (1 / 3600.0F) - (years * 8765.82F) - (months * 730.485F) - (days * 24); |
| 90 return_stream << seconds << ((seconds == 1) ? " second" : " seconds"); | 88 return_stream << seconds << ((seconds == 1) ? " second" : " seconds"); |
| 91 return return_stream.str(); | 89 return return_stream.str(); |
| 92 } | 90 } |
| 93 #undef ADD_TIME_SEGMENT | 91 #undef ADD_TIME_SEGMENT |
| 94 | 92 |
| 95 void StatisticsWidget::UpdateStatistics() { | 93 void StatisticsPage::UpdateStatistics() { |
| 96 /* Anime list */ | 94 /* Anime list */ |
| 97 QString string = ""; | 95 QString string = ""; |
| 98 QTextStream ts(&string); | 96 QTextStream ts(&string); |
| 99 ts << Anime::db.GetTotalAnimeAmount() << '\n'; | 97 ts << Anime::db.GetTotalAnimeAmount() << '\n'; |
| 100 ts << Anime::db.GetTotalEpisodeAmount() << '\n'; | 98 ts << Anime::db.GetTotalEpisodeAmount() << '\n'; |
| 101 ts << MinutesToDateString(Anime::db.GetTotalWatchedAmount()).c_str() << '\n'; | 99 ts << MinutesToDateString(Anime::db.GetTotalWatchedAmount()).c_str() << '\n'; |
| 102 ts << MinutesToDateString(Anime::db.GetTotalPlannedAmount()).c_str() << '\n'; | 100 ts << MinutesToDateString(Anime::db.GetTotalPlannedAmount()).c_str() << '\n'; |
| 103 ts << Anime::db.GetAverageScore() << '\n'; | 101 ts << Anime::db.GetAverageScore() << '\n'; |
| 104 ts << Anime::db.GetScoreDeviation(); | 102 ts << Anime::db.GetScoreDeviation(); |
| 105 TextWidgets::SetPlainTextEditData(anime_list_data, string); | 103 anime_list_data->SetText(string); |
| 106 | 104 |
| 107 string = ""; | 105 string = ""; |
| 108 ts << QString::fromUtf8(SecondsToDateString(session.uptime() / 1000).c_str()) << '\n'; | 106 ts << QString::fromUtf8(SecondsToDateString(session.uptime() / 1000).c_str()) << '\n'; |
| 109 ts << session.GetRequests(); | 107 ts << session.GetRequests(); |
| 110 /* Application */ | 108 /* Application */ |
| 111 // UiUtils::SetPlainTextEditData(application_data, QString::number(session.uptime() / 1000)); | 109 // UiUtils::SetPlainTextEditData(application_data, QString::number(session.uptime() / 1000)); |
| 112 TextWidgets::SetPlainTextEditData(application_data, string); | 110 application_data->SetText(string); |
| 113 } | 111 } |
| 114 | 112 |
| 115 #include "gui/pages/moc_statistics.cpp" | 113 #include "gui/pages/moc_statistics.cpp" |
