⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transfer_view.py

📁 CoralFTP是一款用Python语言编写的工作在GTK2环境下的FTP客户端软件
💻 PY
📖 第 1 页 / 共 4 页
字号:
        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 + -