Mercurial > minori
comparison src/gui/window.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 | 975a3f0965e2 |
children | 84e0a3c4737a |
comparison
equal
deleted
inserted
replaced
201:8f6f8dd2eb23 | 202:71832ffe425a |
---|---|
34 #include <QThreadPool> | 34 #include <QThreadPool> |
35 #include <QTimer> | 35 #include <QTimer> |
36 #include <QToolBar> | 36 #include <QToolBar> |
37 #include <QToolButton> | 37 #include <QToolButton> |
38 | 38 |
39 #include <iostream> | |
40 | |
39 #ifdef MACOSX | 41 #ifdef MACOSX |
40 # include "sys/osx/dark_theme.h" | 42 # include "sys/osx/dark_theme.h" |
41 #elif defined(WIN32) | 43 #elif defined(WIN32) |
42 # include "sys/win32/dark_theme.h" | 44 # include "sys/win32/dark_theme.h" |
43 #endif | 45 #endif |
44 | 46 |
45 Q_DECLARE_METATYPE(std::vector<std::string>); | |
46 | |
47 class Thread : public QThread { | |
48 Q_OBJECT | |
49 | |
50 public: | |
51 Thread(QObject* object = nullptr) : QThread(object) {} | |
52 | |
53 private: | |
54 void run() override { | |
55 std::vector<std::string> files; | |
56 Track::Media::GetCurrentlyPlaying(files); | |
57 emit Done(files); | |
58 } | |
59 | |
60 signals: | |
61 void Done(const std::vector<std::string>& files); | |
62 }; | |
63 | |
64 enum class Pages { | 47 enum class Pages { |
65 NOW_PLAYING, | 48 NOW_PLAYING, |
66 | 49 |
67 ANIME_LIST, | 50 ANIME_LIST, |
68 HISTORY, | 51 HISTORY, |
71 SEARCH, | 54 SEARCH, |
72 SEASONS, | 55 SEASONS, |
73 TORRENTS | 56 TORRENTS |
74 }; | 57 }; |
75 | 58 |
59 void PlayingThread::run() { | |
60 std::vector<std::string> files; | |
61 Track::Media::GetCurrentlyPlaying(files); | |
62 emit Done(files); | |
63 } | |
64 | |
76 MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) { | 65 MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) { |
77 setWindowIcon(QIcon(":/favicon.png")); | 66 setWindowIcon(QIcon(":/favicon.png")); |
78 | 67 |
79 main_widget.reset(new QWidget(this)); | 68 main_widget.reset(new QWidget(this)); |
80 /*QHBoxLayout* layout = */new QHBoxLayout(main_widget.get()); | 69 new QHBoxLayout(main_widget.get()); |
81 | 70 |
82 AddMainWidgets(); | 71 AddMainWidgets(); |
83 | 72 |
84 setCentralWidget(main_widget.get()); | 73 setCentralWidget(main_widget.get()); |
85 | 74 |
87 | 76 |
88 NowPlayingPage* page = reinterpret_cast<NowPlayingPage*>(stack->widget(static_cast<int>(Pages::NOW_PLAYING))); | 77 NowPlayingPage* page = reinterpret_cast<NowPlayingPage*>(stack->widget(static_cast<int>(Pages::NOW_PLAYING))); |
89 | 78 |
90 qRegisterMetaType<std::vector<std::string>>(); | 79 qRegisterMetaType<std::vector<std::string>>(); |
91 | 80 |
92 QTimer* timer = new QTimer; | 81 /* This thread will be destroyed on |
93 timer->start(5000); | 82 * close of the program OR on the destruction |
83 * of MainWindow | |
84 */ | |
85 thread.reset(new PlayingThread(this)); | |
86 | |
87 QTimer* timer = new QTimer(this); | |
94 | 88 |
95 connect(timer, &QTimer::timeout, this, [this, page] { | 89 connect(timer, &QTimer::timeout, this, [this, page] { |
96 Thread* thread = new Thread(this); | 90 if (!thread.get() || thread->isRunning()) |
97 connect(thread, &QThread::finished, thread, &QThread::deleteLater); | 91 return; |
98 connect(thread, &Thread::Done, this, [page](const std::vector<std::string>& files) { | 92 |
93 connect(thread.get(), &PlayingThread::Done, this, [page](const std::vector<std::string>& files) { | |
99 for (const auto& file : files) { | 94 for (const auto& file : files) { |
100 anitomy::Anitomy anitomy; | 95 anitomy::Anitomy anitomy; |
101 anitomy.Parse(Strings::ToWstring(file)); | 96 anitomy.Parse(Strings::ToWstring(file)); |
102 | 97 |
103 const auto& elements = anitomy.elements(); | 98 const auto& elements = anitomy.elements(); |
110 break; | 105 break; |
111 } | 106 } |
112 }); | 107 }); |
113 thread->start(); | 108 thread->start(); |
114 }); | 109 }); |
110 | |
111 timer->start(5000); | |
115 } | 112 } |
116 | 113 |
117 void MainWindow::AddMainWidgets() { | 114 void MainWindow::AddMainWidgets() { |
118 int page = static_cast<int>(Pages::ANIME_LIST); | 115 int page = static_cast<int>(Pages::ANIME_LIST); |
119 if (sidebar.get()) { | 116 if (sidebar.get()) { |
330 page_to_index_map[action] = 6; | 327 page_to_index_map[action] = 6; |
331 } | 328 } |
332 | 329 |
333 /* pain in my ass */ | 330 /* pain in my ass */ |
334 connect(sidebar.get(), &SideBar::CurrentItemChanged, this, | 331 connect(sidebar.get(), &SideBar::CurrentItemChanged, this, |
335 [pages_group](int index) { pages_group->actions()[index]->setChecked(true); }); | 332 [pages_group](int index) { pages_group->actions()[index]->setChecked(true); }); |
336 | 333 |
337 connect(pages_group, &QActionGroup::triggered, this, | 334 connect(pages_group, &QActionGroup::triggered, this, |
338 [this, page_to_index_map](QAction* action) { sidebar->SetCurrentItem(page_to_index_map.at(action)); }); | 335 [this, page_to_index_map](QAction* action) { sidebar->SetCurrentItem(page_to_index_map.at(action)); }); |
339 } | 336 } |
340 | 337 |
341 menu->addSeparator(); | 338 menu->addSeparator(); |
342 | 339 |
343 // { | 340 // { |
378 | 375 |
379 { | 376 { |
380 /* Toolbar */ | 377 /* Toolbar */ |
381 QToolBar* toolbar = new QToolBar(this); | 378 QToolBar* toolbar = new QToolBar(this); |
382 toolbar->addAction(QIcon(":/icons/24x24/arrow-circle-double-135.png"), tr("&Synchronize"), | 379 toolbar->addAction(QIcon(":/icons/24x24/arrow-circle-double-135.png"), tr("&Synchronize"), |
383 [this] { AsyncSynchronize(stack.get()); }); | 380 [this] { AsyncSynchronize(stack.get()); }); |
384 | 381 |
385 toolbar->addSeparator(); | 382 toolbar->addSeparator(); |
386 | 383 |
387 { | 384 { |
388 QToolButton* button = new QToolButton(toolbar); | 385 QToolButton* button = new QToolButton(toolbar); |
480 #endif | 477 #endif |
481 } | 478 } |
482 | 479 |
483 void MainWindow::closeEvent(QCloseEvent* event) { | 480 void MainWindow::closeEvent(QCloseEvent* event) { |
484 session.config.Save(); | 481 session.config.Save(); |
482 Anime::db.SaveDatabaseToDisk(); | |
485 event->accept(); | 483 event->accept(); |
486 } | 484 } |
487 | 485 |
488 #include "gui/moc_window.cpp" | 486 #include "gui/moc_window.cpp" |
489 #include "gui/window.moc" |