Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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()
Ejemplo n.º 8
0
    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)
        )
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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"])
Ejemplo n.º 11
0
    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()
Ejemplo n.º 12
0
    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"])
Ejemplo n.º 13
0
    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()
Ejemplo n.º 14
0
    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()
Ejemplo n.º 15
0
    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()
Ejemplo n.º 16
0
    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()
Ejemplo n.º 17
0
    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()
Ejemplo n.º 18
0
    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))
Ejemplo n.º 19
0
    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))
Ejemplo n.º 20
0
    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)
Ejemplo n.º 21
0
    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)
Ejemplo n.º 22
0
    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))