[banshee] [Playlist Sync] Sync from playlist actually works
- From: Gabriel Burt <gburt src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [banshee] [Playlist Sync] Sync from playlist actually works
- Date: Tue, 15 Dec 2009 01:03:27 +0000 (UTC)
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]