Mercurial > minori
comparison src/gui/pages/anime_list.cc @ 274:f6a756c19bfb
anime_list.cc: use mutexes so we don't sex the stack
strings.cc: use Qt to convert from HTML to plain text.
| author | Paper <paper@paper.us.eu.org> |
|---|---|
| date | Thu, 18 Apr 2024 17:24:42 -0400 |
| parents | f31305b9f60a |
| children | 9a88e1725fd2 |
comparison
equal
deleted
inserted
replaced
| 273:f31305b9f60a | 274:f6a756c19bfb |
|---|---|
| 36 AnimeListPageUpdateEntryThread::AnimeListPageUpdateEntryThread(AnimeListPage* parent) : QThread(parent) { | 36 AnimeListPageUpdateEntryThread::AnimeListPageUpdateEntryThread(AnimeListPage* parent) : QThread(parent) { |
| 37 page_ = parent; | 37 page_ = parent; |
| 38 } | 38 } |
| 39 | 39 |
| 40 void AnimeListPageUpdateEntryThread::AddToQueue(int id) { | 40 void AnimeListPageUpdateEntryThread::AddToQueue(int id) { |
| 41 if (isRunning()) | 41 const std::lock_guard<std::mutex> guard(_queue_mutex); |
| 42 return; /* don't let us fuck ourselves */ | |
| 43 | |
| 44 queue_.push(id); | 42 queue_.push(id); |
| 45 } | 43 } |
| 46 | 44 |
| 47 /* processes the queue... */ | 45 /* processes the queue... */ |
| 48 void AnimeListPageUpdateEntryThread::run() { | 46 void AnimeListPageUpdateEntryThread::run() { |
| 49 while (!queue_.empty() && !isInterruptionRequested()) { | 47 { |
| 50 Services::UpdateAnimeEntry(queue_.front()); | 48 const std::lock_guard<std::mutex> guard(_queue_mutex); |
| 51 queue_.pop(); | 49 while (!queue_.empty() && !isInterruptionRequested()) { |
| 50 Services::UpdateAnimeEntry(queue_.front()); | |
| 51 queue_.pop(); | |
| 52 } | |
| 52 } | 53 } |
| 53 page_->Refresh(); | 54 page_->Refresh(); |
| 54 } | 55 } |
| 55 | 56 |
| 56 AnimeListPageSortFilter::AnimeListPageSortFilter(QObject* parent) : QSortFilterProxyModel(parent) { | 57 AnimeListPageSortFilter::AnimeListPageSortFilter(QObject* parent) : QSortFilterProxyModel(parent) { |
| 239 tree_view->setColumnHidden(AnimeListPageModel::AL_NOTES, true); | 240 tree_view->setColumnHidden(AnimeListPageModel::AL_NOTES, true); |
| 240 } | 241 } |
| 241 | 242 |
| 242 void AnimeListPage::UpdateAnime(int id) { | 243 void AnimeListPage::UpdateAnime(int id) { |
| 243 /* this ought to just add to the thread's buffer. */ | 244 /* this ought to just add to the thread's buffer. */ |
| 244 if (update_entry_thread_.isRunning()) { | 245 if (update_entry_thread_.isRunning()) |
| 245 update_entry_thread_.requestInterruption(); | 246 update_entry_thread_.requestInterruption(); |
| 246 update_entry_thread_.wait(); | |
| 247 } | |
| 248 | 247 |
| 249 update_entry_thread_.AddToQueue(id); | 248 update_entry_thread_.AddToQueue(id); |
| 250 update_entry_thread_.start(); | 249 update_entry_thread_.start(); |
| 251 } | 250 } |
| 252 | 251 |
