diff options
author | Chase Sterling <chase.sterling@gmail.com> | 2013-02-10 17:30:25 -0500 |
---|---|---|
committer | Chase Sterling <chase.sterling@gmail.com> | 2013-02-10 17:30:25 -0500 |
commit | 8c106ce8c4c0794ddd63e8e8f98b097221a56a52 (patch) | |
tree | 45944ea2333b4da97045ccefed2ed5e1de3ac321 /deluge/core/core.py | |
parent | b4f5e78a775503a5501e2eba7eee73dfa0e1955a (diff) | |
parent | fbdda1b3a5db6203f1993a03eed92ca489903aab (diff) | |
download | deluge-8c106ce8c4c0794ddd63e8e8f98b097221a56a52.tar.gz deluge-8c106ce8c4c0794ddd63e8e8f98b097221a56a52.tar.bz2 deluge-8c106ce8c4c0794ddd63e8e8f98b097221a56a52.zip |
Merge remote-tracking branch 'bro/master-daemon-optimize-speed'
Conflicts:
deluge/core/alertmanager.py
deluge/core/torrentmanager.py
Diffstat (limited to 'deluge/core/core.py')
-rw-r--r-- | deluge/core/core.py | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/deluge/core/core.py b/deluge/core/core.py index 242359a9d..4a1fa693d 100644 --- a/deluge/core/core.py +++ b/deluge/core/core.py @@ -427,34 +427,43 @@ class Core(component.Component): for torrent_id in torrent_ids: self.torrentmanager[torrent_id].resume() - @export - def get_torrent_status(self, torrent_id, keys, diff=False): - # Build the status dictionary + def create_torrent_status(self, torrent_id, torrent_keys, plugin_keys, diff=False, update=False): try: - status = self.torrentmanager[torrent_id].get_status(keys, diff) + status = self.torrentmanager[torrent_id].get_status(torrent_keys, diff, update=update) except KeyError: + import traceback + traceback.print_exc() # Torrent was probaly removed meanwhile return {} - # Get the leftover fields and ask the plugin manager to fill them - leftover_fields = list(set(keys) - set(status.keys())) - if len(leftover_fields) > 0: - status.update(self.pluginmanager.get_status(torrent_id, leftover_fields)) + # Ask the plugin manager to fill in the plugin keys + if len(plugin_keys) > 0: + status.update(self.pluginmanager.get_status(torrent_id, plugin_keys)) return status @export + def get_torrent_status(self, torrent_id, keys, diff=False): + torrent_keys, plugin_keys = self.torrentmanager.separate_keys(keys, [torrent_id]) + return self.create_torrent_status(torrent_id, torrent_keys, plugin_keys, diff=diff, update=True) + + @export def get_torrents_status(self, filter_dict, keys, diff=False): """ returns all torrents , optionally filtered by filter_dict. """ torrent_ids = self.filtermanager.filter_torrent_ids(filter_dict) status_dict = {}.fromkeys(torrent_ids) - - # Get the torrent status for each torrent_id - for torrent_id in torrent_ids: - status_dict[torrent_id] = self.get_torrent_status(torrent_id, keys, diff) - - return status_dict + d = self.torrentmanager.torrents_status_update(torrent_ids, keys, diff=False) + + def add_plugin_fields(args): + status_dict, plugin_keys = args + # Ask the plugin manager to fill in the plugin keys + if len(plugin_keys) > 0: + for key in status_dict.keys(): + status_dict[key].update(self.pluginmanager.get_status(key, plugin_keys)) + return status_dict + d.addCallback(add_plugin_fields) + return d @export def get_filter_tree(self , show_zero_hits=True, hide_cat=None): |