Hello community,

here is the log from the commit of package exaile for openSUSE:Factory checked 
in at 2014-11-11 01:10:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/exaile (Old)
 and      /work/SRC/openSUSE:Factory/.exaile.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "exaile"

Changes:
--------
--- /work/SRC/openSUSE:Factory/exaile/exaile.changes    2014-11-04 
17:29:43.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.exaile.new/exaile.changes       2014-11-11 
01:11:51.000000000 +0100
@@ -1,0 +2,11 @@
+Mon Nov 10 10:02:40 UTC 2014 - sor.ale...@meowr.ru
+
+- Update to 3.4.2:
+  * Exaile did not always update individual files when changed
+    externally.
+  * Add an option to 'force rescan' of files for users with
+    misbehaving external tagger applications.
+  * GroupTagger plugin: Potential tag loss when using externally
+    modified files.
+
+-------------------------------------------------------------------

Old:
----
  3.4.1.tar.gz

New:
----
  3.4.2.tar.gz

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

Other differences:
------------------
++++++ exaile.spec ++++++
--- /var/tmp/diff_new_pack.NqPakR/_old  2014-11-11 01:11:54.000000000 +0100
+++ /var/tmp/diff_new_pack.NqPakR/_new  2014-11-11 01:11:54.000000000 +0100
@@ -18,7 +18,7 @@
 
 Name:           exaile
 %define _name   Exaile
-Version:        3.4.1
+Version:        3.4.2
 Release:        0
 Summary:        Gtk2 Amarok-like music player
 License:        GPL-3.0+
@@ -28,13 +28,12 @@
 BuildRequires:  dos2unix
 BuildRequires:  fdupes
 BuildRequires:  help2man
-BuildRequires:  python >= 2.6
+BuildRequires:  python-devel >= 2.6
 BuildRequires:  python-gobject-devel >= 2.18
 BuildRequires:  update-desktop-files
 Requires:       dbus-1-python
 Requires:       gdk-pixbuf-loader-rsvg
 Requires:       gstreamer010-plugins-good
-Requires:       python >= 2.6
 Requires:       python-gobject >= 2.18
 Requires:       python-gstreamer010
 Requires:       python-gtk >= 2.17
@@ -45,8 +44,8 @@
 Recommends:     moodbar
 Recommends:     python-CDDB
 Recommends:     python-gpod
-Recommends:     python-imaging
 Recommends:     python-notify
+Recommends:     python-Pillow
 Recommends:     python-webkitgtk >= 1.1.2
 BuildArch:      noarch
 
@@ -71,14 +70,14 @@
 %prep
 %setup -q
 # Fix locale search location.
-sed -i "s|\(locale_path = \).*|\1'%{_datadir}/locale'|" xl/nls.py
+sed -i "s|\(locale_path = \).*$|\1'%{_datadir}/locale'|" xl/nls.py
 
 %build
 make %{?_smp_mflags}
 
 %install
 # Exaile launcher works with LIBINSTALLDIR which is a relative path from 
%%{_prefix}.
-export data=$(python -c "import os.path; print os.path.relpath('%{_datadir}', 
'%{_prefix}')")
+export data=$(python2 -c "import os.path; print os.path.relpath('%{_datadir}', 
'%{_prefix}')")
 
 %make_install PREFIX=%{_prefix} LIBINSTALLDIR="/$data"
 

++++++ 3.4.1.tar.gz -> 3.4.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/Makefile new/exaile-3.4.2/Makefile
--- old/exaile-3.4.1/Makefile   2014-11-01 18:43:02.000000000 +0100
+++ new/exaile-3.4.2/Makefile   2014-11-10 04:52:19.000000000 +0100
@@ -180,7 +180,7 @@
 dist:
        mkdir -p dist
        rm -rf dist/copy
-       bzr export dist/copy/
+       git archive HEAD --prefix=copy/ | tar -x -C dist
        ./tools/dist.sh
        rm -rf dist/copy
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/data/exaile.appdata.xml 
new/exaile-3.4.2/data/exaile.appdata.xml
--- old/exaile-3.4.1/data/exaile.appdata.xml    2014-11-01 18:43:02.000000000 
+0100
+++ new/exaile-3.4.2/data/exaile.appdata.xml    2014-11-10 04:52:19.000000000 
+0100
@@ -22,7 +22,7 @@
   </p>
  </description>
  <screenshots>
-  <screenshot type="default" width="800" 
height="600">http://i.imgur.com/aD43iaZ.png</screenshot>
+  <screenshot type="default" width="800" 
height="600">http://www.exaile.org/public/images/exaile-3.4.png</screenshot>
  </screenshots>
  <url type="homepage">http://www.exaile.org</url>
  <updatecontact>exaile-de...@googlegroups.com</updatecontact>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/data/ui/collection_manager.ui 
