[banshee] [Playlist Sync] Sync from playlist actually works



commit b3258115bda6846f8993b19ba34eeaffe4ca8bf5
Author: Gabriel Burt <gabriel burt gmail com>
Date:   Sun Dec 13 00:01:53 2009 -0800

    [Playlist Sync] Sync from playlist actually works
    
    Still need to 1) init combo boxes 2) add/remove/update playlists in the
    combo box as needed 3) trigger auto-sync when libraries' playlists
    change 4) migrate old manually-manage pref

 .../Banshee.Dap.Ipod/IpodSource.cs                 |    4 +-
 src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapContent.cs  |   28 ++++++++++---
 src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs  |   43 +++++++++----------
 src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs         |    9 ++--
 4 files changed, 49 insertions(+), 35 deletions(-)
---
diff --git a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
index ec38bd2..9a989c7 100644
--- a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
+++ b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
@@ -610,7 +610,9 @@ namespace Banshee.Dap.Ipod
                             "SELECT CoreTracks.TrackID FROM {0} WHERE {1}",
                             from.DatabaseTrackModel.ConditionFromFragment, from.DatabaseTrackModel.Condition)))
                         {
-                            playlist.AddTrack (tracks_map[track_id].IpodTrack);
+                            if (tracks_map.ContainsKey (track_id)) {
+                                playlist.AddTrack (tracks_map[track_id].IpodTrack);
+                            }
                         }
                     }
                 }
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapContent.cs b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapContent.cs
index bb0f277..a4ffe7b 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapContent.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapContent.cs
@@ -41,7 +41,9 @@ using Banshee.Dap;
 using Banshee.Sources.Gui;
 using Banshee.ServiceStack;
 using Banshee.Preferences;
+using Banshee.Sources;
 using Banshee.Preferences.Gui;
+using Banshee.Widgets;
 
 namespace Banshee.Dap.Gui
 {
@@ -81,31 +83,43 @@ namespace Banshee.Dap.Gui
                 RowSpacing = 6,
                 ColumnSpacing = 6
             };
+
             uint i = 0;
