Attempt to load the state in a safe manner.

This commit is contained in:
Andrew Resch 2008-01-13 08:10:35 +00:00
parent 2e0be83732
commit 0d793e7f89
1 changed files with 37 additions and 9 deletions

View File

@ -259,28 +259,56 @@ class Manager:
PREF_FUNCTIONS["enable_dht"] = self.set_DHT PREF_FUNCTIONS["enable_dht"] = self.set_DHT
# Unpickle the state, or create a new one # Unpickle the state, or create a new one
self.state = persistent_state()
if not blank_slate: if not blank_slate:
try: try:
pkl_file = open(os.path.join(self.base_dir, STATE_FILENAME), pkl_file = open(os.path.join(self.base_dir, STATE_FILENAME),
'rb') 'rb')
self.state = pickle.load(pkl_file) state = pickle.load(pkl_file)
pkl_file.close() pkl_file.close()
if isinstance(self.state.torrents, list): if isinstance(state.torrents, list):
# One time convert of old torrents list to dict # One time convert of old torrents list to dict
self.state.torrents = dict((x, None) for x in state.torrents = dict((x, None) for x in
self.state.torrents) state.torrents)
# Add torrents to core and unique_IDs
for torrent in state.torrents:
if not os.path.exists(torrent.filename):
print "Missing file: %s" % torrent.filename
continue
if torrent not in self.unique_IDs.values():
try:
unique_ID = deluge_core.add_torrent(torrent.filename,
torrent.save_dir,
torrent.compact)
except Exception, e:
print "Unable to add torrent: ", e
self.unique_IDs[unique_ID] = torrent
self.state.torrents[torrent] = unique_ID
# Apply per torrent prefs after torrent added to core
self.apply_prefs_per_torrent(unique_ID)
#remove fastresume for non-seed
try:
torrent_state = self.get_core_torrent_state(unique_ID)
except:
pass
else:
if not torrent_state['is_seed']:
try:
os.remove(self.unique_IDs[unique_ID].filename + ".fastresume")
except:
pass
# Sync with the core: tell core about torrents, and get # Sync with the core: tell core about torrents, and get
# unique_IDs # unique_IDs
self.sync(True) self.sync()
# Apply the queue at this time, after all is loaded and ready # Apply the queue at this time, after all is loaded and ready
self.apply_queue() self.apply_queue()
except IOError: except:
self.state = persistent_state() pass
else:
self.state = persistent_state()
def quit(self): def quit(self):
# Pickle the state # Pickle the state