From df659a0deae1e4a674ea7d17e3c874d4de60f5f9 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Mon, 22 Apr 2024 15:24:47 +0200 Subject: Add script to remove episodes finished watching with quickmedia --- TODO | 3 ++- src/html.c | 2 +- src/main.c | 2 +- tools/remove-watched.py | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 3 deletions(-) create mode 100755 tools/remove-watched.py 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 ") + 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 -- cgit v1.2.3