banshee r4186 - in trunk/banshee: . src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations
- From: gburt svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r4186 - in trunk/banshee: . src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations
- Date: Mon, 23 Jun 2008 17:30:06 +0000 (UTC)
Author: gburt
Date: Mon Jun 23 17:30:06 2008
New Revision: 4186
URL: http://svn.gnome.org/viewvc/banshee?rev=4186&view=rev
Log:
2008-06-23 Gabriel Burt <gabriel burt gmail com>
* src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/RecommendationPane.cs:
Use the Banshee.Kernel to schedule/cancel recommendation refresh jobs.
Modified:
trunk/banshee/ChangeLog
trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/RecommendationPane.cs
Modified: trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/RecommendationPane.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/RecommendationPane.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/RecommendationPane.cs Mon Jun 23 17:30:06 2008
@@ -75,19 +75,24 @@
private TileView similar_artists_view;
private VBox album_list;
private VBox track_list;
-
- private object update_sync = new object ();
private static string album_title_format = Catalog.GetString ("Top Albums by {0}");
private static string track_title_format = Catalog.GetString ("Top Tracks by {0}");
private bool ready = false;
+ private bool refreshing = false;
private bool show_when_ready = true;
public bool ShowWhenReady {
get { return show_when_ready; }
set {
show_when_ready = value;
UpdateVisiblity ();
+
+ if (!show_when_ready) {
+ CancelTasks ();
+ } else if (!ready && !refreshing) {
+ RefreshRecommendations ();
+ }
}
}
@@ -115,14 +120,26 @@
artist = value;
HideWithTimeout ();
- System.Threading.ThreadPool.QueueUserWorkItem (delegate {
- lock (update_sync) {
- UpdateForArtist (artist);
- }
- });
+ RefreshRecommendations ();
}
}
+ private void RefreshRecommendations ()
+ {
+ CancelTasks ();
+
+ if (show_when_ready && !String.IsNullOrEmpty (Artist)) {
+ refreshing = true;
+ Banshee.Kernel.Scheduler.Schedule (new RefreshRecommendationsJob (this, Artist));
+ }
+ }
+
+ private void CancelTasks ()
+ {
+ Banshee.Kernel.Scheduler.Unschedule (typeof (RefreshRecommendationsJob));
+ refreshing = false;
+ }
+
public void HideWithTimeout ()
{
GLib.Timeout.Add (200, OnHideTimeout);
@@ -199,17 +216,34 @@
similar_artists_view.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
}
- private void UpdateForArtist (string artist_name)
+ private class RefreshRecommendationsJob : Banshee.Kernel.Job
+ {
+ private RecommendationPane pane;
+ private string artist;
+
+ public RefreshRecommendationsJob (RecommendationPane pane, string artist)
+ {
+ this.pane = pane;
+ this.artist = artist;
+ }
+
+ protected override void RunJob ()
+ {
+ pane.UpdateForArtist (artist);
+ }
+ }
+
+ private void UpdateForArtist (string artist)
{
try {
- LastfmArtistData artist = new LastfmArtistData (artist_name);
+ LastfmArtistData artist_data = new LastfmArtistData (artist);
// Make sure all the album art is downloaded
- foreach (SimilarArtist similar in artist.SimilarArtists) {
+ foreach (SimilarArtist similar in artist_data.SimilarArtists) {
DataCore.DownloadContent (similar.SmallImageUrl);
}
- UpdateForArtist (artist_name, artist.SimilarArtists, artist.TopAlbums, artist.TopTracks);
+ UpdateForArtist (artist, artist_data.SimilarArtists, artist_data.TopAlbums, artist_data.TopTracks);
} catch (Exception e) {
Log.Exception (e);
}
@@ -290,6 +324,7 @@
track_box.ShowAll ();
ready = true;
+ refreshing = false;
UpdateVisiblity ();
});
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]