[banshee] Dap.MassStorage: metadata resync in manual mode (bgo#589196)



commit 12562e93ef4588018bdf198705d441cf684697bc
Author: Andres G. Aragoneses <knocte gmail com>
Date:   Tue Jan 17 12:56:39 2012 +0000

    Dap.MassStorage: metadata resync in manual mode (bgo#589196)
    
    Add support for changing the metadata of the tracks in
    MassStorage devices in manual mode, making sure the path
    of the file is updated if needed and that the changes to
    the file get written thanks to SaveTrackMetadataJob.
    
    Playlists will get re-written with the changes (if any)
    when the user ejects the device (as explained in the
    comment "Track transfers happen immediately, but
    playlists saves don't" in DapSource class, Eject method).
    This is to avoid that the sync operation rewrites each
    playlist once per track (in case of once per playlist).

 .../Banshee.Dap.MassStorage/MassStorageSource.cs   |   44 ++++++++++++++++---
 1 files changed, 37 insertions(+), 7 deletions(-)
---
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
index 2ddd5dd..f43f416 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
@@ -38,6 +38,7 @@ using Banshee.Dap;
 using Banshee.Base;
 using Banshee.ServiceStack;
 using Banshee.Library;
+using Banshee.Query;
 using Banshee.Sources;
 using Banshee.Collection;
 using Banshee.Collection.Database;
@@ -484,6 +485,24 @@ namespace Banshee.Dap.MassStorage
             set { cover_art_file_type = value; }
         }
 
+        public override void UpdateMetadata (DatabaseTrackInfo track)
+        {
+            SafeUri new_uri = new SafeUri (GetTrackPath (track, System.IO.Path.GetExtension (track.Uri)));
+
+            if (new_uri.ToString () != track.Uri.ToString ()) {
+                Directory.Create (System.IO.Path.GetDirectoryName (new_uri.LocalPath));
+                Banshee.IO.File.Move (track.Uri, new_uri);
+
+                //to remove the folder if it's not needed anymore:
+                DeleteTrackFile (track);
+
+                track.Uri = new_uri;
+                track.Save (true, BansheeQuery.UriField);
+            }
+
+            base.UpdateMetadata (track);
+        }
+
         protected override void AddTrackToDevice (DatabaseTrackInfo track, SafeUri fromUri)
         {
             if (track.PrimarySourceId == DbId)
@@ -560,11 +579,16 @@ namespace Banshee.Dap.MassStorage
 
         protected override bool DeleteTrack (DatabaseTrackInfo track)
         {
-            try {
-                if (ms_device != null && !ms_device.DeleteTrackHook (track)) {
-                    return false;
-                }
+            if (ms_device != null && !ms_device.DeleteTrackHook (track)) {
+                return false;
+            }
+            DeleteTrackFile (track);
+            return true;
+        }
 
+        private void DeleteTrackFile (DatabaseTrackInfo track)
+        {
+            try {
                 string track_file = System.IO.Path.GetFileName (track.Uri.LocalPath);
                 string track_dir = System.IO.Path.GetDirectoryName (track.Uri.LocalPath);
                 int files = 0;
@@ -584,12 +608,14 @@ namespace Banshee.Dap.MassStorage
                     System.IO.File.Delete (Paths.Combine (track_dir, CoverArtFileName));
                 }
 
-                Banshee.IO.Utilities.DeleteFileTrimmingParentDirectories (track.Uri);
+                if (Banshee.IO.File.Exists (track.Uri)) {
+                    Banshee.IO.Utilities.DeleteFileTrimmingParentDirectories (track.Uri);
+                } else {
+                    Banshee.IO.Utilities.TrimEmptyDirectories (track.Uri);
+                }
             } catch (System.IO.FileNotFoundException) {
             } catch (System.IO.DirectoryNotFoundException) {
             }
-
-            return true;
         }
 
         protected override void Eject ()
@@ -689,5 +715,9 @@ namespace Banshee.Dap.MassStorage
 
             return file_path;
         }
+
+        public override bool HasEditableTrackProperties {
+            get { return true; }
+        }
     }
 }



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