new/exaile-3.4.2/data/ui/collection_manager.ui
--- old/exaile-3.4.1/data/ui/collection_manager.ui      2014-11-01 
18:43:02.000000000 +0100
+++ new/exaile-3.4.2/data/ui/collection_manager.ui      2014-11-10 
04:52:19.000000000 +0100
@@ -175,6 +175,20 @@
                     <property name="position">2</property>
                   </packing>
                 </child>
+                <child>
+                  <object class="GtkButton" id="force_rescan_button">
+                    <property name="label" translatable="yes">Rescan 
Collection (slow)</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <signal name="clicked" 
handler="on_force_rescan_button_clicked" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/doc/conf.py new/exaile-3.4.2/doc/conf.py
--- old/exaile-3.4.1/doc/conf.py        2014-11-01 18:43:02.000000000 +0100
+++ new/exaile-3.4.2/doc/conf.py        2014-11-10 04:52:19.000000000 +0100
@@ -105,9 +105,16 @@
 
 # -- Options for HTML output 
---------------------------------------------------
 
-# The theme to use for HTML and HTML Help pages.  Major themes that come with
-# Sphinx are currently 'default' and 'sphinxdoc'.
-html_theme = 'default'
+# on_rtd is whether we are on readthedocs.org, this line of code grabbed from 
docs.readthedocs.org
+on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
+
+if not on_rtd:  # only import and set the theme if we're building docs locally
+    import sphinx_rtd_theme
+    html_theme = 'sphinx_rtd_theme'
+    html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
+else:
+    html_theme = 'default'
+
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/doc/index.rst 
new/exaile-3.4.2/doc/index.rst
--- old/exaile-3.4.1/doc/index.rst      2014-11-01 18:43:02.000000000 +0100
+++ new/exaile-3.4.2/doc/index.rst      2014-11-10 04:52:19.000000000 +0100
@@ -13,6 +13,12 @@
 ReplayGain, output via a secondary output device (great for DJs!), and
 much more.
 
+.. toctree::
+    :hidden:
+    
+    user/index
+    dev/index
+
 * :doc:`user/index`
 * :doc:`dev/index`
 * :ref:`search`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/doc/user/faq.rst 
new/exaile-3.4.2/doc/user/faq.rst
--- old/exaile-3.4.1/doc/user/faq.rst   1970-01-01 01:00:00.000000000 +0100
+++ new/exaile-3.4.2/doc/user/faq.rst   2014-11-10 04:52:19.000000000 +0100
@@ -0,0 +1,44 @@
+Frequently Asked Questions
+==========================
+
+Error "no suitable plugin found" when playing a (.mp3, .m4a, etc)
+-----------------------------------------------------------------
+
+Exaile currently uses GStreamer 0.10 to decode/play audio files, and does not
+directly decode audio itself. For playback to work, you need to have the
+correct GStreamer plugins installed. 
+
+.. note:: For Linux users, you may find that other GStreamer programs can
+          play specific file type, but Exaile cannot. Check to make sure that
+          the correct plugins are installed for GStreamer 0.10, as other 
+          players may be using GStreamer 1.x instead. 
+
+
+File tags don't update when I change them using an external program
+-------------------------------------------------------------------
+
+When setting up your collection, ensure that the 'monitored' and 'scan on
+startup' options are checked, otherwise Exaile may become out of sync with
+your collection if it is modified by external programs.
+
+To detect that the file has changed, Exaile checks to see if the
+modification time of the file has changed. This makes rescans much
+quicker.
+
+Some third-party taggers (notably EasyTag) have options where they do not
+update the modification time of the file when they change the contents of
+the file. In these cases, Exaile may not be able to detect that the file
+has changed. To remain compatible with Exaile (and other media players),
+you should configure your tagger to update the modification time.
+
+.. note:: As of Exaile 3.4.2, there is a menu option called 'Rescan Collection
+          (slow)' which will force a rescan of every file in your collections,
+          regardless of whether the modification time has changed. This should
+          detect any changes to your collection.
+
+How do I enable output to a secondary soundcard?
+------------------------------------------------
+
+**A**: Enable the 'preview device' plugin. You can change the secondary
+output device settings by editing the plugin's settings.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/doc/user/index.rst 
new/exaile-3.4.2/doc/user/index.rst
--- old/exaile-3.4.1/doc/user/index.rst 2014-11-01 18:43:02.000000000 +0100
+++ new/exaile-3.4.2/doc/user/index.rst 2014-11-10 04:52:19.000000000 +0100
@@ -10,6 +10,7 @@
     install
     win32
     osx
