[banshee] [SmartPlaylist] Add IsHiddenWhenEmpty property
- From: Gabriel Burt <gburt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee] [SmartPlaylist] Add IsHiddenWhenEmpty property
- Date: Tue, 24 Aug 2010 20:01:19 +0000 (UTC)
commit 8916a962a1811b22ed597b1044ab1e1cb4841922
Author: Gabriel Burt <gabriel burt gmail com>
Date: Tue Aug 24 14:36:38 2010 -0500
[SmartPlaylist] Add IsHiddenWhenEmpty property
.../Banshee.Database/BansheeDbFormatMigrator.cs | 11 ++++-
.../SmartPlaylistDefinition.cs | 18 +++++++-
.../Banshee.SmartPlaylist/SmartPlaylistSource.cs | 42 ++++++++++++++++----
3 files changed, 58 insertions(+), 13 deletions(-)
---
diff --git a/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs b/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs
index 908f43f..3d7bfd0 100644
--- a/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs
+++ b/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs
@@ -56,7 +56,7 @@ namespace Banshee.Database
// NOTE: Whenever there is a change in ANY of the database schema,
// this version MUST be incremented and a migration method
// MUST be supplied to match the new version number
- protected const int CURRENT_VERSION = 42;
+ protected const int CURRENT_VERSION = 43;
protected const int CURRENT_METADATA_VERSION = 7;
#region Migration Driver
@@ -940,6 +940,12 @@ namespace Banshee.Database
return true;
}
+ [DatabaseVersion (43)]
+ private bool Migrate_43 ()
+ {
+ Execute ("ALTER TABLE CoreSmartPlaylists ADD COLUMN IsHiddenWhenEmpty INTEGER");
+ return true;
+ }
#pragma warning restore 0169
@@ -1120,7 +1126,8 @@ namespace Banshee.Database
LimitNumber TEXT,
LimitCriterion TEXT,
CachedCount INTEGER,
- IsTemporary INTEGER DEFAULT 0
+ IsTemporary INTEGER DEFAULT 0,
+ IsHiddenWhenEmpty INTEGER DEFAULT 0
)
");
diff --git a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistDefinition.cs b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistDefinition.cs
index eea45b0..dc08c3c 100644
--- a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistDefinition.cs
+++ b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistDefinition.cs
@@ -43,9 +43,15 @@ namespace Banshee.SmartPlaylist
public readonly QueryOrder Order;
public readonly QueryLimit Limit;
public readonly IntegerQueryValue LimitNumber;
+ public readonly bool HiddenWhenEmpty;
public SmartPlaylistDefinition (string name, string description, string condition)
- : this (name, description, condition, 0, (QueryLimit)null, null)
+ : this (name, description, condition, 0, (QueryLimit)null, null, false)
+ {
+ }
+
+ public SmartPlaylistDefinition (string name, string description, string condition, bool hiddenWhenEmpty)
+ : this (name, description, condition, 0, (QueryLimit)null, null, hiddenWhenEmpty)
{
}
@@ -56,7 +62,12 @@ namespace Banshee.SmartPlaylist
}
public SmartPlaylistDefinition (string name, string description, string condition,
- int limit_number, QueryLimit limit, QueryOrder order)
+ int limit_number, QueryLimit limit, QueryOrder order) : this (name, description, condition, limit_number, limit, order, false)
+ {
+ }
+
+ public SmartPlaylistDefinition (string name, string description, string condition,
+ int limit_number, QueryLimit limit, QueryOrder order, bool hiddenWhenEmpty)
{
Name = name;
Description = description;
@@ -65,6 +76,7 @@ namespace Banshee.SmartPlaylist
LimitNumber.SetValue (limit_number);
Limit = limit;
Order = order;
+ HiddenWhenEmpty = hiddenWhenEmpty;
}
public SmartPlaylistSource ToSmartPlaylistSource (PrimarySource primary_source)
@@ -72,7 +84,7 @@ namespace Banshee.SmartPlaylist
return new SmartPlaylistSource (
Name,
UserQueryParser.Parse (Condition, BansheeQuery.FieldSet),
- Order, Limit, LimitNumber,
+ Order, Limit, LimitNumber, HiddenWhenEmpty,
primary_source
);
}
diff --git a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
index 8f8f69e..efeab49 100644
--- a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
+++ b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
@@ -177,6 +177,8 @@ namespace Banshee.SmartPlaylist
}
}
+ public bool IsHiddenWhenEmpty { get; private set; }
+
public override bool HasDependencies {
get { return dependencies.Count > 0; }
}
@@ -200,19 +202,25 @@ namespace Banshee.SmartPlaylist
}
public SmartPlaylistSource (string name, QueryNode condition, QueryOrder order, QueryLimit limit, IntegerQueryValue limit_value, PrimarySource parent)
+ : this (name, condition, order, limit, limit_value, false, parent)
+ {
+ }
+
+ public SmartPlaylistSource (string name, QueryNode condition, QueryOrder order, QueryLimit limit, IntegerQueryValue limit_value, bool hiddenWhenEmpty, PrimarySource parent)
: this (name, parent)
{
ConditionTree = condition;
QueryOrder = order;
Limit = limit;
LimitValue = limit_value;
+ IsHiddenWhenEmpty = hiddenWhenEmpty;
SetProperties ();
UpdateDependencies ();
}
// For existing smart playlists that we're loading from the database
- protected SmartPlaylistSource (int dbid, string name, string condition_xml, string order_by, string limit_number, string limit_criterion, PrimarySource parent, int count, bool is_temp) :
+ protected SmartPlaylistSource (int dbid, string name, string condition_xml, string order_by, string limit_number, string limit_criterion, PrimarySource parent, int count, bool is_temp, bool hiddenWhenEmpty) :
base (generic_name, name, dbid, -1, 0, parent, is_temp)
{
ConditionXml = condition_xml;
@@ -221,6 +229,7 @@ namespace Banshee.SmartPlaylist
LimitValue = new IntegerQueryValue ();
LimitValue.ParseUserQuery (limit_number);
SavedCount = count;
+ IsHiddenWhenEmpty = hiddenWhenEmpty;
SetProperties ();
UpdateDependencies ();
@@ -288,19 +297,23 @@ namespace Banshee.SmartPlaylist
PrimarySource.TracksChanged += HandleTracksChanged;
PrimarySource.TracksDeleted += HandleTracksDeleted;
}
+
+ if (IsHiddenWhenEmpty) {
+ RefreshAndReload ();
+ }
}
protected override void Create ()
{
DbId = ServiceManager.DbConnection.Execute (new HyenaSqliteCommand (@"
INSERT INTO CoreSmartPlaylists
- (Name, Condition, OrderBy, LimitNumber, LimitCriterion, PrimarySourceID, IsTemporary)
- VALUES (?, ?, ?, ?, ?, ?, ?)",
+ (Name, Condition, OrderBy, LimitNumber, LimitCriterion, PrimarySourceID, IsTemporary, IsHiddenWhenEmpty)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
Name, ConditionXml,
IsLimited ? QueryOrder.Name : null,
IsLimited ? LimitValue.ToSql () : null,
IsLimited ? Limit.Name : null,
- PrimarySourceId, IsTemporary
+ PrimarySourceId, IsTemporary, IsHiddenWhenEmpty
));
UpdateDependencies ();
}
@@ -315,13 +328,14 @@ namespace Banshee.SmartPlaylist
LimitNumber = ?,
LimitCriterion = ?,
CachedCount = ?,
- IsTemporary = ?
+ IsTemporary = ?,
+ IsHiddenWhenEmpty = ?
WHERE SmartPlaylistID = ?",
Name, ConditionXml,
IsLimited ? QueryOrder.Name : null,
IsLimited ? LimitValue.ToSql () : null,
IsLimited ? Limit.Name : null,
- Count, IsTemporary, DbId
+ Count, IsTemporary, IsHiddenWhenEmpty, DbId
));
UpdateDependencies ();
}
@@ -357,6 +371,17 @@ namespace Banshee.SmartPlaylist
Refresh ();
base.Reload ();
+
+ if (IsHiddenWhenEmpty && Parent != null) {
+ bool contains_me = Parent.ContainsChildSource (this);
+ int count = Count;
+
+ if (count == 0 && contains_me) {
+ Parent.RemoveChildSource (this);
+ } else if (count > 0 && !contains_me) {
+ Parent.AddChildSource (this);
+ }
+ }
}
public void Refresh ()
@@ -491,7 +516,7 @@ namespace Banshee.SmartPlaylist
{
ClearTemporary ();
using (HyenaDataReader reader = new HyenaDataReader (ServiceManager.DbConnection.Query (
- @"SELECT SmartPlaylistID, Name, Condition, OrderBy, LimitNumber, LimitCriterion, PrimarySourceID, CachedCount, IsTemporary
+ @"SELECT SmartPlaylistID, Name, Condition, OrderBy, LimitNumber, LimitCriterion, PrimarySourceID, CachedCount, IsTemporary, IsHiddenWhenEmpty
FROM CoreSmartPlaylists WHERE PrimarySourceID = ?", parent.DbId))) {
while (reader.Read ()) {
SmartPlaylistSource playlist = null;
@@ -500,7 +525,8 @@ namespace Banshee.SmartPlaylist
reader.Get<int> (0), reader.Get<string> (1),
reader.Get<string> (2), reader.Get<string> (3),
reader.Get<string> (4), reader.Get<string> (5),
- parent, reader.Get<int> (7), reader.Get<bool> (8)
+ parent, reader.Get<int> (7), reader.Get<bool> (8),
+ reader.Get<bool> (9)
);
} catch (Exception e) {
Log.Warning ("Ignoring Smart Playlist", String.Format ("Caught error: {0}", e), false);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]