diff 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
line wrap: on
line diff
--- a/src/gui/pages/anime_list.cc	Wed Jan 21 11:35:32 2026 -0500
+++ b/src/gui/pages/anime_list.cc	Thu Apr 02 00:18:56 2026 -0400
@@ -468,6 +468,7 @@
 			QKeySequence(QKeySequence::Refresh));
 
 		if (path) {
+			/* This is really dumb. */
 			menu->addSeparator();
 
 			{
@@ -482,52 +483,36 @@
 			const int progress = anime->GetUserProgress();
 			const int episodes = anime->GetEpisodes();
 
-			// I think this is right?
+			/* I think this is right? */
 			if (progress > 0) {
-				menu->addAction(tr("Play last episode (#%1)").arg(progress), [this, anime, progress] {
-					const int id = anime->GetId();
-
-					if (Library::db.items.find(id) == Library::db.items.end() ||
-					    Library::db.items[id].find(progress) == Library::db.items[id].end())
-						return;
-
-					QDesktopServices::openUrl(
-					    QUrl::fromLocalFile(Strings::ToQString(Library::db.items[id][progress].u8string())));
-				});
+				std::optional<std::filesystem::path> x = Library::db.GetAnimeEpisodePath(anime->GetId(), progress - 1);
+				if (x)
+					menu->addAction(tr("Play last episode (#%1)").arg(progress - 1), [this, x] {
+						QDesktopServices::openUrl(
+							QUrl::fromLocalFile(Strings::ToQString(x.value().u8string())));
+					});
 			}
 
 			if (progress < episodes) {
-				menu->addAction(
-				    tr("Play next episode (#%1)").arg(progress + 1),
-				    [this, anime, progress] {
-					    const int id = anime->GetId();
-
-					    if (Library::db.items.find(id) == Library::db.items.end() ||
-					        Library::db.items[id].find(progress + 1) == Library::db.items[id].end())
-						    return;
-
-					    QDesktopServices::openUrl(
-					        QUrl::fromLocalFile(Strings::ToQString(Library::db.items[id][progress + 1].u8string())));
-				    },
-				    QKeySequence(Qt::CTRL | Qt::Key_N));
+				std::optional<std::filesystem::path> x = Library::db.GetAnimeEpisodePath(anime->GetId(), progress + 1);
+				if (x)
+					menu->addAction(tr("Play next episode (#%1)").arg(progress + 1), [this, x] {
+						QDesktopServices::openUrl(
+							QUrl::fromLocalFile(Strings::ToQString(x.value().u8string())));
+					}, QKeySequence(Qt::CTRL | Qt::Key_N));
 			}
 
 			menu->addAction(
 			    tr("Play random episode"),
 			    [this, anime, episodes] {
-				    const int id = anime->GetId();
-
 				    std::uniform_int_distribution<int> distrib(1, episodes);
 				    const int episode = distrib(session.gen);
 
-				    if (Library::db.items.find(id) == Library::db.items.end() ||
-				        Library::db.items[id].find(episode) == Library::db.items[id].end())
-					    return;
+					std::optional<std::filesystem::path> x = Library::db.GetAnimeEpisodePath(anime->GetId(), episode);
 
-				    QDesktopServices::openUrl(
-				        QUrl::fromLocalFile(Strings::ToQString(Library::db.items[id][episode].u8string())));
-			    },
-			    QKeySequence(Qt::CTRL | Qt::Key_R));
+					if (x)
+						QDesktopServices::openUrl(QUrl::fromLocalFile(Strings::ToQString(x.value().u8string())));
+			    }, QKeySequence(Qt::CTRL | Qt::Key_R));
 		}
 
 		menu->popup(QCursor::pos());