banshee r4085 - in trunk/banshee: . src/Extensions/Banshee.CoverArt/Banshee.CoverArt



Author: gburt
Date: Tue Jun  3 16:42:25 2008
New Revision: 4085
URL: http://svn.gnome.org/viewvc/banshee?rev=4085&view=rev

Log:
2008-06-03  Gabriel Burt  <gabriel burt gmail com>

	* src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtJob.cs:
	* src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs:
	Revert last commit, apparently abock has some grand plans he didn't tell
	me about.


Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtJob.cs
   trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs

Modified: trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtJob.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtJob.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtJob.cs	Tue Jun  3 16:42:25 2008
@@ -3,7 +3,6 @@
 //
 // Authors:
 //   James Willcox <snorp novell com>
-//   Gabriel Burt <gburt novell com>
 //
 // Copyright (C) 2005-2008 Novell, Inc.
 //
@@ -32,21 +31,17 @@
 using System.Data;
 using System.IO;
 using System.Threading;
-
 using Mono.Unix;
-using Gtk;
-
-using Hyena;
-using Hyena.Data.Sqlite;
 
 using Banshee.Base;
 using Banshee.Collection;
-using Banshee.Collection.Database;
 using Banshee.Collection.Gui;
 using Banshee.Kernel;
 using Banshee.Metadata;
 using Banshee.ServiceStack;
 using Banshee.Library;