+    faq
    
 
 Support
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/plugins/grouptagger/gt_widgets.py 
new/exaile-3.4.2/plugins/grouptagger/gt_widgets.py
--- old/exaile-3.4.1/plugins/grouptagger/gt_widgets.py  2014-11-01 
18:43:02.000000000 +0100
+++ new/exaile-3.4.2/plugins/grouptagger/gt_widgets.py  2014-11-10 
04:52:19.000000000 +0100
@@ -585,7 +585,7 @@
         '''
         
         defaults = {}
-        set_groups = set()
+        set_groups = set() # this holds all groups that were found
         
         # validate it
         for category, (visible, cgroups) in group_categories.iteritems():
@@ -597,9 +597,11 @@
                     
             defaults[category] = (visible, dcgroups)
                 
+        # Add anything left over to uncategorized
         groups = set(groups).difference( set_groups )        
         if len(groups):
-            defaults[uncategorized] = (True, [(True, group) for group in 
groups])
+            other = defaults.setdefault(uncategorized, (True, []))
+            other[1].extend([(True, group) for group in groups])
         
         self.view.freeze_child_notify()
         self.view.set_model( None )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/tools/osx/create_dmg.sh 
new/exaile-3.4.2/tools/osx/create_dmg.sh
--- old/exaile-3.4.1/tools/osx/create_dmg.sh    2014-11-01 18:43:02.000000000 
+0100
+++ new/exaile-3.4.2/tools/osx/create_dmg.sh    2014-11-10 04:52:19.000000000 
+0100
@@ -1,10 +1,12 @@
 #!/bin/bash
 
+set -e
+
 cd $(dirname "$0")/../..
 rm -rf dist/copy
 
 mkdir -p dist
-bzr export dist/copy
+git archive HEAD --prefix=copy/ | tar -x -C dist
 
 EXAILE_DIR='.'
 
PYTHONPATH="/Library/Frameworks/GStreamer.framework/Libraries/python2.7/site-packages/"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/xl/collection.py 
new/exaile-3.4.2/xl/collection.py
--- old/exaile-3.4.1/xl/collection.py   2014-11-01 18:43:02.000000000 +0100
+++ new/exaile-3.4.2/xl/collection.py   2014-11-10 04:52:19.000000000 +0100
@@ -77,16 +77,18 @@
     """
         Scans the collection
     """
-    def __init__(self, collection, startup_scan=False):
+    def __init__(self, collection, startup_scan=False, force_update=False):
         """
             Initializes the thread
 
             :param collection: the collection to scan
             :param startup_scan: Only scan libraries scanned at startup
+            :param force_update: Update files regardless whether they've 
changed
         """
         common.ProgressThread.__init__(self)
         
         self.startup_scan = startup_scan
+        self.force_update = force_update
         self.collection = collection
 
     def stop(self):
@@ -103,7 +105,8 @@
         event.add_callback(self.on_scan_progress_update,
             'scan_progress_update')
 
-        self.collection.rescan_libraries(startup_only=self.startup_scan)
+        self.collection.rescan_libraries(startup_only=self.startup_scan,
+                                         force_update=self.force_update)
 
         event.remove_callback(self.on_scan_progress_update,
             'scan_progress_update')
@@ -238,7 +241,7 @@
         """
         return self.libraries.values()
 
-    def rescan_libraries(self, startup_only=False):
+    def rescan_libraries(self, startup_only=False, force_update=False):
         """
             Rescans all libraries associated with this Collection
         """
@@ -259,12 +262,12 @@
 
         for library in self.libraries.itervalues():
             
-            if startup_only and not (library.monitored and 
library.startup_scan):
+            if not force_update and startup_only and not (library.monitored 
and library.startup_scan):
                 continue
             
             event.add_callback(self._progress_update, 'tracks_scanned',
                 library)
-            library.rescan(notify_interval=scan_interval)
+            library.rescan(notify_interval=scan_interval, 
force_update=force_update)
             event.remove_callback(self._progress_update, 'tracks_scanned',
                 library)
             self._running_total_count += self._running_count
@@ -444,6 +447,8 @@
     def __process_change_queue(self, gfile):
         if gfile in self.__queue:
             added_tracks = trax.util.get_tracks_from_uri(gfile.get_uri())
+            for tr in added_tracks:
+                tr.read_tags()
             self.__library.collection.add_tracks(added_tracks)
             del self.__queue[gfile]
 
@@ -451,9 +456,12 @@
         """
             Updates the library on changes of the location
         """
+        
         if event == gio.FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
             self.__process_change_queue(gfile)
-        elif event == gio.FILE_MONITOR_EVENT_CREATED:
+        elif event == gio.FILE_MONITOR_EVENT_CREATED or \
+             event == gio.FILE_MONITOR_EVENT_CHANGED:
+            
             # Enqueue tracks retrieval
             if gfile not in self.__queue:
                 self.__queue[gfile] = True
@@ -692,12 +700,14 @@
 
         ccheck[basedir][album].append(artist)
 
-    def update_track(self, gloc):
+    def update_track(self, gloc, force_update=False):
         """
             Rescan the track at a given location
 
             :param gloc: the location
             :type gloc: :class:`gio.File`
+            :param force_update: Force update of file (default only updates 
file
+                                 when mtime has changed)
 
             returns: the Track object, None if it could not be updated
         """
@@ -707,7 +717,7 @@
         mtime = gloc.query_info("time::modified").get_modification_time()
         tr = self.collection.get_track_by_loc(uri)
         if tr:
-            if tr.get_tag_raw('__modified') < mtime:
+            if force_update or tr.get_tag_raw('__modified') < mtime:
                 tr.read_tags()
                 tr.set_tag_raw('__modified', mtime)
         else:
@@ -723,7 +733,7 @@
                 self.collection.add(tr)
         return tr
 
-    def rescan(self, notify_interval=None):
+    def rescan(self, notify_interval=None, force_update=False):
         """
             Rescan the associated folder and add the contained files
             to the Collection
@@ -767,7 +777,7 @@
                 compilations = deque()
                 ccheck = {}
             elif type == gio.FILE_TYPE_REGULAR:
-                tr = self.update_track(fil)
+                tr = self.update_track(fil, force_update=force_update)
                 if not tr:
                     continue
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/xl/version.py 
new/exaile-3.4.2/xl/version.py
--- old/exaile-3.4.1/xl/version.py      2014-11-01 18:43:02.000000000 +0100
+++ new/exaile-3.4.2/xl/version.py      2014-11-10 04:52:19.000000000 +0100
@@ -27,7 +27,7 @@
 import xdg
 
 major = "3.4"
-minor = "1"
+minor = "2"
 extra = ""
 
 def get_latest_bzr_revno(directory):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/xlgui/__init__.py 
new/exaile-3.4.2/xlgui/__init__.py
--- old/exaile-3.4.1/xlgui/__init__.py  2014-11-01 18:43:02.000000000 +0100
+++ new/exaile-3.4.2/xlgui/__init__.py  2014-11-10 04:52:19.000000000 +0100
@@ -298,13 +298,20 @@
         """
         self.rescan_collection_with_progress()
         
-    def rescan_collection_with_progress(self, startup=False):
+    def on_rescan_collection_forced(self, *e):
+        """
+            Called when the user wishes to rescan the collection slowly
+        """
+        self.rescan_collection_with_progress(force_update=True)
+        
+    def rescan_collection_with_progress(self, startup=False, 
force_update=False):
         
         libraries = self.exaile.collection.get_libraries()
         if not self.exaile.collection._scanning and len(libraries) > 0:
             from xl.collection import CollectionScanThread
 
-            thread = CollectionScanThread(self.exaile.collection, 
startup_scan=startup)
+            thread = CollectionScanThread(self.exaile.collection, 
startup_scan=startup,
+                                          force_update=force_update)
             thread.connect('done', self.on_rescan_done)
             self.progress_manager.add_monitor(thread,
                 _("Scanning collection..."), gtk.STOCK_REFRESH)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/xlgui/collection.py 
new/exaile-3.4.2/xlgui/collection.py
--- old/exaile-3.4.1/xlgui/collection.py        2014-11-01 18:43:02.000000000 
+0100
+++ new/exaile-3.4.2/xlgui/collection.py        2014-11-10 04:52:19.000000000 
+0100
@@ -179,6 +179,14 @@
         from xlgui import main
         main.mainwindow().controller.on_rescan_collection()
         
+    def on_force_rescan_button_clicked(self, widget):
+        """
+            Triggers a slow rescan of the collection
+        """
+        
+        from xlgui import main
+        main.mainwindow().controller.on_rescan_collection_forced()
+        
     
     def on_selection_changed(self, selection):
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exaile-3.4.1/xlgui/menu.py 
new/exaile-3.4.2/xlgui/menu.py
--- old/exaile-3.4.1/xlgui/menu.py      2014-11-01 18:43:02.000000000 +0100
+++ new/exaile-3.4.2/xlgui/menu.py      2014-11-10 04:52:19.000000000 +0100
@@ -217,6 +217,9 @@
     
     items.append(_smi('scan-collection', [items[-1].name], _('Re_scan 
Collection'),
         gtk.STOCK_REFRESH, get_main().controller.on_rescan_collection))
+    
+    items.append(_smi('slow-scan-collection', [items[-1].name], _('Rescan 
Collection (slow)'),
+        gtk.STOCK_REFRESH, get_main().controller.on_rescan_collection_forced))
 
     items.append(_smi('track-properties', [items[-1].name], _('Track 
_Properties'),
         gtk.STOCK_PROPERTIES, get_main().controller.on_track_properties))

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to