def __init__(self, artist_ids, genre_ids): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_ids, genre_ids) self._signal_id = None if len(artist_ids) > 1: self._artist_id = None else: self._artist_id = artist_ids[0] builder = Gtk.Builder() builder.add_from_resource('/org/gnome/Lollypop/ArtistView.ui') builder.connect_signals(self) self._jump_button = builder.get_object('jump-button') self._jump_button.set_tooltip_text(_("Go to current track")) self._spinner = builder.get_object('spinner') self.attach(builder.get_object('ArtistView'), 0, 0, 1, 1) if len(artist_ids) == 1: artist = Lp().artists.get_name(artist_ids[0]) else: artist = _("Many artists") builder.get_object('artist').set_label(artist)
def _on_current_changed(self, player): """ Set playing button status @param player as Player """ ArtistAlbumsView._on_current_changed(self, player) self._update_jump_button()
def _on_current_changed(self, player): """ Set playing button status @param player as Player """ ArtistAlbumsView._on_current_changed(self, player) self.__update_jump_button()
def _on_populated(self, widget, idle_id): """ Set jump button state @param widget as AlbumDetailedWidget @param idle_id as int """ self.__update_jump_button() ArtistAlbumsView._on_populated(self, widget, idle_id)
def _on_populated(self, widget, widgets, scroll_value): """ Set jump button state @param widget as AlbumDetailedWidget @param widgets as pending AlbumDetailedWidgets @param scroll value as float """ self.__update_jump_button() ArtistAlbumsView._on_populated(self, widget, widgets, scroll_value)
def _on_album_finished(self, album, albums): """ Add another album @param album as AlbumDetailedWidget @param [album ids as int] """ if not albums: self._update_jump_button() ArtistAlbumsView._on_album_finished(self, album, albums)
def _on_value_changed(self, adj): """ Update scroll value and check for lazy queue @param adj as Gtk.Adjustment """ ArtistAlbumsView._on_value_changed(self, adj) if adj.get_value() == adj.get_lower(): self._artwork.show() else: self._artwork.hide()
def __init__(self, artist_ids, genre_ids): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_ids, genre_ids) self.__art_signal_id = None self.connect('realize', self.__on_realize) self.connect('unrealize', self.__on_unrealize) builder = Gtk.Builder() builder.add_from_resource('/org/gnome/Lollypop/ArtistView.ui') builder.connect_signals(self) self.__artwork = builder.get_object('artwork') self.__artwork_box = builder.get_object('artwork-box') self.__label = builder.get_object('artist') self.__jump_button = builder.get_object('jump-button') self.__jump_button.set_tooltip_text(_("Go to current track")) self.__add_button = builder.get_object('add-button') self.__play_button = builder.get_object('play-button') self.__grid = builder.get_object('header') if Lp().lastfm is None: builder.get_object('lastfm-button').hide() elif not get_network_available(): builder.get_object('lastfm-button').set_sensitive(False) builder.get_object('lastfm-button').set_tooltip_text( _("Network access disabled")) self._overlay.add_overlay(self.__grid) self.__empty = Gtk.Grid() self.__empty.show() self._albumbox.add(self.__empty) self._albumbox.set_row_spacing(20) self.__scale_factor = self.__artwork.get_scale_factor() self.__set_artwork() self.__set_add_icon() self.__on_lock_changed(Lp().player) artists = [] for artist_id in artist_ids: artists.append(Lp().artists.get_name(artist_id)) if Lp().settings.get_value('artist-artwork'): self.__label.set_markup( "<span size='x-large' weight='bold'>" + GLib.markup_escape_text(", ".join(artists)) + "</span>") else: self.__label.set_markup( "<span size='large' weight='bold'>" + GLib.markup_escape_text(", ".join(artists)) + "</span>")
def __init__(self, artist_ids, genre_ids): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_ids, genre_ids, ArtSize.BIG) self.__art_signal_id = None self.connect("realize", self.__on_realize) self.connect("unrealize", self.__on_unrealize) builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Lollypop/ArtistView.ui") builder.connect_signals(self) self.__artwork = builder.get_object("artwork") self.__artwork_box = builder.get_object("artwork-box") self.__label = builder.get_object("artist") self.__jump_button = builder.get_object("jump-button") self.__jump_button.set_tooltip_text(_("Go to current track")) self.__add_button = builder.get_object("add-button") self.__play_button = builder.get_object("play-button") self.__grid = builder.get_object("header") if Lp().lastfm is None: builder.get_object("lastfm-button").hide() elif not get_network_available(): builder.get_object("lastfm-button").set_sensitive(False) builder.get_object("lastfm-button").set_tooltip_text( _("Network access disabled")) self._overlay.add_overlay(self.__grid) self.__empty = Gtk.Grid() self.__empty.show() self._albumbox.add(self.__empty) self._albumbox.set_row_spacing(20) self.__scale_factor = self.__artwork.get_scale_factor() self.__set_artwork() self.__set_add_icon() self.__on_lock_changed(Lp().player) artists = [] for artist_id in artist_ids: artists.append(Lp().artists.get_name(artist_id)) if Lp().settings.get_value("artist-artwork"): self.__label.set_markup( '<span size="x-large" weight="bold">' + GLib.markup_escape_text(", ".join(artists)) + "</span>") else: self.__label.set_markup( '<span size="large" weight="bold">' + GLib.markup_escape_text(", ".join(artists)) + "</span>")
def __init__(self, album_id, genre_ids, artist_ids, width=None, height=None, art_size=ArtSize.NONE): """ Init popover @param album id as int @param genre ids as [int] @param artist ids as [int] @param width as int (None) @param height as int (None) @param art size as int """ Gtk.Popover.__init__(self) self.get_style_context().add_class('box-shadow') view = ArtistAlbumsView(artist_ids, genre_ids, art_size) view.populate([album_id]) # Get width/height from main window if None if height is None: height = Lp().window.get_size()[1] * 0.8 if width is None: self.__width = Lp().window.get_size()[0] * 0.8 else: self.__width = width # Get height requested by child requested_height = view.children[0].requested_height wanted_height = min(400, min(height, requested_height)) view.set_property('height-request', wanted_height) view.show() self.add(view)
def __init__(self, artist_ids, genre_ids): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_ids, genre_ids) self.__art_signal_id = None self.connect('realize', self.__on_realize) self.connect('unrealize', self.__on_unrealize) builder = Gtk.Builder() builder.add_from_resource('/org/gnome/Lollypop/ArtistView.ui') builder.connect_signals(self) self.__artwork = builder.get_object('artwork') self.__artwork_box = builder.get_object('artwork-box') self.__label = builder.get_object('artist') self.__jump_button = builder.get_object('jump-button') self.__jump_button.set_tooltip_text(_("Go to current track")) self.__add_button = builder.get_object('add-button') self.__play_button = builder.get_object('play-button') self.__grid = builder.get_object('header-grid') if Lp().lastfm is None or\ not get_network_available(): builder.get_object('lastfm-button').hide() header = builder.get_object('header') header.set_property('valign', Gtk.Align.START) self._overlay.add_overlay(header) self.__empty = Gtk.Grid() self.__empty.show() self._albumbox.add(self.__empty) self._albumbox.set_row_spacing(20) self.__set_artwork() self.__set_add_icon() self.__on_lock_changed(Lp().player) artists = [] for artist_id in artist_ids: artists.append(Lp().artists.get_name(artist_id)) if Lp().settings.get_value('artist-artwork'): self.__label.set_markup( "<span size='x-large' weight='bold'>" + GLib.markup_escape_text(", ".join(artists)) + "</span>") else: self.__label.set_markup( "<span size='large' weight='bold'>" + GLib.markup_escape_text(", ".join(artists)) + "</span>")
def __init__(self, album_id, genre_ids, artist_ids, width=None, height=None, show_cover=True): """ Init popover @param album id as int @param genre ids as [int] @param artist ids as [int] @param width as int (None) @param height as int (None) @param show cover as bool """ Gtk.Popover.__init__(self) # Get width/height from main window if None if height is None: height = Lp().window.get_size()[1] * 0.8 if width is None: self._width = Lp().window.get_size()[0] * 0.8 else: self._width = width self.get_style_context().add_class('box-shadow') self._view = ArtistAlbumsView(artist_ids, genre_ids, show_cover) self._view.populate([album_id]) wanted_height = min(400, min(height, self._view.requested_height)) self._view.set_property('height-request', wanted_height) self._view.show() self.add(self._view)
def __init__(self, artist_id, genre_id): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_id, genre_id) self._artist_id = artist_id self._genre_id = genre_id self._signal_id = None builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Lollypop/ArtistView.ui") builder.connect_signals(self) self.attach(builder.get_object("ArtistView"), 0, 0, 1, 1) builder.get_object("artist").set_label(Lp().artists.get_name(artist_id))
def __init__(self, artist_id, genre_id): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_id, genre_id) self._artist_id = artist_id self._genre_id = genre_id self._signal_id = None builder = Gtk.Builder() builder.add_from_resource('/org/gnome/Lollypop/ArtistView.ui') builder.connect_signals(self) self.attach(builder.get_object('ArtistView'), 0, 0, 1, 1) builder.get_object('artist').set_label( Lp().artists.get_name(artist_id))
def __init__(self, artist_ids, genre_ids): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_ids, genre_ids) self._art_signal_id = None self.connect('realize', self._on_realize) self.connect('unrealize', self._on_unrealize) builder = Gtk.Builder() builder.add_from_resource('/org/gnome/Lollypop/ArtistView.ui') builder.connect_signals(self) self._artwork = builder.get_object('artwork') self._artwork_box = builder.get_object('artwork-box') self._label = builder.get_object('artist') self._jump_button = builder.get_object('jump-button') self._jump_button.set_tooltip_text(_("Go to current track")) self._add_button = builder.get_object('add-button') self._play_button = builder.get_object('play-button') self._grid = builder.get_object('header-grid') header = builder.get_object('header') header.set_property('valign', Gtk.Align.START) self._overlay.add_overlay(header) self._empty = Gtk.Grid() self._empty.show() self._albumbox.add(self._empty) self._albumbox.set_row_spacing(20) self._set_artwork() self._set_add_icon() self._on_lock_changed(Lp().player) artists = [] for artist_id in artist_ids: artists.append(Lp().artists.get_name(artist_id)) if Lp().settings.get_value('artist-artwork'): self._label.set_markup("<span size='x-large' weight='bold'>" + escape(", ".join(artists)) + "</span>") else: self._label.set_markup("<span size='large' weight='bold'>" + escape(", ".join(artists)) + "</span>")
def _on_unmap(self, widget): """ Disconnect signals @param widget as Gtk.Widget """ ArtistAlbumsView._on_unmap(self, widget) if self.__art_signal_id is not None: App().art.disconnect(self.__art_signal_id) self.__art_signal_id = None if self.__party_signal_id is not None: App().player.disconnect(self.__party_signal_id) self.__party_signal_id = None if self.__added_signal_id is not None: App().player.disconnect(self.__added_signal_id) self.__added_signal_id = None if self.__removed_signal_id is not None: App().player.disconnect(self.__removed_signal_id) self.__removed_signal_id = None
def __init__(self, artist_id, genre_id): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_id, genre_id) self._artist_id = artist_id self._genre_id = genre_id self._signal_id = None self._popover = InfosPopover(artist_id, False) builder = Gtk.Builder() builder.add_from_resource('/org/gnome/Lollypop/ArtistView.ui') builder.connect_signals(self) self.attach(builder.get_object('ArtistView'), 0, 0, 1, 1) builder.get_object('artist').set_label( Lp.artists.get_name(artist_id))
def _on_value_changed(self, adj): """ Update scroll value and check for lazy queue @param adj as Gtk.Adjustment """ ArtistAlbumsView._on_value_changed(self, adj) if adj.get_value() == adj.get_lower(): if Lp().settings.get_value("artist-artwork"): self._artwork.show() self._artwork_box.show() self._grid.get_style_context().remove_class("header-borders") self._grid.get_style_context().add_class("header") self._grid.set_property("valign", Gtk.Align.CENTER) else: self._artwork.hide() self._artwork_box.hide() self._grid.get_style_context().add_class("header-borders") self._grid.get_style_context().remove_class("header") self._grid.set_property("valign", Gtk.Align.START)
def _on_map(self, widget): """ Connect signals and set active ids @param widget as Gtk.Widget """ ArtistAlbumsView._on_map(self, widget) self.__on_album_changed(App().player) self.__art_signal_id = App().art.connect( "artist-artwork-changed", self.__on_artist_artwork_changed) self.__party_signal_id = App().player.connect("party-changed", self.__on_album_changed) self.__added_signal_id = App().player.connect("album-added", self.__on_album_changed) self.__removed_signal_id = App().player.connect( "album-removed", self.__on_album_changed) App().settings.set_value("state-one-ids", GLib.Variant("ai", self._genre_ids)) App().settings.set_value("state-two-ids", GLib.Variant("ai", self._artist_ids)) App().settings.set_value("state-three-ids", GLib.Variant("ai", []))
def _on_value_changed(self, adj): """ Update scroll value and check for lazy queue @param adj as Gtk.Adjustment """ ArtistAlbumsView._on_value_changed(self, adj) if adj.get_value() == adj.get_lower(): if self.__artwork.props.surface is not None or\ self.__artwork.get_pixbuf() is not None: self.__artwork.show() self.__artwork_box.show() self.__grid.get_style_context().remove_class('header-borders') self.__grid.get_style_context().add_class('header') else: if self.__artwork.props.surface is not None or\ self.__artwork.get_pixbuf() is not None: self.__artwork.hide() self.__artwork_box.hide() self.__grid.get_style_context().add_class('header-borders') self.__grid.get_style_context().remove_class('header')
def __init__(self, artist_ids, genre_ids): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_ids, genre_ids) self._signal_id = None self._artist_ids = artist_ids empty = Gtk.Grid() empty.set_property('height-request', ArtSize.ARTIST_SMALL * 2) empty.show() self._albumbox.add(empty) builder = Gtk.Builder() builder.add_from_resource('/org/gnome/Lollypop/ArtistView.ui') builder.connect_signals(self) self._artwork = builder.get_object('artwork') self._jump_button = builder.get_object('jump-button') self._jump_button.set_tooltip_text(_("Go to current track")) self._spinner = builder.get_object('spinner') header = builder.get_object('header') header.set_property('valign', Gtk.Align.START) self._overlay.add_overlay(header) self._overlay.set_overlay_pass_through(header, True) if len(artist_ids) == 1 and Lp().settings.get_value('artist-artwork'): artist = Lp().artists.get_name(artist_ids[0]) for suffix in ["lastfm", "spotify", "wikipedia"]: uri = InfoCache.get_artwork(artist, suffix, ArtSize.ARTIST_SMALL * 2 * self._artwork.get_scale_factor()) if uri is not None: self._artwork.set_from_file(uri) self._artwork.show() break artists = [] for artist_id in artist_ids: artists.append(Lp().artists.get_name(artist_id)) builder.get_object('artist').set_label(", ".join(artists))
def __init__(self, artist_ids, genre_ids): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_ids, genre_ids) if len(artist_ids) > 1: self._artist_id = None else: self._artist_id = artist_ids[0] self._signal_id = None builder = Gtk.Builder() builder.add_from_resource('/org/gnome/Lollypop/ArtistView.ui') builder.connect_signals(self) self.attach(builder.get_object('ArtistView'), 0, 0, 1, 1) artists = "" for artist_id in artist_ids: artists += Lp().artists.get_name(artist_id) + ", " builder.get_object('artist').set_label(artists[:-2])
def __init__(self, album, width): """ Init popover @param album as Album @param width as int @param art size as int """ Popover.__init__(self) self.__width = width self.get_style_context().add_class("box-shadow") view = ArtistAlbumsView(album.artist_ids, album.genre_ids, False) view.populate([album]) window_width = App().window.get_allocated_width() window_height = App().window.get_allocated_height() wanted_width = min(900, window_width * 0.5) wanted_height = max(200, min(window_height * 0.5, view.children[0].requested_height[0])) view.set_property("width-request", wanted_width) view.set_property("height-request", wanted_height) view.show() self.add(view)
def _on_value_changed(self, adj): """ Update scroll value and check for lazy queue @param adj as Gtk.Adjustment """ ArtistAlbumsView._on_value_changed(self, adj) title_style_context = self._title_label.get_style_context() if adj.get_value() == adj.get_lower() and self.__show_artwork: height = self._banner.default_height self._artwork.show() title_style_context.remove_class("text-x-large") title_style_context.add_class("text-xx-large") else: height = self._banner.default_height // 3 self._artwork.hide() title_style_context.remove_class("text-xx-large") title_style_context.add_class("text-x-large") # Make grid cover artwork # No idea why... self._banner.set_height(height) self._scrolled.get_vscrollbar().set_margin_top(height) self._buttons.set_size_request(-1, height + 1)
def __init__(self, artist_ids, genre_ids): """ Init ArtistView @param artist_id as int (Current if None) @param genre_id as int """ view_type = ViewType.TWO_COLUMNS ArtistAlbumsView.__init__(self, artist_ids, genre_ids, view_type) self.__art_signal_id = None self.__allocation_timeout_id = None self.__width = 0 self.__show_artwork = len(artist_ids) == 1 and\ App().settings.get_value("artist-artwork") ArtistViewCommon.__init__(self) self._overlay.add_overlay(self._banner) if self.__show_artwork: self._title_label.get_style_context().add_class("text-xx-large") else: self._title_label.get_style_context().add_class("text-x-large") self._album_box.set_margin_start(MARGIN) self._album_box.set_margin_end(MARGIN) self.__set_artwork() self._scrolled.get_vscrollbar().set_margin_top(self._banner.height)
def __init__(self, artist_ids, genre_ids): """ Init ArtistView @param artist id as int (Current if None) @param genre id as int """ ArtistAlbumsView.__init__(self, artist_ids, genre_ids) self._art_signal_id = None self.connect("realize", self._on_realize) self.connect("unrealize", self._on_unrealize) builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Lollypop/ArtistView.ui") builder.connect_signals(self) self._artwork = builder.get_object("artwork") self._artwork_box = builder.get_object("artwork-box") self._label = builder.get_object("artist") self._jump_button = builder.get_object("jump-button") self._jump_button.set_tooltip_text(_("Go to current track")) self._add_button = builder.get_object("add-button") self._grid = builder.get_object("header-grid") self._spinner = builder.get_object("spinner") header = builder.get_object("header") header.set_property("valign", Gtk.Align.START) self._overlay.add_overlay(header) self._empty = Gtk.Grid() self._empty.show() self._albumbox.add(self._empty) self._set_artwork() self._set_add_icon() artists = [] for artist_id in artist_ids: artists.append(Lp().artists.get_name(artist_id)) self._label.set_label(", ".join(artists))
def __init__(self, album_id, genre_ids, artist_ids): """ Init view @param album id as int @param genre ids as [int] @param artist ids as [int] """ Gtk.Grid.__init__(self) self.set_orientation(Gtk.Orientation.VERTICAL) back_button = Gtk.Button.new_from_icon_name("go-previous-symbolic", Gtk.IconSize.MENU) back_button.set_tooltip_text(_("Go back")) back_button.connect('clicked', self.__on_back_button_clicked) back_button.set_property('halign', Gtk.Align.START) back_button.set_relief(Gtk.ReliefStyle.NONE) back_button.show() self.add(back_button) view = ArtistAlbumsView(artist_ids, genre_ids, ArtSize.HEADER) view.populate([album_id]) view.show() self.add(view) self.show()