+using Hyena;
+using Gtk;
 
 namespace Banshee.CoverArt
 {
@@ -55,29 +50,6 @@
         private const int BatchSize = 10;
         
         private DateTime last_scan = DateTime.MinValue;
-        private TimeSpan retry_every = TimeSpan.FromDays (7);
-
-        private static string query = @"
-                SELECT {0}
-                FROM CoreAlbums, CoreArtists, CoreTracks
-                WHERE
-                    CoreAlbums.ArtistID = CoreArtists.ArtistID AND
-                    CoreTracks.AlbumID = CoreAlbums.AlbumID AND
-                    CoreTracks.DateUpdatedStamp > ? AND
-                    CoreTracks.PrimarySourceID = ? AND
-                    CoreTracks.AlbumID NOT IN (
-                        SELECT AlbumID FROM CoverArtDownloads WHERE
-                            LastAttempt > ? OR Downloaded = 1)
-                {1}";
-
-        private static HyenaSqliteCommand count_query = new HyenaSqliteCommand (String.Format (query,
-            "count(DISTINCT CoreAlbums.AlbumID)", null
-        ));
-
-        private static HyenaSqliteCommand select_query = new HyenaSqliteCommand (String.Format (query,
-            "DISTINCT CoreAlbums.AlbumID, CoreAlbums.Title, CoreArtists.Name",
-            "LIMIT ?"
-        ));
         
         public CoverArtJob (DateTime lastScan) : base (Catalog.GetString ("Downloading Cover Art"))
         {
@@ -90,72 +62,87 @@
             Register ();
             Scheduler.Schedule (this);
         }
-
-        private IDataReader RunQuery ()
+        
+        private IDataReader RunQuery (int iteration, bool count)
         {
-            return ServiceManager.DbConnection.Query (select_query,
-                last_scan, ServiceManager.SourceManager.MusicLibrary.DbId, last_scan - retry_every, BatchSize
-            );
+            string query = String.Format (@"
+                SELECT {0}, CoreAlbums.Title, CoreArtists.Name
+                FROM CoreAlbums, CoreArtists, CoreTracks
+                WHERE
+                    CoreAlbums.ArtistID = CoreArtists.ArtistID AND
+                    CoreTracks.AlbumID = CoreAlbums.AlbumID AND
+                    CoreTracks.DateUpdatedStamp > ? AND
+                    CoreTracks.PrimarySourceID = ?
+                    ORDER BY CoreAlbums.Title ASC
+                    LIMIT {1} OFFSET {2}
+                ", count ? "count(DISTINCT CoreAlbums.AlbumID)" : "DISTINCT CoreAlbums.AlbumID",
+                BatchSize, iteration * BatchSize);
+            
+            return ServiceManager.DbConnection.Query (query, last_scan,
+                                                      ServiceManager.SourceManager.MusicLibrary.DbId);
+        }
+        
+        private void FetchForTrack (TrackInfo track)
+        {
+            try {
+                IMetadataLookupJob job = MetadataService.Instance.CreateJob (track);
+                job.Run ();
+            } catch (Exception e) {
+                Log.Exception (e);
+            }
         }
         
         public void Run ()
         {
-            Status = Catalog.GetString ("Preparing...");
-            IconNames = new string [] {Stock.Network};
+            this.Status = Catalog.GetString ("Preparing...");
+            this.IconNames = new string [] {Stock.Network};
             
-            int current = 0;
-            int total = 0;
-
-            DatabaseTrackInfo track = new DatabaseTrackInfo ();
-            while (true) {
-                total = current + ServiceManager.DbConnection.Query<int> (count_query, last_scan, ServiceManager.SourceManager.MusicLibrary.DbId, last_scan - retry_every);
-                if (total == 0 || total <= current) {
-                    break;
+            int current_track_count = 0;
+            int total_track_count = 0;
+            int offset = 0;
+            using (IDataReader reader = RunQuery (offset, true)) {
+                if (reader.Read ()) {
+                    total_track_count = reader.GetInt32 (0);
                 }
+            }
+            
+            if (total_track_count == 0) {
+                Finish ();
+                return;
+            }
 
-                using (IDataReader reader = RunQuery ()) {
+            TrackInfo track = new TrackInfo ();
+
+            while (true) {
+                using (IDataReader reader = RunQuery (offset++, false)) {
+                    int batch_count = 0;
                     while (reader.Read ()) {
                         if (IsCancelRequested) {
                             Finish ();
                             return;
                         }
                         
-                        track.AlbumTitle = reader.GetString (1);
-                        track.ArtistName = reader.GetString (2);
-                        track.AlbumId = Convert.ToInt32 (reader[0]);
-
-                        Log.DebugFormat ("Downloading cover art for {0} - {1}", track.ArtistName, track.AlbumTitle);
-
-                        Progress = (double) current / (double) total;
-                        Status = String.Format (Catalog.GetString ("{0} - {1}"), track.ArtistName, track.AlbumTitle);
-
-                        FetchForTrack (track);
-                        current++;
+                        batch_count++;
+                        if (!CoverArtSpec.CoverExists (reader.GetString (2),
+                                                       reader.GetString (1))) {
+                            track.AlbumTitle = reader.GetString (1);
+                            track.ArtistName = reader.GetString (2);
+                            
+                            Log.DebugFormat ("Downloading cover art for {0} - {1}", track.ArtistName, track.AlbumTitle);
+                            this.Progress = (double) current_track_count / (double) total_track_count;
+                            this.Status = String.Format (Catalog.GetString ("{0} - {1}"), track.ArtistName, track.AlbumTitle);
+                            FetchForTrack (track);
+                        }
+                        
+                        current_track_count++;
                     }
+                    
+                    if (batch_count != BatchSize)
+                        break;
                 }
             }
             
             Finish ();
         }
-
-        private void FetchForTrack (DatabaseTrackInfo track)
-        {
-            try {
-                if (String.IsNullOrEmpty (track.AlbumTitle) || track.AlbumTitle == Catalog.GetString ("Unknown Album") ||
-                    String.IsNullOrEmpty (track.ArtistName) || track.ArtistName == Catalog.GetString ("Unknown Artist")) {
-                    // Do not try to fetch album art for these
-                } else {
-                    IMetadataLookupJob job = MetadataService.Instance.CreateJob (track);
-                    job.Run ();
-                }
-            } catch (Exception e) {
-                Log.Exception (e);
-            } finally {
-                bool have_cover_art = CoverArtSpec.CoverExists (track.ArtistName, track.AlbumTitle);
-                ServiceManager.DbConnection.Execute (
-                    "INSERT OR REPLACE INTO CoverArtDownloads (AlbumID, Downloaded, LastAttempt) VALUES (?, ?, ?)",
-                    track.AlbumId, have_cover_art, DateTime.Now);
-            }
-        }
     }
 }

Modified: trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs	Tue Jun  3 16:42:25 2008
@@ -3,7 +3,6 @@
 //
 // Authors:
 //   James Willcox <snorp novell com>
-//   Gabriel Burt <gburt novell com>
 //
 // Copyright (C) 2005-2008 Novell, Inc.
 //
@@ -62,15 +61,6 @@
         
         void IExtensionService.Initialize ()
         {
-            if (!ServiceManager.DbConnection.TableExists ("CoverArtDownloads")) {
-                ServiceManager.DbConnection.Execute (@"
-                    CREATE TABLE CoverArtDownloads (
-                        AlbumID     INTEGER UNIQUE,
-                        Downloaded  BOOLEAN,
-                        LastAttempt INTEGER NOT NULL
-                    )");
-            }
-
             action_service = ServiceManager.Get<InterfaceActionService> ();
             
             if (!ServiceStartup ()) {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]