예제 #1
0
 def get_playlist_headers(self):
     """
         Return playlist headers
         @return items as [(int, str)]
     """
     lists = ShownPlaylists.get()
     if lists:
         lists.append((Type.SEPARATOR, "", ""))
     return lists
예제 #2
0
 def get_playlist_headers(self):
     """
         Return playlist headers
         @return items as [(int, str)]
     """
     lists = ShownPlaylists.get()
     if lists and\
             App().settings.get_enum("sidebar-content") !=\
             SidebarContent.DEFAULT:
         lists.append((Type.SEPARATOR, "", ""))
     return lists
예제 #3
0
    def __init__(self, widget, mask, header=False):
        """
            Init menu
            @param widget as Gtk.Widget
            @param mask as SelectionListMask
            @param header as bool
        """
        Gio.Menu.__init__(self)
        self.__widget = widget
        self.__mask = mask

        if header:
            from lollypop.menu_header import MenuHeader
            if mask & SelectionListMask.PLAYLISTS:
                label = _("Playlists")
                icon_name = "emblem-documents-symbolic"
            else:
                label = _("Sidebar")
                icon_name = "org.gnome.Lollypop-sidebar-symbolic"
            self.append_item(MenuHeader(label, icon_name))

        # Options
        if not App().window.folded and\
                not mask & SelectionListMask.PLAYLISTS:
            options_menu = Gio.Menu()
            action = Gio.SimpleAction.new_stateful(
                "show_label", None,
                App().settings.get_value("show-sidebar-labels"))
            action.connect("change-state", self.__on_show_label_change_state)
            App().add_action(action)
            options_menu.append(_("Show text"), "app.show_label")
            self.append_section(_("Options"), options_menu)
        # Shown menu
        shown_menu = Gio.Menu()
        if mask & SelectionListMask.PLAYLISTS:
            lists = ShownPlaylists.get(True)
            wanted = App().settings.get_value("shown-playlists")
        else:
            mask |= SelectionListMask.COMPILATIONS
            lists = ShownLists.get(mask, True)
            wanted = App().settings.get_value("shown-album-lists")
        for item in lists:
            if item[0] == Type.SEPARATOR:
                continue
            exists = item[0] in wanted
            encoded = sha256(item[1].encode("utf-8")).hexdigest()
            action = Gio.SimpleAction.new_stateful(
                encoded, None, GLib.Variant.new_boolean(exists))
            action.connect("change-state", self.__on_shown_change_state,
                           item[0])
            App().add_action(action)
            shown_menu.append(item[1], "app.%s" % encoded)
        # Translators: shown => items
        self.append_section(_("Sections"), shown_menu)
예제 #4
0
 def __init__(self, widget, rowid, mask):
     """
         Init menu
         @param widget as Gtk.Widget
         @param rowid as int
         @param mask as SelectionListMask
     """
     Popover.__init__(self)
     self.__widget = widget
     self.__rowid = rowid
     self.__mask = mask
     menu = Gio.Menu()
     self.bind_model(menu, None)
     # Startup menu
     if rowid in [Type.POPULARS, Type.RADIOS, Type.LOVED,
                  Type.ALL, Type.RECENTS, Type.YEARS,
                  Type.RANDOMS, Type.NEVER,
                  Type.PLAYLISTS, Type.ARTISTS] and\
             not App().settings.get_value("save-state"):
         startup_menu = Gio.Menu()
         if self.__mask & SelectionListMask.LIST_TWO:
             exists = rowid in App().settings.get_value("startup-two-ids")
         else:
             exists = rowid in App().settings.get_value("startup-one-ids")
         action = Gio.SimpleAction.new_stateful(
             "default_selection_id", None, GLib.Variant.new_boolean(exists))
         App().add_action(action)
         action.connect("change-state", self.__on_default_change_state,
                        rowid)
         item = Gio.MenuItem.new(_("Default on startup"),
                                 "app.default_selection_id")
         startup_menu.append_item(item)
         menu.insert_section(0, _("Startup"), startup_menu)
     # Shown menu
     shown_menu = Gio.Menu()
     if mask & SelectionListMask.PLAYLISTS:
         lists = ShownPlaylists.get(True)
         wanted = App().settings.get_value("shown-playlists")
     else:
         lists = ShownLists.get(mask, True)
         wanted = App().settings.get_value("shown-album-lists")
     for item in lists:
         exists = item[0] in wanted
         encoded = sha256(item[1].encode("utf-8")).hexdigest()
         action = Gio.SimpleAction.new_stateful(
             encoded, None, GLib.Variant.new_boolean(exists))
         action.connect("change-state", self.__on_shown_change_state,
                        item[0])
         App().add_action(action)
         shown_menu.append(item[1], "app.%s" % encoded)
     # Translators: shown => items
     menu.insert_section(1, _("Shown"), shown_menu)
 def populate(self, items):
     """
         Populate items
         @param items
     """
     if self.__obj is not None:
         new_items = []
         for item in items:
             if not App().playlists.get_smart(item):
                 new_items.append(item)
         items = new_items
     else:
         items = [i[0] for i in ShownPlaylists.get()] + items
     FlowBoxView.populate(self, items)
예제 #6
0
 def populate(self, items=None):
     """
         Populate items
         @param items
     """
     if self.__obj is not None:
         new_items = []
         for item in App().playlists.get_ids():
             if not App().playlists.get_smart(item):
                 new_items.append(item)
         items = new_items
     elif items is None:
         items = [i[0] for i in ShownPlaylists.get()]
         items += App().playlists.get_ids()
     FlowBoxView.populate(self, items)
