[banshee] Video Folder setting for MassStorage devices



commit 7f6610fda29544eb7ac59df88286d84358b4793d
Author: Jack Deslippe <jdeslip gmail com>
Date:   Wed Jul 29 17:12:02 2009 -0700

    Video Folder setting for MassStorage devices
    
    Set default for WebOS and Android, and reads video_folders in .is_audio_player
    
    Signed-off-by: Gabriel Burt <gabriel burt gmail com>

 .../Banshee.HalBackend/DeviceMediaCapabilities.cs  |   10 ++++
 .../Banshee.Hardware/IDeviceMediaCapabilities.cs   |    1 +
 .../Banshee.Dap.MassStorage/AndroidDevice.cs       |   11 ++++-
 .../Banshee.Dap.MassStorage/MassStorageDevice.cs   |   20 ++++----
 .../Banshee.Dap.MassStorage/MassStorageSource.cs   |   49 +++++++++++++++++++-
 .../Banshee.Dap.MassStorage/WebOSDevice.cs         |    8 +++
 6 files changed, 87 insertions(+), 12 deletions(-)
---
diff --git a/src/Backends/Banshee.Hal/Banshee.HalBackend/DeviceMediaCapabilities.cs b/src/Backends/Banshee.Hal/Banshee.HalBackend/DeviceMediaCapabilities.cs
index 1d47842..ec0575d 100644
--- a/src/Backends/Banshee.Hal/Banshee.HalBackend/DeviceMediaCapabilities.cs
+++ b/src/Backends/Banshee.Hal/Banshee.HalBackend/DeviceMediaCapabilities.cs
@@ -72,6 +72,16 @@ namespace Banshee.HalBackend
             }
         }
 
+        private string [] video_folders;
+        public string [] VideoFolders {
+            get {
+                if (video_folders == null) {
+                    video_folders = SafelyGetStringList ("portable_audio_player.video_folders");
+                }
+                return video_folders;
+            }
+        }
+
         private string cover_art_file_name;
         public string CoverArtFileName {
             get {
diff --git a/src/Core/Banshee.Services/Banshee.Hardware/IDeviceMediaCapabilities.cs b/src/Core/Banshee.Services/Banshee.Hardware/IDeviceMediaCapabilities.cs
index 44b282e..3f3de49 100644
--- a/src/Core/Banshee.Services/Banshee.Hardware/IDeviceMediaCapabilities.cs
+++ b/src/Core/Banshee.Services/Banshee.Hardware/IDeviceMediaCapabilities.cs
@@ -36,6 +36,7 @@ namespace Banshee.Hardware
         int CoverArtSize { get; }
         int FolderDepth { get; }
         string [] AudioFolders { get; }
+        string [] VideoFolders { get; }
         string CoverArtFileType { get; }
         string CoverArtFileName { get; }
         string [] PlaylistFormats { get; }
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/AndroidDevice.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/AndroidDevice.cs
index c466d4b..ca5e3a9 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/AndroidDevice.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/AndroidDevice.cs
@@ -55,7 +55,12 @@ namespace Banshee.Dap.MassStorage
         
         private static string [] audio_folders = new string [] {
             "Music/",
-            "amazonmp3/"
+            "amazonmp3/",
+            "Video/"
+        };
+
+        private static string [] video_folders = new string [] {
+            "Video/"
         };
 
         private static string [] playlist_formats = new string [] {
@@ -92,6 +97,10 @@ namespace Banshee.Dap.MassStorage
             get { return audio_folders; }
         }
 
+        public override string [] VideoFolders {
+            get { return video_folders; }
+        }
+
         public override string [] PlaylistFormats {
             get { return playlist_formats; }
         }
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs
index 2ee2a1a..1a1b91d 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs
@@ -81,7 +81,7 @@ namespace Banshee.Dap.MassStorage
                 Hyena.Log.DebugFormat ("Found RockBox Device");
                 name = Catalog.GetString ("Rockbox Device");
                 audio_folders = new string [] {"Music/","Videos/"};
-                //video_folders = new string [] {"Videos/"};
+                video_folders = new string [] {"Videos/"};
                 folder_depth = 2;
                 playback_mime_types = new string [] {"application/ogg","audio/x-ms-wma","audio/mpeg","audio/mp4","audio/x-wav"};
                 playlist_formats = new string [] {"audio/x-mpegurl"};
@@ -101,20 +101,17 @@ namespace Banshee.Dap.MassStorage
                                 case "cover_art_file_type": cover_art_file_type = item.Value[0].ToLower (); break;
                                 case "cover_art_file_name": cover_art_file_name = item.Value[0]; break;
                                 case "cover_art_size": Int32.TryParse (item.Value[0], out cover_art_size); break;
-
+                                case "audio_folders": audio_folders = item.Value; break;
+                                case "video_folders": video_folders = item.Value; break;
+                                case "output_formats": playback_mime_types = item.Value; break;
+                                case "playlist_format": playlist_formats = item.Value; break;
+                                case "playlist_path": playlist_path = item.Value[0]; break;
                                 case "folder_depth": 
                                     if (!Int32.TryParse (item.Value[0], out folder_depth)) {
                                         folder_depth = -1;
                                     }
                                     Hyena.Log.DebugFormat ("MassStorageDevice.LoadDeviceConfiguration {0}", folder_depth);
                                     break;
-                                case "audio_folders": audio_folders = item.Value; break;
-
-                                case "output_formats": playback_mime_types = item.Value; break;
-
-                                case "playlist_format": playlist_formats = item.Value; break;
-                                case "playlist_path": playlist_path = item.Value[0]; break;
-
                                 default:
                                     throw new ApplicationException ("unsupported key");    
                             }
@@ -170,6 +167,11 @@ namespace Banshee.Dap.MassStorage
         public virtual string [] AudioFolders { 
             get { return audio_folders; } 
         }
+
+        private string [] video_folders = new string[0];
+        public virtual string [] VideoFolders { 
+            get { return video_folders; } 
+        }
         
         private string cover_art_file_type;
         public virtual string CoverArtFileType { 
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 c16250c..f319119 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
@@ -116,6 +116,13 @@ namespace Banshee.Dap.MassStorage
                 );
             }
 
+            if (VideoFolders.Length > 0 && !String.IsNullOrEmpty (VideoFolders[0])) {
+                AddDapProperty (String.Format (
+                    Catalog.GetPluralString ("Video Folder", "Video Folders", VideoFolders.Length), VideoFolders.Length),
+                    System.String.Join ("\n", VideoFolders)
+                );
+            }
+
             if (FolderDepth != -1) {
                 AddDapProperty (Catalog.GetString ("Required Folder Depth"), FolderDepth.ToString ());
             }
@@ -359,6 +366,25 @@ namespace Banshee.Dap.MassStorage
             set { write_path = value; }
         }
 
+        private string write_path_video = null;
+        public string WritePathVideo {
+            get {
+                if (write_path_video == null) {
+                    write_path_video = BaseDirectory;
+                    // Some Devices May Have a Separate Video Directory
+                    if (VideoFolders.Length > 0) {
+                        write_path_video = Banshee.Base.Paths.Combine (write_path_video, VideoFolders[0]);
+                    } else if (AudioFolders.Length > 0) {
+                        write_path_video = Banshee.Base.Paths.Combine (write_path_video, AudioFolders[0]);
+                        write_path_video = Banshee.Base.Paths.Combine (write_path_video, "Videos");
+                    }
+                }
+                return write_path_video;
+            }
+
+            set { write_path_video = value; }
+        }
+
         private string [] audio_folders;
         protected string [] AudioFolders {
             get {
@@ -370,6 +396,17 @@ namespace Banshee.Dap.MassStorage
             set { audio_folders = value; }
         }
 
+        private string [] video_folders;
+        protected string [] VideoFolders {
+            get {
+                if (video_folders == null) {
+                    video_folders = HasMediaCapabilities ? MediaCapabilities.VideoFolders : new string[0];
+                }
+                return video_folders;
+            }
+            set { video_folders = value; }
+        }
+
         protected IEnumerable<string> BaseDirectories {
             get {
                 if (AudioFolders.Length == 0) {
@@ -551,12 +588,16 @@ namespace Banshee.Dap.MassStorage
         private string GetTrackPath (TrackInfo track, string ext)
         {
             string file_path = null;
-            
+
             if (track.HasAttribute (TrackMediaAttributes.Podcast)) {
                 string album = FileNamePattern.Escape (track.DisplayAlbumTitle);
                 string title = FileNamePattern.Escape (track.DisplayTrackTitle);
                 file_path = System.IO.Path.Combine ("Podcasts", album);
                 file_path = System.IO.Path.Combine (file_path, title);
+            } else if (track.HasAttribute (TrackMediaAttributes.VideoStream)) {
+                string album = FileNamePattern.Escape (track.DisplayAlbumTitle);
+                string title = FileNamePattern.Escape (track.DisplayTrackTitle);
+                file_path = System.IO.Path.Combine (album, title);
             } else if (ms_device == null || !ms_device.GetTrackPath (track, out file_path)) {
                 // If the folder_depth property exists, we have to put the files in a hiearchy of
                 // the exact given depth (not including the mount point/audio_folder).
@@ -601,7 +642,11 @@ namespace Banshee.Dap.MassStorage
                 }
             }
             
-            file_path = System.IO.Path.Combine (WritePath, file_path);
+            if (track.HasAttribute (TrackMediaAttributes.VideoStream)) {
+              file_path = System.IO.Path.Combine (WritePathVideo, file_path);
+            } else {
+              file_path = System.IO.Path.Combine (WritePath, file_path);
+            }
             file_path += ext;
             
             return file_path;
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/WebOSDevice.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/WebOSDevice.cs
index 8220aaf..9b3b103 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/WebOSDevice.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/WebOSDevice.cs
@@ -88,6 +88,10 @@ namespace Banshee.Dap.MassStorage
             "AmazonMP3/"
         };
 
+        private static string [] video_folders = new string [] {
+            "Videos/"
+        };
+
         private static string [] icon_names = new string [] {
             DapSource.FallbackIcon
         };
@@ -121,6 +125,10 @@ namespace Banshee.Dap.MassStorage
             get { return audio_folders; }
         }
 
+        public override string [] VideoFolders {
+            get { return video_folders; }
+        }
+
         public override string [] PlaybackMimeTypes {
             get { return playback_mime_types; }
         }



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