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

📄 remote_view.py

📁 CoralFTP是一款用Python语言编写的工作在GTK2环境下的FTP客户端软件
💻 PY
📖 第 1 页 / 共 4 页
字号:
        else:            self.__main_widnow.status1.set_text(s)        return    def on_ftp_delay(self, obj, t):        if not self.__show_idle_time or t == 0:            s = ''        else:            s = 'Delay: %d' % t        if self == self.__main_window.right_view:            self.__main_window.status2.set_text(s)        else:            self.__main_widnow.status1.set_text(s)        return    def filelist_sort(self, treemodel, iter1, iter2, *arg):        sort_folder_on_top = config_value(self.__config, 'display',                                          'sort_folder_on_top')        col, order = treemodel.get_sort_column_id()        if order == SORT_ASCENDING:            parent_weight = 1            if sort_folder_on_top:                dir_weight = 2            else:                dir_weight = 3            file_weight = 3        else:            parent_weight = 3            if sort_folder_on_top:                dir_weight = 2            else:                dir_weight = 1            file_weight = 1        item1 = treemodel.get_value(iter1, self.COL_INFO)        item2 = treemodel.get_value(iter2, self.COL_INFO)        if col == RemoteView.COL_NAME:            weight1 = item1.name        elif col == RemoteView.COL_SIZE:            weight1 = item1.size        elif col == RemoteView.COL_TYPE:            weight1 = treemodel.get_value(iter1, RemoteView.COL_TYPE)        elif col == RemoteView.COL_OWNER:            weight1 = item1.owner        elif col == RemoteView.COL_GROUP:            weight1 = item1.group        elif col == RemoteView.COL_DATE:            weight1 = item1.date        if item1.name == '..':            weight1 = (parent_weight, weight1)        elif item1.isdir():            weight1 = (dir_weight, weight1)        else:            weight1 = (file_weight, weight1)        if col == RemoteView.COL_NAME:            weight2 = item2.name        elif col == RemoteView.COL_SIZE:            weight2 = item2.size        elif col == RemoteView.COL_TYPE:            weight2 = treemodel.get_value(iter2, RemoteView.COL_TYPE)        elif col == RemoteView.COL_OWNER:            weight2 = item2.owner        elif col == RemoteView.COL_GROUP:            weight2 = item2.group        elif col == RemoteView.COL_DATE:            weight2 = item2.date        if item2.name == '..':            weight2 = (parent_weight, weight2)        elif item2.isdir():            weight2 = (dir_weight, weight2)        else:            weight2 = (file_weight, weight2)        if weight1 > weight2:            return 1        elif weight1 < weight2:            return -1        else:            return 0            def add_to_queue(self, treemodel, path, iter, data):        if self.__main_window.mode == self.__main_window.MODE_FTP:            info = treemodel.get_value(iter, RemoteView.COL_INFO)            direction = TransferView.DIRECTION_DOWN            source = 'ftp://%s@%s%s/%s' % (self.site_info['username'],                                           self.site_info['server_addr'],                                           self.current_path,                                           info.name)            local_view = self.__main_window.local_view            if data == None:                target = '%s/%s' % (local_view.current_path, info.name)            else:                target = '%s/%s' % (local_view.current_path, data)            if info.isdir():                source = source + '/'                target = target + '/'            size = info.size            self.__main_window.transfer_view.add_to_queue(                direction, source, target, size, self.__site_info, None)        return        def add_all_to_queue(self, trans_iter, target_path):        """        Add all the item in the list to the transfer queue.        """        tview = self.__main_window.transfer_view        direction = TransferView.DIRECTION_DOWN        iter = self.__model.get_iter_first()        while iter:            info = self.__model.get_value(iter, RemoteView.COL_INFO)            if info.name != '..':                source = '%s/%s' % (self.current_path, info.name)                target = '%s%s' % (target_path, info.name)                if info.isdir():                    source = source + '/'                    target = target + '/'                trans_iter = tview.add_to_queue(                    direction, source, target, info.size,                    self.__site_info, None, trans_iter)            iter = self.__model.iter_next(iter)        return    def on_display_file_size_as_change(self, config, cnxn_id, entry, *args):        if not entry.value:            return        else:            iter = self.__model.get_iter_first()            while iter:                info = self.__model.get_value(iter, RemoteView.COL_INFO)                size = info.size                self.__model.set_value(iter, RemoteView.COL_SIZE,                                       format_size(entry.value.to_string(),                                                   size))                iter = self.__model.iter_next(iter)        return    def on_file_list_window_font_change(self, config, cnxn_id, entry, *args):        if not entry.value:            return        return    def on_remote_dir_entry_activate(self, obj, *args):        new_path = self.__cmb_dir.child.get_text()        self.ftp_cd_path(new_path)        return    def on_sort_action_execute(self, action, widget, *args):        if self.__change_sort_menu_item:            self.__change_sort_menu_item = False            column, order = self.__model.get_sort_column_id()            widget_name = widget.get_name()            if widget_name == 'mi_remote_arr_by_name':                column = RemoteView.COL_NAME            elif widget_name == 'mi_remote_arr_by_file_extension':                column = RemoteView.COL_TYPE            elif widget_name == 'mi_remote_arr_by_size':                column = RemoteView.COL_SIZE            elif widget_name == 'mi_remote_arr_by_date':                column = RemoteView.COL_DATE            elif widget_name == 'mi_remote_arr_by_owner':                column = RemoteView.COL_OWNER            elif widget_name == 'mi_remote_arr_by_group':                column = RemoteView.COL_GROUP            elif widget_name == 'mi_remote_arr_ascending':                order = SORT_ASCENDING            elif widget_name == 'mi_remote_arr_descending':                order = SORT_DESCENDING            else:                raise ValueError, widget_name            self.__model.set_sort_column_id(column, order)                        self.__change_sort_menu_item = True        return    def on_list_sort_column_changed(self, obj, *args):        if self.__change_sort_menu_item:            self.__change_sort_menu_item = False                        column, order = obj.get_sort_column_id()            if column == RemoteView.COL_NAME:                widget_name = 'mi_remote_arr_by_name'            elif column == RemoteView.COL_TYPE:                widget_name = 'mi_remote_arr_by_file_extension'            elif column == RemoteView.COL_SIZE:                widget_name = 'mi_remote_arr_by_size'            elif column == RemoteView.COL_DATE:                widget_name = 'mi_remote_arr_by_date'            elif column == RemoteView.COL_OWNER:                widget_name = 'mi_remote_arr_by_owner'            elif column == RemoteView.COL_GROUP:                widget_name = 'mi_remote_arr_by_group'            widget = self.__menu_xml.get_widget(widget_name)            widget.set_active(TRUE)            if order == SORT_ASCENDING:                widget_name = 'mi_remote_arr_ascending'            elif order == SORT_DESCENDING:                widget_name = 'mi_remote_arr_descending'            widget = self.__menu_xml.get_widget(widget_name)            widget.set_active(TRUE)                        self.__change_sort_menu_item = True                    return    def on_auto_size_file_list_columns_change(self, config, id, entry, *args):        for column in self.__list.get_columns():            if entry.value.get_bool():                column.set_sizing(TREE_VIEW_COLUMN_AUTOSIZE)            else:                column.set_sizing(TREE_VIEW_COLUMN_GROW_ONLY)        return     def on_show_site_idle_time_change(self, config, id, entry, *args):        self.__show_idle_time = entry.value.get_bool()        return    def on_use_custom_file_listing_font_change(self, config, id, entry, *args):        self.__use_custom_file_listing_font = entry.value.get_bool()        self.__change_font()        return    def on_file_listing_font_change(self, config, id, entry, *args):        self.__file_listing_font = entry.value.get_string()        self.__change_font()        return    def __change_font(self):        for renderer in self.__text_renderers:            if self.__use_custom_file_listing_font:                renderer.set_property('font', self.__file_listing_font)            else:                renderer.set_property('font', None)        returnclass RemoteFileInfo:    name = None    attr = None    size = None    child_num = None    owner = None    group = None    date = None    def isdir(self):        return self.attr[0] == 'd'    class PwdUpdater:    def __init__(self, rview):        self.__rview = rview        return    def __call__(self, new_path):        self.__new_path = new_path        (scheme, location, path, query, fragment) = urlsplit(self.__new_path)        path = string.replace(unquote(path), '//', '/')        self.__rview.cmb_dir.child.set_text(path)        self.__rview.status2.set_text(self.__rview.current_url)        returnclass ListUpdater:    def __init__(self, rview):        self.__rview = rview        self.__model = rview.model        self.__time_reg = re.compile('([A-Za-z]{3}) (\d{1,2}) (\d{1,2}):(\d{1,2})')        self.__date_reg = re.compile('([A-Za-z]{3}) (\d{1,2}) (\d{4})')        return    def __call__(self, filelist):        def update(filelist):            display_file_size_as = config_value(                self.__rview.config, 'display', 'display_file_size_as')            for attr, childnum, owner, group, size, month, day, year_or_day, name in filelist:                if name == '.': continue                iter = self.__model.append()                                info = RemoteFileInfo()                info.name = name                info.attr = attr                info.childnum = string.atoi(childnum)                info.owner = owner                info.group = group                info.size = string.atoi(size)                date = '%s %s %s' % (month, day, year_or_day)                if len(year_or_day) == 5:                    t = self.__time_reg.match(date)                    if t != None:                        t = t.groups()                        t = datetime.datetime(                            time.localtime()[0], get_month_index(t[0]),                            string.atoi(t[1]), string.atoi(t[2]),                            string.atoi(t[3])).utctimetuple()                else:                    t = self.__date_reg.match(date)                    if t != None:                        t = t.groups()                        t = datetime.datetime(                            string.atoi(t[2]), get_month_index(t[0]),                            string.atoi(t[1])).utctimetuple()                info.date = t                self.__model.set_value(iter, RemoteView.COL_INFO, info)                self.__model.set_value(iter, RemoteView.COL_ATTR, attr)                self.__model.set_value(iter, RemoteView.COL_OWNER, owner)                self.__model.set_value(iter, RemoteView.COL_GROUP, group)                self.__model.set_value(iter, RemoteView.COL_SIZE,                                       format_size(display_file_size_as,                                                   string.atoi(size)))                self.__model.set_value(iter, RemoteView.COL_DATE, date)                if name == '..':                    self.__model.set_value(iter, RemoteView.COL_NAME,                                           _("Parent Directory"))                else:                    self.__model.set_value(iter, RemoteView.COL_NAME, name)                if attr[0] == 'd':                    if name == '..':                        image = gdk.pixbuf_new_from_file(                            os.path.join(coralftp_datadir, 'parent_dir.png'))                    else:                        image = gdk.pixbuf_new_from_file(                            os.path.join(coralftp_datadir, 'folder.png'))                        self.__rview.folder_count = self.__rview.folder_count + 1                    self.__model.set_value(iter, RemoteView.COL_ICON, image)                    filetype = _("Folder")                else:                    pos = string.rfind(name, '.')                    if pos > 0:                        filetype = name[pos:]                    else:                        filetype = ''                    self.__rview.file_count = self.__rview.file_count + 1                self.__model.set_value(iter, RemoteView.COL_TYPE, filetype)                self.__rview.update_status1()            return gtk.FALSE                idle_add(update, filelist)        return gtk.FALSE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -