aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2024-04-22 15:24:47 +0200
committerdec05eba <dec05eba@protonmail.com>2024-04-22 15:24:47 +0200
commitdf659a0deae1e4a674ea7d17e3c874d4de60f5f9 (patch)
treecc5ac29c6ebff12d24f1fa771f055e61a256fcb4
parentaaf36275048b201e876841dfc456b3f2f341c8a9 (diff)
Add script to remove episodes finished watching with quickmediaHEADmaster
-rw-r--r--TODO3
-rw-r--r--src/html.c2
-rw-r--r--src/main.c2
-rwxr-xr-xtools/remove-watched.py63
4 files changed, 67 insertions, 3 deletions
diff --git a/TODO b/TODO
index fb9449b..b60d5f3 100644
--- a/TODO
+++ b/TODO
@@ -10,4 +10,5 @@ Make downloading manga asynchronous, just like torrents. And have timeout for do
Detect if a website is very slow (timeout?) and ignore sync for that website for the current sync. This is to prevent a slow website from preventing all syncs..
Cleanup command should remove torrents from transmission.
Remove dirname because it breaks automedia.pid because it modified /proc/.../cmdline. Should also do readlink on the first arg of cmdline (which doesn't work if automedia is in /usr/bin???). Use socket! look at quickmedia.
-Some mangadex chapters redirect to mangaplus. Those should redirect to the mangaplus plugin. Right now they are simply skipped. \ No newline at end of file
+Some mangadex chapters redirect to mangaplus. Those should redirect to the mangaplus plugin. Right now they are simply skipped.
+Remove torrents when running automedia cleanup. This can be done by removing torrents by anime config data "filename" (in the json file).
diff --git a/src/html.c b/src/html.c
index cb9904e..2cea600 100644
--- a/src/html.c
+++ b/src/html.c
@@ -327,7 +327,7 @@ int add_html(const char *name, const char *url, char *html_config_dir, char *pro
}
/*
- Create an ".in_progress" file to prevent periodic sync from reading rss data
+ Create an ".in_progress" file to prevent periodic sync from reading html data
before we have finished adding all the data.
*/
remove(in_progress_filepath);
diff --git a/src/main.c b/src/main.c
index c84ca68..50e3c1e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -562,7 +562,7 @@ static void sync_rss_html(char *rss_config_dir, char *html_config_dir, char *pro
while(automedia_running) {
sync_tracked_rss(&transmission_session, rss_config_dir);
sync_tracked_html(html_config_dir, program_dir, download_dir);
- fprintf(stderr, "Finished syncing rss and html. Syncing again in 15 minutes\n");
+ fprintf(stderr, "Finished syncing rss and html. Syncing again in %d minutes\n", sync_rate_sec / 60);
int check_count = 0;
while(automedia_running && check_count < sync_rate_sec/check_torrent_status_rate_sec) {
diff --git a/tools/remove-watched.py b/tools/remove-watched.py
new file mode 100755
index 0000000..a2a5b00
--- /dev/null
+++ b/tools/remove-watched.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python3
+
+import json
+import os
+import sys
+
+def file_get_content_json(filepath):
+ with open(filepath) as f:
+ return json.load(f)
+
+def get_watch_progress(time, duration):
+ if duration == 0:
+ return 0
+ return time / duration
+
+def get_quickmedia_watched_episodes(downloads_dir):
+ watched_episodes = []
+ local_anime_watch_progress_json = file_get_content_json(os.path.expanduser("~/.config/quickmedia/watch-progress/local-anime"))
+ for filename, anime_item in local_anime_watch_progress_json.items():
+ episode_filepath = os.path.join(downloads_dir, filename)
+ time = int(anime_item["time"])
+ duration = int(anime_item["duration"])
+ watch_progress = get_watch_progress(time, duration)
+ if watch_progress >= 0.9:
+ watched_episodes.append(episode_filepath)
+ return watched_episodes
+
+def main(args):
+ if len(args) != 2:
+ print("usage: remove-watched.py <downloads-dir>")
+ print("")
+ print("This script removes anime episodes that you have finished watching with QuickMedia")
+ exit(1)
+
+ downloads_dir = args[1]
+ watched_episodes = get_quickmedia_watched_episodes(downloads_dir)
+
+ print("Files to remove:")
+ removable_files = []
+ for watched_episode in watched_episodes:
+ if os.path.exists(watched_episode):
+ print(" %s" % watched_episode)
+ removable_files.append(watched_episode)
+
+ while True:
+ response = input("Are you sure you want to remove the above %d episode(s)? (y/n): " % len(removable_files))
+ if len(response) < 1:
+ continue
+
+ if response[0] == 'Y' or response[0] == 'y':
+ for filepath in removable_files:
+ try:
+ os.remove(filepath)
+ print("Removed %s" % filepath)
+ except OSError:
+ pass
+ return
+
+ if response[0] == 'N' or response[0] == 'n':
+ print("Cancelled deletion of episodes")
+ return
+
+main(sys.argv) \ No newline at end of file