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