- 
      
 - 
        
Save cosmincc/fe1f24dcb240299f9b5bc8c49bd14ea5 to your computer and use it in GitHub Desktop.  
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | #!/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") | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment