#!/usr/bin/env python3 # # Find and replace tracker urls in a Deluge torrents.state import os import sys import platform import shutil import pickle if platform.system() in ('Windows', 'Microsoft'): state_file_path = os.path.join(os.environ.get('APPDATA'), 'deluge', 'state', 'torrents.state') deluge_dir = os.path.join(os.environ['ProgramFiles'], 'Deluge') if os.path.isdir(deluge_dir): sys.path.append(deluge_dir) for item in os.listdir(deluge_dir): if item.endswith(('.egg', '.zip')): sys.path.append(os.path.join(deluge_dir, item)) else: state_file_path = os.path.expanduser('~/.config/deluge/state/torrents.state') print("State file: %s" % state_file_path) with open(state_file_path, 'rb') as state_file: state = pickle.load(state_file) orig_tracker_url = input('Tracker URL: ') if not orig_tracker_url: print('No tracker URL to search for, exiting...') exit() new_tracker_url = input('New tracker URL (leave empty to remove): ') if new_tracker_url: print("Replace '%s' with '%s'" % (orig_tracker_url, new_tracker_url)) else: print("Remove tracker '%s'" % orig_tracker_url) if not input('Continue? (y/n) ') in 'yY': exit() modified_count = 0 for torrent in state.torrents: for idx, tracker in enumerate(torrent.trackers[:]): trackers.add(tracker['url']) if tracker['url'] == orig_tracker_url: if new_tracker_url: torrent.trackers[idx]['url'] = new_tracker_url else: torrent.trackers.remove(tracker) modified_count += 1 if modified_count > 0: shutil.copyfile(state_file_path, state_file_path + '.old') with open(state_file_path, 'wb') as state_file: pickle.dump(state, state_file) print("State updated: %d changes" % modified_count) else: print("Nothing to do")