Hello community,

here is the log from the commit of package lollypop for openSUSE:Factory 
checked in at 2019-06-24 21:52:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lollypop (Old)
 and      /work/SRC/openSUSE:Factory/.lollypop.new.4615 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "lollypop"

Mon Jun 24 21:52:44 2019 rev:85 rq:711565 version:1.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/lollypop/lollypop.changes        2019-06-21 
09:58:41.108688864 +0200
+++ /work/SRC/openSUSE:Factory/.lollypop.new.4615/lollypop.changes      
2019-06-24 21:53:50.752128388 +0200
@@ -1,0 +2,11 @@
+Sun Jun 23 15:07:52 UTC 2019 - [email protected]
+
+- Update to version 1.1.1:
+  * Add support for reading synced lyrics from tags.
+  * Fix a crash on playlist update (glgo#World/lollypop#1864).
+  * Don't lose search results upon search mode switch
+    (glgo#World/lollypop#1859).
+  * Fix a case of playback stopping unexpectedly
+    (glgo#World/lollypop#1840).
+
+-------------------------------------------------------------------

Old:
----
  lollypop-1.1.0.tar.xz

New:
----
  lollypop-1.1.1.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ lollypop.spec ++++++
--- /var/tmp/diff_new_pack.WR7aQK/_old  2019-06-24 21:53:51.516128979 +0200
+++ /var/tmp/diff_new_pack.WR7aQK/_new  2019-06-24 21:53:51.520128981 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           lollypop
-Version:        1.1.0
+Version:        1.1.1
 Release:        0
 Summary:        GNOME music playing application
 License:        GPL-3.0-or-later

++++++ _service ++++++
--- /var/tmp/diff_new_pack.WR7aQK/_old  2019-06-24 21:53:51.552129006 +0200
+++ /var/tmp/diff_new_pack.WR7aQK/_new  2019-06-24 21:53:51.556129010 +0200
@@ -1,7 +1,7 @@
 <services>
   <service mode="disabled" name="tar_scm">
     <param name="changesgenerate">enable</param>
-    <param name="revision">1.1.0</param>
+    <param name="revision">1.1.1</param>
     <param name="scm">git</param>
     <param name="url">https://gitlab.gnome.org/World/lollypop.git</param>
     <param name="versionformat">@PARENT_TAG@</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.WR7aQK/_old  2019-06-24 21:53:51.576129025 +0200
+++ /var/tmp/diff_new_pack.WR7aQK/_new  2019-06-24 21:53:51.576129025 +0200
@@ -1,4 +1,4 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://gitlab.gnome.org/World/lollypop.git</param>
-              <param 
name="changesrevision">31a19c75ddb30350eb5964f943da43741055e10d</param></service></servicedata>
\ No newline at end of file
+              <param 
name="changesrevision">3fd7197bc786ad224bf5a5a58bdfbdba1443f6a3</param></service></servicedata>
\ No newline at end of file

++++++ lollypop-1.1.0.tar.xz -> lollypop-1.1.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/README.md new/lollypop-1.1.1/README.md
--- old/lollypop-1.1.0/README.md        2019-06-20 15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/README.md        2019-06-23 15:43:48.000000000 +0200
@@ -60,12 +60,12 @@
 # pip3 install pylast
 ```
 
-### On Debian GNU/Linux (Jessie)
+### On Debian/Ubuntu
 
 ```bash
 $ git clone https://gitlab.gnome.org/World/lollypop.git
 $ cd lollypop
-# apt-get install meson libglib2.0-dev yelp-tools libgirepository1.0-dev 
libgtk-3-dev
+# apt-get install meson libglib2.0-dev yelp-tools libgirepository1.0-dev 
libgtk-3-dev gir1.2-totemplparser-1.0
 $ meson builddir --prefix=/usr
 # sudo ninja -C builddir install
 ```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/data/AlbumBannerWidget.ui 
new/lollypop-1.1.1/data/AlbumBannerWidget.ui
--- old/lollypop-1.1.0/data/AlbumBannerWidget.ui        2019-06-20 
15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/data/AlbumBannerWidget.ui        2019-06-23 
15:43:48.000000000 +0200
@@ -83,8 +83,7 @@
                 <property name="image">image1</property>
                 <signal name="clicked" handler="_on_menu_button_clicked" 
swapped="no"/>
                 <style>
-                  <class name="light-button"/>
-                  <class name="light-button-no-right-border"/>
+                  <class name="menu-button-48"/>
                 </style>
               </object>
               <packing>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/data/ArtistView.ui 
new/lollypop-1.1.1/data/ArtistView.ui
--- old/lollypop-1.1.0/data/ArtistView.ui       2019-06-20 15:58:34.000000000 
+0200
+++ new/lollypop-1.1.1/data/ArtistView.ui       2019-06-23 15:43:48.000000000 
+0200
@@ -91,7 +91,6 @@
         <property name="valign">center</property>
         <child>
           <object class="GtkButton" id="play-button">
-            <property name="width_request">48</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
@@ -99,7 +98,7 @@
             <property name="image">image1</property>
             <signal name="clicked" handler="_on_play_clicked" swapped="no"/>
             <style>
-              <class name="menu-button"/>
+              <class name="menu-button-48"/>
               <class name="black-transparent"/>
             </style>
           </object>
@@ -111,7 +110,6 @@
         </child>
         <child>
           <object class="GtkButton" id="add-button">
-            <property name="width_request">48</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
@@ -119,7 +117,7 @@
             <property name="image">image3</property>
             <signal name="clicked" handler="_on_add_clicked" swapped="no"/>
             <style>
-              <class name="menu-button"/>
+              <class name="menu-button-48"/>
               <class name="black-transparent"/>
             </style>
           </object>
@@ -131,7 +129,6 @@
         </child>
         <child>
           <object class="GtkToggleButton" id="lastfm-button">
-            <property name="width_request">48</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
@@ -139,7 +136,7 @@
             <property name="image">image4</property>
             <signal name="toggled" handler="_on_similars_button_toggled" 
swapped="no"/>
             <style>
-              <class name="menu-button"/>
+              <class name="menu-button-48"/>
               <class name="black-transparent"/>
             </style>
           </object>
@@ -151,7 +148,6 @@
         </child>
         <child>
           <object class="GtkButton" id="jump-button">
-            <property name="width_request">48</property>
             <property name="visible">True</property>
             <property name="sensitive">False</property>
             <property name="can_focus">True</property>
@@ -161,7 +157,7 @@
             <property name="image">image2</property>
             <signal name="clicked" handler="_on_jump_button_clicked" 
swapped="no"/>
             <style>
-              <class name="menu-button"/>
+              <class name="menu-button-48"/>
               <class name="black-transparent"/>
             </style>
           </object>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/data/PlaylistView.ui 
new/lollypop-1.1.1/data/PlaylistView.ui
--- old/lollypop-1.1.0/data/PlaylistView.ui     2019-06-20 15:58:34.000000000 
+0200
+++ new/lollypop-1.1.1/data/PlaylistView.ui     2019-06-23 15:43:48.000000000 
+0200
@@ -36,7 +36,6 @@
     <property name="can_focus">False</property>
     <property name="halign">end</property>
     <property name="valign">center</property>
-    <property name="column_spacing">20</property>
     <child>
       <object class="GtkButton" id="play_button">
         <property name="visible">True</property>
@@ -45,11 +44,10 @@
         <property name="tooltip_text" translatable="yes">Play</property>
         <property name="halign">start</property>
         <property name="image">image1</property>
-        <property name="relief">none</property>
         <signal name="clicked" handler="_on_play_button_clicked" swapped="no"/>
         <style>
-          <class name="light-button"/>
-          <class name="light-button-no-right-border"/>
+          <class name="menu-button-48"/>
+          <class name="black-transparent"/>
         </style>
       </object>
       <packing>
@@ -65,11 +63,10 @@
         <property name="tooltip_text" translatable="yes">Play playlist 
randomized</property>
         <property name="halign">start</property>
         <property name="image">image5</property>
-        <property name="relief">none</property>
         <signal name="clicked" handler="_on_shuffle_button_clicked" 
swapped="no"/>
         <style>
-          <class name="light-button"/>
-          <class name="light-button-no-right-border"/>
+          <class name="menu-button-48"/>
+          <class name="black-transparent"/>
         </style>
       </object>
       <packing>
@@ -86,11 +83,10 @@
         <property name="tooltip_text" translatable="yes">Go to current 
track</property>
         <property name="halign">start</property>
         <property name="image">image2</property>
-        <property name="relief">none</property>
         <signal name="clicked" handler="_on_jump_button_clicked" swapped="no"/>
         <style>
-          <class name="light-button"/>
-          <class name="light-button-no-right-border"/>
+          <class name="menu-button-48"/>
+          <class name="black-transparent"/>
         </style>
       </object>
       <packing>
@@ -105,11 +101,10 @@
         <property name="receives_default">True</property>
         <property name="halign">start</property>
         <property name="image">image7</property>
-        <property name="relief">none</property>
         <signal name="clicked" handler="_on_menu_button_clicked" swapped="no"/>
         <style>
-          <class name="menu-button"/>
-          <class name="light-button-no-right-border"/>
+          <class name="menu-button-48"/>
+          <class name="black-transparent"/>
         </style>
       </object>
       <packing>
@@ -117,6 +112,9 @@
         <property name="top_attach">0</property>
       </packing>
     </child>
+    <style>
+      <class name="linked"/>
+    </style>
   </object>
   <object class="GtkLabel" id="title">
     <property name="height_request">32</property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/data/application.css 
new/lollypop-1.1.1/data/application.css
--- old/lollypop-1.1.0/data/application.css     2019-06-20 15:58:34.000000000 
+0200
+++ new/lollypop-1.1.1/data/application.css     2019-06-23 15:43:48.000000000 
+0200
@@ -593,37 +593,38 @@
        color: inherit;
 }
 
-.light-button {
+.menu-button-48 {
     opacity: 0.6;
-    box-shadow: none;
-       min-height: 24px;
-       min-width: 24px;
+       box-shadow: none;
+       min-height: 36px;
+       min-width: 48px;
        padding-left: 4px;
        padding-right: 4px;
        padding-top: 0px;
        padding-bottom: 0px;
        background-image: none;
-       background-color: transparent;
        border-style: solid;
        border-image-source: none;
-    border-bottom-width: 0px;
-    border-top-width: 0px;
-    border-left-width: 0px;
+    border-bottom-width: 1px;
+    border-top-width: 1px;
+    border-left-width: 1px;
     border-right-width: 1px;
-    border-radius: 0px;
-    border-color: alpha(@theme_fg_color, 0.3);
+    border-color: transparent;
     color: inherit;
 }
 
-.light-button-no-right-border {
-    border-right-width: 0px;
+
+.menu-button-48:disabled {
+    opacity: 0.4;
 }
 
-.light-button:hover {
+.menu-button-48:hover {
     color: inherit;
+    border-color: alpha(@theme_fg_color, 0.1);
        opacity: 1;
 }
 
+
 .menu-button {
     opacity: 0.6;
        box-shadow: none;
@@ -654,10 +655,6 @@
        opacity: 1;
 }
 
-.menu-button-no-border:hover
-{
-    border-color: transparent;
-}
 
 .album-menu-button {
     opacity: 0.6;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lollypop-1.1.0/data/org.gnome.Lollypop.appdata.xml.in 
new/lollypop-1.1.1/data/org.gnome.Lollypop.appdata.xml.in
--- old/lollypop-1.1.0/data/org.gnome.Lollypop.appdata.xml.in   2019-06-20 
15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/data/org.gnome.Lollypop.appdata.xml.in   2019-06-23 
15:43:48.000000000 +0200
@@ -27,11 +27,10 @@
     </ul>
   </description>
   <releases>
-    <release version="1.1.0" date="2019-06-20">
+    <release version="1.1.1" date="2019-06-23">
       <description>
-       <ul>New fullscreen mode</ul>
-       <ul>New MTP sync mode</ul>
-       <ul>New synced lyrics support</ul>
+       <ul>Bug fixes</ul>
+       <ul>Read synced lyrics from tags</ul>
       </description>
     </release>
   </releases>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/controller_information.py 
new/lollypop-1.1.1/lollypop/controller_information.py
--- old/lollypop-1.1.0/lollypop/controller_information.py       2019-06-20 
15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/lollypop/controller_information.py       2019-06-23 
15:43:48.000000000 +0200
@@ -13,6 +13,7 @@
 from gi.repository import GLib
 
 from lollypop.define import Type, App, ArtBehaviour
+from lollypop.objects import Album
 
 
 class InformationController:
@@ -98,7 +99,7 @@
         elif App().player.current_track.id is not None:
             if self.__per_track_cover:
                 effect = self.__effect | ArtBehaviour.NO_CACHE
-                album = App().player.current_track.album
+                album = Album(App().player.current_track.album.id)
                 App().art.clean_album_cache(album)
                 album.set_tracks([App().player.current_track])
             else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/database.py 
new/lollypop-1.1.1/lollypop/database.py
--- old/lollypop-1.1.0/lollypop/database.py     2019-06-20 15:58:34.000000000 
+0200
+++ new/lollypop-1.1.1/lollypop/database.py     2019-06-23 15:43:48.000000000 
+0200
@@ -196,7 +196,7 @@
             @param track as str
             @param album as str
             @param artists as [str]
-            @return bool
+            @return object
         """
         artist_ids = []
         for artist in artists:
@@ -204,14 +204,14 @@
             artist_ids.append(artist_id)
         album_id = App().albums.get_id_by_name_artists(album, artist_ids)
         if album_id is None:
-            return False
+            return None
         elif App().albums.get_mtime(album_id) > 0 or track is None:
-            return True
+            return album_id
         else:
             track_id = App().tracks.get_id_by(track,
                                               album_id,
                                               artist_ids)
-            return track_id is not None
+            return track_id
 
 #######################
 # PRIVATE             #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/helper_lyrics.py 
new/lollypop-1.1.1/lollypop/helper_lyrics.py
--- old/lollypop-1.1.0/lollypop/helper_lyrics.py        2019-06-20 
15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/lollypop/helper_lyrics.py        2019-06-23 
15:43:48.000000000 +0200
@@ -35,7 +35,19 @@
         self.__timestamps = {}
         uri_no_ext = ".".join(track.uri.split(".")[:-1])
         self.__lrc_file = Gio.File.new_for_uri(uri_no_ext + ".lrc")
-        self.__get_timestamps()
+        if self.__lrc_file.query_exists():
+            self.__get_timestamps()
+        else:
+            from lollypop.tagreader import TagReader
+            reader = TagReader()
+            try:
+                info = reader.get_info(track.uri)
+            except:
+                info = None
+            if info is not None:
+                tags = info.get_tags()
+                for (lyrics, timestamp) in reader.get_synced_lyrics(tags):
+                    self.__timestamps[timestamp] = lyrics
 
     def get_lyrics_for_timestamp(self, timestamp):
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/helper_spotify.py 
new/lollypop-1.1.1/lollypop/helper_spotify.py
--- old/lollypop-1.1.0/lollypop/helper_spotify.py       2019-06-20 
15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/lollypop/helper_spotify.py       2019-06-23 
15:43:48.000000000 +0200
@@ -17,7 +17,7 @@
 from time import time, sleep
 
 from lollypop.logger import Logger
-from lollypop.objects import Album
+from lollypop.objects import Album, Track
 from lollypop.helper_task import TaskHelper
 from lollypop.define import SPOTIFY_CLIENT_ID, SPOTIFY_SECRET, App
 
@@ -305,10 +305,17 @@
         for item in payload:
             if cancellable.is_cancelled():
                 raise Exception("cancelled")
-            if App().db.exists_in_db(item["album"]["name"],
-                                     [artist["name"]
-                                     for artist in item["artists"]],
-                                     item["name"]):
+            track_id = App().db.exists_in_db(item["album"]["name"],
+                                             [artist["name"]
+                                             for artist in item["artists"]],
+                                             item["name"])
+            if track_id is not None:
+                track = Track(track_id)
+                if track.album.id not in album_ids:
+                    print("track", track.is_web)
+                    if track.is_web:
+                        self.__create_album(track.album.id, None, cancellable)
+                    album_ids.append(track.album.id)
                 continue
             (album_id,
              track_id,
@@ -334,10 +341,19 @@
         for album_item in payload:
             if cancellable.is_cancelled():
                 return
-            if App().db.exists_in_db(album_item["name"],
+            album_id = App().db.exists_in_db(
+                                     album_item["name"],
                                      [artist["name"]
-                                     for artist in album_item["artists"]],
-                                     None):
+                                      for artist in album_item["artists"]],
+                                     None)
+            if album_id is not None:
+                if album_id not in album_ids:
+                    album = Album(album_id)
+                    if album.tracks:
+                        track = album.tracks[0]
+                        if track.is_web:
+                            self.__create_album(album_id, None, cancellable)
+                    album_ids.append(album_id)
                 continue
             uri = "https://api.spotify.com/v1/albums/%s"; % album_item["id"]
             token = "Bearer %s" % self.__token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/menu_sync.py 
new/lollypop-1.1.1/lollypop/menu_sync.py
--- old/lollypop-1.1.0/lollypop/menu_sync.py    2019-06-20 15:58:34.000000000 
+0200
+++ new/lollypop-1.1.1/lollypop/menu_sync.py    2019-06-23 15:43:48.000000000 
+0200
@@ -57,23 +57,29 @@
             @param name as str
             @param status as bool
         """
+        def on_get_synced(synced, sync_action):
+            sync_action.set_state(GLib.Variant.new_boolean(synced))
+            sync_action.set_enabled(True)
+
         synced = False
         devices = list(App().settings.get_value("devices"))
         action_name = "sync_%s" % name
         encoded = sha256(action_name.encode("utf-8")).hexdigest()
+        sync_action = Gio.SimpleAction.new_stateful(
+                                          encoded,
+                                          None,
+                                          GLib.Variant.new_boolean(synced))
+        App().add_action(sync_action)
+        sync_action.set_enabled(False)
         try:
             if name == self.__all_devices:
                 index = 0
             else:
                 index = devices.index(name) + 1
-            synced = self._get_synced(index)
+            App().task_helper.run(self._get_synced, index,
+                                  callback=(on_get_synced, sync_action))
         except Exception as e:
             Logger.warning("SyncMenu::__add_sync_action(): %s", e)
-        sync_action = Gio.SimpleAction.new_stateful(
-                                          encoded,
-                                          None,
-                                          GLib.Variant.new_boolean(synced))
-        App().add_action(sync_action)
         if name != self.__all_devices:
             self.__actions.append(sync_action)
         sync_action.connect("change-state",
@@ -107,7 +113,7 @@
         action.set_state(variant)
         if name == self.__all_devices:
             synced = variant.get_boolean()
-            self._set_synced(0, synced)
+            App().task_helper.run(self._set_synced, 0, synced)
             for action in self.__actions:
                 action.set_enabled(not synced)
         else:
@@ -122,7 +128,9 @@
                 App().settings.set_value("devices",
                                          GLib.Variant("as", devices))
             index = devices.index(name) + 1
-            self._set_synced(index, variant.get_boolean())
+            App().task_helper.run(self._set_synced,
+                                  index,
+                                  variant.get_boolean())
 
 
 class SyncAlbumMenu(SyncMenu):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/selectionlist.py 
new/lollypop-1.1.1/lollypop/selectionlist.py
--- old/lollypop-1.1.0/lollypop/selectionlist.py        2019-06-20 
15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/lollypop/selectionlist.py        2019-06-23 
15:43:48.000000000 +0200
@@ -107,6 +107,14 @@
             self.add(self.__grid)
             self.set_artwork()
 
+    def set_label(self, string):
+        """
+            Set label for row
+            @param string as str
+        """
+        self.__name = string
+        self.__label.set_markup(GLib.markup_escape_text(string))
+
     def set_artwork(self):
         """
             set_artwork widget
@@ -282,12 +290,12 @@
         found = False
         for child in self.__listbox.get_children():
             if child.id == object_id:
-                child.set_name(name)
+                child.set_label(name)
                 found = True
                 break
         if not found:
             self.__fastscroll.clear()
-            row = self.__add_value((object_id, name, name))
+            row = self.__add_value(object_id, name, name)
             row.populate()
             if self.__mask & SelectionListMask.ARTISTS:
                 self.__fastscroll.populate()
@@ -308,7 +316,7 @@
         item_ids = set([child.id for child in self.__listbox.get_children()])
         for value in values:
             if not value[0] in item_ids:
-                row = self.__add_value(value)
+                row = self.__add_value(value[0], value[1], value[2])
                 row.populate()
         if self.__mask & SelectionListMask.ARTISTS:
             self.__fastscroll.populate()
@@ -437,7 +445,7 @@
     def __add_values(self, values):
         """
             Add values to the list
-            @param items as [(int,str)]
+            @param items as [(int, str, str)]
         """
         if values:
             (rowid, name, sortname) = values.pop(0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/tagreader.py 
new/lollypop-1.1.1/lollypop/tagreader.py
--- old/lollypop-1.1.0/lollypop/tagreader.py    2019-06-20 15:58:34.000000000 
+0200
+++ new/lollypop-1.1.1/lollypop/tagreader.py    2019-06-23 15:43:48.000000000 
+0200
@@ -467,7 +467,6 @@
     def get_lyrics(self, tags):
         """
             Return lyrics for tags
-            All this code sucks
             @parma tags as Gst.TagList
             @return lyrics as str
         """
@@ -535,6 +534,54 @@
             lyrics = get_ogg()
         return lyrics
 
+    def get_synced_lyrics(self, tags):
+        """
+            Return synced lyrics for tags
+            @parma tags as Gst.TagList
+            @return lyrics as ([str, int])
+        """
+        def decode_lyrics(bytes_list, encoding):
+            lyrics = []
+            from lollypop.utils import decodeUnicode, splitUnicode
+            try:
+                for frame in bytes_list:
+                    (l, t) = splitUnicode(frame, encoding)
+                    if l:
+                        lyrics.append((decodeUnicode(l, encoding),
+                                       int.from_bytes(t[1:4], "big")))
+            except Exception as e:
+                Logger.warning("TagReader::get_synced_lyrics1(): %s", e)
+            return lyrics
+
+        def get_id3():
+            try:
+                size = tags.get_tag_size("private-id3v2-frame")
+                for i in range(0, size):
+                    (exists, sample) = tags.get_sample_index(
+                        "private-id3v2-frame",
+                        i)
+                    if not exists:
+                        continue
+                    (exists, m) = sample.get_buffer().map(Gst.MapFlags.READ)
+                    if not exists:
+                        continue
+                    prefix = (m.data[0:4])
+                    if prefix not in [b"SYLT"]:
+                        continue
+                    frame = m.data[10:]
+                    encoding = frame[0:1]
+                    string = decode_lyrics(frame.split(b"\n"), encoding)
+                    if string is not None:
+                        return string
+            except Exception as e:
+                Logger.error("TagReader::get_synced_lyrics2(): %s" % e)
+            return ""
+
+        if tags is None:
+            return ""
+        lyrics = get_id3()
+        return lyrics
+
     def add_artists(self, artists, sortnames, mb_artist_ids=""):
         """
             Add artists to db
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/view_albums_box.py 
new/lollypop-1.1.1/lollypop/view_albums_box.py
--- old/lollypop-1.1.0/lollypop/view_albums_box.py      2019-06-20 
15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/lollypop/view_albums_box.py      2019-06-23 
15:43:48.000000000 +0200
@@ -18,6 +18,7 @@
 from lollypop.widgets_album_simple import AlbumSimpleWidget
 from lollypop.define import App, Type, ViewType
 from lollypop.objects import Album
+from lollypop.logger import Logger
 from lollypop.utils import get_icon_name, get_network_available
 from lollypop.controller_view import ViewController, ViewControllerType
 
@@ -128,19 +129,23 @@
         """
             Set active ids
         """
-        FlowBoxView._on_map(self, widget)
-        if self._view_type & ViewType.SMALL:
-            return
-        if self.__genre_ids:
-            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))
-        else:
-            App().settings.set_value("state-one-ids",
-                                     GLib.Variant("ai", self.__artist_ids))
-            App().settings.set_value("state-two-ids",
-                                     GLib.Variant("ai", []))
+        try:
+            FlowBoxView._on_map(self, widget)
+            if self._view_type & ViewType.SMALL:
+                return
+            if self.__genre_ids:
+                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))
+            else:
+                App().settings.set_value("state-one-ids",
+                                         GLib.Variant("ai", self.__artist_ids))
+                App().settings.set_value("state-two-ids",
+                                         GLib.Variant("ai", []))
+        except:
+            Logger.warning(
+                "https://gitlab.gnome.org/World/lollypop/issues/1864";)
 
 #######################
 # PRIVATE             #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/view_current_albums.py 
new/lollypop-1.1.1/lollypop/view_current_albums.py
--- old/lollypop-1.1.0/lollypop/view_current_albums.py  2019-06-20 
15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/lollypop/view_current_albums.py  2019-06-23 
15:43:48.000000000 +0200
@@ -15,7 +15,7 @@
 from gettext import gettext as _
 
 from lollypop.view_albums_list import AlbumsListView
-from lollypop.define import App, ViewType
+from lollypop.define import App, ViewType, MARGIN_SMALL
 
 
 class CurrentAlbumsView(AlbumsListView):
@@ -39,6 +39,7 @@
             "light-button-no-right-border")
         self.__clear_button.set_sensitive(App().player.albums)
         self.__clear_button.connect("clicked", self.__on_clear_clicked)
+        self.__clear_button.set_margin_end(MARGIN_SMALL)
         self.__save_button = Gtk.Button.new_from_icon_name(
             "document-new-symbolic",
             Gtk.IconSize.MENU)
@@ -70,6 +71,7 @@
             grid.add(self.__save_button)
             grid.add(self.__clear_button)
         grid.show_all()
+        grid.set_margin_bottom(MARGIN_SMALL)
         self.set_row_spacing(2)
         self.insert_row(0)
         self.attach(grid, 0, 0, 1, 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/view_playlists.py 
new/lollypop-1.1.1/lollypop/view_playlists.py
--- old/lollypop-1.1.0/lollypop/view_playlists.py       2019-06-20 
15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/lollypop/view_playlists.py       2019-06-23 
15:43:48.000000000 +0200
@@ -18,6 +18,7 @@
 from lollypop.view import LazyLoadingView
 from lollypop.widgets_playlist import PlaylistsWidget
 from lollypop.define import App, Type, ViewType, SidebarContent, MARGIN
+from lollypop.define import MARGIN_SMALL
 from lollypop.controller_view import ViewController, ViewControllerType
 from lollypop.widgets_playlist_banner import PlaylistBannerWidget
 
@@ -63,17 +64,24 @@
         self.__playlists_widget.show()
         self._viewport.add(self.__playlists_widget)
         self.__title_label.set_margin_start(MARGIN)
-        self.__duration_label.set_margin_start(MARGIN)
         self.__buttons.set_margin_end(MARGIN)
         if self.__view_type & (ViewType.POPOVER | ViewType.FULLSCREEN):
-            self.__duration_label.set_margin_end(MARGIN)
             self.__title_label.get_style_context().add_class("dim-label")
             self.__duration_label.get_style_context().add_class("dim-label")
             self.__widget.add(self.__title_label)
+            self.__jump_button = Gtk.Button.new_from_icon_name(
+                "go-jump-symbolic", Gtk.IconSize.BUTTON)
+            self.__jump_button.connect("clicked", self._on_jump_button_clicked)
+            self.__jump_button.set_relief(Gtk.ReliefStyle.NONE)
+            self.__jump_button.show()
+            self.__jump_button.set_margin_end(MARGIN_SMALL)
             self.__widget.add(self.__duration_label)
+            self.__widget.add(self.__jump_button)
+            self.__widget.set_margin_bottom(MARGIN_SMALL)
             self.add(self.__widget)
             self.add(self._scrolled)
         else:
+            self.__duration_label.set_margin_start(MARGIN)
             self._overlay = Gtk.Overlay.new()
             self._overlay.add(self._scrolled)
             self._overlay.show()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/lollypop/widgets_album_banner.py 
new/lollypop-1.1.1/lollypop/widgets_album_banner.py
--- old/lollypop-1.1.0/lollypop/widgets_album_banner.py 2019-06-20 
15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/lollypop/widgets_album_banner.py 2019-06-23 
15:43:48.000000000 +0200
@@ -101,6 +101,7 @@
         self.__grid = builder.get_object("grid")
         self.__widget = builder.get_object("widget")
         if view_type & ViewType.ALBUM:
+            menu_button.get_style_context().add_class("black-transparent")
             self.get_style_context().add_class("black")
             self.__artwork.get_style_context().add_class("black")
             self.connect("size-allocate", self.__on_size_allocate)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lollypop-1.1.0/meson.build 
new/lollypop-1.1.1/meson.build
--- old/lollypop-1.1.0/meson.build      2019-06-20 15:58:34.000000000 +0200
+++ new/lollypop-1.1.1/meson.build      2019-06-23 15:43:48.000000000 +0200
@@ -1,5 +1,5 @@
 project('lollypop',
-  version: '1.1.0',
+  version: '1.1.1',
   meson_version: '>= 0.40.0'
 )
 i18n = import('i18n')


Reply via email to