예제 #7
0
    def get_name(self, playlist_id):
        """
            Get playlist name
            @param playlist_id as int
            @return playlist name as str
        """
        if playlist_id < 0:
            for (id, name, sortname) in ShownPlaylists.get(True):
                if id == playlist_id:
                    return name

        with SqlCursor(self) as sql:
            result = sql.execute("SELECT name\
                                 FROM playlists\
                                 WHERE rowid=?", (playlist_id,))
            v = result.fetchone()
            if v is not None:
                return v[0]
            return ""
예제 #8
0
 def __on_shown_change_state(self, action, variant, rowid):
     """
         Set action value
         @param action as Gio.SimpleAction
         @param variant as GLib.Variant
         @param rowid as int
     """
     action.set_state(variant)
     if self.__mask & SelectionListMask.PLAYLISTS:
         option = "shown-playlists"
     else:
         option = "shown-album-lists"
     wanted = list(App().settings.get_value(option))
     if variant:
         wanted.append(rowid)
     else:
         wanted.remove(rowid)
     App().settings.set_value(option, GLib.Variant("ai", wanted))
     if self.__mask & SelectionListMask.PLAYLISTS:
         items = ShownPlaylists.get(True)
     else:
         items = ShownLists.get(self.__mask, True)
     if variant and rowid != Type.USB_DISKS:
         for item in items:
             if item[0] == rowid:
                 self.__widget.add_value(item)
                 break
     else:
         self.__widget.remove_value(rowid)
         if self.__mask & SelectionListMask.LIST_ONE:
             ids = App().settings.get_value("startup-one-ids")
             if rowid in ids:
                 ids.remove(rowid)
             App().settings.set_value("startup-one-ids",
                                      GLib.Variant("ai", ids))
             App().settings.set_value("startup-two-ids",
                                      GLib.Variant("ai", []))
     self.popdown()
    def __init__(self, widget, rowid, mask):
        """
            Init menu
            @param widget as Gtk.Widget
            @param rowid as int
            @param mask as SelectionListMask
        """
        Gio.Menu.__init__(self)
        self.__widget = widget
        self.__rowid = rowid
        self.__mask = mask
        section = None

        if not App().devices and mask & (SelectionListMask.LIST_ONE
                                         | SelectionListMask.LIST_TWO
                                         | SelectionListMask.ARTISTS_VIEW):
            section = Gio.Menu()
            section.append(_("No connected devices"), "app.none")
        elif mask & SelectionListMask.PLAYLISTS:
            from lollypop.menu_sync import SyncPlaylistsMenu
            section = SyncPlaylistsMenu(rowid)
        elif rowid > 0:
            from lollypop.menu_sync import SyncAlbumsMenu
            if mask & SelectionListMask.GENRES:
                section = SyncAlbumsMenu([rowid], [])
            else:
                section = SyncAlbumsMenu([], [rowid])
        elif rowid == Type.ALL or rowid == Type.ARTISTS:
            from lollypop.menu_sync import SyncAlbumsMenu
            section = SyncAlbumsMenu([], [])

        if section is not None:
            self.append_section(_("Synchronization"), section)

        # Startup menu
        if not App().settings.get_value("save-state") and\
                (rowid in [Type.POPULARS, Type.RADIOS, Type.LOVED,
                           Type.ALL, Type.RECENTS, Type.YEARS,
                           Type.RANDOMS, Type.NEVER, Type.GENRES,
                           Type.PLAYLISTS, Type.ARTISTS, Type.WEB] or
                 mask & SelectionListMask.PLAYLISTS):
            startup_menu = Gio.Menu()
            if self.__mask & SelectionListMask.LIST_TWO:
                exists = rowid in App().settings.get_value("startup-two-ids")
            else:
                exists = rowid in App().settings.get_value("startup-one-ids")
            action = Gio.SimpleAction.new_stateful(
                "default_selection_id", None, GLib.Variant.new_boolean(exists))
            App().add_action(action)
            action.connect("change-state", self.__on_default_change_state,
                           rowid)
            item = Gio.MenuItem.new(_("Default on startup"),
                                    "app.default_selection_id")
            startup_menu.append_item(item)
            self.append_section(_("Startup"), startup_menu)
        # Shown menu
        if mask & (SelectionListMask.LIST_ONE | SelectionListMask.LIST_TWO
                   | SelectionListMask.ARTISTS_VIEW) and rowid < 0:
            shown_menu = Gio.Menu()
            if mask & SelectionListMask.PLAYLISTS:
                lists = ShownPlaylists.get(True)
                wanted = App().settings.get_value("shown-playlists")
            else:
                mask |= SelectionListMask.COMPILATIONS
                lists = ShownLists.get(mask, True)
                wanted = App().settings.get_value("shown-album-lists")
            for item in lists:
                exists = item[0] in wanted
                encoded = sha256(item[1].encode("utf-8")).hexdigest()
                action = Gio.SimpleAction.new_stateful(
                    encoded, None, GLib.Variant.new_boolean(exists))
                action.connect("change-state", self.__on_shown_change_state,
                               item[0])
                App().add_action(action)
                shown_menu.append(item[1], "app.%s" % encoded)
            # Translators: shown => items
            self.append_section(_("Sections"), shown_menu)
예제 #10
0
 def load():
     items = [i[0] for i in ShownPlaylists.get()]
     items += App().playlists.get_ids()
     return items