mirror of
https://github.com/codex-storage/deluge.git
synced 2025-01-24 18:29:12 +00:00
[Core] Save torrent state only if state has changed
This commit is contained in:
parent
5410c44bb1
commit
60c764ac33
@ -81,6 +81,12 @@ class TorrentState: # pylint: disable=old-style-class
|
|||||||
continue
|
continue
|
||||||
setattr(self, key, value)
|
setattr(self, key, value)
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
return isinstance(other, TorrentState) and self.__dict__ == other.__dict__
|
||||||
|
|
||||||
|
def __ne__(self, other):
|
||||||
|
return not self == other
|
||||||
|
|
||||||
|
|
||||||
class TorrentManagerState: # pylint: disable=old-style-class
|
class TorrentManagerState: # pylint: disable=old-style-class
|
||||||
"""TorrentManagerState holds a list of TorrentState objects.
|
"""TorrentManagerState holds a list of TorrentState objects.
|
||||||
@ -92,6 +98,12 @@ class TorrentManagerState: # pylint: disable=old-style-class
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.torrents = []
|
self.torrents = []
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
return isinstance(other, TorrentManagerState) and self.torrents == other.torrents
|
||||||
|
|
||||||
|
def __ne__(self, other):
|
||||||
|
return not self == other
|
||||||
|
|
||||||
|
|
||||||
class TorrentManager(component.Component):
|
class TorrentManager(component.Component):
|
||||||
"""TorrentManager contains a list of torrents in the current libtorrent session.
|
"""TorrentManager contains a list of torrents in the current libtorrent session.
|
||||||
@ -138,6 +150,9 @@ class TorrentManager(component.Component):
|
|||||||
self.status_dict = {}
|
self.status_dict = {}
|
||||||
self.last_state_update_alert_ts = 0
|
self.last_state_update_alert_ts = 0
|
||||||
|
|
||||||
|
# Keep the previous saved state
|
||||||
|
self.prev_saved_state = None
|
||||||
|
|
||||||
# Register set functions
|
# Register set functions
|
||||||
set_config_keys = ['max_connections_per_torrent', 'max_upload_slots_per_torrent',
|
set_config_keys = ['max_connections_per_torrent', 'max_upload_slots_per_torrent',
|
||||||
'max_upload_speed_per_torrent', 'max_download_speed_per_torrent']
|
'max_upload_speed_per_torrent', 'max_download_speed_per_torrent']
|
||||||
@ -617,6 +632,10 @@ class TorrentManager(component.Component):
|
|||||||
log.debug('Skipping saving state with no torrents loaded')
|
log.debug('Skipping saving state with no torrents loaded')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# If the state hasn't changed, no need to save it
|
||||||
|
if self.prev_saved_state == state:
|
||||||
|
return
|
||||||
|
|
||||||
filename = 'torrents.state'
|
filename = 'torrents.state'
|
||||||
filepath = os.path.join(self.state_dir, filename)
|
filepath = os.path.join(self.state_dir, filename)
|
||||||
filepath_bak = filepath + '.bak'
|
filepath_bak = filepath + '.bak'
|
||||||
@ -645,6 +664,7 @@ class TorrentManager(component.Component):
|
|||||||
try:
|
try:
|
||||||
log.debug('Saving %s to: %s', filename, filepath)
|
log.debug('Saving %s to: %s', filename, filepath)
|
||||||
os.rename(filepath_tmp, filepath)
|
os.rename(filepath_tmp, filepath)
|
||||||
|
self.prev_saved_state = state
|
||||||
except OSError as ex:
|
except OSError as ex:
|
||||||
log.error('Failed to set new state file %s: %s', filepath, ex)
|
log.error('Failed to set new state file %s: %s', filepath, ex)
|
||||||
if os.path.isfile(filepath_bak):
|
if os.path.isfile(filepath_bak):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user