comparison src/gui/pages/anime_list.cc @ 320:1b5c04268d6a

services/kitsu: ACTUALLY finish GetAnimeList there are some things the API just... doesn't provide. therefore we have to request the genres separately any time a new anime info box is opened...
author Paper <paper@paper.us.eu.org>
date Wed, 12 Jun 2024 19:49:19 -0400
parents 34347fd2a2de
children 5d3c9b31aa6e
comparison
equal deleted inserted replaced
319:d928ec7b6a0d 320:1b5c04268d6a
31 #include <QRunnable> 31 #include <QRunnable>
32 #include <QTreeView> 32 #include <QTreeView>
33 33
34 #include <set> 34 #include <set>
35 35
36 AnimeListPageUpdateEntryThread::AnimeListPageUpdateEntryThread(AnimeListPage* parent) : QThread(parent) { 36 AnimeListPageUpdateEntryThread::AnimeListPageUpdateEntryThread(QObject* parent) : QThread(parent) {}
37 page_ = parent;
38 }
39 37
40 void AnimeListPageUpdateEntryThread::AddToQueue(int id) { 38 void AnimeListPageUpdateEntryThread::AddToQueue(int id) {
41 const std::lock_guard<std::mutex> guard(_queue_mutex); 39 const std::lock_guard<std::mutex> guard(queue_mutex_);
42 queue_.push(id); 40 queue_.push(id);
43 } 41 }
44 42
45 /* processes the queue... */ 43 /* processes the queue... */
46 void AnimeListPageUpdateEntryThread::run() { 44 void AnimeListPageUpdateEntryThread::run() {
47 { 45 queue_mutex_.lock();
48 const std::lock_guard<std::mutex> guard(_queue_mutex); 46 while (!queue_.empty() && !isInterruptionRequested()) {
49 while (!queue_.empty() && !isInterruptionRequested()) { 47 int id = queue_.front();
50 Services::UpdateAnimeEntry(queue_.front()); 48
51 queue_.pop(); 49 /* unlock the mutex for a long blocking operation, so items
52 } 50 * can be added without worry */
53 } 51 queue_mutex_.unlock();
52 Services::UpdateAnimeEntry(id);
53 queue_mutex_.lock();
54
55 queue_.pop();
56 }
57 queue_mutex_.unlock();
58
54 emit NeedRefresh(); 59 emit NeedRefresh();
55 } 60 }
56 61
57 AnimeListPageSortFilter::AnimeListPageSortFilter(QObject* parent) : QSortFilterProxyModel(parent) { 62 AnimeListPageSortFilter::AnimeListPageSortFilter(QObject* parent) : QSortFilterProxyModel(parent) {
58 } 63 }
445 Refresh(); 450 Refresh();
446 } 451 }
447 452
448 /* --------- QTabWidget replication end ---------- */ 453 /* --------- QTabWidget replication end ---------- */
449 454
450 AnimeListPage::AnimeListPage(QWidget* parent) : QWidget(parent), update_entry_thread_(this) { 455 AnimeListPage::AnimeListPage(QWidget* parent) : QWidget(parent) {
451 /* Tab bar */ 456 /* Tab bar */
452 tab_bar = new QTabBar(this); 457 tab_bar = new QTabBar(this);
453 tab_bar->setExpanding(false); 458 tab_bar->setExpanding(false);
454 tab_bar->setDrawBase(false); 459 tab_bar->setDrawBase(false);
455 460