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?