def MakeNewModel(self, list): self.shares = list self.selected_folder = None self.selected_files = [] self.files.clear() # self.DirStore.clear() self.DirStore=None self.totalsize = 0 self.FolderTreeView.set_model(None) self.DirStore = UglyTree([gobject.TYPE_STRING, gobject.TYPE_STRING], list) for dir, files in self.shares: for filedata in files: if filedata[2] < 18446744000000000000: self.totalsize += filedata[2] else: print "Unbelievable filesize: %s, %s" % (HumanizeBytes(filedata[2]), repr(filedata)) self.AmountShared.set_text(_("Shared: %s") % HumanizeBytes(self.totalsize)) self.NumDirectories.set_text(_("Dirs: %s") % len(self.shares)) self.FolderTreeView.set_model(self.DirStore) sel = self.FolderTreeView.get_selection() sel.unselect_all() # Select first directory sel.select_path((0,)) self.FolderTreeView.set_sensitive(True) self.FileTreeView.set_sensitive(True) self.SaveButton.set_sensitive(True) if self.ExpandButton.get_active(): self.FolderTreeView.expand_all() else: self.FolderTreeView.collapse_all()
def __init__(self, userbrowses, user, conn): self.wTree = gtk.glade.XML(os.path.join(os.path.dirname(os.path.realpath(__file__)), "userbrowse.glade" ), None, "nicotine" ) widgets = self.wTree.get_widget_prefix("") for i in widgets: name = gtk.glade.get_widget_name(i) self.__dict__[name] = i self.UserBrowseTab.remove(self.Main) self.UserBrowseTab.destroy() #UserBrowseTab.__init__(self, False) self.wTree.signal_autoconnect(self) self.userbrowses = userbrowses self.frame = userbrowses.frame #self.tooltips = self.frame.tooltips #if not self.frame.np.config.sections["ui"]["tooltips"]: # self.tooltips.disable() self.user = user self.conn = conn # selected_folder is a path for TreeStore, i.e. a tuple self.selected_folder = None self.search_list = [] self.query = None self.search_position = 0 self.selected_files = [] self.shares = [] self.Elist = {} # Iters for current FileStore self.files = {} self.totalsize = 0 self.encoding, m = EncodingsMenu(self.frame.np, "userencoding", user) self.EncodingStore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) self.Encoding.set_size_request(100, -1) self.Encoding.set_model(self.EncodingStore) cell = gtk.CellRendererText() self.Encoding.pack_start(cell, True) self.Encoding.add_attribute(cell, 'text', 0) cell2 = gtk.CellRendererText() self.Encoding.pack_start(cell2, False) self.Encoding.add_attribute(cell2, 'text', 1) for item in m: self.Elist[item[1]] = self.EncodingStore.append([item[1], item[0] ]) if self.encoding == item[1]: self.Encoding.set_active_iter(self.Elist[self.encoding]) # Is there a need for this here? self.DirStore = UglyTree([gobject.TYPE_STRING, gobject.TYPE_STRING]) self.FolderTreeView.set_model(self.DirStore) self.FolderTreeView.set_headers_visible(True) # GTK 2.10 if gtk.pygtk_version[0] >= 2 and gtk.pygtk_version[1] >= 10: self.FolderTreeView.set_enable_tree_lines(True) cols = InitialiseColumns(self.FolderTreeView, [_("Directories"), -1, "text", self.CellDataFunc], #0 ) self.popup_menu_users = PopupMenu(self.frame) self.popup_menu_users2 = PopupMenu(self.frame) for menu in [self.popup_menu_users, self.popup_menu_users2]: menu.setup( ("#" + _("Send _message"), menu.OnSendMessage, gtk.STOCK_EDIT), ("#" + _("Show IP a_ddress"), menu.OnShowIPaddress, gtk.STOCK_NETWORK), ("#" + _("Get user i_nfo"), menu.OnGetUserInfo, gtk.STOCK_DIALOG_INFO), ("#" + _("Gi_ve privileges"), menu.OnGivePrivileges, gtk.STOCK_JUMP_TO), ("", None), ("$" + _("_Add user to list"), menu.OnAddToList), ("$" + _("_Ban this user"), menu.OnBanUser), ("$" + _("_Ignore this user"), menu.OnIgnoreUser), ) self.popup_menu_downloads_folders = PopupMenu(self.frame) self.popup_menu_downloads_folders.setup( ("#" + _("_Download directory"), self.OnDownloadDirectory, gtk.STOCK_GO_DOWN), ("#" + _("Download directory _to..."), self.OnDownloadDirectoryTo, gtk.STOCK_GO_DOWN), ("#" + _("Download _recursive"), self.OnDownloadDirectoryRecursive, gtk.STOCK_GO_DOWN), ("#" + _("Download r_ecursive to..."), self.OnDownloadDirectoryRecursiveTo, gtk.STOCK_GO_DOWN), ) self.popup_menu_downloads_files = PopupMenu(self.frame) self.popup_menu_downloads_files.setup( ("#" + _("_Download file(s)"), self.OnDownloadFiles, gtk.STOCK_GO_DOWN), ("#" + _("Download _to..."), self.OnDownloadFilesTo, gtk.STOCK_GO_DOWN), ("", None), ("#" + _("_Download directory"), self.OnDownloadDirectory, gtk.STOCK_GO_DOWN), ("#" + _("Download directory _to..."), self.OnDownloadDirectoryTo, gtk.STOCK_GO_DOWN), ("#" + _("Download _recursive"), self.OnDownloadDirectoryRecursive, gtk.STOCK_GO_DOWN), ("#" + _("Download r_ecursive to..."), self.OnDownloadDirectoryRecursiveTo, gtk.STOCK_GO_DOWN), ) self.popup_menu_uploads_folders = PopupMenu(self.frame) self.popup_menu_uploads_folders.setup( ("#" + _("Upload Directory to..."), self.OnUploadDirectoryTo, gtk.STOCK_GO_UP), ("#" + _("Upload Directory recursive to..."), self.OnUploadDirectoryRecursiveTo, gtk.STOCK_GO_UP), ) self.popup_menu_uploads_files = PopupMenu(self.frame) self.popup_menu_uploads_files.setup( ("#" + _("Upload Directory to..."), self.OnUploadDirectoryTo, gtk.STOCK_GO_UP), ("#" + _("Upload Directory recursive to..."), self.OnUploadDirectoryRecursiveTo, gtk.STOCK_GO_UP), ("#" + _("Up_load file(s)"), self.OnUploadFiles, gtk.STOCK_GO_UP), ) self.folder_popup_menu = PopupMenu(self.frame) self.folder_popup_menu.set_user(user) if user == self.frame.np.config.sections["server"]["login"]: self.folder_popup_menu.setup( ("USERMENU", _("User"), self.popup_menu_users, self.OnPopupMenuFolderUser), ("", None), (2, _("Download"), self.popup_menu_downloads_folders, self.OnPopupMenuDummy, gtk.STOCK_GO_DOWN), (2, _("Upload"), self.popup_menu_uploads_folders, self.OnPopupMenuDummy, gtk.STOCK_GO_UP), ("", None), ("#" + _("Copy _URL"), self.OnCopyDirURL, gtk.STOCK_COPY), ("#" + _("Open in File Manager"), self.OnFileManager, gtk.STOCK_OPEN), ) else: self.folder_popup_menu.setup( ("USERMENU", _("User"), self.popup_menu_users, self.OnPopupMenuFolderUser), ("", None), (2, _("Download"), self.popup_menu_downloads_folders, self.OnPopupMenuDummy, gtk.STOCK_GO_DOWN), ("", None), ("#" + _("Copy _URL"), self.OnCopyDirURL, gtk.STOCK_COPY), ) self.FolderTreeView.connect("button_press_event", self.OnFolderClicked) self.FolderTreeView.get_selection().connect("changed", self.OnSelectDir) # DecodedFilename, HSize, Bitrate, HLength, Size, Length, RawFilename self.FileStore = gtk.ListStore(str, str, str, str, gobject.TYPE_INT64, int, str) self.FileTreeView.set_model(self.FileStore) cols = InitialiseColumns(self.FileTreeView, [_("Filename"), 250, "text", self.CellDataFunc], [_("Size"), 100, "number", self.CellDataFunc], [_("Bitrate"), 70, "text", self.CellDataFunc], [_("Length"), 50, "number", self.CellDataFunc], ) cols[0].set_sort_column_id(0) cols[1].set_sort_column_id(4) cols[2].set_sort_column_id(2) cols[3].set_sort_column_id(5) self.FileStore.set_sort_column_id(0, gtk.SORT_ASCENDING) for i in range (4): parent = cols[i].get_widget().get_ancestor(gtk.Button) if parent: parent.connect('button_press_event', PressHeader) # Read Show / Hide column settings from last session self.FileTreeView.get_selection().set_mode(gtk.SELECTION_MULTIPLE) self.FileTreeView.set_headers_clickable(True) self.FileTreeView.set_property("rules-hint", True) self.file_popup_menu = PopupMenu(self.frame) if user == self.frame.np.config.sections["server"]["login"]: self.file_popup_menu.setup( ("USERMENU", "User", self.popup_menu_users2, self.OnPopupMenuFileUser), ("", None), (2, _("Download"), self.popup_menu_downloads_files, self.OnPopupMenuDummy, gtk.STOCK_GO_DOWN), (2, _("Upload"), self.popup_menu_uploads_files, self.OnPopupMenuDummy, gtk.STOCK_GO_UP), ("", None), ("#" + _("Copy _URL"), self.OnCopyURL, gtk.STOCK_COPY), ("#" + _("Send to _player"), self.OnPlayFiles, gtk.STOCK_MEDIA_PLAY), ("#" + _("Open in File Manager"), self.OnFileManager, gtk.STOCK_OPEN), ) else: self.file_popup_menu.setup( ("USERMENU", "User", self.popup_menu_users2, self.OnPopupMenuFileUser), ("", None), (2, _("Download"), self.popup_menu_downloads_files, self.OnPopupMenuDummy, gtk.STOCK_GO_DOWN), ("", None), ("#" + _("Copy _URL"), self.OnCopyURL, gtk.STOCK_COPY), ) self.FileTreeView.connect("button_press_event", self.OnFileClicked) self.ChangeColours() for name, object in self.__dict__.items(): if type(object) is PopupMenu: object.set_user(self.user)
class UserBrowse: def __init__(self, userbrowses, user, conn): self.wTree = gtk.glade.XML(os.path.join(os.path.dirname(os.path.realpath(__file__)), "userbrowse.glade" ), None, "nicotine" ) widgets = self.wTree.get_widget_prefix("") for i in widgets: name = gtk.glade.get_widget_name(i) self.__dict__[name] = i self.UserBrowseTab.remove(self.Main) self.UserBrowseTab.destroy() #UserBrowseTab.__init__(self, False) self.wTree.signal_autoconnect(self) self.userbrowses = userbrowses self.frame = userbrowses.frame #self.tooltips = self.frame.tooltips #if not self.frame.np.config.sections["ui"]["tooltips"]: # self.tooltips.disable() self.user = user self.conn = conn # selected_folder is a path for TreeStore, i.e. a tuple self.selected_folder = None self.search_list = [] self.query = None self.search_position = 0 self.selected_files = [] self.shares = [] self.Elist = {} # Iters for current FileStore self.files = {} self.totalsize = 0 self.encoding, m = EncodingsMenu(self.frame.np, "userencoding", user) self.EncodingStore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) self.Encoding.set_size_request(100, -1) self.Encoding.set_model(self.EncodingStore) cell = gtk.CellRendererText() self.Encoding.pack_start(cell, True) self.Encoding.add_attribute(cell, 'text', 0) cell2 = gtk.CellRendererText() self.Encoding.pack_start(cell2, False) self.Encoding.add_attribute(cell2, 'text', 1) for item in m: self.Elist[item[1]] = self.EncodingStore.append([item[1], item[0] ]) if self.encoding == item[1]: self.Encoding.set_active_iter(self.Elist[self.encoding]) # Is there a need for this here? self.DirStore = UglyTree([gobject.TYPE_STRING, gobject.TYPE_STRING]) self.FolderTreeView.set_model(self.DirStore) self.FolderTreeView.set_headers_visible(True) # GTK 2.10 if gtk.pygtk_version[0] >= 2 and gtk.pygtk_version[1] >= 10: self.FolderTreeView.set_enable_tree_lines(True) cols = InitialiseColumns(self.FolderTreeView, [_("Directories"), -1, "text", self.CellDataFunc], #0 ) self.popup_menu_users = PopupMenu(self.frame) self.popup_menu_users2 = PopupMenu(self.frame) for menu in [self.popup_menu_users, self.popup_menu_users2]: menu.setup( ("#" + _("Send _message"), menu.OnSendMessage, gtk.STOCK_EDIT), ("#" + _("Show IP a_ddress"), menu.OnShowIPaddress, gtk.STOCK_NETWORK), ("#" + _("Get user i_nfo"), menu.OnGetUserInfo, gtk.STOCK_DIALOG_INFO), ("#" + _("Gi_ve privileges"), menu.OnGivePrivileges, gtk.STOCK_JUMP_TO), ("", None), ("$" + _("_Add user to list"), menu.OnAddToList), ("$" + _("_Ban this user"), menu.OnBanUser), ("$" + _("_Ignore this user"), menu.OnIgnoreUser), ) self.popup_menu_downloads_folders = PopupMenu(self.frame) self.popup_menu_downloads_folders.setup( ("#" + _("_Download directory"), self.OnDownloadDirectory, gtk.STOCK_GO_DOWN), ("#" + _("Download directory _to..."), self.OnDownloadDirectoryTo, gtk.STOCK_GO_DOWN), ("#" + _("Download _recursive"), self.OnDownloadDirectoryRecursive, gtk.STOCK_GO_DOWN), ("#" + _("Download r_ecursive to..."), self.OnDownloadDirectoryRecursiveTo, gtk.STOCK_GO_DOWN), ) self.popup_menu_downloads_files = PopupMenu(self.frame) self.popup_menu_downloads_files.setup( ("#" + _("_Download file(s)"), self.OnDownloadFiles, gtk.STOCK_GO_DOWN), ("#" + _("Download _to..."), self.OnDownloadFilesTo, gtk.STOCK_GO_DOWN), ("", None), ("#" + _("_Download directory"), self.OnDownloadDirectory, gtk.STOCK_GO_DOWN), ("#" + _("Download directory _to..."), self.OnDownloadDirectoryTo, gtk.STOCK_GO_DOWN), ("#" + _("Download _recursive"), self.OnDownloadDirectoryRecursive, gtk.STOCK_GO_DOWN), ("#" + _("Download r_ecursive to..."), self.OnDownloadDirectoryRecursiveTo, gtk.STOCK_GO_DOWN), ) self.popup_menu_uploads_folders = PopupMenu(self.frame) self.popup_menu_uploads_folders.setup( ("#" + _("Upload Directory to..."), self.OnUploadDirectoryTo, gtk.STOCK_GO_UP), ("#" + _("Upload Directory recursive to..."), self.OnUploadDirectoryRecursiveTo, gtk.STOCK_GO_UP), ) self.popup_menu_uploads_files = PopupMenu(self.frame) self.popup_menu_uploads_files.setup( ("#" + _("Upload Directory to..."), self.OnUploadDirectoryTo, gtk.STOCK_GO_UP), ("#" + _("Upload Directory recursive to..."), self.OnUploadDirectoryRecursiveTo, gtk.STOCK_GO_UP), ("#" + _("Up_load file(s)"), self.OnUploadFiles, gtk.STOCK_GO_UP), ) self.folder_popup_menu = PopupMenu(self.frame) self.folder_popup_menu.set_user(user) if user == self.frame.np.config.sections["server"]["login"]: self.folder_popup_menu.setup( ("USERMENU", _("User"), self.popup_menu_users, self.OnPopupMenuFolderUser), ("", None), (2, _("Download"), self.popup_menu_downloads_folders, self.OnPopupMenuDummy, gtk.STOCK_GO_DOWN), (2, _("Upload"), self.popup_menu_uploads_folders, self.OnPopupMenuDummy, gtk.STOCK_GO_UP), ("", None), ("#" + _("Copy _URL"), self.OnCopyDirURL, gtk.STOCK_COPY), ("#" + _("Open in File Manager"), self.OnFileManager, gtk.STOCK_OPEN), ) else: self.folder_popup_menu.setup( ("USERMENU", _("User"), self.popup_menu_users, self.OnPopupMenuFolderUser), ("", None), (2, _("Download"), self.popup_menu_downloads_folders, self.OnPopupMenuDummy, gtk.STOCK_GO_DOWN), ("", None), ("#" + _("Copy _URL"), self.OnCopyDirURL, gtk.STOCK_COPY), ) self.FolderTreeView.connect("button_press_event", self.OnFolderClicked) self.FolderTreeView.get_selection().connect("changed", self.OnSelectDir) # DecodedFilename, HSize, Bitrate, HLength, Size, Length, RawFilename self.FileStore = gtk.ListStore(str, str, str, str, gobject.TYPE_INT64, int, str) self.FileTreeView.set_model(self.FileStore) cols = InitialiseColumns(self.FileTreeView, [_("Filename"), 250, "text", self.CellDataFunc], [_("Size"), 100, "number", self.CellDataFunc], [_("Bitrate"), 70, "text", self.CellDataFunc], [_("Length"), 50, "number", self.CellDataFunc], ) cols[0].set_sort_column_id(0) cols[1].set_sort_column_id(4) cols[2].set_sort_column_id(2) cols[3].set_sort_column_id(5) self.FileStore.set_sort_column_id(0, gtk.SORT_ASCENDING) for i in range (4): parent = cols[i].get_widget().get_ancestor(gtk.Button) if parent: parent.connect('button_press_event', PressHeader) # Read Show / Hide column settings from last session self.FileTreeView.get_selection().set_mode(gtk.SELECTION_MULTIPLE) self.FileTreeView.set_headers_clickable(True) self.FileTreeView.set_property("rules-hint", True) self.file_popup_menu = PopupMenu(self.frame) if user == self.frame.np.config.sections["server"]["login"]: self.file_popup_menu.setup( ("USERMENU", "User", self.popup_menu_users2, self.OnPopupMenuFileUser), ("", None), (2, _("Download"), self.popup_menu_downloads_files, self.OnPopupMenuDummy, gtk.STOCK_GO_DOWN), (2, _("Upload"), self.popup_menu_uploads_files, self.OnPopupMenuDummy, gtk.STOCK_GO_UP), ("", None), ("#" + _("Copy _URL"), self.OnCopyURL, gtk.STOCK_COPY), ("#" + _("Send to _player"), self.OnPlayFiles, gtk.STOCK_MEDIA_PLAY), ("#" + _("Open in File Manager"), self.OnFileManager, gtk.STOCK_OPEN), ) else: self.file_popup_menu.setup( ("USERMENU", "User", self.popup_menu_users2, self.OnPopupMenuFileUser), ("", None), (2, _("Download"), self.popup_menu_downloads_files, self.OnPopupMenuDummy, gtk.STOCK_GO_DOWN), ("", None), ("#" + _("Copy _URL"), self.OnCopyURL, gtk.STOCK_COPY), ) self.FileTreeView.connect("button_press_event", self.OnFileClicked) self.ChangeColours() for name, object in self.__dict__.items(): if type(object) is PopupMenu: object.set_user(self.user) def OnPopupMenuDummy(self, widget, something): pass def Attach(self, widget=None): self.userbrowses.attach_tab(self.Main) def Detach(self, widget=None): self.userbrowses.detach_tab(self.Main, _("Nicotine+ User Browse: %s (%s)") % (self.user, [_("Offline"), _("Away"), _("Online")][self.status])) def ConnClose(self): pass def OnPopupMenuFileUser(self, widget): self.OnPopupMenuUsers(self.popup_menu_users2) def OnPopupMenuFolderUser(self, widget): self.OnPopupMenuUsers(self.popup_menu_users) def OnPopupMenuUsers(self, menu): items = menu.get_children() act = True items[0].set_sensitive(act) items[1].set_sensitive(act) items[2].set_sensitive(act) items[5].set_active(self.user in [i[0] for i in self.frame.np.config.sections["server"]["userlist"]]) items[6].set_active(self.user in self.frame.np.config.sections["server"]["banlist"]) items[7].set_active(self.user in self.frame.np.config.sections["server"]["ignorelist"]) for i in range(3, 8): items[i].set_sensitive(act) return True def ChangeColours(self): self.frame.SetTextBG(self.FileTreeView) self.frame.SetTextBG(self.FolderTreeView) self.frame.SetTextBG(self.entry4) self.frame.ChangeListFont(self.FolderTreeView, self.frame.np.config.sections["ui"]["browserfont"]) self.frame.ChangeListFont(self.FileTreeView, self.frame.np.config.sections["ui"]["browserfont"]) def CellDataFunc(self, column, cellrenderer, model, iter): colour = self.frame.np.config.sections["ui"]["search"] if colour == "": colour = None cellrenderer.set_property("foreground", colour) def decode(self, str): return self.frame.np.decode(str, self.encoding) def OnExpand(self, widget): if self.ExpandButton.get_active(): self.FolderTreeView.expand_all() self.ExpandDirectoriesImage.set_from_stock(gtk.STOCK_REMOVE, 4) else: self.FolderTreeView.collapse_all() self.ExpandDirectoriesImage.set_from_stock(gtk.STOCK_ADD, 4) nchildren, node = self.DirStore.GetChildren(0,0) if nchildren > 0: self.SetDirectory((0,)) else: self.SetDirectory(None) def OnFolderClicked(self, widget, event): if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS: self.OnDownloadDirectory(widget) return True elif event.button == 3: return self.OnFolderPopupMenu(widget, event) return False def OnFolderPopupMenu(self, widget, event): act = True if self.selected_folder is None: act = False items = self.folder_popup_menu.get_children() for item in items[1:]: item.set_sensitive(act) self.folder_popup_menu.popup(None, None, None, event.button, event.time) def SelectedFilesCallback(self, model, path, iter): rawfilename = self.FileStore.get_value(iter, 6) self.selected_files.append(rawfilename) def OnFileClicked(self, widget, event): if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS: self.selected_files = [] self.FileTreeView.get_selection().selected_foreach(self.SelectedFilesCallback) self.OnDownloadFiles(widget) self.FileTreeView.get_selection().unselect_all() return True elif event.button == 3: return self.OnFilePopupMenu(widget, event) return False def OnFilePopupMenu(self, widget, event): self.selected_files = [] self.FileTreeView.get_selection().selected_foreach(self.SelectedFilesCallback) files = True multiple = False if len(self.selected_files) > 1: multiple = True if len(self.selected_files) >= 1: files = True else: files = False items = self.file_popup_menu.get_children() if self.user == self.frame.np.config.sections["server"]["login"]: items[2].set_sensitive(files) # Downloads items[3].set_sensitive(files) # Uploads items[5].set_sensitive(not multiple and files) # Copy URL items[6].set_sensitive(files) # Send to player else: items[2].set_sensitive(files) # Downloads items[4].set_sensitive(not multiple and files) # Copy URL self.FileTreeView.emit_stop_by_name("button_press_event") self.file_popup_menu.popup(None, None, None, event.button, event.time) return True def MakeNewModel(self, list): self.shares = list self.selected_folder = None self.selected_files = [] self.files.clear() # self.DirStore.clear() self.DirStore=None self.totalsize = 0 self.FolderTreeView.set_model(None) self.DirStore = UglyTree([gobject.TYPE_STRING, gobject.TYPE_STRING], list) for dir, files in self.shares: for filedata in files: if filedata[2] < 18446744000000000000: self.totalsize += filedata[2] else: print "Unbelievable filesize: %s, %s" % (HumanizeBytes(filedata[2]), repr(filedata)) self.AmountShared.set_text(_("Shared: %s") % HumanizeBytes(self.totalsize)) self.NumDirectories.set_text(_("Dirs: %s") % len(self.shares)) self.FolderTreeView.set_model(self.DirStore) sel = self.FolderTreeView.get_selection() sel.unselect_all() # Select first directory sel.select_path((0,)) self.FolderTreeView.set_sensitive(True) self.FileTreeView.set_sensitive(True) self.SaveButton.set_sensitive(True) if self.ExpandButton.get_active(): self.FolderTreeView.expand_all() else: self.FolderTreeView.collapse_all() def SetDirectory(self, path): self.selected_folder = path self.FileStore.clear() self.files.clear() node = self.DirStore.on_get_iter(path) if node == None or node == (0,0): return files = self.DirStore.GetData(node) for file in files: # DecodedFilename, HSize, Bitrate, HLength, Size, Length, RawFilename rl = 0 try: size = int(file[2]) except ValueError: size = 0 f = [self.decode(file[1]), Humanize(size)] if file[3] == "": f += ["", ""] else: #file[4] is for file types such as 'mp3' attrs = file[4] if attrs != [] and type(attrs) is list: if len(attrs) >= 3: br = str(attrs[0]) if len(attrs) > 2 and attrs[2]: br = br + _(" (vbr)") try: rl = int(attrs[1]) except ValueError: rl = 0 l = "%i:%02i" % (rl / 60, rl % 60) f += [br, l] else: f += ["", ""] else: f += ["", ""] f += [long(size), rl, file[1]] try: self.files[f[0]] = self.FileStore.append(f) except Exception, error: displayTraceback()