mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-04 15:38:43 +00:00
make alltorrents a component like it should be and get rid of alltorrentsstateupdater
This commit is contained in:
parent
f2d560351e
commit
f35145b0a6
2 changed files with 37 additions and 50 deletions
|
@ -44,7 +44,7 @@ class Command(BaseCommand):
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
console = component.get("ConsoleUI")
|
console = component.get("ConsoleUI")
|
||||||
try:
|
try:
|
||||||
at = component.get("AllTorrentsStateUpdater").alltorrent
|
at = component.get("AllTorrents")
|
||||||
except KeyError:
|
except KeyError:
|
||||||
at = AllTorrents(console.stdscr,console.encoding)
|
at = AllTorrents(console.stdscr,console.encoding)
|
||||||
console.set_mode(at)
|
console.set_mode(at)
|
||||||
|
|
|
@ -168,33 +168,7 @@ prefs_to_names = {
|
||||||
"upspeed":"Up Speed"
|
"upspeed":"Up Speed"
|
||||||
}
|
}
|
||||||
|
|
||||||
class StateUpdater(component.Component):
|
class AllTorrents(BaseMode, component.Component):
|
||||||
def __init__(self, alltorrent, cb, sf,tcb):
|
|
||||||
component.Component.__init__(self, "AllTorrentsStateUpdater", 1, depend=["SessionProxy"])
|
|
||||||
self.alltorrent = alltorrent
|
|
||||||
self._status_cb = cb
|
|
||||||
self._status_fields = sf
|
|
||||||
self.status_dict = {}
|
|
||||||
self._torrent_cb = tcb
|
|
||||||
self._torrent_to_update = None
|
|
||||||
|
|
||||||
def set_torrent_to_update(self, tid, keys):
|
|
||||||
self._torrent_to_update = tid
|
|
||||||
self._torrent_keys = keys
|
|
||||||
|
|
||||||
def start(self):
|
|
||||||
component.get("SessionProxy").get_torrents_status(self.status_dict, self._status_fields).addCallback(self._on_torrents_status,False)
|
|
||||||
|
|
||||||
def update(self):
|
|
||||||
component.get("SessionProxy").get_torrents_status(self.status_dict, self._status_fields).addCallback(self._on_torrents_status,True)
|
|
||||||
if self._torrent_to_update:
|
|
||||||
component.get("SessionProxy").get_torrent_status(self._torrent_to_update, self._torrent_keys).addCallback(self._torrent_cb)
|
|
||||||
|
|
||||||
def _on_torrents_status(self, state, refresh):
|
|
||||||
self._status_cb(state,refresh)
|
|
||||||
|
|
||||||
|
|
||||||
class AllTorrents(BaseMode):
|
|
||||||
def __init__(self, stdscr, encoding=None):
|
def __init__(self, stdscr, encoding=None):
|
||||||
self.formatted_rows = None
|
self.formatted_rows = None
|
||||||
self.torrent_names = None
|
self.torrent_names = None
|
||||||
|
@ -217,18 +191,20 @@ class AllTorrents(BaseMode):
|
||||||
|
|
||||||
self.legacy_mode = None
|
self.legacy_mode = None
|
||||||
|
|
||||||
|
self.__status_dict = {}
|
||||||
|
self.__status_fields = ["queue","name","total_wanted","state","progress","num_seeds","total_seeds",
|
||||||
|
"num_peers","total_peers","download_payload_rate", "upload_payload_rate"]
|
||||||
|
self.__torrent_info_id = None
|
||||||
|
|
||||||
BaseMode.__init__(self, stdscr, encoding)
|
BaseMode.__init__(self, stdscr, encoding)
|
||||||
|
component.Component.__init__(self, "AllTorrents", 1, depend=["SessionProxy"])
|
||||||
curses.curs_set(0)
|
curses.curs_set(0)
|
||||||
self.stdscr.notimeout(0)
|
self.stdscr.notimeout(0)
|
||||||
|
|
||||||
self.__split_help()
|
self.__split_help()
|
||||||
|
|
||||||
self._status_fields = ["queue","name","total_wanted","state","progress","num_seeds","total_seeds",
|
|
||||||
"num_peers","total_peers","download_payload_rate", "upload_payload_rate"]
|
|
||||||
|
|
||||||
self.updater = StateUpdater(self,self.set_state,self._status_fields,self._on_torrent_status)
|
|
||||||
self.update_config()
|
self.update_config()
|
||||||
|
|
||||||
|
component.start(["AllTorrents"])
|
||||||
|
|
||||||
self._info_fields = [
|
self._info_fields = [
|
||||||
("Name",None,("name",)),
|
("Name",None,("name",)),
|
||||||
|
@ -250,12 +226,22 @@ class AllTorrents(BaseMode):
|
||||||
("Pieces", format_utils.format_pieces, ("num_pieces","piece_length")),
|
("Pieces", format_utils.format_pieces, ("num_pieces","piece_length")),
|
||||||
]
|
]
|
||||||
|
|
||||||
self._status_keys = ["name","state","download_payload_rate","upload_payload_rate",
|
self.__status_keys = ["name","state","download_payload_rate","upload_payload_rate",
|
||||||
"progress","eta","all_time_download","total_uploaded", "ratio",
|
"progress","eta","all_time_download","total_uploaded", "ratio",
|
||||||
"num_seeds","total_seeds","num_peers","total_peers", "active_time",
|
"num_seeds","total_seeds","num_peers","total_peers", "active_time",
|
||||||
"seeding_time","time_added","distributed_copies", "num_pieces",
|
"seeding_time","time_added","distributed_copies", "num_pieces",
|
||||||
"piece_length","save_path"]
|
"piece_length","save_path"]
|
||||||
|
|
||||||
|
# component start/update
|
||||||
|
def start(self):
|
||||||
|
log.error("STARTING")
|
||||||
|
component.get("SessionProxy").get_torrents_status(self.__status_dict, self.__status_fields).addCallback(self.set_state,False)
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
component.get("SessionProxy").get_torrents_status(self.__status_dict, self.__status_fields).addCallback(self.set_state,True)
|
||||||
|
if self.__torrent_info_id:
|
||||||
|
component.get("SessionProxy").get_torrent_status(self.__torrent_info_id, self.__status_keys).addCallback(self._on_torrent_status)
|
||||||
|
|
||||||
def update_config(self):
|
def update_config(self):
|
||||||
self.config = ConfigManager("console.conf",DEFAULT_PREFS)
|
self.config = ConfigManager("console.conf",DEFAULT_PREFS)
|
||||||
self.__cols_to_show = [pref for pref in column_pref_names if self.config["show_%s"%pref]]
|
self.__cols_to_show = [pref for pref in column_pref_names if self.config["show_%s"%pref]]
|
||||||
|
@ -266,7 +252,7 @@ class AllTorrents(BaseMode):
|
||||||
self.__help_lines = format_utils.wrap_string(HELP_STR,(self.cols/2)-2)
|
self.__help_lines = format_utils.wrap_string(HELP_STR,(self.cols/2)-2)
|
||||||
|
|
||||||
def resume(self):
|
def resume(self):
|
||||||
component.start(["AllTorrentsStateUpdater"])
|
component.start(["AllTorrents"])
|
||||||
self.refresh()
|
self.refresh()
|
||||||
|
|
||||||
def __update_columns(self):
|
def __update_columns(self):
|
||||||
|
@ -366,7 +352,7 @@ class AllTorrents(BaseMode):
|
||||||
self.popup.add_line("{!info!}%s: {!input!}%s"%(f[0],info))
|
self.popup.add_line("{!info!}%s: {!input!}%s"%(f[0],info))
|
||||||
self.refresh()
|
self.refresh()
|
||||||
else:
|
else:
|
||||||
self.updater.set_torrent_to_update(None,None)
|
self.__torrent_info_id = None
|
||||||
|
|
||||||
|
|
||||||
def on_resize(self, *args):
|
def on_resize(self, *args):
|
||||||
|
@ -401,7 +387,7 @@ class AllTorrents(BaseMode):
|
||||||
|
|
||||||
|
|
||||||
def show_torrent_details(self,tid):
|
def show_torrent_details(self,tid):
|
||||||
component.stop(["AllTorrentsStateUpdater"])
|
component.stop(["AllTorrents"])
|
||||||
self.stdscr.clear()
|
self.stdscr.clear()
|
||||||
td = TorrentDetail(self,tid,self.stdscr,self.encoding)
|
td = TorrentDetail(self,tid,self.stdscr,self.encoding)
|
||||||
component.get("ConsoleUI").set_mode(td)
|
component.get("ConsoleUI").set_mode(td)
|
||||||
|
@ -414,7 +400,7 @@ class AllTorrents(BaseMode):
|
||||||
client.core.get_cache_status().addCallback(_on_get_cache_status,port,config)
|
client.core.get_cache_status().addCallback(_on_get_cache_status,port,config)
|
||||||
|
|
||||||
def _on_get_cache_status(status,port,config):
|
def _on_get_cache_status(status,port,config):
|
||||||
component.stop(["AllTorrentsStateUpdater"])
|
component.stop(["AllTorrents"])
|
||||||
self.stdscr.clear()
|
self.stdscr.clear()
|
||||||
prefs = Preferences(self,config,self.config,port,status,self.stdscr,self.encoding)
|
prefs = Preferences(self,config,self.config,port,status,self.stdscr,self.encoding)
|
||||||
component.get("ConsoleUI").set_mode(prefs)
|
component.get("ConsoleUI").set_mode(prefs)
|
||||||
|
@ -423,13 +409,13 @@ class AllTorrents(BaseMode):
|
||||||
|
|
||||||
|
|
||||||
def __show_events(self):
|
def __show_events(self):
|
||||||
component.stop(["AllTorrentsStateUpdater"])
|
component.stop(["AllTorrents"])
|
||||||
self.stdscr.clear()
|
self.stdscr.clear()
|
||||||
ev = EventView(self,self.stdscr,self.encoding)
|
ev = EventView(self,self.stdscr,self.encoding)
|
||||||
component.get("ConsoleUI").set_mode(ev)
|
component.get("ConsoleUI").set_mode(ev)
|
||||||
|
|
||||||
def __legacy_mode(self):
|
def __legacy_mode(self):
|
||||||
component.stop(["AllTorrentsStateUpdater"])
|
component.stop(["AllTorrents"])
|
||||||
self.stdscr.clear()
|
self.stdscr.clear()
|
||||||
if not self.legacy_mode:
|
if not self.legacy_mode:
|
||||||
self.legacy_mode = Legacy(self.stdscr,self.encoding)
|
self.legacy_mode = Legacy(self.stdscr,self.encoding)
|
||||||
|
@ -439,28 +425,28 @@ class AllTorrents(BaseMode):
|
||||||
|
|
||||||
def _torrent_filter(self, idx, data):
|
def _torrent_filter(self, idx, data):
|
||||||
if data==FILTER.ALL:
|
if data==FILTER.ALL:
|
||||||
self.updater.status_dict = {}
|
self.__status_dict = {}
|
||||||
self._curr_filter = None
|
self._curr_filter = None
|
||||||
elif data==FILTER.ACTIVE:
|
elif data==FILTER.ACTIVE:
|
||||||
self.updater.status_dict = {"state":"Active"}
|
self.__status_dict = {"state":"Active"}
|
||||||
self._curr_filter = "Active"
|
self._curr_filter = "Active"
|
||||||
elif data==FILTER.DOWNLOADING:
|
elif data==FILTER.DOWNLOADING:
|
||||||
self.updater.status_dict = {"state":"Downloading"}
|
self.__status_dict = {"state":"Downloading"}
|
||||||
self._curr_filter = "Downloading"
|
self._curr_filter = "Downloading"
|
||||||
elif data==FILTER.SEEDING:
|
elif data==FILTER.SEEDING:
|
||||||
self.updater.status_dict = {"state":"Seeding"}
|
self.__status_dict = {"state":"Seeding"}
|
||||||
self._curr_filter = "Seeding"
|
self._curr_filter = "Seeding"
|
||||||
elif data==FILTER.PAUSED:
|
elif data==FILTER.PAUSED:
|
||||||
self.updater.status_dict = {"state":"Paused"}
|
self.__status_dict = {"state":"Paused"}
|
||||||
self._curr_filter = "Paused"
|
self._curr_filter = "Paused"
|
||||||
elif data==FILTER.CHECKING:
|
elif data==FILTER.CHECKING:
|
||||||
self.updater.status_dict = {"state":"Checking"}
|
self.__status_dict = {"state":"Checking"}
|
||||||
self._curr_filter = "Checking"
|
self._curr_filter = "Checking"
|
||||||
elif data==FILTER.ERROR:
|
elif data==FILTER.ERROR:
|
||||||
self.updater.status_dict = {"state":"Error"}
|
self.__status_dict = {"state":"Error"}
|
||||||
self._curr_filter = "Error"
|
self._curr_filter = "Error"
|
||||||
elif data==FILTER.QUEUED:
|
elif data==FILTER.QUEUED:
|
||||||
self.updater.status_dict = {"state":"Queued"}
|
self.__status_dict = {"state":"Queued"}
|
||||||
self._curr_filter = "Queued"
|
self._curr_filter = "Queued"
|
||||||
self._go_top = True
|
self._go_top = True
|
||||||
return True
|
return True
|
||||||
|
@ -790,9 +776,10 @@ class AllTorrents(BaseMode):
|
||||||
elif chr(c) == 'i':
|
elif chr(c) == 'i':
|
||||||
cid = self.current_torrent_id()
|
cid = self.current_torrent_id()
|
||||||
if cid:
|
if cid:
|
||||||
self.popup = Popup(self,"Info",close_cb=lambda:self.updater.set_torrent_to_update(None,None))
|
def cb(): self.__torrent_info_id = None
|
||||||
|
self.popup = Popup(self,"Info",close_cb=cb)
|
||||||
self.popup.add_line("Getting torrent info...")
|
self.popup.add_line("Getting torrent info...")
|
||||||
self.updater.set_torrent_to_update(cid,self._status_keys)
|
self.__torrent_info_id = cid
|
||||||
elif chr(c) == 'm':
|
elif chr(c) == 'm':
|
||||||
self._mark_unmark(self.cursel)
|
self._mark_unmark(self.cursel)
|
||||||
effected_lines = [self.cursel-1]
|
effected_lines = [self.cursel-1]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue