def __init__(self, frame): self.frame = frame self.initphase = True # don't respond to signals unless False self.config = frame.np.config load_ui_elements( self, os.path.join(self.frame.gui_dir, "ui", "fastconfigure.ui")) self.FastConfigureDialog.set_transient_for(self.frame.MainWindow) # Page specific, sharepage # The last column is the raw byte/unicode object # for the folder (not shown) self.sharelist = Gtk.ListStore(str, str) initialise_columns(self.shareddirectoriestree, [_("Virtual Folder"), 0, "text"], [_("Folder"), 0, "text"]) self.shareddirectoriestree.set_model(self.sharelist) self.shareddirectoriestree.get_selection().set_mode( Gtk.SelectionMode.MULTIPLE) self.initphase = False
def __init__(self, frame): self.frame = frame self.config = frame.np.config load_ui_elements( self, os.path.join(self.frame.gui_dir, "ui", "dialogs", "fastconfigure.ui")) self.FastConfigureDialog.set_transient_for(self.frame.MainWindow) self.downloaddir = FileChooserButton(self.downloaddir, self.FastConfigureDialog, "folder") # Page specific, sharepage self.sharelist = Gtk.ListStore(str, str) initialise_columns( None, self.shareddirectoriestree, ["virtual_folder", _("Virtual Folder"), 0, "text", None], ["folder", _("Folder"), 0, "text", None]) self.shareddirectoriestree.set_model(self.sharelist)
def __init__(self, frame, searches): self.disconnected = False self.frame = frame self.interval = 0 self.searches = searches self.timer = None self.wishes = {} load_ui_elements( self, os.path.join(self.frame.gui_dir, "ui", "dialogs", "wishlist.ui")) self.WishListDialog.set_transient_for(frame.MainWindow) self.store = Gtk.ListStore(str) cols = initialise_columns( None, self.WishlistView, ["wishes", _("Wishes"), -1, "text", None, None]) self.WishlistView.set_model(self.store) self.WishlistView.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING) for wish in self.frame.np.config.sections["server"]["autosearch"]: self.wishes[wish] = self.store.append([wish]) renderers = cols["wishes"].get_cells() for render in renderers: render.set_property('editable', True) render.connect('edited', self.cell_edited_callback, self.WishlistView, 0) self.frame.WishList.connect("clicked", self.show)
def __init__(self, frame): self.frame = frame self.initphase = True # don't respond to signals unless False self.config = frame.np.config builder = Gtk.Builder() builder.set_translation_domain('nicotine') builder.add_from_file( os.path.join(os.path.dirname(os.path.realpath(__file__)), "ui", "fastconfigure.ui")) self.window = builder.get_object("FastConfigureAssistant") self.window.set_transient_for(frame.MainWindow) builder.connect_signals(self) self.kids = {} for i in builder.get_objects(): try: self.kids[Gtk.Buildable.get_name(i)] = i except TypeError: pass # Page specific, sharepage # The last column is the raw byte/unicode object # for the folder (not shown) self.sharelist = Gtk.ListStore( GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING) initialise_columns(self.kids['shareddirectoriestree'], [_("Virtual Directory"), 0, "text"], [_("Directory"), 0, "text"], [_("Size"), 0, "text"], [_("Files"), 0, "text"], [_("Dirs"), 0, "text"], [_("File types"), 0, "text"]) self.kids['shareddirectoriestree'].set_model(self.sharelist) self.kids['shareddirectoriestree'].get_selection().set_mode( Gtk.SelectionMode.MULTIPLE) self.initphase = False
def __init__(self, frame, searches): self.disconnected = False self.frame = frame self.interval = 0 self.searches = searches self.timer = None self.wishes = {} builder = Gtk.Builder() builder.set_translation_domain('nicotine') builder.add_from_file( os.path.join(os.path.dirname(os.path.realpath(__file__)), "ui", "wishlist.ui")) self.wish_list_dialog = builder.get_object("WishListDialog") builder.connect_signals(self) for i in builder.get_objects(): try: self.__dict__[Gtk.Buildable.get_name(i)] = i except TypeError: pass self.wish_list_dialog.set_transient_for(frame.MainWindow) self.wish_list_dialog.connect("destroy", self.quit) self.wish_list_dialog.connect("destroy-event", self.quit) self.wish_list_dialog.connect("delete-event", self.quit) self.wish_list_dialog.connect("delete_event", self.quit) self.store = Gtk.ListStore(GObject.TYPE_STRING) cols = initialise_columns(self.WishlistView, [_("Wishes"), -1, "text"]) self.WishlistView.set_model(self.store) self.WishlistView.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING) for wish in self.frame.np.config.sections["server"]["autosearch"]: self.wishes[wish] = self.store.append([wish]) renderers = cols[0].get_cells() for render in renderers: render.set_property('editable', True) render.connect('edited', self.cell_edited_callback, self.WishlistView, 0) self.frame.WishList.connect("clicked", self.show)
def __init__(self, frame, joined_rooms, private_rooms): # Build the window self.frame = frame self.server_rooms = set() self.joined_rooms = joined_rooms self.private_rooms = private_rooms load_ui_elements( self, os.path.join(self.frame.gui_dir, "ui", "popovers", "roomlist.ui")) self.room_model = Gtk.ListStore(str, int, int) self.cols = initialise_columns( None, self.RoomsList, ["room", _("Room"), 260, "text", self.room_status, None], ["users", _("Users"), 100, "number", self.room_status, None]) self.cols["room"].set_sort_column_id(0) self.cols["users"].set_sort_column_id(1) self.popup_room = None self.popup_menu = PopupMenu(self.frame) self.popup_menu.setup( ("#" + _("Join Room"), self.on_popup_join), ("#" + _("Leave Room"), self.on_popup_leave), ("", None), ("#" + _("Disown Private Room"), self.on_popup_private_room_disown), ("#" + _("Cancel Room Membership"), self.on_popup_private_room_dismember), ("", None), ("#" + _("Join Public Room"), self.on_join_public_room)) self.RoomsList.connect("button_press_event", self.on_list_clicked) self.RoomsList.connect("popup-menu", self.on_popup_menu) self.RoomsList.connect("touch_event", self.on_list_clicked) self.RoomsList.set_headers_clickable(True) self.search_iter = None self.query = "" self.AcceptPrivateRoom.set_active( self.frame.np.config.sections["server"]["private_chatrooms"]) self.AcceptPrivateRoom.connect("toggled", self.on_toggle_accept_private_room) frame.RoomList.connect("clicked", self.show) self.RoomListPopover.set_relative_to(frame.RoomList)
def __init__(self, frame, np): self.frame = frame self.np = np load_ui_elements( self, os.path.join(self.frame.gui_dir, "ui", "interests.ui")) self.frame.interestsvbox.add(self.Main) self.likes = {} self.likes_model = Gtk.ListStore(str) self.likes_model.set_sort_column_id(0, Gtk.SortType.ASCENDING) cols = initialise_columns( None, self.LikesList, ["i_like", _("I Like"), -1, "text", None]) cols["i_like"].set_sort_column_id(0) self.LikesList.set_model(self.likes_model) self.til_popup_menu = popup = PopupMenu(self.frame) popup.setup( ("#" + _("_Remove Item"), self.on_remove_thing_i_like), ("#" + _("Re_commendations For Item"), self.on_recommend_item), ("", None), ("#" + _("_Search For Item"), self.on_recommend_search)) self.dislikes = {} self.dislikes_model = Gtk.ListStore(str) self.dislikes_model.set_sort_column_id(0, Gtk.SortType.ASCENDING) cols = initialise_columns( None, self.DislikesList, ["i_dislike", _("I Dislike"), -1, "text", None]) cols["i_dislike"].set_sort_column_id(0) self.DislikesList.set_model(self.dislikes_model) self.tidl_popup_menu = popup = PopupMenu(self.frame) popup.setup(("#" + _("_Remove Item"), self.on_remove_thing_i_dislike), ("", None), ("#" + _("_Search For Item"), self.on_recommend_search)) cols = initialise_columns( None, self.RecommendationsList, ["rating", _("Rating"), 0, "number", None], ["item", _("Item"), -1, "text", None]) cols["rating"].set_sort_column_id(2) cols["item"].set_sort_column_id(1) self.recommendations_model = Gtk.ListStore( str, # (0) hrating str, # (1) item int # (2) rating ) self.RecommendationsList.set_model(self.recommendations_model) self.r_popup_menu = popup = PopupMenu(self.frame) popup.setup( ("$" + _("I _Like This"), self.on_like_recommendation), ("$" + _("I _Dislike This"), self.on_dislike_recommendation), ("#" + _("_Recommendations For Item"), self.on_recommend_recommendation), ("", None), ("#" + _("_Search For Item"), self.on_recommend_search)) cols = initialise_columns( None, self.UnrecommendationsList, ["rating", _("Rating"), 0, "number", None], ["item", _("Item"), -1, "text", None]) cols["rating"].set_sort_column_id(2) cols["item"].set_sort_column_id(1) self.unrecommendations_model = Gtk.ListStore( str, # (0) hrating str, # (1) item int # (2) rating ) self.UnrecommendationsList.set_model(self.unrecommendations_model) self.ur_popup_menu = popup = PopupMenu(self.frame) popup.setup( ("$" + _("I _Like This"), self.on_like_recommendation), ("$" + _("I _Dislike This"), self.on_dislike_recommendation), ("#" + _("_Recommendations For Item"), self.on_recommend_recommendation), ("", None), ("#" + _("_Search For Item"), self.on_recommend_search)) cols = initialise_columns( None, self.RecommendationUsersList, ["country", _("Country"), 25, "pixbuf", None], ["user", _("User"), 100, "text", None], ["speed", _("Speed"), 100, "text", None], ["files", _("Files"), 100, "text", None], ) cols["country"].set_sort_column_id(4) cols["user"].set_sort_column_id(1) cols["speed"].set_sort_column_id(5) cols["files"].set_sort_column_id(6) cols["country"].get_widget().hide() self.recommendation_users = {} self.recommendation_users_model = Gtk.ListStore( GObject.TYPE_OBJECT, # (0) status icon str, # (1) user str, # (2) hspeed str, # (3) hfiles GObject.TYPE_INT64, # (4) status GObject.TYPE_UINT64, # (5) speed GObject.TYPE_UINT64 # (6) file count ) self.RecommendationUsersList.set_model(self.recommendation_users_model) self.recommendation_users_model.set_sort_column_id( 1, Gtk.SortType.ASCENDING) self.ru_popup_menu = popup = PopupMenu(self.frame) popup.setup_user_menu() for thing in self.np.config.sections["interests"]["likes"]: if thing and isinstance(thing, str): self.likes[thing] = self.likes_model.append([thing]) for thing in self.np.config.sections["interests"]["dislikes"]: if thing and isinstance(thing, str): self.dislikes[thing] = self.dislikes_model.append([thing]) self.update_visuals()
def __init__(self, searches, text, id, mode, remember, showtab): self.searches = searches self.frame = searches.frame # Build the window builder = Gtk.Builder() builder.set_translation_domain('nicotine') builder.add_from_file(os.path.join(os.path.dirname(os.path.realpath(__file__)), "ui", "search.ui")) self.search_tab = builder.get_object("SearchTab") for i in builder.get_objects(): try: self.__dict__[Gtk.Buildable.get_name(i)] = i except TypeError: pass self.search_tab.remove(self.Main) self.search_tab.destroy() builder.connect_signals(self) self.text = text self.searchterm_words_include = [p for p in text.lower().split() if not p.startswith('-')] self.searchterm_words_ignore = [p[1:] for p in text.lower().split() if p.startswith('-') and len(p) > 1] self.id = id self.mode = mode self.remember = remember self.showtab = showtab self.usersiters = {} self.directoryiters = {} self.users = set() self.all_data = [] self.filters = None self.resultslimit = 2000 self.numvisibleresults = 0 self.operators = { '<': operator.lt, '<=': operator.le, '==': operator.eq, '!=': operator.ne, '>=': operator.ge, '>': operator.gt } fill_file_grouping_combobox(self.ResultGrouping) self.ResultGrouping.set_active(self.frame.np.config.sections["searches"]["group_searches"]) self.ResultGrouping.connect("changed", self.on_group) self.ExpandButton.set_active(self.frame.np.config.sections["searches"]["expand_searches"]) self.ExpandButton.connect("toggled", self.on_toggle_expand_all) if mode > 0: self.RememberCheckButton.set_sensitive(False) self.RememberCheckButton.set_active(remember) """ Columns """ self.ResultsList.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.ResultsList.set_enable_tree_lines(True) self.ResultsList.set_headers_clickable(True) self.ResultsList.set_rubber_banding(True) if self.ResultGrouping.get_active() > 0: # Group by folder or user self.ResultsList.set_show_expanders(True) else: self.ResultsList.set_show_expanders(False) self.resultsmodel = Gtk.TreeStore( GObject.TYPE_UINT64, # (0) num str, # (1) user GObject.TYPE_OBJECT, # (2) flag str, # (3) immediatedl str, # (4) h_speed str, # (5) h_queue str, # (6) directory str, # (7) filename str, # (8) h_size str, # (9) h_bitrate str, # (10) length GObject.TYPE_UINT64, # (11) bitrate str, # (12) fullpath str, # (13) country GObject.TYPE_UINT64, # (14) size GObject.TYPE_UINT64, # (15) speed GObject.TYPE_UINT64 # (16) queue ) widths = self.frame.np.config.sections["columns"]["filesearch_widths"] cols = initialise_columns( self.ResultsList, [_("ID"), widths[0], "text", self.cell_data_func], [_("User"), widths[1], "text", self.cell_data_func], [_("Country"), widths[2], "pixbuf"], [_("Immediate Download"), widths[3], "center", self.cell_data_func], [_("Speed"), widths[4], "number", self.cell_data_func], [_("In queue"), widths[5], "center", self.cell_data_func], [_("Directory"), widths[6], "text", self.cell_data_func], [_("Filename"), widths[7], "text", self.cell_data_func], [_("Size"), widths[8], "number", self.cell_data_func], [_("Bitrate"), widths[9], "number", self.cell_data_func], [_("Length"), widths[10], "number", self.cell_data_func] ) self.col_num, self.col_user, self.col_country, self.col_immediate, self.col_speed, self.col_queue, self.col_directory, self.col_file, self.col_size, self.col_bitrate, self.col_length = cols if self.ResultGrouping.get_active() > 0: # Group by folder or user self.ResultsList.get_columns()[0].set_visible(False) self.ExpandButton.show() hide_columns(cols, self.frame.np.config.sections["columns"]["filesearch_columns"]) self.col_num.set_sort_column_id(0) self.col_user.set_sort_column_id(1) self.col_country.set_sort_column_id(13) self.col_immediate.set_sort_column_id(3) self.col_speed.set_sort_column_id(15) self.col_queue.set_sort_column_id(16) self.col_directory.set_sort_column_id(6) self.col_file.set_sort_column_id(7) self.col_size.set_sort_column_id(14) self.col_bitrate.set_sort_column_id(11) self.col_length.set_sort_column_id(10) self.col_country.get_widget().hide() self.ResultsList.set_model(self.resultsmodel) self.ResultsList.connect("button_press_event", self.on_list_clicked) self.change_colours() """ Filters """ self.filter_bitrate_model = Gtk.ListStore(GObject.TYPE_STRING) self.FilterBitrate.set_model(self.filter_bitrate_model) self.FilterBitrate.set_entry_text_column(0) self.filter_size_model = Gtk.ListStore(GObject.TYPE_STRING) self.FilterSize.set_model(self.filter_size_model) self.FilterSize.set_entry_text_column(0) self.filter_country_model = Gtk.ListStore(GObject.TYPE_STRING) self.FilterCountry.set_model(self.filter_country_model) self.FilterCountry.set_entry_text_column(0) self.filter_in_model = Gtk.ListStore(GObject.TYPE_STRING) self.FilterIn.set_model(self.filter_in_model) self.FilterIn.set_entry_text_column(0) self.filter_out_model = Gtk.ListStore(GObject.TYPE_STRING) self.FilterOut.set_model(self.filter_out_model) self.FilterOut.set_entry_text_column(0) self.populate_filters() self.FilterSize.clear() sizecell = Gtk.CellRendererText() sizecell.set_property("xalign", 1) self.FilterSize.pack_start(sizecell, True) self.FilterSize.add_attribute(sizecell, "text", 0) self.FilterBitrate.clear() bit_cell = Gtk.CellRendererText() bit_cell.set_property("xalign", 1) self.FilterBitrate.pack_start(bit_cell, True) self.FilterBitrate.add_attribute(bit_cell, "text", 0) self.FilterIn.connect("changed", self.on_filter_changed) self.FilterOut.connect("changed", self.on_filter_changed) self.FilterSize.connect("changed", self.on_filter_changed) self.FilterBitrate.connect("changed", self.on_filter_changed) self.FilterCountry.connect("changed", self.on_filter_changed) self.FilterIn.get_child().connect("activate", self.on_refilter) self.FilterOut.get_child().connect("activate", self.on_refilter) self.FilterSize.get_child().connect("activate", self.on_refilter) self.FilterBitrate.get_child().connect("activate", self.on_refilter) self.FilterCountry.get_child().connect("activate", self.on_refilter) """ Popup """ self.popup_menu_users = PopupMenu(self.frame, False) self.popup_menu = popup = PopupMenu(self.frame) popup.setup( ("#" + _("_Download file(s)"), self.on_download_files), ("#" + _("Download file(s) _to..."), self.on_download_files_to), ("#" + _("Download _folder(s)"), self.on_download_folders), ("#" + _("Download f_older(s) to..."), self.on_download_folders_to), ("#" + _("View Metadata of file(s)"), self.on_search_meta), ("", None), ("#" + _("Copy _URL"), self.on_copy_url), ("#" + _("Copy folder U_RL"), self.on_copy_dir_url), ("", None), (1, _("User(s)"), self.popup_menu_users, self.on_popup_menu_users) )
def __init__(self, userbrowses, user): self.userbrowses = userbrowses self.frame = userbrowses.frame # Build the window load_ui_elements(self, os.path.join(self.frame.gui_dir, "ui", "userbrowse.ui")) self.info_bar = InfoBar(self.InfoBar, Gtk.MessageType.INFO) self.user = user self.conn = None self.local_shares_type = None self.refreshing = True # selected_folder is the current selected folder self.selected_folder = None # queued_folder is a folder that should be opened once the share has loaded self.queued_folder = None self.search_list = [] self.query = None self.search_position = 0 self.selected_files = [] self.shares = [] # Iters for current DirStore self.directories = {} # Iters for current FileStore self.files = {} self.totalsize = 0 self.dir_store = Gtk.TreeStore(str, str) cols = initialise_columns( None, self.FolderTreeView, ["folders", _("Folders"), -1, "text", None, None] # 0 ) cols["folders"].set_sort_column_id(0) self.popup_menu_users = PopupMenu(self.frame, False) self.popup_menu_users2 = PopupMenu(self.frame, False) self.popup_menu_users_tab = PopupMenu(self.frame) for menu in (self.popup_menu_users, self.popup_menu_users2, self.popup_menu_users_tab): menu.setup_user_menu(user) menu.get_items()[_("Brow_se Files")].set_visible(False) menu.append_item(("", None)) menu.append_item(("#" + _("_Save Shares List To Disk"), self.on_save)) menu.append_item(("#" + _("Close All Tabs"), menu.on_close_all_tabs, self.userbrowses)) menu.append_item(("#" + _("_Close Tab"), self.on_close)) self.popup_menu_downloads_folders = PopupMenu(self.frame, False) self.popup_menu_downloads_folders.setup( ("#" + _("_Download Folder"), self.on_download_directory), ("#" + _("Download Folder _To..."), self.on_download_directory_to), ("#" + _("Download _Recursive"), self.on_download_directory_recursive), ("#" + _("Download R_ecursive To..."), self.on_download_directory_recursive_to) ) self.popup_menu_downloads_files = PopupMenu(self.frame, False) self.popup_menu_downloads_files.setup( ("#" + _("_Download File(s)"), self.on_download_files), ("#" + _("Download _To..."), self.on_download_files_to), ("", None), ("#" + _("_Download Folder"), self.on_download_directory), ("#" + _("Download Folder _To..."), self.on_download_directory_to), ("#" + _("Download _Recursive"), self.on_download_directory_recursive), ("#" + _("Download R_ecursive To..."), self.on_download_directory_recursive_to) ) self.popup_menu_uploads_folders = PopupMenu(self.frame, False) self.popup_menu_uploads_folders.setup( ("#" + _("Upload Folder To..."), self.on_upload_directory_to), ("#" + _("Upload Folder Recursive To..."), self.on_upload_directory_recursive_to) ) self.popup_menu_uploads_files = PopupMenu(self.frame, False) self.popup_menu_uploads_files.setup( ("#" + _("Upload Folder To..."), self.on_upload_directory_to), ("#" + _("Upload Folder Recursive To..."), self.on_upload_directory_recursive_to), ("#" + _("Up_load File(s)"), self.on_upload_files) ) self.folder_popup_menu = PopupMenu(self.frame) if user == self.frame.np.config.sections["server"]["login"]: self.folder_popup_menu.setup( ("#" + _("_Download Folder"), self.on_download_directory), ("#" + _("Download Folder _To..."), self.on_download_directory_to), ("#" + _("Download _Recursive"), self.on_download_directory_recursive), ("#" + _("Download R_ecursive To..."), self.on_download_directory_recursive_to), ("", None), ("#" + _("Upload Folder To..."), self.on_upload_directory_to), ("#" + _("Upload Folder Recursive To..."), self.on_upload_directory_recursive_to), ("", None), ("#" + _("Open in File _Manager"), self.on_file_manager), ("", None), ("#" + _("Copy _Folder Path"), self.on_copy_file_path, False), ("#" + _("Copy _URL"), self.on_copy_dir_url), ("", None), (1, _("User"), self.popup_menu_users, self.on_popup_menu_folder_user) ) else: self.folder_popup_menu.setup( ("#" + _("_Download Folder"), self.on_download_directory), ("#" + _("Download Folder _To..."), self.on_download_directory_to), ("#" + _("Download _Recursive"), self.on_download_directory_recursive), ("#" + _("Download R_ecursive To..."), self.on_download_directory_recursive_to), ("", None), ("#" + _("Copy _Folder Path"), self.on_copy_file_path, False), ("#" + _("Copy _URL"), self.on_copy_dir_url), ("", None), (1, _("User"), self.popup_menu_users, self.on_popup_menu_folder_user) ) self.FolderTreeView.get_selection().connect("changed", self.on_select_dir) self.file_store = Gtk.ListStore( str, # (0) file name str, # (1) hsize str, # (2) hbitrate str, # (3) hlength GObject.TYPE_UINT64, # (4) size GObject.TYPE_UINT64, # (5) bitrate GObject.TYPE_UINT64 # (6) length ) self.FileTreeView.set_model(self.file_store) cols = initialise_columns( "user_browse", self.FileTreeView, ["filename", _("Filename"), 600, "text", None, None], ["size", _("Size"), 100, "number", None, None], ["bitrate", _("Bitrate"), 100, "number", None, None], ["length", _("Length"), 100, "number", None, None] ) cols["filename"].set_sort_column_id(0) cols["size"].set_sort_column_id(4) cols["bitrate"].set_sort_column_id(5) cols["length"].set_sort_column_id(6) self.file_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.file_popup_menu = PopupMenu(self.frame) if user == self.frame.np.config.sections["server"]["login"]: self.file_popup_menu.setup( ("#" + "selected_files", None), ("", None), (1, _("Download"), self.popup_menu_downloads_files, None), (1, _("Upload"), self.popup_menu_uploads_files, None), ("", None), ("#" + _("Send to _Player"), self.on_play_files), ("#" + _("Open in File _Manager"), self.on_file_manager), ("#" + _("File _Properties"), self.on_file_properties), ("", None), ("#" + _("Copy _File Path"), self.on_copy_file_path, True), ("#" + _("Copy _URL"), self.on_copy_url), ("", None), (1, "User", self.popup_menu_users2, self.on_popup_menu_file_user) ) else: self.file_popup_menu.setup( ("#" + "selected_files", None), ("", None), (1, _("Download"), self.popup_menu_downloads_files, None), ("", None), ("#" + _("File _Properties"), self.on_file_properties), ("", None), ("#" + _("Copy _File Path"), self.on_copy_file_path, True), ("#" + _("Copy _URL"), self.on_copy_url), ("", None), (1, "User", self.popup_menu_users2, self.on_popup_menu_file_user) ) self.update_visuals() for name, object in self.__dict__.items(): if isinstance(object, PopupMenu): object.set_user(self.user)
def __init__(self, searches, text, id, mode, remember, showtab): self.searches = searches self.frame = searches.frame # Build the window load_ui_elements(self, os.path.join(self.frame.gui_dir, "ui", "search.ui")) self.text = text self.searchterm_words_include = [ p for p in text.lower().split() if not p.startswith('-') ] self.searchterm_words_ignore = [ p[1:] for p in text.lower().split() if p.startswith('-') and len(p) > 1 ] self.id = id self.mode = mode self.remember = remember self.showtab = showtab self.usersiters = {} self.directoryiters = {} self.users = set() self.all_data = [] self.filters = None self.resultslimit = 2000 self.numvisibleresults = 0 self.operators = { '<': operator.lt, '<=': operator.le, '==': operator.eq, '!=': operator.ne, '>=': operator.ge, '>': operator.gt } if mode != "global": self.RememberCheckButton.set_sensitive(False) self.RememberCheckButton.set_active(remember) """ Columns """ self.ResultsList.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.ResultsList.set_enable_tree_lines(True) self.ResultsList.set_headers_clickable(True) self.ResultsList.set_rubber_banding(True) self.resultsmodel = Gtk.TreeStore( GObject.TYPE_UINT64, # (0) num str, # (1) user GObject.TYPE_OBJECT, # (2) flag str, # (3) immediatedl str, # (4) h_speed str, # (5) h_queue str, # (6) directory str, # (7) filename str, # (8) h_size str, # (9) h_bitrate str, # (10) length GObject.TYPE_UINT64, # (11) bitrate str, # (12) fullpath str, # (13) country GObject.TYPE_UINT64, # (14) size GObject.TYPE_UINT64, # (15) speed GObject.TYPE_UINT64 # (16) queue ) widths = self.frame.np.config.sections["columns"]["filesearch_widths"] cols = initialise_columns( self.ResultsList, [_("ID"), widths[0], "text", self.cell_data_func], [_("User"), widths[1], "text", self.cell_data_func], [_("Country"), widths[2], "pixbuf"], [ _("Immediate Download"), widths[3], "center", self.cell_data_func ], [_("Speed"), widths[4], "number", self.cell_data_func], [_("In Queue"), widths[5], "center", self.cell_data_func], [_("Folder"), widths[6], "text", self.cell_data_func], [_("Filename"), widths[7], "text", self.cell_data_func], [_("Size"), widths[8], "number", self.cell_data_func], [_("Bitrate"), widths[9], "number", self.cell_data_func], [_("Length"), widths[10], "number", self.cell_data_func]) self.col_num, self.col_user, self.col_country, self.col_immediate, self.col_speed, self.col_queue, self.col_directory, self.col_file, self.col_size, self.col_bitrate, self.col_length = cols hide_columns( cols, self.frame.np.config.sections["columns"]["filesearch_columns"]) self.col_num.set_sort_column_id(0) self.col_user.set_sort_column_id(1) self.col_country.set_sort_column_id(13) self.col_immediate.set_sort_column_id(3) self.col_speed.set_sort_column_id(15) self.col_queue.set_sort_column_id(16) self.col_directory.set_sort_column_id(6) self.col_file.set_sort_column_id(7) self.col_size.set_sort_column_id(14) self.col_bitrate.set_sort_column_id(11) self.col_length.set_sort_column_id(10) self.col_country.get_widget().hide() self.ResultsList.set_model(self.resultsmodel) self.ResultsList.connect("button_press_event", self.on_list_clicked) self.ResultsList.connect("key-press-event", self.on_key_press_event) self.update_visuals() """ Filters """ self.filter_bitrate_model = Gtk.ListStore(GObject.TYPE_STRING) self.FilterBitrate.set_model(self.filter_bitrate_model) self.FilterBitrate.set_entry_text_column(0) self.filter_size_model = Gtk.ListStore(GObject.TYPE_STRING) self.FilterSize.set_model(self.filter_size_model) self.FilterSize.set_entry_text_column(0) self.filter_country_model = Gtk.ListStore(GObject.TYPE_STRING) self.FilterCountry.set_model(self.filter_country_model) self.FilterCountry.set_entry_text_column(0) self.filter_in_model = Gtk.ListStore(GObject.TYPE_STRING) self.FilterIn.set_model(self.filter_in_model) self.FilterIn.set_entry_text_column(0) self.filter_out_model = Gtk.ListStore(GObject.TYPE_STRING) self.FilterOut.set_model(self.filter_out_model) self.FilterOut.set_entry_text_column(0) self.populate_filters() self.FilterSize.clear() sizecell = Gtk.CellRendererText() sizecell.set_property("xalign", 1) self.FilterSize.pack_start(sizecell, True) self.FilterSize.add_attribute(sizecell, "text", 0) self.FilterBitrate.clear() bit_cell = Gtk.CellRendererText() bit_cell.set_property("xalign", 1) self.FilterBitrate.pack_start(bit_cell, True) self.FilterBitrate.add_attribute(bit_cell, "text", 0) self.FilterIn.connect("changed", self.on_filter_changed) self.FilterOut.connect("changed", self.on_filter_changed) self.FilterSize.connect("changed", self.on_filter_changed) self.FilterBitrate.connect("changed", self.on_filter_changed) self.FilterCountry.connect("changed", self.on_filter_changed) self.FilterIn.get_child().connect("activate", self.on_refilter) self.FilterOut.get_child().connect("activate", self.on_refilter) self.FilterSize.get_child().connect("activate", self.on_refilter) self.FilterBitrate.get_child().connect("activate", self.on_refilter) self.FilterCountry.get_child().connect("activate", self.on_refilter) """ Popup """ self.popup_menu_users = PopupMenu(self.frame, False) self.popup_menu = popup = PopupMenu(self.frame) popup.setup( ("#" + _("_Download File(s)"), self.on_download_files), ("#" + _("Download File(s) _To..."), self.on_download_files_to), ("#" + _("Download _Folder(s)"), self.on_download_folders), ("#" + _("Download F_older(s) To..."), self.on_download_folders_to), ("#" + _("_Browse Folder"), self.on_browse_folder), ("#" + _("File _Properties"), self.on_file_properties), ("", None), ("#" + _("Copy _File Path"), self.on_copy_file_path), ("#" + _("Copy _URL"), self.on_copy_url), ("#" + _("Copy Folder U_RL"), self.on_copy_dir_url), ("", None), (1, _("User(s)"), self.popup_menu_users, self.on_popup_menu_users)) """ Grouping """ self.ResultGrouping.set_active( self.frame.np.config.sections["searches"]["group_searches"]) self.ExpandButton.set_active( self.frame.np.config.sections["searches"]["expand_searches"])
def __init__(self, frame, type): self.frame = frame self.type = type load_ui_elements(self, os.path.join(self.frame.gui_dir, "ui", type + "s.ui")) self.frame.__dict__[type + "svbox"].add(self.Main) self.widget = widget = self.__dict__[type.title() + "List"] self.last_ui_update = self.last_save = time() self.list = [] self.users = {} self.paths = {} # Status list self.statuses = {} self.statuses["Waiting for download"] = _("Waiting for download") self.statuses["Requesting file"] = _("Requesting file") self.statuses["Initializing transfer"] = _("Initializing transfer") self.statuses["Cannot connect"] = _("Cannot connect") self.statuses["Waiting for peer to connect"] = _( "Waiting for peer to connect") self.statuses["Connecting"] = _("Connecting") self.statuses["Getting address"] = _("Getting address") self.statuses["Getting status"] = _("Getting status") self.statuses["Queued"] = _("Queued") self.statuses["User logged off"] = _("User logged off") self.statuses["Aborted"] = _("Aborted") self.statuses["Finished"] = _("Finished") self.statuses["Paused"] = _("Paused") self.statuses["Transferring"] = _("Transferring") self.statuses["Filtered"] = _("Filtered") self.statuses["Connection closed by peer"] = _( "Connection closed by peer") self.statuses["File not shared"] = _("File not shared") self.statuses["File not shared."] = _( "File not shared" ) # The official client sends a variant containing a dot self.statuses["Establishing connection"] = _("Establishing connection") self.statuses["Download directory error"] = _( "Download directory error") self.statuses["Local file error"] = _("Local file error") self.statuses["Remote file error"] = _("Remote file error") # String templates self.extension_list_template = _("All %(ext)s") self.files_template = _("%(number)2s files ") self.transfersmodel = Gtk.TreeStore( str, # (0) user str, # (1) path str, # (2) file name str, # (3) status str, # (4) hqueue position GObject.TYPE_UINT64, # (5) percent str, # (6) hsize str, # (7) hspeed str, # (8) htime elapsed str, # (9) time left str, # (10) path str, # (11) status (non-translated) GObject.TYPE_UINT64, # (12) size GObject.TYPE_UINT64, # (13) current bytes GObject.TYPE_UINT64, # (14) speed GObject.TYPE_UINT64, # (15) time elapsed GObject.TYPE_UINT64, # (16) file count GObject.TYPE_UINT64, # (17) queue position ) self.column_numbers = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 ] self.cols = cols = initialise_columns( type, widget, ["user", _("User"), 200, "text", None], ["path", _("Path"), 400, "text", None], ["filename", _("Filename"), 400, "text", None], ["status", _("Status"), 140, "text", None], ["queue_position", _("Queue Position"), 50, "number", None], ["percent", _("Percent"), 70, "progress", None], ["size", _("Size"), 170, "number", None], ["speed", _("Speed"), 90, "number", None], ["time_elapsed", _("Time Elapsed"), 140, "number", None], ["time_left", _("Time Left"), 140, "number", None], ) cols["user"].set_sort_column_id(0) cols["path"].set_sort_column_id(1) cols["filename"].set_sort_column_id(2) cols["status"].set_sort_column_id(11) cols["queue_position"].set_sort_column_id(17) cols["percent"].set_sort_column_id(5) cols["size"].set_sort_column_id(12) cols["speed"].set_sort_column_id(14) cols["time_elapsed"].set_sort_column_id(8) cols["time_left"].set_sort_column_id(9) widget.set_model(self.transfersmodel) self.group_dropdown = frame.__dict__["ToggleTree%ss" % self.type.title()] self.expand_button = frame.__dict__["Expand%ss" % self.type.title()] self.group_dropdown.connect("changed", self.on_toggle_tree) self.group_dropdown.set_active( frame.np.config.sections["transfers"]["group%ss" % self.type]) self.expand_button.connect("toggled", self.on_expand_tree) self.expand_button.set_active( frame.np.config.sections["transfers"]["%ssexpanded" % self.type]) self.update_visuals()
def __init__(self, searches, text, id, mode, remember, showtab): self.searches = searches self.frame = searches.frame # Build the window load_ui_elements(self, os.path.join(self.frame.gui_dir, "ui", "search.ui")) self.text = text self.searchterm_words_include = [ p for p in text.lower().split() if not p.startswith('-') ] self.searchterm_words_ignore = [ p[1:] for p in text.lower().split() if p.startswith('-') and len(p) > 1 ] self.id = id self.mode = mode self.remember = remember self.showtab = showtab self.usersiters = {} self.directoryiters = {} self.users = set() self.all_data = [] self.filters = None self.clearing_filters = False self.resultslimit = 2000 self.numvisibleresults = 0 self.active_filter_count = 0 self.operators = { '<': operator.lt, '<=': operator.le, '==': operator.eq, '!=': operator.ne, '>=': operator.ge, '>': operator.gt } if mode not in ("global", "wishlist"): self.RememberCheckButton.set_sensitive(False) self.RememberCheckButton.set_active(remember) """ Columns """ self.ResultsList.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.ResultsList.set_enable_tree_lines(True) self.ResultsList.set_headers_clickable(True) self.ResultsList.set_rubber_banding(True) self.resultsmodel = Gtk.TreeStore( GObject.TYPE_UINT64, # (0) num str, # (1) user GObject.TYPE_OBJECT, # (2) flag str, # (3) immediatedl str, # (4) h_speed str, # (5) h_queue str, # (6) directory str, # (7) filename str, # (8) h_size str, # (9) h_bitrate str, # (10) length GObject.TYPE_UINT64, # (11) bitrate str, # (12) fullpath str, # (13) country GObject.TYPE_UINT64, # (14) size GObject.TYPE_UINT64, # (15) speed GObject.TYPE_UINT64 # (16) queue ) self.cols = cols = initialise_columns( "file_search", self.ResultsList, ["id", _("ID"), 50, "text", self.cell_data_func, None], ["user", _("User"), 200, "text", self.cell_data_func, None], ["country", _("Country"), 25, "pixbuf", None, None], [ "immediate_download", _("Immediate Download"), 50, "center", self.cell_data_func, None ], ["speed", _("Speed"), 90, "number", self.cell_data_func, None], [ "in_queue", _("In Queue"), 90, "center", self.cell_data_func, None ], ["folder", _("Folder"), 400, "text", self.cell_data_func, None], [ "filename", _("Filename"), 400, "text", self.cell_data_func, None ], ["size", _("Size"), 100, "number", self.cell_data_func, None], [ "bitrate", _("Bitrate"), 100, "number", self.cell_data_func, None ], ["length", _("Length"), 0, "number", self.cell_data_func, None]) cols["id"].set_sort_column_id(0) cols["user"].set_sort_column_id(1) cols["country"].set_sort_column_id(13) cols["immediate_download"].set_sort_column_id(3) cols["speed"].set_sort_column_id(15) cols["in_queue"].set_sort_column_id(16) cols["folder"].set_sort_column_id(6) cols["filename"].set_sort_column_id(7) cols["size"].set_sort_column_id(14) cols["bitrate"].set_sort_column_id(11) cols["length"].set_sort_column_id(10) cols["country"].get_widget().hide() self.ResultsList.set_model(self.resultsmodel) self.update_visuals() """ Filters """ self.ShowFilters.set_active( self.frame.np.config.sections["searches"]["filters_visible"]) self.populate_filters() """ Popup """ self.popup_menu_users = PopupMenu(self.frame, False) self.popup_menu = popup = PopupMenu(self.frame) popup.setup( ("#" + _("_Download File(s)"), self.on_download_files), ("#" + _("Download File(s) _To..."), self.on_download_files_to), ("#" + _("Download _Folder(s)"), self.on_download_folders), ("#" + _("Download F_older(s) To..."), self.on_download_folders_to), ("#" + _("_Browse Folder"), self.on_browse_folder), ("#" + _("File _Properties"), self.on_file_properties), ("", None), ("#" + _("Copy _File Path"), self.on_copy_file_path), ("#" + _("Copy _URL"), self.on_copy_url), ("#" + _("Copy Folder U_RL"), self.on_copy_dir_url), ("", None), (1, _("User(s)"), self.popup_menu_users, self.on_popup_menu_users)) """ Grouping """ self.ResultGrouping.set_active( self.frame.np.config.sections["searches"]["group_searches"]) self.ExpandButton.set_active( self.frame.np.config.sections["searches"]["expand_searches"])
def __init__(self, frame): # Build the window self.frame = frame config = self.frame.np.config.sections load_ui_elements( self, os.path.join(self.frame.gui_dir, "ui", "buddylist.ui")) self.frame.userlistvbox = self.userlistvbox self.frame.UserListToolbar = self.UserListToolbar """ Columns """ self.usersmodel = Gtk.ListStore( GObject.TYPE_OBJECT, # (0) status icon GObject.TYPE_OBJECT, # (1) flag str, # (2) username str, # (3) hspeed str, # (4) hfile count bool, # (5) trusted bool, # (6) notify bool, # (7) privileged str, # (8) hlast seen str, # (9) comments GObject.TYPE_INT64, # (10) status GObject.TYPE_UINT64, # (11) speed GObject.TYPE_UINT64, # (12) file count int, # (13) last seen str # (14) country ) widths = self.frame.np.config.sections["columns"]["userlist_widths"] self.cols = cols = initialise_columns( self.UserListTree, [_("Status"), widths[0], "pixbuf"], [_("Country"), widths[1], "pixbuf"], [_("User"), widths[2], "text"], [_("Speed"), widths[3], "number"], [_("Files"), widths[4], "number"], [_("Trusted"), widths[5], "toggle"], [_("Notify"), widths[6], "toggle"], [_("Privileged"), widths[7], "toggle"], [_("Last seen"), widths[8], "text"], [_("Comments"), widths[9], "edit"]) self.col_status, self.col_country, self.col_user, self.col_speed, self.col_files, self.col_trusted, self.col_notify, self.col_privileged, self.col_last_seen, self.col_comments = cols hide_columns(cols, config["columns"]["userlist"]) self.col_status.set_sort_column_id(10) self.col_country.set_sort_column_id(14) self.col_user.set_sort_column_id(2) self.col_speed.set_sort_column_id(11) self.col_files.set_sort_column_id(12) self.col_trusted.set_sort_column_id(5) self.col_notify.set_sort_column_id(6) self.col_privileged.set_sort_column_id(7) self.col_last_seen.set_sort_column_id(13) self.col_comments.set_sort_column_id(9) self.col_status.get_widget().hide() self.col_country.get_widget().hide() if config["columns"]["hideflags"]: cols[1].set_visible(0) config["columns"]["userlist"][1] = 0 for render in self.col_trusted.get_cells(): render.connect('toggled', self.cell_toggle_callback, self.UserListTree, 5) for render in self.col_notify.get_cells(): render.connect('toggled', self.cell_toggle_callback, self.UserListTree, 6) for render in self.col_privileged.get_cells(): render.connect('toggled', self.cell_toggle_callback, self.UserListTree, 7) for render in self.col_comments.get_cells(): render.connect('edited', self.cell_edited_callback, self.UserListTree, 9) self.UserListTree.set_model(self.usersmodel) """ Buddy list """ for user in self.frame.np.config.sections["server"]["userlist"]: username, comment, notify, privileged, trusted, last_seen, country = user try: time_from_epoch = time.mktime( time.strptime(last_seen, "%m/%d/%Y %H:%M:%S")) except ValueError: last_seen = _("Never seen") time_from_epoch = 0 row = [ self.frame.get_status_image(0), self.frame.get_flag_image(country), username, "", "", trusted, notify, privileged, last_seen, comment, 0, 0, 0, time_from_epoch, country ] self.usersmodel.insert(0, row) self.usersmodel.set_sort_column_id(2, Gtk.SortType.ASCENDING) """ Popup """ self.popup_menu_private_rooms = PopupMenu(self.frame, False) self.popup_menu = popup = PopupMenu(frame) popup.setup( ("#" + _("Send _message"), popup.on_send_message), ("", None), ("#" + _("Show IP a_ddress"), popup.on_show_ip_address), ("#" + _("Get user i_nfo"), popup.on_get_user_info), ("#" + _("Brow_se files"), popup.on_browse_user), ("#" + _("Gi_ve privileges"), popup.on_give_privileges), ("$" + _("_Ban this user"), popup.on_ban_user), ("$" + _("_Ignore this user"), popup.on_ignore_user), ("", None), ("$" + _("_Online notify"), self.on_notify), ("$" + _("_Privileged"), self.on_privileged), ("$" + _("_Trusted"), self.on_trusted), ("", None), ("#" + _("Edit _comments"), self.on_edit_comments), ("#" + _("_Remove"), self.on_remove_user), (1, _("Private rooms"), self.popup_menu_private_rooms, popup.on_private_rooms, self.popup_menu_private_rooms)) items = self.popup_menu.get_children() self.menu_send_message = items[0] self.menu_show_ip_address = items[2] self.menu_get_user_info = items[3] self.menu_browse_user = items[4] self.menu_give_privileges = items[5] self.menu_ban_user = items[6] self.menu_ignore_user = items[7] self.menu_on_notify = items[9] self.menu_on_privileged = items[10] self.menu_on_trusted = items[11] self.menu_edit_comments = items[13] self.menu_remove_user = items[14] self.menu_private_rooms = items[15] self.UserListTree.connect("button_press_event", self.on_popup_menu) self.update_visuals()
def __init__(self, frame, widget, type): self.frame = frame self.widget = widget self.type = type self.last_ui_update = self.last_save = time() self.list = [] self.users = {} self.paths = {} # Status list self.statuses = {} self.statuses["Waiting for download"] = _("Waiting for download") self.statuses["Requesting file"] = _("Requesting file") self.statuses["Initializing transfer"] = _("Initializing transfer") self.statuses["Cannot connect"] = _("Cannot connect") self.statuses["Waiting for peer to connect"] = _("Waiting for peer to connect") self.statuses["Connecting"] = _("Connecting") self.statuses["Getting address"] = _("Getting address") self.statuses["Getting status"] = _("Getting status") self.statuses["Queued"] = _("Queued") self.statuses["User logged off"] = _("User logged off") self.statuses["Aborted"] = _("Aborted") self.statuses["Finished"] = _("Finished") self.statuses["Paused"] = _("Paused") self.statuses["Transferring"] = _("Transferring") self.statuses["Filtered"] = _("Filtered") self.statuses["Connection closed by peer"] = _("Connection closed by peer") self.statuses["File not shared"] = _("File not shared") self.statuses["File not shared."] = _("File not shared") # The official client sends a variant containing a dot self.statuses["Establishing connection"] = _("Establishing connection") self.statuses["Download directory error"] = _("Download directory error") self.statuses["Local file error"] = _("Local file error") self.statuses["Remote file error"] = _("Remote file error") # String templates self.extension_list_template = _("All %(ext)s") self.files_template = _("%(number)2s files ") widget.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) widget.set_enable_tree_lines(True) widget.set_rubber_banding(True) self.transfersmodel = Gtk.TreeStore( str, # (0) user str, # (1) path str, # (2) file name str, # (3) status str, # (4) hqueue position GObject.TYPE_UINT64, # (5) percent str, # (6) hsize str, # (7) hspeed str, # (8) htime elapsed str, # (9) time left str, # (10) path str, # (11) status (non-translated) GObject.TYPE_UINT64, # (12) size GObject.TYPE_UINT64, # (13) current bytes GObject.TYPE_UINT64, # (14) speed GObject.TYPE_UINT64, # (15) time elapsed GObject.TYPE_UINT64, # (16) file count GObject.TYPE_UINT64, # (17) queue position ) text_color = self.frame.np.config.sections["ui"]["search"] self.cols = cols = initialise_columns( type, widget, ["user", _("User"), 200, "text", None, (text_color, None)], ["path", _("Path"), 400, "text", None, (text_color, None)], ["filename", _("Filename"), 400, "text", None, (text_color, None)], ["status", _("Status"), 140, "text", None, (text_color, None)], ["queue_position", _("Queue Position"), 50, "number", None, (text_color, None)], ["percent", _("Percent"), 70, "progress", None, None], ["size", _("Size"), 170, "number", None, (text_color, None)], ["speed", _("Speed"), 90, "number", None, (text_color, None)], ["time_elapsed", _("Time Elapsed"), 140, "number", None, (text_color, None)], ["time_left", _("Time Left"), 0, "number", None, (text_color, None)], ) cols["user"].set_sort_column_id(0) cols["path"].set_sort_column_id(1) cols["filename"].set_sort_column_id(2) cols["status"].set_sort_column_id(11) cols["queue_position"].set_sort_column_id(17) cols["percent"].set_sort_column_id(5) cols["size"].set_sort_column_id(12) cols["speed"].set_sort_column_id(14) cols["time_elapsed"].set_sort_column_id(8) cols["time_left"].set_sort_column_id(9) widget.set_model(self.transfersmodel) widget.connect("button_press_event", self.on_list_clicked) widget.connect("popup_menu", self.on_popup_menu) widget.connect("touch_event", self.on_list_clicked) widget.connect("key-press-event", self.on_key_press_event) self.update_visuals()
def __init__(self, frame): # Build the window self.frame = frame config = self.frame.np.config.sections load_ui_elements(self, os.path.join(self.frame.gui_dir, "ui", "buddylist.ui")) """ Columns """ self.usersmodel = Gtk.ListStore( GObject.TYPE_OBJECT, # (0) status icon GObject.TYPE_OBJECT, # (1) flag str, # (2) username str, # (3) hspeed str, # (4) hfile count bool, # (5) trusted bool, # (6) notify bool, # (7) privileged str, # (8) hlast seen str, # (9) comments GObject.TYPE_INT64, # (10) status GObject.TYPE_UINT64, # (11) speed GObject.TYPE_UINT64, # (12) file count int, # (13) last seen str # (14) country ) self.cols = cols = initialise_columns( "buddy_list", self.UserListTree, ["status", _("Status"), 25, "pixbuf", None, None], ["country", _("Country"), 25, "pixbuf", None, None], ["user", _("User"), 250, "text", None, None], ["speed", _("Speed"), 150, "number", None, None], ["files", _("Files"), 150, "number", None, None], ["trusted", _("Trusted"), 0, "toggle", None, None], ["notify", _("Notify"), 0, "toggle", None, None], ["privileged", _("Privileged"), 0, "toggle", None, None], ["last_seen", _("Last seen"), 160, "text", None, None], ["comments", _("Comments"), 400, "edit", None, None] ) cols["status"].set_sort_column_id(10) cols["country"].set_sort_column_id(14) cols["user"].set_sort_column_id(2) cols["speed"].set_sort_column_id(11) cols["files"].set_sort_column_id(12) cols["trusted"].set_sort_column_id(5) cols["notify"].set_sort_column_id(6) cols["privileged"].set_sort_column_id(7) cols["last_seen"].set_sort_column_id(13) cols["comments"].set_sort_column_id(9) cols["status"].get_widget().hide() cols["country"].get_widget().hide() if config["columns"]["hideflags"]: cols["country"].set_visible(0) config["columns"]["buddy_list"]["country"]["visible"] = 0 for render in cols["trusted"].get_cells(): render.connect('toggled', self.cell_toggle_callback, self.UserListTree, 5) for render in cols["notify"].get_cells(): render.connect('toggled', self.cell_toggle_callback, self.UserListTree, 6) for render in cols["privileged"].get_cells(): render.connect('toggled', self.cell_toggle_callback, self.UserListTree, 7) for render in cols["comments"].get_cells(): render.connect('edited', self.cell_edited_callback, self.UserListTree, 9) self.UserListTree.set_model(self.usersmodel) """ Buddy list """ for user in self.frame.np.config.sections["server"]["userlist"]: try: username, comment, notify, privileged, trusted, last_seen, country = user except ValueError: # Invalid user row continue try: time_from_epoch = time.mktime(time.strptime(last_seen, "%m/%d/%Y %H:%M:%S")) except ValueError: last_seen = _("Never seen") time_from_epoch = 0 row = [ self.frame.get_status_image(0), self.frame.get_flag_image(country), username, "", "", trusted, notify, privileged, last_seen, comment, 0, 0, 0, time_from_epoch, country ] self.usersmodel.insert(0, row) self.usersmodel.set_sort_column_id(2, Gtk.SortType.ASCENDING) self.buddies_combo_entries = ( self.frame.UserSearchCombo, self.frame.PrivateChatCombo, self.frame.UserInfoCombo, self.frame.UserBrowseCombo ) self.buddies_combos_fill() """ Popup """ self.popup_menu_private_rooms = PopupMenu(self.frame, False) self.popup_menu = popup = PopupMenu(frame) popup.setup_user_menu() popup.get_items()[_("_Add User To List")].set_visible(False) popup.append_item(("", None)) popup.append_item(("$" + _("_Online Notify"), self.on_notify)) popup.append_item(("$" + _("_Privileged"), self.on_privileged)) popup.append_item(("$" + _("_Trusted"), self.on_trusted)) popup.append_item(("", None)) popup.append_item((1, _("Private Rooms"), self.popup_menu_private_rooms, popup.on_private_rooms, self.popup_menu_private_rooms)) popup.append_item(("#" + _("Edit _Comments"), self.on_edit_comments)) popup.append_item(("#" + _("_Remove"), self.on_remove_user)) self.update_visuals()
def __init__(self, frame, widget, type): self.frame = frame self.widget = widget self.type = type self.last_ui_update = self.last_save = time() self.list = None self.users = {} self.paths = {} # Status list self.statuses = {} self.statuses["Waiting for download"] = _("Waiting for download") self.statuses["Requesting file"] = _("Requesting file") self.statuses["Initializing transfer"] = _("Initializing transfer") self.statuses["Cannot connect"] = _("Cannot connect") self.statuses["Waiting for peer to connect"] = _( "Waiting for peer to connect") self.statuses["Connecting"] = _("Connecting") self.statuses["Getting address"] = _("Getting address") self.statuses["Getting status"] = _("Getting status") self.statuses["Queued"] = _("Queued") self.statuses["User logged off"] = _("User logged off") self.statuses["Aborted"] = _("Aborted") self.statuses["Finished"] = _("Finished") self.statuses["Paused"] = _("Paused") self.statuses["Transferring"] = _("Transferring") self.statuses["Filtered"] = _("Filtered") self.statuses["Connection closed by peer"] = _( "Connection closed by peer") self.statuses["File not shared"] = _("File not shared") self.statuses["File not shared."] = _( "File not shared" ) # The official client sends a variant containing a dot self.statuses["Establishing connection"] = _("Establishing connection") self.statuses["Download directory error"] = _( "Download directory error") self.statuses["Local file error"] = _("Local file error") self.statuses["Remote file error"] = _("Remote file error") # String templates self.extension_list_template = _("All %(ext)s") self.files_template = _("%(number)2s files ") widget.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) widget.set_enable_tree_lines(True) widget.set_rubber_banding(True) self.transfersmodel = Gtk.TreeStore( str, # (0) user str, # (1) path str, # (2) file name str, # (3) status str, # (4) hqueue position GObject.TYPE_UINT64, # (5) percent str, # (6) hsize str, # (7) hspeed str, # (8) htime elapsed str, # (9) time left str, # (10) path str, # (11) status (non-translated) GObject.TYPE_UINT64, # (12) size GObject.TYPE_UINT64, # (13) current bytes GObject.TYPE_UINT64, # (14) speed GObject.TYPE_UINT64, # (15) time elapsed GObject.TYPE_UINT64, # (16) file count GObject.TYPE_UINT64, # (17) queue position ) text_color = self.frame.np.config.sections["ui"]["search"] widths = self.frame.np.config.sections["columns"]["{}_widths".format( type)] self.cols = cols = initialise_columns( widget, [_("User"), widths[0], "text", None, (text_color, None)], [_("Path"), widths[1], "text", None, (text_color, None)], [_("Filename"), widths[2], "text", None, (text_color, None)], [_("Status"), widths[3], "text", None, (text_color, None)], [ _("Queue Position"), widths[4], "number", None, (text_color, None) ], [_("Percent"), widths[5], "progress"], [_("Size"), widths[6], "number", None, (text_color, None)], [_("Speed"), widths[7], "number", None, (text_color, None)], [_("Time elapsed"), widths[8], "number", None, (text_color, None)], [_("Time left"), widths[9], "number", None, (text_color, None)], ) self.col_user, self.col_path, self.col_filename, self.col_status, self.col_position, self.col_percent, self.col_human_size, self.col_human_speed, self.col_time_elapsed, self.col_time_left = cols hide_columns( cols, self.frame.np.config.sections["columns"][self.type + "_columns"]) self.col_user.set_sort_column_id(0) self.col_path.set_sort_column_id(1) self.col_filename.set_sort_column_id(2) self.col_status.set_sort_column_id(11) self.col_position.set_sort_column_id(17) self.col_percent.set_sort_column_id(5) self.col_human_size.set_sort_column_id(12) self.col_human_speed.set_sort_column_id(14) self.col_time_elapsed.set_sort_column_id(8) self.col_time_left.set_sort_column_id(9) widget.set_model(self.transfersmodel) widget.connect("button_press_event", self.on_popup_menu, "mouse") widget.connect("key-press-event", self.on_key_press_event) self.update_colours()
def __init__(self, frame, np): self.frame = frame self.np = np load_ui_elements(self, os.path.join(self.frame.gui_dir, "ui", "interests.ui")) self.likes = {} self.likes_model = Gtk.ListStore(str) self.likes_model.set_sort_column_id(0, Gtk.SortType.ASCENDING) cols = initialise_columns( self.LikesList, [_("I like") + ":", 0, "text"] ) cols[0].set_sort_column_id(0) self.LikesList.set_model(self.likes_model) self.til_popup_menu = popup = PopupMenu(self.frame) popup.setup( ("#" + _("_Remove this item"), self.on_remove_thing_i_like), ("#" + _("Re_commendations for this item"), self.on_recommend_item), ("", None), ("#" + _("_Search for this item"), self.on_recommend_search) ) self.LikesList.connect("button_press_event", self.on_popup_til_menu) self.dislikes = {} self.dislikes_model = Gtk.ListStore(str) self.dislikes_model.set_sort_column_id(0, Gtk.SortType.ASCENDING) cols = initialise_columns( self.DislikesList, [_("I dislike") + ":", 0, "text"] ) cols[0].set_sort_column_id(0) self.DislikesList.set_model(self.dislikes_model) self.tidl_popup_menu = popup = PopupMenu(self.frame) popup.setup( ("#" + _("_Remove this item"), self.on_remove_thing_i_dislike), ("", None), ("#" + _("_Search for this item"), self.on_recommend_search) ) self.DislikesList.connect("button_press_event", self.on_popup_tidl_menu) cols = initialise_columns( self.RecommendationsList, [_("Rating"), 0, "text"], [_("Item"), -1, "text"] ) cols[0].set_sort_column_id(2) cols[1].set_sort_column_id(1) self.recommendations_model = Gtk.ListStore( str, # (0) hrating str, # (1) item int # (2) rating ) self.RecommendationsList.set_model(self.recommendations_model) self.r_popup_menu = popup = PopupMenu(self.frame) popup.setup( ("$" + _("I _like this"), self.on_like_recommendation), ("$" + _("I _don't like this"), self.on_dislike_recommendation), ("#" + _("_Recommendations for this item"), self.on_recommend_recommendation), ("", None), ("#" + _("_Search for this item"), self.on_recommend_search) ) self.RecommendationsList.connect("button_press_event", self.on_popup_r_menu) cols = initialise_columns( self.UnrecommendationsList, [_("Rating"), 0, "text"], [_("Item"), -1, "text"] ) cols[0].set_sort_column_id(2) cols[1].set_sort_column_id(1) self.unrecommendations_model = Gtk.ListStore( str, # (0) hrating str, # (1) item int # (2) rating ) self.UnrecommendationsList.set_model(self.unrecommendations_model) self.ur_popup_menu = popup = PopupMenu(self.frame) popup.setup( ("$" + _("I _like this"), self.on_like_recommendation), ("$" + _("I _don't like this"), self.on_dislike_recommendation), ("#" + _("_Recommendations for this item"), self.on_recommend_recommendation), ("", None), ("#" + _("_Search for this item"), self.on_recommend_search) ) self.UnrecommendationsList.connect("button_press_event", self.on_popup_un_rec_menu) cols = initialise_columns( self.RecommendationUsersList, ["", 25, "pixbuf"], [_("User"), 100, "text"], [_("Speed"), 0, "text"], [_("Files"), 0, "text"], ) cols[0].set_sort_column_id(4) cols[1].set_sort_column_id(1) cols[2].set_sort_column_id(5) cols[3].set_sort_column_id(6) self.recommendation_users = {} self.recommendation_users_model = Gtk.ListStore( GObject.TYPE_OBJECT, # (0) status icon str, # (1) user str, # (2) hspeed str, # (3) hfiles GObject.TYPE_INT64, # (4) status GObject.TYPE_UINT64, # (5) speed GObject.TYPE_UINT64 # (6) file count ) self.RecommendationUsersList.set_model(self.recommendation_users_model) self.recommendation_users_model.set_sort_column_id(1, Gtk.SortType.ASCENDING) self.ru_popup_menu = popup = PopupMenu(self.frame) popup.setup( ("#" + _("Send _message"), popup.on_send_message), ("", None), ("#" + _("Show IP a_ddress"), popup.on_show_ip_address), ("#" + _("Get user i_nfo"), popup.on_get_user_info), ("#" + _("Brow_se files"), popup.on_browse_user), ("#" + _("Gi_ve privileges"), popup.on_give_privileges), ("", None), ("$" + _("_Add user to list"), popup.on_add_to_list), ("$" + _("_Ban this user"), popup.on_ban_user), ("$" + _("_Ignore this user"), popup.on_ignore_user) ) self.RecommendationUsersList.connect("button_press_event", self.on_popup_ru_menu) for thing in self.np.config.sections["interests"]["likes"]: self.likes[thing] = self.likes_model.append([thing]) for thing in self.np.config.sections["interests"]["dislikes"]: self.dislikes[thing] = self.dislikes_model.append([thing]) self.update_visuals()
def __init__(self, userinfos, user, conn): # Build the window builder = Gtk.Builder() builder.set_translation_domain('nicotine') builder.add_from_file( os.path.join(os.path.dirname(os.path.realpath(__file__)), "ui", "userinfo.ui")) self.user_info_tab = builder.get_object("UserInfoTab") for i in builder.get_objects(): try: self.__dict__[Gtk.Buildable.get_name(i)] = i except TypeError: pass self.user_info_tab.remove(self.Main) self.user_info_tab.destroy() builder.connect_signals(self) self.userinfos = userinfos self.frame = userinfos.frame self.frame.np.queue.put(slskmessages.UserInterests(user)) self.user = user self.conn = conn self._descr = "" self.image_pixbuf = None self.zoom_factor = 5 self.actual_zoom = 0 self.status = 0 self.hates_store = Gtk.ListStore(GObject.TYPE_STRING) self.Hates.set_model(self.hates_store) cols = initialise_columns(self.Hates, [_("Hates"), 0, "text", self.cell_data_func]) cols[0].set_sort_column_id(0) self.hates_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.likes_store = Gtk.ListStore(GObject.TYPE_STRING) self.Likes.set_model(self.likes_store) cols = initialise_columns(self.Likes, [_("Likes"), 0, "text", self.cell_data_func]) cols[0].set_sort_column_id(0) self.likes_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.tag_local = self.makecolour("chatremote") self.change_colours() self.likes_popup_menu = popup = PopupMenu(self.frame) popup.setup( ("$" + _("I _like this"), self.frame.on_like_recommendation), ("$" + _("I _don't like this"), self.frame.on_dislike_recommendation), ("", None), ("#" + _("_Search for this item"), self.frame.on_recommend_search)) self.Likes.connect("button_press_event", self.on_popup_likes_menu) self.hates_popup_menu = popup = PopupMenu(self.frame) popup.setup( ("$" + _("I _like this"), self.frame.on_like_recommendation), ("$" + _("I _don't like this"), self.frame.on_dislike_recommendation), ("", None), ("#" + _("_Search for this item"), self.frame.on_recommend_search)) self.Hates.connect("button_press_event", self.on_popup_hates_menu) self.image_menu = popup = PopupMenu(self.frame) popup.setup(("#" + _("Zoom 1:1"), self.make_zoom_normal), ("#" + _("Zoom In"), self.make_zoom_in), ("#" + _("Zoom Out"), self.make_zoom_out), ("", None), ("#" + _("Save Image"), self.on_save_picture))
def __init__(self, userinfos, user): self.userinfos = userinfos self.frame = userinfos.frame # Build the window load_ui_elements(self, os.path.join(self.frame.gui_dir, "ui", "userinfo.ui")) self.info_bar = InfoBar(self.InfoBar, Gtk.MessageType.INFO) self.frame.np.queue.put(slskmessages.UserInterests(user)) self.user = user self.conn = None self._descr = "" self.image_pixbuf = None self.zoom_factor = 5 self.actual_zoom = 0 self.status = 0 self.hates_store = Gtk.ListStore(str) self.Hates.set_model(self.hates_store) cols = initialise_columns( None, self.Hates, ["hates", _("Hates"), 0, "text", None]) cols["hates"].set_sort_column_id(0) self.hates_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.likes_store = Gtk.ListStore(str) self.Likes.set_model(self.likes_store) cols = initialise_columns( None, self.Likes, ["likes", _("Likes"), 0, "text", None]) cols["likes"].set_sort_column_id(0) self.likes_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.tag_local = self.descr.get_buffer().create_tag() self.update_visuals() self.user_popup = popup = PopupMenu(self.frame) popup.setup_user_menu(user) popup.get_items()[_("Show User I_nfo")].set_visible(False) popup.append_item(("", None)) popup.append_item(("#" + _("Close All Tabs"), popup.on_close_all_tabs, self.userinfos)) popup.append_item(("#" + _("_Close Tab"), self.on_close)) self.likes_popup_menu = popup = PopupMenu(self.frame) popup.setup(("$" + _("I _Like This"), self.frame.interests.on_like_recommendation), ("$" + _("I _Dislike This"), self.frame.interests.on_dislike_recommendation), ("", None), ("#" + _("_Search For Item"), self.frame.interests.on_recommend_search)) self.hates_popup_menu = popup = PopupMenu(self.frame) popup.setup(("$" + _("I _Like This"), self.frame.interests.on_like_recommendation), ("$" + _("I _Dislike This"), self.frame.interests.on_dislike_recommendation), ("", None), ("#" + _("_Search For Item"), self.frame.interests.on_recommend_search)) self.image_menu = popup = PopupMenu(self.frame) popup.setup(("#" + _("Zoom 1:1"), self.make_zoom_normal), ("#" + _("Zoom In"), self.make_zoom_in), ("#" + _("Zoom Out"), self.make_zoom_out), ("", None), ("#" + _("Save Picture"), self.on_save_picture))
def __init__(self, userbrowses, user, conn): # Build the window builder = Gtk.Builder() builder.set_translation_domain('nicotine') builder.add_from_file(os.path.join(os.path.dirname(os.path.realpath(__file__)), "ui", "userbrowse.ui")) self.user_browse_tab = builder.get_object("UserBrowseTab") for i in builder.get_objects(): try: self.__dict__[Gtk.Buildable.get_name(i)] = i except TypeError: pass self.user_browse_tab.remove(self.Main) self.user_browse_tab.destroy() builder.connect_signals(self) self.userbrowses = userbrowses self.frame = userbrowses.frame self.user = user self.conn = conn # selected_folder is the current selected folder self.selected_folder = None self.search_list = [] self.query = None self.search_position = 0 self.selected_files = [] self.shares = [] # Iters for current DirStore self.directories = {} # Iters for current FileStore self.files = {} self.totalsize = 0 self.dir_store = Gtk.TreeStore(str, str) self.FolderTreeView.set_headers_visible(True) self.FolderTreeView.set_enable_tree_lines(True) cols = initialise_columns( self.FolderTreeView, [_("Directories"), -1, "text", self.cell_data_func] # 0 ) cols[0].set_sort_column_id(0) self.popup_menu_users = PopupMenu(self.frame, False) self.popup_menu_users2 = PopupMenu(self.frame, False) for menu in [self.popup_menu_users, self.popup_menu_users2]: menu.setup( ("#" + _("Send _message"), menu.on_send_message), ("#" + _("Show IP a_ddress"), menu.on_show_ip_address), ("#" + _("Get user i_nfo"), menu.on_get_user_info), ("#" + _("Gi_ve privileges"), menu.on_give_privileges), ("", None), ("$" + _("_Add user to list"), menu.on_add_to_list), ("$" + _("_Ban this user"), menu.on_ban_user), ("$" + _("_Ignore this user"), menu.on_ignore_user) ) self.popup_menu_downloads_folders = PopupMenu(self.frame, False) self.popup_menu_downloads_folders.setup( ("#" + _("_Download directory"), self.on_download_directory), ("#" + _("Download directory _to..."), self.on_download_directory_to), ("#" + _("Download _recursive"), self.on_download_directory_recursive), ("#" + _("Download r_ecursive to..."), self.on_download_directory_recursive_to) ) self.popup_menu_downloads_files = PopupMenu(self.frame, False) self.popup_menu_downloads_files.setup( ("#" + _("_Download file(s)"), self.on_download_files), ("#" + _("Download _to..."), self.on_download_files_to), ("", None), ("#" + _("_Download directory"), self.on_download_directory), ("#" + _("Download directory _to..."), self.on_download_directory_to), ("#" + _("Download _recursive"), self.on_download_directory_recursive), ("#" + _("Download r_ecursive to..."), self.on_download_directory_recursive_to) ) self.popup_menu_uploads_folders = PopupMenu(self.frame, False) self.popup_menu_uploads_folders.setup( ("#" + _("Upload Directory to..."), self.on_upload_directory_to), ("#" + _("Upload Directory recursive to..."), self.on_upload_directory_recursive_to) ) self.popup_menu_uploads_files = PopupMenu(self.frame, False) self.popup_menu_uploads_files.setup( ("#" + _("Upload Directory to..."), self.on_upload_directory_to), ("#" + _("Upload Directory recursive to..."), self.on_upload_directory_recursive_to), ("#" + _("Up_load file(s)"), self.on_upload_files) ) 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.on_popup_menu_folder_user), ("", None), (1, _("Download"), self.popup_menu_downloads_folders, None), (1, _("Upload"), self.popup_menu_uploads_folders, None), ("", None), ("#" + _("Copy _URL"), self.on_copy_dir_url), ("#" + _("Open in File Manager"), self.on_file_manager) ) else: self.folder_popup_menu.setup( ("USERMENU", _("User"), self.popup_menu_users, self.on_popup_menu_folder_user), ("", None), (1, _("Download"), self.popup_menu_downloads_folders, None), ("", None), ("#" + _("Copy _URL"), self.on_copy_dir_url) ) self.FolderTreeView.connect("button_press_event", self.on_folder_clicked) self.FolderTreeView.get_selection().connect("changed", self.on_select_dir) # Filename, HSize, Bitrate, HLength, Size, Length, RawFilename self.file_store = Gtk.ListStore(str, str, str, str, GObject.TYPE_INT64, int, str) self.FileTreeView.set_model(self.file_store) widths = self.frame.np.config.sections["columns"]["userbrowse_widths"] cols = initialise_columns( self.FileTreeView, [_("Filename"), widths[0], "text", self.cell_data_func], [_("Size"), widths[1], "number", self.cell_data_func], [_("Bitrate"), widths[2], "number", self.cell_data_func], [_("Length"), widths[3], "number", self.cell_data_func] ) 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.file_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) hide_columns(cols, self.frame.np.config.sections["columns"]["userbrowse"]) self.FileTreeView.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.FileTreeView.set_headers_clickable(True) self.FileTreeView.set_rubber_banding(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.on_popup_menu_file_user), ("", None), (1, _("Download"), self.popup_menu_downloads_files, None), (1, _("Upload"), self.popup_menu_uploads_files, None), ("", None), ("#" + _("Copy _URL"), self.on_copy_url), ("#" + _("Send to _player"), self.on_play_files), ("#" + _("Open in File Manager"), self.on_file_manager) ) else: self.file_popup_menu.setup( ("USERMENU", "User", self.popup_menu_users2, self.on_popup_menu_file_user), ("", None), (1, _("Download"), self.popup_menu_downloads_files, None), ("", None), ("#" + _("Copy _URL"), self.on_copy_url) ) self.FileTreeView.connect("button_press_event", self.on_file_clicked) self.change_colours() for name, object in list(self.__dict__.items()): if isinstance(object, PopupMenu): object.set_user(self.user)
def __init__(self, userbrowses, user): self.userbrowses = userbrowses self.frame = userbrowses.frame # Build the window load_ui_elements( self, os.path.join(self.frame.gui_dir, "ui", "userbrowse.ui")) self.info_bar = InfoBar(self.InfoBar, Gtk.MessageType.INFO) self.user = user self.conn = None self.finished = False # selected_folder is the current selected folder self.selected_folder = None # queued_folder is a folder that should be opened once the share has loaded self.queued_folder = None self.search_list = [] self.query = None self.search_position = 0 self.selected_files = [] self.shares = [] # Iters for current DirStore self.directories = {} # Iters for current FileStore self.files = {} self.totalsize = 0 self.dir_store = Gtk.TreeStore(str, str) self.FolderTreeView.set_headers_visible(True) self.FolderTreeView.set_enable_tree_lines(True) cols = initialise_columns( self.FolderTreeView, [_("Directories"), -1, "text"] # 0 ) cols[0].set_sort_column_id(0) self.popup_menu_users = PopupMenu(self.frame, False) self.popup_menu_users2 = PopupMenu(self.frame, False) self.popup_menu_users_tab = PopupMenu(self.frame) for menu in (self.popup_menu_users, self.popup_menu_users2, self.popup_menu_users_tab): menu.setup(("#" + _("Send _message"), menu.on_send_message), ("#" + _("Show IP a_ddress"), menu.on_show_ip_address), ("#" + _("Get user i_nfo"), menu.on_get_user_info), ("#" + _("Gi_ve privileges"), menu.on_give_privileges), ("#" + _("Client Version"), menu.on_version), ("", None), ("#" + _("_Save shares list to disk"), self.on_save), ("", None), ("$" + _("_Add user to list"), menu.on_add_to_list), ("$" + _("_Ban this user"), menu.on_ban_user), ("$" + _("_Ignore this user"), menu.on_ignore_user), ("", None), ("#" + _("_Close this tab"), self.on_close)) self.popup_menu_downloads_folders = PopupMenu(self.frame, False) self.popup_menu_downloads_folders.setup( ("#" + _("_Download Folder"), self.on_download_directory), ("#" + _("Download Folder _To..."), self.on_download_directory_to), ("#" + _("Download _Recursive"), self.on_download_directory_recursive), ("#" + _("Download R_ecursive To..."), self.on_download_directory_recursive_to)) self.popup_menu_downloads_files = PopupMenu(self.frame, False) self.popup_menu_downloads_files.setup( ("#" + _("_Download File(s)"), self.on_download_files), ("#" + _("Download _To..."), self.on_download_files_to), ("", None), ("#" + _("_Download Folder"), self.on_download_directory), ("#" + _("Download Folder _To..."), self.on_download_directory_to), ("#" + _("Download _Recursive"), self.on_download_directory_recursive), ("#" + _("Download R_ecursive To..."), self.on_download_directory_recursive_to)) self.popup_menu_uploads_folders = PopupMenu(self.frame, False) self.popup_menu_uploads_folders.setup( ("#" + _("Upload Folder To..."), self.on_upload_directory_to), ("#" + _("Upload Folder Recursive To..."), self.on_upload_directory_recursive_to)) self.popup_menu_uploads_files = PopupMenu(self.frame, False) self.popup_menu_uploads_files.setup( ("#" + _("Upload Folder To..."), self.on_upload_directory_to), ("#" + _("Upload Folder Recursive To..."), self.on_upload_directory_recursive_to), ("#" + _("Up_load File(s)"), self.on_upload_files)) self.folder_popup_menu = PopupMenu(self.frame) if user == self.frame.np.config.sections["server"]["login"]: self.folder_popup_menu.setup( ("USERMENU", _("User"), self.popup_menu_users, self.on_popup_menu_folder_user), ("", None), (1, _("Download"), self.popup_menu_downloads_folders, None), (1, _("Upload"), self.popup_menu_uploads_folders, None), ("", None), ("#" + _("Open in File _Manager"), self.on_file_manager), ("", None), ("#" + _("Copy _Folder Path"), self.on_copy_file_path, False), ("#" + _("Copy _URL"), self.on_copy_dir_url), ) else: self.folder_popup_menu.setup( ("USERMENU", _("User"), self.popup_menu_users, self.on_popup_menu_folder_user), ("", None), (1, _("Download"), self.popup_menu_downloads_folders, None), ("", None), ("#" + _("Copy _Folder Path"), self.on_copy_file_path, False), ("#" + _("Copy _URL"), self.on_copy_dir_url)) self.FolderTreeView.connect("button_press_event", self.on_folder_clicked) self.FolderTreeView.get_selection().connect("changed", self.on_select_dir) # Filename, HSize, Bitrate, HLength, Size, Length, RawFilename self.file_store = Gtk.ListStore(str, str, str, str, GObject.TYPE_INT64, int, str) self.FileTreeView.set_model(self.file_store) widths = self.frame.np.config.sections["columns"]["userbrowse_widths"] cols = initialise_columns(self.FileTreeView, [_("Filename"), widths[0], "text"], [_("Size"), widths[1], "number"], [_("Bitrate"), widths[2], "number"], [_("Length"), widths[3], "number"]) 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.file_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) hide_columns(cols, self.frame.np.config.sections["columns"]["userbrowse"]) self.FileTreeView.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.FileTreeView.set_headers_clickable(True) self.FileTreeView.set_rubber_banding(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.on_popup_menu_file_user), ("", None), (1, _("Download"), self.popup_menu_downloads_files, None), (1, _("Upload"), self.popup_menu_uploads_files, None), ("", None), ("#" + _("Send to _Player"), self.on_play_files), ("#" + _("Open in File _Manager"), self.on_file_manager), ("#" + _("File _Properties"), self.on_file_properties), ("", None), ("#" + _("Copy _File Path"), self.on_copy_file_path, True), ("#" + _("Copy _URL"), self.on_copy_url)) else: self.file_popup_menu.setup( ("USERMENU", "User", self.popup_menu_users2, self.on_popup_menu_file_user), ("", None), (1, _("Download"), self.popup_menu_downloads_files, None), ("", None), ("#" + _("File _Properties"), self.on_file_properties), ("", None), ("#" + _("Copy _File Path"), self.on_copy_file_path, True), ("#" + _("Copy _URL"), self.on_copy_url)) self.FolderTreeView.connect("key-press-event", self.on_key_press_event) self.FileTreeView.connect("button_press_event", self.on_file_clicked) self.FileTreeView.connect("key-press-event", self.on_key_press_event) self.update_visuals() for name, object in self.__dict__.items(): if isinstance(object, PopupMenu): object.set_user(self.user)
def __init__(self, userinfos, user): self.userinfos = userinfos self.frame = userinfos.frame # Build the window load_ui_elements(self, os.path.join(self.frame.gui_dir, "ui", "userinfo.ui")) self.info_bar = InfoBar(self.InfoBar, Gtk.MessageType.INFO) self.frame.np.queue.put(slskmessages.UserInterests(user)) self.user = user self.conn = None self._descr = "" self.image_pixbuf = None self.zoom_factor = 5 self.actual_zoom = 0 self.status = 0 self.hates_store = Gtk.ListStore(str) self.Hates.set_model(self.hates_store) cols = initialise_columns(self.Hates, [_("Hates"), 0, "text"]) cols[0].set_sort_column_id(0) self.hates_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.likes_store = Gtk.ListStore(str) self.Likes.set_model(self.likes_store) cols = initialise_columns(self.Likes, [_("Likes"), 0, "text"]) cols[0].set_sort_column_id(0) self.likes_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.tag_local = self.descr.get_buffer().create_tag() self.update_visuals() self.user_popup = popup = PopupMenu(self.frame) popup.setup(("#" + _("Send _message"), popup.on_send_message), ("#" + _("Show IP a_ddress"), popup.on_show_ip_address), ("#" + _("Get user i_nfo"), popup.on_get_user_info), ("#" + _("Brow_se files"), popup.on_browse_user), ("#" + _("Gi_ve privileges"), popup.on_give_privileges), ("#" + _("Client Version"), popup.on_version), ("", None), ("$" + _("_Add user to list"), popup.on_add_to_list), ("$" + _("_Ban this user"), popup.on_ban_user), ("$" + _("_Ignore this user"), popup.on_ignore_user), ("", None), ("#" + _("_Close this tab"), self.on_close)) popup.set_user(user) self.likes_popup_menu = popup = PopupMenu(self.frame) popup.setup(("$" + _("I _like this"), self.frame.interests.on_like_recommendation), ("$" + _("I _don't like this"), self.frame.interests.on_dislike_recommendation), ("", None), ("#" + _("_Search for this item"), self.frame.interests.on_recommend_search)) self.Likes.connect("button_press_event", self.on_popup_likes_menu) self.hates_popup_menu = popup = PopupMenu(self.frame) popup.setup(("$" + _("I _like this"), self.frame.interests.on_like_recommendation), ("$" + _("I _don't like this"), self.frame.interests.on_dislike_recommendation), ("", None), ("#" + _("_Search for this item"), self.frame.interests.on_recommend_search)) self.Hates.connect("button_press_event", self.on_popup_hates_menu) self.image_menu = popup = PopupMenu(self.frame) popup.setup(("#" + _("Zoom 1:1"), self.make_zoom_normal), ("#" + _("Zoom In"), self.make_zoom_in), ("#" + _("Zoom Out"), self.make_zoom_out), ("", None), ("#" + _("Save Picture"), self.on_save_picture))