diff --git a/server/scheduler.go b/server/scheduler.go index ba8cea2..e806df6 100644 --- a/server/scheduler.go +++ b/server/scheduler.go @@ -61,11 +61,16 @@ func (s *Server) moveCompletedTask(id int) (err error) { defer func () { if err != nil { s.db.SetHistoryStatus(r.ID, history.StatusFail) - s.db.SetEpisodeStatus(r.EpisodeID, episode.StatusMissing) + if r.EpisodeID != 0 { + s.db.SetEpisodeStatus(r.EpisodeID, episode.StatusMissing) + } + } else { delete(s.tasks, r.ID) s.db.SetHistoryStatus(r.ID, history.StatusSuccess) - s.db.SetEpisodeStatus(r.EpisodeID, episode.StatusDownloaded) + if r.EpisodeID != 0 { + s.db.SetEpisodeStatus(r.EpisodeID, episode.StatusDownloaded) + } torrent.Remove() } diff --git a/ui/lib/movie_watchlist.dart b/ui/lib/movie_watchlist.dart index 9afe7a0..5968d5e 100644 --- a/ui/lib/movie_watchlist.dart +++ b/ui/lib/movie_watchlist.dart @@ -178,6 +178,7 @@ class _MovieDetailsPageState extends ConsumerState { DataColumn(label: Text("大小")), DataColumn(label: Text("seeders")), DataColumn(label: Text("peers")), + DataColumn(label: Text("操作")) ], rows: List.generate(v.length, (i) { final torrent = v[i]; @@ -186,6 +187,15 @@ class _MovieDetailsPageState extends ConsumerState { DataCell(Text("${torrent.size?.readableFileSize()}")), DataCell(Text("${torrent.seeders}")), DataCell(Text("${torrent.peers}")), + DataCell(IconButton.filledTonal( + icon: const Icon(Icons.download), + onPressed: () async { + await ref + .read(movieTorrentsDataProvider(this.id) + .notifier) + .download(torrent.link!); + }, + )) ]); }), );