Hello community,
here is the log from the commit of package banshee-1 for openSUSE:Factory
checked in at Fri Feb 6 21:14:11 CET 2009.
--------
--- GNOME/banshee-1/banshee-1.changes 2009-01-21 01:23:30.000000000 +0100
+++ banshee-1/banshee-1.changes 2009-02-04 19:14:21.000000000 +0100
@@ -1,0 +2,26 @@
+Wed Feb 4 12:09:54 CST 2009 - gburt@suse.de
+
+- Patch fixing playlists not being saved to DAPs (bnc#472526)
+- Patch fixing adding files to MTP devices (bnc#472524)
+- Patch renaming sr@Latn translation to sr@latin (bnc#472522)
+
+-------------------------------------------------------------------
+Thu Jan 30 13:58:14 CST 2009 - gburt@suse.de
+
+- Patch fixing freeze on DAP load (bnc#465214)
+- Patch fixing crash on delete from File System Queue (bnc#467377)
+- Patch fixing crash on MTP device load (bnc#470722)
+- Patch fixing hang while loading streams (bnc#376532)
+
+-------------------------------------------------------------------
+Wed Jan 21 18:56:25 EST 2009 - abockover@novell.com
+
+- Patch to fix RPMLINT warning about trailing ; on MimeType field
+ in .desktop files
+- Remove some legacy hacks for dealing with openSUSE < 10.3
+- Add logic to bundle certain assemblies when we are building from
+ the upstream/devel OBS project (Banshee) and not openSUSE or SLE
+ to allow us to do safe intermediate upgrades of packages outside
+ of the distro
+
+-------------------------------------------------------------------
@@ -7,0 +34,5 @@
+Mon Jan 12 15:25:27 EST 2009 - mauro@suse.de
+
+- Translations update.
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
New:
----
bnc376532-fix-radio-hang-lack-of-feedback.patch
bnc465214-freeze-on-dap-load.patch
bnc467377-crash-on-delete-from-fsq.patch
bnc470722-fix-mtp-device-crash.patch
bnc472522-sr-latn-translation-breaks-build.patch
bnc472524-adding-files-to-mtp-device-fails.patch
bnc472526-dap-playlists-not-saved.patch
bundleize-pkg-config.awk
desktop-file-trailing-semicolon.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ banshee-1.spec ++++++
--- /var/tmp/diff_new_pack.y22887/_old 2009-02-06 21:02:09.000000000 +0100
+++ /var/tmp/diff_new_pack.y22887/_new 2009-02-06 21:02:09.000000000 +0100
@@ -20,13 +20,22 @@
Name: banshee-1
Version: 1.4.2
-Release: 1
+Release: 2
License: X11/MIT
Summary: A music playback and management application
Group: Productivity/Multimedia/Sound/Players
Url: http://banshee-project.org/
Source0: %{name}-%{version}.tar.bz2
-Source1: banshee-po.tar.bz2
+Source1: bundleize-pkg-config.awk
+Source2: banshee-po.tar.bz2
+Patch0: desktop-file-trailing-semicolon.patch
+Patch1: bnc465214-freeze-on-dap-load.patch
+Patch2: bnc467377-crash-on-delete-from-fsq.patch
+Patch3: bnc470722-fix-mtp-device-crash.patch
+Patch4: bnc376532-fix-radio-hang-lack-of-feedback.patch
+Patch5: bnc472526-dap-playlists-not-saved.patch
+Patch6: bnc472524-adding-files-to-mtp-device-fails.patch
+Patch7: bnc472522-sr-latn-translation-breaks-build.patch
AutoReqProv: on
PreReq: filesystem gconf2
ExcludeArch: s390 s390x
@@ -34,16 +43,15 @@
BuildRequires: intltool perl-XML-Parser update-desktop-files
BuildRequires: gnome-desktop-devel gnome-vfs2-devel gstreamer010-plugins-base-devel sqlite-devel >= 3.4
BuildRequires: gconf-sharp2 glade-sharp2 gtk-sharp2
-BuildRequires: mono-addins mono-data-sqlite mono-devel taglib-sharp
+BuildRequires: mono-data-sqlite mono-devel mono-zeroconf
BuildRequires: ndesk-dbus ndesk-dbus-glib-devel
BuildRequires: ipod-sharp >= 0.8.1 libmtp-devel
-BuildRequires: mono-zeroconf
%if %suse_version > 1100
%define have_boo 1
BuildRequires: boo-devel >= 0.8.1
%endif
Requires: mono-core gstreamer010-plugins-good
-Requires: mono-addins >= 0.3 taglib-sharp >= 2.0 ndesk-dbus >= 0.5 ndesk-dbus-glib >= 0.3
+Requires: ndesk-dbus >= 0.5 ndesk-dbus-glib >= 0.3
Requires: %{name}-lang = %{version}
Requires: %{name}-backend-engine-gstreamer = %{version}
Requires: %{name}-backend-platform-unix = %{version}
@@ -51,21 +59,14 @@
Recommends: %{name}-extensions-default = %{version}
Obsoletes: banshee helix-banshee
Provides: banshee = %{version} helix-banshee = %{version}
-# Defines so we can run on older SUSE versions
-%if %suse_version < 1030
-%define sysconfdirprivate etc/opt/gnome
-%define gnomeprefixprivate opt/gnome
-%else
-%define sysconfdirprivate etc
-%define gnomeprefixprivate usr
+%define upstream_project 0
+%if %(echo '%distribution' | grep -Ec '^home:.+:Banshee.*/|^Banshee')
+%define upstream_project 1
%endif
-%define sysconfdir /%{sysconfdirprivate}
-%define gnomeprefix /%{gnomeprefixprivate}
-# Hopefully we can get rid of this soon... currently not
-# needing it, but we have before, and we may again :-/
-%define autobuild 0
-%if ! %(echo '%distribution' | grep -c '^Banshee')
-%define autobuild 1
+%if %upstream_project == 1
+BuildRequires: mono-addins >= 0.4 taglib-sharp >= 2.0.3.1
+%else
+BuildRequires: mono-addins taglib-sharp
%endif
%description
@@ -90,8 +91,11 @@
AutoReqProv: on
Requires: %{name} = %{version}
Requires: gstreamer010-devel gstreamer010-plugins-base-devel gnome-vfs2-devel gtk2-devel
-Requires: gtk-sharp2 gconf-sharp2
-Requires: taglib-sharp ndesk-dbus ndesk-dbus-glib-devel mono-addins glib-sharp2
+Requires: glib-sharp2 gtk-sharp2 gconf-sharp2
+Requires: ndesk-dbus ndesk-dbus-glib-devel
+%if %upstream_project == 0
+Requires: taglib-sharp mono-addins
+%endif
%description devel
Users who wish to extend Banshee should install this package. It
@@ -200,27 +204,54 @@
%lang_package
%prep
-%setup -q -a1
+%setup -q -a2
+%patch0
+%patch1
+%patch2
+%patch3
+%patch4
+%patch5
+%patch6
+%patch7
+# update pkg-config files for the -devel package since we internalize
+# some BuildRequires in cases where we will upgrade a package that
+# might also be provided by the distro (e.g. taglib-sharp)
+%if %upstream_project == 1
+pushd $RPM_BUILD_DIR/%{name}-%{version}/build/pkg-config
+for pkg_config in *.pc.in; do
+ awk -f %{S:1} < $pkg_config > ${pkg_config}.in
+ mv ${pkg_config}.in $pkg_config
+done
+popd
+%endif
%build
%{?env_options}
%configure \
- --prefix=%{_prefix} \
- --libdir=%{_prefix}/%{_lib} \
- --sysconfdir=%{sysconfdir} \
--with-vendor-build-id="%distribution" \
%if !0%{?have_boo}
--disable-boo \
%endif
--disable-docs
-make
+%{__make} %{?jobs:-j%jobs}
%install
%makeinstall
%find_lang %{name}
-chmod -x $RPM_BUILD_ROOT%{_prefix}/%{_lib}/banshee-1/*.config
-chmod -x $RPM_BUILD_ROOT%{_prefix}/%{_lib}/banshee-1/*/*.config
+chmod -x $RPM_BUILD_ROOT%{_libdir}/banshee-1/*.config
+chmod -x $RPM_BUILD_ROOT%{_libdir}/banshee-1/*/*.config
%suse_update_desktop_file -N "Banshee" -G "Media Player" %{name}
+%suse_update_desktop_file %{name}-audiocd
+%suse_update_desktop_file %{name}-media-player
+# If we are building for upstream, we want to bundle libraries that
+# we might want to differ from the downstream distribution
+%if %upstream_project == 1
+for package in taglib-sharp mono-addins; do
+ for assembly in $(find %{_prefix}/lib/mono/${package}/ -name \*.dll); do
+ cp $(dirname $(readlink -e $assembly))/* $RPM_BUILD_ROOT%{_libdir}/banshee-1
+ done
+done
+%endif
%clean
rm -rf "$RPM_BUILD_ROOT"
@@ -228,10 +259,10 @@
%files
%defattr(-,root,root)
%doc NEWS COPYING AUTHORS README
-%dir %{_prefix}/%{_lib}/banshee-1
-%dir %{_prefix}/%{_lib}/banshee-1/Extensions
-%dir %{_prefix}/%{_lib}/banshee-1/Backends
-%dir %{_prefix}/%{_lib}/banshee-1/gstreamer-0.10
+%dir %{_libdir}/banshee-1
+%dir %{_libdir}/banshee-1/Extensions
+%dir %{_libdir}/banshee-1/Backends
+%dir %{_libdir}/banshee-1/gstreamer-0.10
%dir %{_datadir}/banshee-1
%dir %{_datadir}/banshee-1/audio-profiles
%dir %{_datadir}/banshee-1/icons
@@ -239,26 +270,26 @@
%dir %{_datadir}/banshee-1/icons/hicolor/*
%dir %{_datadir}/banshee-1/icons/hicolor/*/*
%{_prefix}/bin/banshee-1
-%{_prefix}/%{_lib}/banshee-1/libbanshee.so
-%{_prefix}/%{_lib}/banshee-1/gstreamer-0.10/libgstequalizer.so
-%{_prefix}/%{_lib}/banshee-1/Hyena.dll*
-%{_prefix}/%{_lib}/banshee-1/Hyena.Gui.dll*
-%{_prefix}/%{_lib}/banshee-1/Migo.dll*
-%{_prefix}/%{_lib}/banshee-1/MusicBrainz.dll*
-%{_prefix}/%{_lib}/banshee-1/Mono.Media.dll*
-%{_prefix}/%{_lib}/banshee-1/Lastfm.dll*
-%{_prefix}/%{_lib}/banshee-1/Lastfm.Gui.dll*
-%{_prefix}/%{_lib}/banshee-1/Banshee.Core.dll*
-%{_prefix}/%{_lib}/banshee-1/Banshee.Services.dll*
-%{_prefix}/%{_lib}/banshee-1/Banshee.Services.addins
-%{_prefix}/%{_lib}/banshee-1/Banshee.Widgets.dll*
-%{_prefix}/%{_lib}/banshee-1/Banshee.ThickClient.dll*
-%{_prefix}/%{_lib}/banshee-1/Banshee.CollectionIndexer.dll*
-%{_prefix}/%{_lib}/banshee-1/Banshee.exe*
-%{_prefix}/%{_lib}/banshee-1/Nereid.exe*
-%{_prefix}/%{_lib}/banshee-1/Halie.exe*
-%{_prefix}/%{_lib}/banshee-1/Beroe.exe*
-%{_prefix}/%{_lib}/banshee-1/Muinshee.exe*
+%{_libdir}/banshee-1/libbanshee.so
+%{_libdir}/banshee-1/gstreamer-0.10/libgstequalizer.so
+%{_libdir}/banshee-1/Hyena.dll*
+%{_libdir}/banshee-1/Hyena.Gui.dll*
+%{_libdir}/banshee-1/Migo.dll*
+%{_libdir}/banshee-1/MusicBrainz.dll*
+%{_libdir}/banshee-1/Mono.Media.dll*
+%{_libdir}/banshee-1/Lastfm.dll*
+%{_libdir}/banshee-1/Lastfm.Gui.dll*
+%{_libdir}/banshee-1/Banshee.Core.dll*
+%{_libdir}/banshee-1/Banshee.Services.dll*
+%{_libdir}/banshee-1/Banshee.Services.addins
+%{_libdir}/banshee-1/Banshee.Widgets.dll*
+%{_libdir}/banshee-1/Banshee.ThickClient.dll*
+%{_libdir}/banshee-1/Banshee.CollectionIndexer.dll*
+%{_libdir}/banshee-1/Banshee.exe*
+%{_libdir}/banshee-1/Nereid.exe*
+%{_libdir}/banshee-1/Halie.exe*
+%{_libdir}/banshee-1/Beroe.exe*
+%{_libdir}/banshee-1/Muinshee.exe*
%{_datadir}/dbus-1/services/org.bansheeproject.Banshee.service
%{_datadir}/dbus-1/services/org.bansheeproject.CollectionIndexer.service
%{_datadir}/banshee-1/audio-profiles/*.xml
@@ -269,63 +300,67 @@
%{_datadir}/banshee-1/icons/hicolor/*/actions/media-repeat-single.png
%{_datadir}/banshee-1/icons/hicolor/*/actions/encode.png
%{_datadir}/applications/banshee-1*.desktop
-%{gnomeprefix}/share/icons/hicolor/16x16/apps/media-player-banshee.png
-%{gnomeprefix}/share/icons/hicolor/22x22/apps/media-player-banshee.png
-%{gnomeprefix}/share/icons/hicolor/24x24/apps/media-player-banshee.png
-%{gnomeprefix}/share/icons/hicolor/32x32/apps/media-player-banshee.png
-%{gnomeprefix}/share/icons/hicolor/48x48/apps/media-player-banshee.png
-%{gnomeprefix}/share/icons/hicolor/192x192/apps/media-player-banshee.png
+%{_datadir}/icons/hicolor/16x16/apps/media-player-banshee.png
+%{_datadir}/icons/hicolor/22x22/apps/media-player-banshee.png
+%{_datadir}/icons/hicolor/24x24/apps/media-player-banshee.png
+%{_datadir}/icons/hicolor/32x32/apps/media-player-banshee.png
+%{_datadir}/icons/hicolor/48x48/apps/media-player-banshee.png
+%{_datadir}/icons/hicolor/192x192/apps/media-player-banshee.png
+%if %upstream_project == 1
+%{_libdir}/banshee-1/taglib-sharp.dll*
+%{_libdir}/banshee-1/Mono.Addins*.dll*
+%endif
%files lang -f %{name}.lang
%files devel
%defattr(-,root,root)
-%{_prefix}/%{_lib}/banshee-1/gconf-schema-extractor.exe
-%{_prefix}/%{_lib}/pkgconfig/banshee-1-*.pc
-%exclude %{_prefix}/%{_lib}/banshee-1/libbanshee.*a
-%exclude %{_prefix}/%{_lib}/banshee-1/gstreamer-0.10/libgstequalizer.*a
+%{_libdir}/banshee-1/gconf-schema-extractor.exe
+%{_libdir}/pkgconfig/banshee-1-*.pc
+%exclude %{_libdir}/banshee-1/libbanshee.*a
+%exclude %{_libdir}/banshee-1/gstreamer-0.10/libgstequalizer.*a
%files backend-engine-gstreamer
%defattr(-,root,root)
-%{_prefix}/%{_lib}/banshee-1/Backends/Banshee.GStreamer.dll*
+%{_libdir}/banshee-1/Backends/Banshee.GStreamer.dll*
%files backend-platform-unix
%defattr(-,root,root)
-%{_prefix}/%{_lib}/banshee-1/Backends/Banshee.Unix.dll*
-%{_prefix}/%{_lib}/banshee-1/Backends/Banshee.Hal.dll*
+%{_libdir}/banshee-1/Backends/Banshee.Unix.dll*
+%{_libdir}/banshee-1/Backends/Banshee.Hal.dll*
%files backend-platform-gnome
%defattr(-,root,root)
-%{_prefix}/%{_lib}/banshee-1/Backends/Banshee.Gnome.dll*
-%{_prefix}/%{_lib}/banshee-1/Backends/Banshee.NowPlaying.X11.dll*
-%{_prefix}/%{_lib}/banshee-1/Backends/libbnpx11.so
+%{_libdir}/banshee-1/Backends/Banshee.Gnome.dll*
+%{_libdir}/banshee-1/Backends/Banshee.NowPlaying.X11.dll*
+%{_libdir}/banshee-1/Backends/libbnpx11.so
%{_datadir}/banshee-1/icons/hicolor/*/actions/media-write-cd.png
-%exclude %{_prefix}/%{_lib}/banshee-1/Backends/libbnpx11.*a
+%exclude %{_libdir}/banshee-1/Backends/libbnpx11.*a
%files extensions-default
%defattr(-,root,root)
-%{_prefix}/%{_lib}/banshee-1/Mtp.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.InternetRadio.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.Daap.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.Bookmarks.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.CoverArt.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.FileSystemQueue.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.Lastfm.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.MultimediaKeys.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.NotificationArea.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.PlayQueue.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.NowPlaying.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.AudioCd.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.Podcasting.dll*
+%{_libdir}/banshee-1/Mtp.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.InternetRadio.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.Daap.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.Bookmarks.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.CoverArt.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.FileSystemQueue.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.Lastfm.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.MultimediaKeys.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.NotificationArea.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.PlayQueue.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.NowPlaying.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.AudioCd.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.Podcasting.dll*
%if 0%{?have_boo}
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.BooScript.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.BooScript.dll*
%endif
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.MiniMode.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.Dap.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.Dap.Mtp.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.Dap.MassStorage.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/Banshee.Dap.Ipod.dll*
-%{_prefix}/%{_lib}/banshee-1/Extensions/ipod-sharp*dll*
+%{_libdir}/banshee-1/Extensions/Banshee.MiniMode.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.Dap.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.Dap.Mtp.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.Dap.MassStorage.dll*
+%{_libdir}/banshee-1/Extensions/Banshee.Dap.Ipod.dll*
+%{_libdir}/banshee-1/Extensions/ipod-sharp*dll*
%{_datadir}/banshee-1/icons/hicolor/*/categories/lastfm-*.png
%{_datadir}/banshee-1/icons/hicolor/*/categories/podcast*.png
%{_datadir}/banshee-1/icons/hicolor/*/categories/radio.*
@@ -336,9 +371,28 @@
%{_datadir}/banshee-1/icons/hicolor/*/devices/phone-*
%changelog
+* Wed Feb 04 2009 gburt@suse.de
+- Patch fixing playlists not being saved to DAPs (bnc#472526)
+- Patch fixing adding files to MTP devices (bnc#472524)
+- Patch renaming sr@Latn translation to sr@latin (bnc#472522)
+* Fri Jan 30 2009 gburt@suse.de
+- Patch fixing freeze on DAP load (bnc#465214)
+- Patch fixing crash on delete from File System Queue (bnc#467377)
+- Patch fixing crash on MTP device load (bnc#470722)
+- Patch fixing hang while loading streams (bnc#376532)
+* Wed Jan 21 2009 abockover@novell.com
+- Patch to fix RPMLINT warning about trailing ; on MimeType field
+ in .desktop files
+- Remove some legacy hacks for dealing with openSUSE < 10.3
+- Add logic to bundle certain assemblies when we are building from
+ the upstream/devel OBS project (Banshee) and not openSUSE or SLE
+ to allow us to do safe intermediate upgrades of packages outside
+ of the distro
* Tue Jan 20 2009 abockover@novell.com
- Update to 1.4.2
- Bug fix only release that includes all previous patches to 1.4.1
+* Mon Jan 12 2009 mauro@suse.de
+- Translations update.
* Sun Jan 11 2009 gburt@suse.de
- Patch to fix support for itms podcast subscription inks (bnc#465149)
- Patch to fix freeze caused by submitting Last.fm now playing (bnc#465215)
@@ -352,7 +406,7 @@
* Sat Jan 10 2009 abockover@novell.com
- Fix up desktop files (bnc#456120, bnc#459993, bnc#440615, bnc#461677)
- Fix primary desktop file to -N "Banshee" -G "Media Player" (bnc#433594)
-* Sat Jan 10 2009 abockover@novell.com
+* Fri Jan 09 2009 abockover@novell.com
- Patch to set the mimetype for ripped tracks (bnc#464889)
- Patch to handle spaces in command line arguments (bnc#440883)
- Patch to make xx_YY langs work from xml:lang, fixes zh_CN et al (bnc#449788)
++++++ banshee-po.tar.bz2 ++++++
++++ 79194 lines of diff (skipped)
++++++ bnc376532-fix-radio-hang-lack-of-feedback.patch ++++++
Index: src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs
===================================================================
--- src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs (revision 4986)
+++ src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs (working copy)
@@ -143,8 +143,10 @@
switch (args.Current) {
case PlayerState.Contacting:
+ case PlayerState.Loading:
+ case PlayerState.Loaded:
case PlayerState.Playing:
- ShowPlayAction ();
+ ShowStopAction ();
break;
case PlayerState.Paused:
ShowPlay ();
@@ -169,10 +171,13 @@
this["RestartSongAction"].Sensitive = false;
this["SeekToAction"].Sensitive = false;
}
+
+ // Disable all actions while NotReady
+ Sensitive = args.Current != PlayerState.NotReady;
}
- private void ShowPlayAction ()
- {
+ private void ShowStopAction ()
+ {
if (ServiceManager.PlayerEngine.CanPause) {
ShowPause ();
} else {
Index: src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedSeekSlider.cs
===================================================================
--- src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedSeekSlider.cs (revision 4986)
+++ src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedSeekSlider.cs (working copy)
@@ -128,33 +128,41 @@
OnPlayerEngineTick ();
break;
case PlayerEvent.StartOfStream:
- stream_position_label.IsBuffering = false;
- seek_slider.CanSeek = true;
+ stream_position_label.StreamState = StreamLabelState.Playing;
+ seek_slider.CanSeek = ServiceManager.PlayerEngine.CanSeek;
break;
case PlayerEvent.Buffering:
PlayerEventBufferingArgs buffering = (PlayerEventBufferingArgs)args;
if (buffering.Progress >= 1.0) {
- stream_position_label.IsBuffering = false;
+ stream_position_label.StreamState = StreamLabelState.Playing;
break;
}
- stream_position_label.IsBuffering = true;
+ stream_position_label.StreamState = StreamLabelState.Buffering;
stream_position_label.BufferingProgress = buffering.Progress;
seek_slider.SetIdle ();
break;
case PlayerEvent.StateChange:
switch (((PlayerEventStateChangeArgs)args).Current) {
case PlayerState.Contacting:
- stream_position_label.IsContacting = true;
+ transitioning = false;
+ stream_position_label.StreamState = StreamLabelState.Contacting;
seek_slider.SetIdle ();
break;
+ case PlayerState.Loading:
+ transitioning = false;
+ if (((PlayerEventStateChangeArgs)args).Previous == PlayerState.Contacting) {
+ stream_position_label.StreamState = StreamLabelState.Loading;
+ seek_slider.SetIdle ();
+ }
+ break;
case PlayerState.Idle:
seek_slider.CanSeek = false;
if (!transitioning) {
+ stream_position_label.StreamState = StreamLabelState.Idle;
seek_slider.Duration = 0;
seek_slider.SeekValue = 0;
seek_slider.SetIdle ();
- stream_position_label.IsContacting = false;
}
break;
default:
@@ -171,12 +179,13 @@
return;
}
- uint stream_length = ServiceManager.PlayerEngine.Length;
- uint stream_position = ServiceManager.PlayerEngine.Position;
- stream_position_label.IsContacting = false;
+ stream_position_label.StreamState = StreamLabelState.Playing;
+ Banshee.Collection.TrackInfo track = ServiceManager.PlayerEngine.CurrentTrack;
+ stream_position_label.IsLive = track == null ? false : track.IsLive;
+ stream_position_label.StreamState = StreamLabelState.Playing;
+ seek_slider.Duration = ServiceManager.PlayerEngine.Length;
+ seek_slider.SeekValue = ServiceManager.PlayerEngine.Position;
seek_slider.CanSeek = ServiceManager.PlayerEngine.CanSeek;
- seek_slider.Duration = stream_length;
- seek_slider.SeekValue = stream_position;
}
private void OnSeekRequested (object o, EventArgs args)
Index: src/Core/Banshee.Services/Banshee.Streaming/RadioTrackInfo.cs
===================================================================
--- src/Core/Banshee.Services/Banshee.Streaming/RadioTrackInfo.cs (revision 4986)
+++ src/Core/Banshee.Services/Banshee.Streaming/RadioTrackInfo.cs (working copy)
@@ -37,6 +37,8 @@
using Banshee.Base;
using Banshee.Collection;
using Banshee.ServiceStack;
+using Banshee.MediaEngine;
+using Banshee.PlaybackController;
using Banshee.Playlists.Formats;
namespace Banshee.Streaming
@@ -75,11 +77,13 @@
try {
RadioTrackInfo radio_track = new RadioTrackInfo (uri);
radio_track.ParsingPlaylistEvent += delegate {
- if (radio_track.PlaybackError != StreamPlaybackError.None) {
- Log.Error (Catalog.GetString ("Error opening stream"),
- Catalog.GetString ("Could not open stream or playlist"), true);
- radio_track = null;
- }
+ ThreadAssist.ProxyToMain (delegate {
+ if (radio_track.PlaybackError != StreamPlaybackError.None) {
+ Log.Error (Catalog.GetString ("Error opening stream"),
+ Catalog.GetString ("Could not open stream or playlist"), true);
+ radio_track = null;
+ }
+ });
};
return radio_track;
@@ -98,6 +102,7 @@
private int stream_index = 0;
private bool loaded = false;
private bool parsing_playlist = false;
+ private bool trying_to_play;
private TrackInfo parent_track;
public TrackInfo ParentTrack {
@@ -135,14 +140,67 @@
public void Play()
{
- if(!loaded) {
- OnParsingPlaylistStarted();
- ThreadPool.QueueUserWorkItem(delegate {
- LoadStreamUris();
- });
+ if (trying_to_play) {
return;
}
-
+
+ trying_to_play = true;
+
+ if (loaded) {
+ PlayCore ();
+ } else {
+ // Stop playing until we load this radio station and play it
+ ServiceManager.PlayerEngine.Close ();
+
+ ServiceManager.PlayerEngine.TrackIntercept += OnTrackIntercept;
+
+ // Tell the seek slider that we're connecting
+ // TODO move all this playlist-downloading/parsing logic into PlayerEngine?
+ ServiceManager.PlayerEngine.StartSynthesizeContacting (this);
+
+ OnParsingPlaylistStarted ();
+ ThreadPool.QueueUserWorkItem (delegate {
+ try {
+ LoadStreamUris ();
+ } catch (Exception e) {
+ trying_to_play = false;
+ Log.Exception (this.ToString (), e);
+ SavePlaybackError (StreamPlaybackError.Unknown);
+ OnParsingPlaylistFinished ();
+ ServiceManager.PlayerEngine.Close ();
+ }
+ });
+ }
+ }
+
+ public override StreamPlaybackError PlaybackError {
+ get { return ParentTrack == null ? base.PlaybackError : ParentTrack.PlaybackError; }
+ set {
+ if (value != StreamPlaybackError.None) {
+ ServiceManager.PlayerEngine.EndSynthesizeContacting (this, true);
+ }
+
+ if (ParentTrack == null) {
+ base.PlaybackError = value;
+ } else {
+ ParentTrack.PlaybackError = value;
+ }
+ }
+ }
+
+ public new void SavePlaybackError (StreamPlaybackError value)
+ {
+ PlaybackError = value;
+ Save ();
+ if (ParentTrack != null) {
+ ParentTrack.Save ();
+ }
+ }
+
+ private void PlayCore ()
+ {
+ ServiceManager.PlayerEngine.EndSynthesizeContacting (this, false);
+
if(track != null) {
TrackTitle = track.Title;
ArtistName = track.Creator;
@@ -158,6 +216,8 @@
ServiceManager.PlayerEngine.OpenPlay(this);
}
}
+
+ trying_to_play = false;
}
public bool PlayNextStream()
@@ -167,6 +227,7 @@
Play();
return true;
}
+ ServiceManager.PlaybackController.StopWhenFinished = true;
return false;
}
@@ -177,9 +238,10 @@
Play();
return true;
}
+ ServiceManager.PlaybackController.StopWhenFinished = true;
return false;
}
-
+
private void LoadStreamUris()
{
lock(stream_uris) {
@@ -193,19 +255,31 @@
loaded = true;
}
-
- ThreadAssist.ProxyToMain(delegate {
- OnParsingPlaylistFinished();
- Play();
- });
+
+ ServiceManager.PlayerEngine.TrackIntercept -= OnTrackIntercept;
+ OnParsingPlaylistFinished();
+
+ if (ServiceManager.PlayerEngine.CurrentTrack == this) {
+ PlayCore();
+ } else {
+ trying_to_play = false;
+ }
}
+
+ private bool OnTrackIntercept (TrackInfo track)
+ {
+ if (track != this && track != ParentTrack) {
+ ServiceManager.PlayerEngine.EndSynthesizeContacting (this, false);
+ ServiceManager.PlayerEngine.TrackIntercept -= OnTrackIntercept;
+ }
+ return false;
+ }
private void LoadStreamUri(string uri)
{
try {
- Log.Debug("Attempting to parse radio playlist", uri);
PlaylistParser parser = new PlaylistParser();
- if(parser.Parse(new SafeUri(uri))) {
+ if (parser.Parse(new SafeUri(uri))) {
foreach(Dictionary