1. 03 Sep, 2018 1 commit
  2. 26 Aug, 2018 1 commit
    • Marinus Schraal's avatar
      Add tooltips for media info · 8ff8e6d3
      Marinus Schraal authored
      Add tooltips for artist, album & song title to widgets that commonly
      support it. This allows ellipsized labels to be read.
      
      Added a TwoLineTip widget that is used for multi-line tooltips.
      
      The following widgets have tooltips added or altered:
       * SongWidget
       * SidebarRow
       * AlbumCover
       * Song info in PlayerToolbar
       * AlbumWidget
      8ff8e6d3
  3. 16 Aug, 2018 3 commits
    • Jean Felder's avatar
      albumwidget: Restore currently played album · a7634b8f
      Jean Felder authored
      Closes: #111
      a7634b8f
    • Jean Felder's avatar
      albumwidget: Refactor add_item method · 555da3e7
      Jean Felder authored
      Cosmetic changes. Code should be easier to read.
      555da3e7
    • Jean Felder's avatar
      player: Refactor player playlist · d83b7de3
      Jean Felder authored
      Separate player logic from the playlist logic.
      Rename discovery logic to validation as this is more accurate of the
      underlying logic.
      PlayerPlaylist object handles the playlist and songs validation
      logic. Player object acts as a glue for the ui and the underlying
      logic (playlist and validation).
      Use Gobject Properties.
      
      There are 4 ways to launch a song:
      1. Click on a song in the current view. The set_playlist method is
      called.
      2. At the end of the current song. The next method is automatically called.
      3. click on the next buttom from the PlayerToolbar. The next method is called.
      4. click on the previous buttom from the PlayerToolbar. The previous
      method is called.
      
      Validation is a very expensive operation, so only do it when it's
      needed. See commit message from 6f1cb8d4.
      
      The Validation logic brings 3 features:
      - display an error icon if a song cannot be played
      - do not load a song that cannot be played
      - when the song changes, try to load the next possible one: if the
      next song cannot be loaded, try the one after, etc.
      
      In "set_playlist" method, if the song has already been played the
      validation information is already known, nothing to add. If the song
      has never been played, there is no information yet. In that case,
      validate_current_song and validate_next_song need to be called to
      trigger the validation mechanism.
      
      In "next" method, call validate_next_song to continue the validation
      mechanism if there is a next song.
      
      In "previous" method, call validate_previous_song to continue the validation
      mechanism if there is a previous song.
      
      Closes: #60, #154
      d83b7de3
  4. 29 Jul, 2018 1 commit
  5. 29 Jun, 2018 2 commits
  6. 21 Jun, 2018 2 commits
  7. 20 Jun, 2018 4 commits
  8. 29 May, 2018 1 commit
  9. 28 May, 2018 3 commits
  10. 19 May, 2018 1 commit
    • Marinus Schraal's avatar
      toolbar: Rename to HeaderBar and cleanup · c76d243b
      Marinus Schraal authored
      Rework the widget, highlights:
       * Rename Toolbar to HeaderBar
       * Split out the menu button to SelectionBarMenuButton
       * Use Gtk.Template for SelectionBarMenuButton
       * Make State internal to HeaderBar
       * Use Gtk.Template for HeaderBar
       * Use the state property directly in callers
       * Add selection-mode property to HeaderBar
      c76d243b
  11. 01 May, 2018 3 commits
  12. 30 Apr, 2018 3 commits
    • Jean Felder's avatar
      player: Factor out player ui · d9523565
      Jean Felder authored
      Move the player ui bits into a new class PlayerToolbar and modify
      Player class to deal with the new interaction.
      d9523565
    • Jean Felder's avatar
      player: Refactor SelectionToolbar · 8113a72d
      Jean Felder authored
      Move SelectionToolbar class to its own file and use Gtk.Template.
      
      Bump pygobject dependency version to support Gtk.Template.
      Disable build step from gitlab CI for the moment because pygobject is
      too old. It is version 3.28, but we need at least 3.29.1.
      8113a72d
    • Jean Felder's avatar
      player: Merge two redundant signals · bbabe1bf
      Jean Felder authored
      current-changed and playlist-item-changed signals are emitted for the
      same reason, they can be merged. The new signal is called song-changed.
      bbabe1bf
  13. 18 Apr, 2018 2 commits
  14. 01 Apr, 2018 1 commit
  15. 26 Mar, 2018 1 commit
  16. 04 Mar, 2018 3 commits
    • Jean Felder's avatar
      player: Use its own simplified model · c83e5ea7
      Jean Felder authored
      Player keeps an internal reference to the currently visible view, wich
      can be different from the currently played model. The main idea is to
      isolate player model. when set_playlist method from player is called, a
      simple copy is done. Therefore, when view changes, player model is not
      updated. This new model needs to stay synchronized by calling add_song
      or remove_song appropriately.
      This is not a fix. Just a workaround before player.py rewrite.
      Add an enum for player model fields.
      Remove 'song-position-changed' signal from playlists as it is not
      necessary anymore.
      
      Closes: #136
      c83e5ea7
    • Jean Felder's avatar
      views: Rely on running_playlist to update_model · abf05c63
      Jean Felder authored
      This avoids having to call private attributes and this should help prevent
      internal problems in the future.
      abf05c63
    • Jean Felder's avatar
      player: Remove field parameter from set_playlist · 6aca5425
      Jean Felder authored
      This parameter is unecessary as it is always equal to 5.
      Rename playlistField attribute to playlist_field.
      Use playlist_field in artistalbumwidget.
      6aca5425
  17. 05 Feb, 2018 1 commit
    • Marinus Schraal's avatar
      albumartcache: Rewrite · 47aa0765
      Marinus Schraal authored
      The former artworkcache was a monolithic method filled with callbacks,
      hard to debug and comprehend. It also left quite a bit for the caller to
      take care of.
      
      The current design is that Music has an Art object that is specific to
      one cairo.Surface or Gtk.Image (ArtImage) as requested. The Art object
      takes care of retrieving the correct image and emits a signal
      (cairo.Surface) or updates the Gtk.Image when done. This leads to less
      art related code in the views and widgets.
      
      The lookup process itself is now clearly divided into several steps:
      1. (Cache) libmediaart cache lookup
      2. (EmbeddedArt) local lookup
          1. tags (gstreamer)
          2. coverart in the directory (libmediaart)
      3. (RemoteArt) remote lookup through Grilo coverart providers
      
      Using a cairo.Surface in the Gtk.TreeView pixbuf renderer also allows
      for HiDPI art in SearchView.
      
      For simplicity and cleanliness, all art related calls have been removed
      from BaseView as they were unused and there is no plan to bring it back
      to BaseView.
      
      Closes: #65
      47aa0765
  18. 27 Dec, 2017 2 commits
  19. 15 Dec, 2017 2 commits
  20. 28 Aug, 2017 1 commit
  21. 26 Feb, 2017 1 commit
  22. 24 Feb, 2017 1 commit