-            foreach (var library in dap.Sync.Libraries) {
+            foreach (var iter_sync in dap.Sync.LibrarySyncs) {
+                var library_sync = iter_sync;
+                var library = library_sync.Library;
                 // Translators: {0} is the name of a library, eg 'Music' or 'Podcasts'
                 var label = new Label (String.Format (Catalog.GetString ("{0}:"), library.Name)) { Xalign = 1f };
                 table.Attach (label, 0, 1, i, i + 1);
 
-                var combo = ComboBox.NewText ();
+                var combo = new DictionaryComboBox<DatabaseSource> ();
                 combo.RowSeparatorFunc = (model, iter) => { return (string)model.GetValue (iter, 0) == "---"; };
-                combo.AppendText (Catalog.GetString ("Manage manually"));
-                combo.AppendText (Catalog.GetString ("Sync entire library"));
+                combo.Add (Catalog.GetString ("Manage manually"), null);
+                combo.Add (Catalog.GetString ("Sync entire library"), null);
 
-                var playlists = library.Children.Where (c => c is Banshee.Playlist.AbstractPlaylistSource).ToList ();
+                var playlists = library.Children.Where (c => c is DatabaseSource).Cast<DatabaseSource> ().ToList ();
                 if (playlists.Count > 0) {
-                    combo.AppendText ("---");
+                    combo.Add ("---", null);
 
                     foreach (var playlist in playlists) {
                         // Translators: {0} is the name of a playlist
-                        combo.AppendText (String.Format (Catalog.GetString ("Sync from '{0}'"), playlist.Name));
+                        combo.Add (String.Format (Catalog.GetString ("Sync from â??{0}â??"), playlist.Name), playlist);
                     }
                 }
 
                 combo.Active = 0;
+                combo.Changed += (o, a) => {
+                    library_sync.Enabled = combo.Active != 0;
+                    library_sync.SyncEntireLibrary = combo.Active == 1;
+
+                    if (combo.Active > 1) {
+                        library_sync.SyncSource = combo.ActiveValue;
+                    }
+                };
                 table.Attach (combo, 1, 2, i, i + 1);
                 i++;
             }
+
             hbox.PackStart (table, false, false, 0);
             hbox.ShowAll ();
             dap.Preferences["sync"]["library-options"].DisplayWidget = hbox;
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs b/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
index 681cf92..c6cdaed 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
@@ -27,6 +27,7 @@
 //
 
 using System;
+using System.Linq;
 using System.Collections.Generic;
 
 using Mono.Unix;
@@ -51,19 +52,19 @@ namespace Banshee.Dap
         private LibrarySource library;
         private string conf_ns;
         private SchemaEntry<bool> enabled, sync_entire_library;
-        private SchemaEntry<string[]> playlist_ids;
-        //private SchemaPreference<bool> enabled_pref;
+        private SchemaEntry<string> sync_source;
         private SmartPlaylistSource sync_src, to_add, to_remove;
-        //private Section library_prefs_section;
 
         #region Public Properties
 
         public bool Enabled {
             get { return sync.Enabled && enabled.Get (); }
+            set { enabled.Set (value); }
         }
 
         public bool SyncEntireLibrary {
             get { return sync_entire_library.Get (); }
+            set { sync_entire_library.Set (value); }
         }
 
         public Section PrefsSection {
@@ -77,8 +78,12 @@ namespace Banshee.Dap
 
         #endregion
 
-        public string [] SyncPlaylistIds {
-            get { return playlist_ids.Get (); }
+        public DatabaseSource SyncSource {
+            get {
+                var id = sync_source.Get ();
+                return library.Children.Where (c => c is Banshee.Playlist.AbstractPlaylistSource).FirstOrDefault (c => c.UniqueId == id) as DatabaseSource;
+            }
+            set { sync_source.Set (value.UniqueId); }
         }
 
         private IList<AbstractPlaylistSource> GetSyncPlaylists ()
@@ -127,13 +132,8 @@ namespace Banshee.Dap
             sync_entire_library = sync.Dap.CreateSchema<bool> (conf_ns, "sync_entire_library", true,
                 "Whether to sync the entire library and all playlists.", "");
 
-            playlist_ids = sync.Dap.CreateSchema<string[]> (conf_ns, "playlist_ids", new string [0],
-                "If sync_entire_library is false, this contains a list of playlist ids specifically to sync", "");
-
-            //library_prefs_section = new Section (String.Format ("{0} sync", library.Name), library.Name, 0);
-            //enabled_pref = library_prefs_section.Add<bool> (enabled);
-            //enabled_pref.ShowDescription = true;
-            //enabled_pref.ShowLabel = false;
+            sync_source = sync.Dap.CreateSchema<string> (conf_ns, "sync_source", null,
+                "If sync_entire_library is false, this contains the source to sync from", "");
         }
 
         private void BuildSyncLists ()
@@ -172,23 +172,20 @@ namespace Banshee.Dap
         {
             if (SyncEntireLibrary) {
                 sync_src.ConditionTree = null;
-            }/* else if (SyncPlaylistIds.Length > 0) {
+            } else if (SyncSource != null) {
+                var src = SyncSource;
                 QueryListNode playlists_node = new QueryListNode (Keyword.Or);
-                foreach (AbstractPlaylistSource src in SyncPlaylists) {
-                    if (src is PlaylistSource) {
-                        playlists_node.AddChild (UserQueryParser.Parse (String.Format ("playlistid:{0}", src.DbId), BansheeQuery.FieldSet));
-                    } else if (src is SmartPlaylistSource) {
-                        playlists_node.AddChild (UserQueryParser.Parse (String.Format ("smartplaylistid:{0}", src.DbId), BansheeQuery.FieldSet));
-                    }
+                if (src is PlaylistSource) {
+                    playlists_node.AddChild (UserQueryParser.Parse (String.Format ("playlistid:{0}", (src as PlaylistSource).DbId), BansheeQuery.FieldSet));
+                } else if (src is SmartPlaylistSource) {
+                    playlists_node.AddChild (UserQueryParser.Parse (String.Format ("smartplaylistid:{0}", (src as SmartPlaylistSource).DbId), BansheeQuery.FieldSet));
                 }
                 sync_src.ConditionTree = playlists_node;
-            }*/
+            }
+
             sync_src.RefreshAndReload ();
             to_add.RefreshAndReload ();
             to_remove.RefreshAndReload ();
-            /*enabled_pref.Name = String.Format ("{0} ({1})",
-                enabled.ShortDescription,
-                String.Format (Catalog.GetString ("{0} to add, {1} to remove"), to_add.Count, to_remove.Count));*/
         }
 
         public override string ToString ()
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs b/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs
index 7430cec..461a174 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs
@@ -60,7 +60,8 @@ namespace Banshee.Dap
         private DapSource dap;
         private string conf_ns;
         private List<DapLibrarySync> library_syncs = new List<DapLibrarySync> ();
-        private SchemaEntry<bool> manually_manage, auto_sync;
+        //private SchemaEntry<bool> manually_manage, auto_sync;
+        private SchemaEntry<bool> auto_sync;
         private Section sync_prefs;
         //private PreferenceBase manually_manage_pref;//, auto_sync_pref;
         private SchemaPreference<bool> auto_sync_pref;
@@ -84,7 +85,7 @@ namespace Banshee.Dap
         }
 
         public bool Enabled {
-            get { return !manually_manage.Get (); }
+            get { return true; } //!manually_manage.Get (); }
         }
 
         public bool AutoSync {
@@ -121,10 +122,10 @@ namespace Banshee.Dap
         private void BuildPreferences ()
         {
             conf_ns = "sync";
-            manually_manage = dap.CreateSchema<bool> (conf_ns, "enabled", true,
+            /*manually_manage = dap.CreateSchema<bool> (conf_ns, "enabled", true,
                 Catalog.GetString ("Manually manage this device"),
                 Catalog.GetString ("Manually managing your device means you can drag and drop items onto the device, and manually remove them.")
-            );
+            );*/
 
             auto_sync = dap.CreateSchema<bool> (conf_ns, "auto_sync", false,
                 Catalog.GetString ("Sync when first plugged in and when the libraries change"),



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