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
- From: gburt svn gnome org
- To: svn-commits-list gnome org
- Subject: 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
- Date: Tue, 9 Sep 2008 23:07:14 +0000 (UTC)
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]