📄 remote_view.py
字号:
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 + -