📄 transfer_view.py
字号:
new_order = [] new_order.extend(range(self.__list.iter_n_children(None))) for path in selected_path: if path == 0: continue t = new_order[path-1] new_order[path-1] = new_order[path] new_order[path] = t return def on_movedown_action_execute(self, obj, *args): if self.__selected_count == 0: return selected_path = [] for iter in self.__selections: (path,) = self.__model.get_path(iter) selected_path.append(path) selected_path.sort() selected_path.reverse() children_num = self.__list.iter_n_children(None) new_order = [] new_order.extend(range(children_num)) for path in selected_path: if path >= children_num - 1: continue t = new_order[path] new_order[path] = new_order[path+1] new_order[path+1] = t return def on_movetop_action_execute(self, obj, *args): if self.__selected_count == 0: return selected_path = [] for iter in self.__selections: (path,) = self.__model.get_path(iter) selected_path.append(path) selected_path.sort() new_order = [] new_order.extend(range(self.__model.iter_n_children(None))) first = 0 for path in selected_path: for i in range(first, path): new_order[i] = new_order[i] + 1 new_order[path] = first first = first + 1 return def on_movebottom_action_execute(self, obj, *args): if self.__selected_count == 0: return selected_path = [] for iter in self.__selections: (path,) = self.__model.get_path(iter) selected_path.append(path) selected_path.sort() children_num = self.__model.iter_n_children(None) new_order = [] new_order.extend(range(children_num)) last = children_num - 1 for path in selected_path: for i in range(path, last): new_order[i] = new_order[i] - 1 new_order[path] = last last = last - 1 return def on_delete_action_execute(self, obj, *args): for iter in self.__selections: status = self.__model.get_value(iter, TransferView.COL_DATA_STATUS) if status in (TransferView.TRANSFER_STATUS_READY, TransferView.TRANSFER_STATUS_FAILED, TransferView.TRANSFER_STATUS_SKIPPED): self.__model.remove(iter) return def on_clearqueue_action_update(self, obj): obj.set_property('sensitive', self.__model.iter_n_children(None) > 0) return def on_clearqueue_action_execute(self, obj, *args): self.__model.clear() return def on_freset_action_execute(self, obj, *args): for iter in self.__selections: status = self.__model.get_value(iter, TransferView.COL_DATA_STATUS) if status == TransferView.TRANSFER_STATUS_FAILED: direction = self.__model.get_value(iter, TransferView.COL_DIRECTION) if direction == TransferView.DIRECTION_UP: pixbuf = gdk.pixbuf_new_from_file( os.path.join(coralftp_datadir, 'put_arrow.png')) elif direction == TransferView.DIRECTION_DOWN: pixbuf = gdk.pixbuf_new_from_file( os.path.join(coralftp_datadir, 'get_arrow.png')) self.__model.set_value(iter, TransferView.COL_DATA_STATUS, TransferView.TRANSFER_STATUS_READY) return def on_fresetall_action_execute(self, obj, *args): iter = self.__model.get_iter_first() while iter != None: status = self.__model.get_value(iter, TransferView.COL_DATA_STATUS) if status == TransferView.TRANSFER_STATUS_FAILED: direction = self.__model.get_value(iter, TransferView.COL_DIRECTION) if direction == TransferView.DIRECTION_UP: pixbuf = gdk.pixbuf_new_from_file( os.path.join(coralftp_datadir, 'put_arrow.png')) elif direction == TransferView.DIRECTION_DOWN: pixbuf = gdk.pixbuf_new_from_file( os.path.join(coralftp_datadir, 'get_arrow.png')) self.__model.set_value(iter, TransferView.COL_DATA_STATUS, TransferView.TRANSFER_STATUS_READY) iter = self.__model.iter_next(iter) return def on_fclearall_action_execute(self, obj, *args): iter = self.__model.get_iter_first() while iter != None: status = self.__model.get_value(iter, TransferView.COL_DATA_STATUS) if status == TransferView.TRANSFER_STATUS_FAILED: self.__model.remove(iter) iter = self.__model.iter_next(iter) return def on_save_queue_action_execute(self, obj, *args): dlg = FileChooserDialog( title = _("Save queue as"), parent = self.__main_window.widget, action = FILE_CHOOSER_ACTION_SAVE, buttons = (STOCK_CANCEL, RESPONSE_CANCEL, STOCK_SAVE, RESPONSE_OK)) from time import gmtime, strftime filename = strftime('%Y-%m-%d_%H.%M.%S.cfq') dlg.set_current_name(filename) filter = FileFilter() filter.set_name(_("CoralFTP queue")) filter.add_pattern('*.cfq') dlg.add_filter(filter) filter = FileFilter() filter.set_name(_("All files")) filter.add_pattern('*') dlg.add_filter(filter) resp = dlg.run() if resp == RESPONSE_OK: filename = dlg.get_filename() queue = [] iter = self.__model.get_iter_first() while iter: status = self.__model.get_value( iter, TransferView.COL_DATA_STATUS) if status != TransferView.TRANSFER_STATUS_FINISHED: item = {} item['direction'] = self.__model.get_value( iter, TransferView.COL_DATA_DIRECTION) item['source'] = self.__model.get_value( iter, TransferView.COL_DATA_SOURCE) item['target'] = self.__model.get_value( iter, TransferView.COL_DATA_TARGET) item['size'] = self.__model.get_value( iter, TransferView.COL_DATA_SIZE) site = self.__model.get_value( iter, TransferView.COL_DATA_SOURCE_SITE) if site != None: item['source_site_id'] = site['id'] else: item['source_site_id'] = '' site = self.__model.get_value( iter, TransferView.COL_DATA_TARGET_SITE) if site != None: item['target_site_id'] = site['id'] else: item['target_site_id'] = '' queue.append(item) iter = self.__model.iter_next(iter) transfer_queue = TransferQueue(queue) transfer_queue.save_to_file(filename) dlg.destroy() return def on_load_queue_action_execute(self, obj, *args): dlg = FileChooserDialog( title = _("Load queue"), parent = self.__main_window.widget, action = FILE_CHOOSER_ACTION_SAVE, buttons = (STOCK_CANCEL, RESPONSE_CANCEL, STOCK_OPEN, RESPONSE_OK)) filter = FileFilter() filter.set_name(_("CoralFTP queue")) filter.add_pattern('*.cfq') dlg.add_filter(filter) filter = FileFilter() filter.set_name(_("All files")) filter.add_pattern('*') dlg.add_filter(filter) resp = dlg.run() if resp == RESPONSE_OK: filename = dlg.get_filename() transfer_queue = TransferQueue() transfer_queue.load_from_file(filename) for item in transfer_queue: direction = string.atoi(item['direction']) source = item['source'] target = item['target'] sm = self.__main_window.coralftp.get_site_manager() if item['source_site_id'] != '': source_site = sm.get_site_by_id(item['source_site_id']) else: source_site = None if item['target_site_id'] != '': target_site = sm.get_site_by_id(item['target_site_id']) else: target_site = None size = string.atoi(item['size']) self.add_to_queue(direction, source, target, size, source_site, target_site) dlg.destroy() return def on_fmark_action_execute(self, obj, *args): for iter in self.__selections: status = self.__model.get_value(iter, TransferView.COL_DATA_STATUS) pixbuf = gdk.pixbuf_new_from_file( os.path.join(coralftp_datadir, 'failed.png')) if status in (TransferView.TRANSFER_STATUS_READY, TransferView.TRANSFER_STATUS_SKIPPED): self.__model.set_value(iter, TransferView.COL_DATA_STATUS, TransferView.TRANSFER_STATUS_FAILED) self.__model.set_value(iter, TransferView.COL_DIRECTION, pixbuf) return def on_use_custom_queue_font_change(self, config, id, entry, *args): self.__use_custom_queue_font = entry.value.get_bool() self.__change_font() return def on_queue_font_change(self, config, id, entry, *args): self.__queue_font = entry.value.get_string() self.__change_font() return def __change_font(self): for renderer in self.__text_renderers: if self.__use_custom_queue_font: renderer.set_property('font', self.__queue_font) else: renderer.set_property('font', None) returnclass TransferRunningUpdater: __start_time = None start_bytes = 0 def __init__(self, tview): self.__tview = tview self.__main_window = tview.main_window def __call__(self, bytes, msg): if self.__start_time == None: self.__start_time = time.time() from main import MainWindow model = self.__tview.model iter = model.get_iter_first() direction = model.get_value(iter, TransferView.COL_DATA_DIRECTION) filename = model.get_value(iter, TransferView.COL_NAME) size = model.get_value(iter, TransferView.COL_DATA_SIZE) if direction == TransferView.DIRECTION_UP: msg1 = _("Uploading %s, %s") elif direction == TransferView.DIRECTION_DOWN: msg1 = _("Downloading %s, %s") else: raise ValueError self.__main_window.status1.set_text( msg1 % (path.basename(filename), msg)) if size != 0: self.__main_window.status2.set_fraction(float(bytes) / size) percent = int(float(bytes) / size * 100) else: percent = 0 elapsed = time.time() - self.__start_time speed = (bytes - self.start_bytes) / elapsed remaining = (size - bytes) / speed elapsed = (int(elapsed / 60), int(elapsed % 60)) remaining = (int(remaining / 60), int(remaining % 60)) self.__main_window.status2.set_text( '%s(%sps)' % (format_size('Auto', bytes), format_size('Auto', speed))) self.__main_window.status3.set_text('%d%%' % percent) self.__main_window.status4.set_text(_("Elapsed: %02d:%02d") % elapsed) self.__main_window.status5.set_text(_("Remaining: %02d:%02d") % remaining) return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -