banshee r4504 - in trunk/banshee: . src/Backends/Banshee.Hal/Banshee.HalBackend src/Core/Banshee.Services/Banshee.Hardware src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage



Author: gburt
Date: Tue Sep  9 23:07:14 2008
New Revision: 4504
URL: http://svn.gnome.org/viewvc/banshee?rev=4504&view=rev

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

	Patch from David Spreen adding cover art support to Mass Storage DAPs.

	* src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs:
	Add .is_audio_player options CoverArtSize, CoverArtFileName and CoverArtFileType 
	where a size of -1 means disabled, 0 means 'just use the current size of specific 
	cover' and x > 0 means resize cover to x by x pixels.
	Add code to transfer cover to mass storage device art in accordance with those 
	values to AddTrackToDevice method.

	* src/Core/Banshee.Services/Banshee.Hardware/IDeviceMediaCapabilities.cs:
	Add CoverArtSize, CoverArtFileName and CoverArtFileType to IDeviceMediaCapabilities.

	* src/Backends/Banshee.Hal/Banshee.HalBackend/DeviceMediaCapabilities.cs:
	Add CoverArtSize, CoverArtFileName and CoverArtFileType to HAL backend.



Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Backends/Banshee.Hal/Banshee.HalBackend/DeviceMediaCapabilities.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Hardware/IDeviceMediaCapabilities.cs
   trunk/banshee/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs

Modified: trunk/banshee/src/Backends/Banshee.Hal/Banshee.HalBackend/DeviceMediaCapabilities.cs
==============================================================================
--- trunk/banshee/src/Backends/Banshee.Hal/Banshee.HalBackend/DeviceMediaCapabilities.cs	(original)
+++ trunk/banshee/src/Backends/Banshee.Hal/Banshee.HalBackend/DeviceMediaCapabilities.cs	Tue Sep  9 23:07:14 2008
@@ -42,12 +42,26 @@
             this.device = device;
         }
 
+        private int? cover_art_size;
+        public int CoverArtSize {
+            get {
+                if (cover_art_size == null) {
+                    if (device.PropertyExists ("portable_audio_player.cover_art_size")) {
+                        cover_art_size = device.GetPropertyInteger ("portable_audio_player.cover_art_size");
+                    } else {
+                        cover_art_size = -1;
+                    }
+                }
+                return cover_art_size.Value;
+            }
+        }		
+
         private int? folder_depth;
         public int FolderDepth {
             get {
                 if (folder_depth == null) {
-                    if (device.PropertyExists("portable_audio_player.folder_depth")) {
-                        folder_depth = device.GetPropertyInteger("portable_audio_player.folder_depth");
+                    if (device.PropertyExists ("portable_audio_player.folder_depth")) {
+                        folder_depth = device.GetPropertyInteger ("portable_audio_player.folder_depth");
                     } else {
                         folder_depth = -1;
                     }
@@ -70,6 +84,30 @@
             }
         }
 
+        private string cover_art_file_name;
+        public string CoverArtFileName {
+            get {
+                if (cover_art_file_name == null) {
+                    if (device.PropertyExists ("portable_audio_player.cover_art_file_name")) {
+                        cover_art_file_name = device["portable_audio_player.cover_art_file_name"];
+                    }
+                }
+                return cover_art_file_name;
+            }
+        }
+
+        private string cover_art_file_type;
+        public string CoverArtFileType {
+            get {
+                if (cover_art_file_type == null) {
+                    if (device.PropertyExists ("portable_audio_player.cover_art_file_type")) {
+                        cover_art_file_name = device["portable_audio_player.cover_art_file_type"];
+                    }
+                }
+                return cover_art_file_type;
+            }
+        }		
+
         private string [] playlist_formats;
         public string [] PlaylistFormats {
             get {

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Hardware/IDeviceMediaCapabilities.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Hardware/IDeviceMediaCapabilities.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Hardware/IDeviceMediaCapabilities.cs	Tue Sep  9 23:07:14 2008
@@ -33,8 +33,11 @@
 {
     public interface IDeviceMediaCapabilities
     {
+        int CoverArtSize { get; }
         int FolderDepth { get; }
         string [] AudioFolders { get; }
+        string CoverArtFileType { get; }
+        string CoverArtFileName { get; }		
         string [] PlaylistFormats { get; }
         string PlaylistPath { get; }
         string [] PlaybackMimeTypes { get; }

Modified: trunk/banshee/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs	(original)
+++ trunk/banshee/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs	Tue Sep  9 23:07:14 2008
@@ -50,6 +50,7 @@
 {
     public class MassStorageSource : DapSource
     {
+        private Banshee.Collection.Gui.ArtworkManager artwork_manager = ServiceManager.Get<Banshee.Collection.Gui.ArtworkManager> ();
         protected IVolume volume;
 
         public override void DeviceInitialize (IDevice device)
@@ -380,6 +381,39 @@
             set { folder_depth = value; }
         }
 
+        private int cover_art_size = -1;
+        protected int CoverArtSize {
+            get {
+                if (cover_art_size == -1) {
+                    cover_art_size = HasMediaCapabilities ? MediaCapabilities.CoverArtSize : 0;
+                }
+                return cover_art_size;
+            }
+            set { cover_art_size = value; }
+        }
+
+        private string cover_art_file_name = null;
+        protected string CoverArtFileName {
+            get {
+                if (cover_art_file_name == null) {
+                    cover_art_file_name = HasMediaCapabilities ? MediaCapabilities.CoverArtFileName : null;
+                }
+                return cover_art_file_name;
+            }
+            set { cover_art_file_name = value; }
+        }
+
+        private string cover_art_file_type = null;
+        protected string CoverArtFileType {
+            get {
+                if (cover_art_file_type == null) {
+                    cover_art_file_type = HasMediaCapabilities ? MediaCapabilities.CoverArtFileType : null;
+            }
+                return cover_art_file_type;
+            }
+            set { cover_art_file_type = value; }
+        }
+
         protected override void AddTrackToDevice (DatabaseTrackInfo track, SafeUri fromUri)
         {
             if (track.PrimarySourceId == DbId)
@@ -399,6 +433,46 @@
                 copied_track.Uri = new_uri;
                 copied_track.Save (false);
             }
+
+            if (CoverArtSize > -1 && !String.IsNullOrEmpty (CoverArtFileType) && 
+                    !String.IsNullOrEmpty (CoverArtFileName) && FolderDepth > 0) {
+                SafeUri cover_uri = new SafeUri (System.IO.Path.Combine (System.IO.Path.GetDirectoryName (new_uri.LocalPath),
+                                                                         CoverArtFileName));
+                string coverart_id;
+                if (track.HasAttribute (TrackMediaAttributes.Podcast)) {
+                    coverart_id = String.Format ("podcast-{0}", Banshee.Base.CoverArtSpec.EscapePart (track.AlbumTitle));
+                } else {
+                    coverart_id = track.ArtworkId;
+                }                
+                
+                if (!File.Exists (cover_uri) && CoverArtSpec.CoverExists (coverart_id)) {       
+                    Gdk.Pixbuf pic = null;
+                    
+                    if (CoverArtSize == 0) {
+                        if (CoverArtFileType == "jpg" || CoverArtFileType == "jpeg") {                        
+                            SafeUri local_cover_uri = new SafeUri (Banshee.Base.CoverArtSpec.GetPath (coverart_id));
+                            Banshee.IO.File.Copy (local_cover_uri, cover_uri, false);
+                        } else {
+                            pic = artwork_manager.Lookup (coverart_id);
+                        }
+                    } else {
+                        pic = artwork_manager.LookupScale (coverart_id, CoverArtSize);
+                    }
+
+                    if (pic != null) {
+                        try {                        
+                            byte [] bytes = pic.SaveToBuffer (CoverArtFileType);
+                            System.IO.Stream cover_art_file = File.OpenWrite (cover_uri, true);
+                            cover_art_file.Write (bytes, 0, bytes.Length);
+                            cover_art_file.Close ();
+                        } catch (GLib.GException){
+                            Log.DebugFormat ("Could convert cover art to {0}, unsupported filetype?", CoverArtFileType);
+                        } finally {
+                            pic.Dispose ();
+                        }
+                    }
+                }
+            }
         }
 
         protected override void DeleteTrack (DatabaseTrackInfo track)
@@ -491,7 +565,7 @@
                         break;
 
                     case "output_formats":
-                        AcceptableMimeTypes = val.Split(',');
+                        AcceptableMimeTypes = val.Split (',');
                         for (int i = 0; i < AcceptableMimeTypes.Length; i++) {
                             AcceptableMimeTypes[i] = AcceptableMimeTypes[i].Trim ();
                         }
@@ -502,7 +576,7 @@
                         break;
     
                     case "playlist_format":
-                        PlaylistFormats = val.Split(',');
+                        PlaylistFormats = val.Split (',');
                         for (int i = 0; i < PlaylistFormats.Length; i++) {
                             PlaylistFormats[i] = PlaylistFormats[i].Trim ();
                         }
@@ -513,6 +587,18 @@
                         playlists_path = playlists_path.Replace ("%File", String.Empty);
                         break;
 
+                    case "cover_art_file_type":
+                        CoverArtFileType = val.ToLower ();
+                        break;
+
+                    case "cover_art_file_name":
+                        CoverArtFileName = val;
+                        break;
+
+                    case "cover_art_size":
+                        CoverArtSize = Int32.Parse (val);
+                        break;
+
                     case "input_formats":
                     default:
                         Log.DebugFormat ("Unsupported .is_audio_player key: {0}", key);



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