[banshee] Dap.MassStorage: metadata resync in manual mode (bgo#589196)
- From: AndrÃs Aragoneses <aaragoneses src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee] Dap.MassStorage: metadata resync in manual mode (bgo#589196)
- Date: Tue, 17 Jan 2012 12:55:30 +0000 (UTC)
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]