Mercurial > minori
comparison src/gui/pages/anime_list.cc @ 409:8d06825d96d1
library: refresh in a separate thread
this is fugly but it works
| author | Paper <paper@tflc.us> |
|---|---|
| date | Thu, 02 Apr 2026 00:18:56 -0400 |
| parents | 2f4dc1580b84 |
| children |
comparison
equal
deleted
inserted
replaced
| 408:9323153786dc | 409:8d06825d96d1 |
|---|---|
| 466 menu->addAction(tr("Scan available episodes"), | 466 menu->addAction(tr("Scan available episodes"), |
| 467 [this, anime] { Library::db.Refresh(anime->GetId()); }, | 467 [this, anime] { Library::db.Refresh(anime->GetId()); }, |
| 468 QKeySequence(QKeySequence::Refresh)); | 468 QKeySequence(QKeySequence::Refresh)); |
| 469 | 469 |
| 470 if (path) { | 470 if (path) { |
| 471 /* This is really dumb. */ | |
| 471 menu->addSeparator(); | 472 menu->addSeparator(); |
| 472 | 473 |
| 473 { | 474 { |
| 474 QMenu *submenu = menu->addMenu(tr("Play episode")); | 475 QMenu *submenu = menu->addMenu(tr("Play episode")); |
| 475 | 476 |
| 480 } | 481 } |
| 481 | 482 |
| 482 const int progress = anime->GetUserProgress(); | 483 const int progress = anime->GetUserProgress(); |
| 483 const int episodes = anime->GetEpisodes(); | 484 const int episodes = anime->GetEpisodes(); |
| 484 | 485 |
| 485 // I think this is right? | 486 /* I think this is right? */ |
| 486 if (progress > 0) { | 487 if (progress > 0) { |
| 487 menu->addAction(tr("Play last episode (#%1)").arg(progress), [this, anime, progress] { | 488 std::optional<std::filesystem::path> x = Library::db.GetAnimeEpisodePath(anime->GetId(), progress - 1); |
| 488 const int id = anime->GetId(); | 489 if (x) |
| 489 | 490 menu->addAction(tr("Play last episode (#%1)").arg(progress - 1), [this, x] { |
| 490 if (Library::db.items.find(id) == Library::db.items.end() || | 491 QDesktopServices::openUrl( |
| 491 Library::db.items[id].find(progress) == Library::db.items[id].end()) | 492 QUrl::fromLocalFile(Strings::ToQString(x.value().u8string()))); |
| 492 return; | 493 }); |
| 493 | |
| 494 QDesktopServices::openUrl( | |
| 495 QUrl::fromLocalFile(Strings::ToQString(Library::db.items[id][progress].u8string()))); | |
| 496 }); | |
| 497 } | 494 } |
| 498 | 495 |
| 499 if (progress < episodes) { | 496 if (progress < episodes) { |
| 500 menu->addAction( | 497 std::optional<std::filesystem::path> x = Library::db.GetAnimeEpisodePath(anime->GetId(), progress + 1); |
| 501 tr("Play next episode (#%1)").arg(progress + 1), | 498 if (x) |
| 502 [this, anime, progress] { | 499 menu->addAction(tr("Play next episode (#%1)").arg(progress + 1), [this, x] { |
| 503 const int id = anime->GetId(); | 500 QDesktopServices::openUrl( |
| 504 | 501 QUrl::fromLocalFile(Strings::ToQString(x.value().u8string()))); |
| 505 if (Library::db.items.find(id) == Library::db.items.end() || | 502 }, QKeySequence(Qt::CTRL | Qt::Key_N)); |
| 506 Library::db.items[id].find(progress + 1) == Library::db.items[id].end()) | |
| 507 return; | |
| 508 | |
| 509 QDesktopServices::openUrl( | |
| 510 QUrl::fromLocalFile(Strings::ToQString(Library::db.items[id][progress + 1].u8string()))); | |
| 511 }, | |
| 512 QKeySequence(Qt::CTRL | Qt::Key_N)); | |
| 513 } | 503 } |
| 514 | 504 |
| 515 menu->addAction( | 505 menu->addAction( |
| 516 tr("Play random episode"), | 506 tr("Play random episode"), |
| 517 [this, anime, episodes] { | 507 [this, anime, episodes] { |
| 518 const int id = anime->GetId(); | |
| 519 | |
| 520 std::uniform_int_distribution<int> distrib(1, episodes); | 508 std::uniform_int_distribution<int> distrib(1, episodes); |
| 521 const int episode = distrib(session.gen); | 509 const int episode = distrib(session.gen); |
| 522 | 510 |
| 523 if (Library::db.items.find(id) == Library::db.items.end() || | 511 std::optional<std::filesystem::path> x = Library::db.GetAnimeEpisodePath(anime->GetId(), episode); |
| 524 Library::db.items[id].find(episode) == Library::db.items[id].end()) | 512 |
| 525 return; | 513 if (x) |
| 526 | 514 QDesktopServices::openUrl(QUrl::fromLocalFile(Strings::ToQString(x.value().u8string()))); |
| 527 QDesktopServices::openUrl( | 515 }, QKeySequence(Qt::CTRL | Qt::Key_R)); |
| 528 QUrl::fromLocalFile(Strings::ToQString(Library::db.items[id][episode].u8string()))); | |
| 529 }, | |
| 530 QKeySequence(Qt::CTRL | Qt::Key_R)); | |
| 531 } | 516 } |
| 532 | 517 |
| 533 menu->popup(QCursor::pos()); | 518 menu->popup(QCursor::pos()); |
| 534 } else { | 519 } else { |
| 535 // Where are we now? | 520 // Where are we now? |
