banshee r3403 - in trunk/banshee: . src/Core/Banshee.Services/Banshee.Collection.Database src/Core/Banshee.Services/Banshee.Library src/Core/Banshee.Services/Banshee.Playlist src/Core/Banshee.Services/Banshee.SmartPlaylist src/Core/Banshee.Services/Banshee.Sources src/Core/Banshee.ThickClient/Banshee.Sources.Gui src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue
- From: gburt svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r3403 - in trunk/banshee: . src/Core/Banshee.Services/Banshee.Collection.Database src/Core/Banshee.Services/Banshee.Library src/Core/Banshee.Services/Banshee.Playlist src/Core/Banshee.Services/Banshee.SmartPlaylist src/Core/Banshee.Services/Banshee.Sources src/Core/Banshee.ThickClient/Banshee.Sources.Gui src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue
- Date: Mon, 10 Mar 2008 19:15:43 +0000 (GMT)
Author: gburt
Date: Mon Mar 10 19:15:42 2008
New Revision: 3403
URL: http://svn.gnome.org/viewvc/banshee?rev=3403&view=rev
Log:
2008-03-10 Gabriel Burt <gabriel burt gmail com>
* src/Core/Banshee.Services/Banshee.Collection.Database/AlbumListDatabaseModel.cs:
Now depends on the Artist model, resets the artist filter at each reload,
exposes CacheId and ClearCache.
* src/Core/Banshee.Services/Banshee.Collection.Database/ArtistListDatabaseModel.cs:
Expose CacheId property and ClearCache method.
* src/Core/Banshee.Services/Banshee.Collection.Database/TrackListDatabaseModel.cs:
Keep references to the artist/album models and regenerate the artist/album
filter for each reload.
* src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs: Reset
the count to 0 when finished importing.
* src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs:
Whitespace.
* src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs: Avoid
triggering the Reloaded event when reloading it twice in a row - no
flicker. OnTracksRemoved now reloads the current source, but not the
library etc. New PruneArtistsAlbums method that deletes artists/albums
from the cache that have been removed from the library.
* src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: Rename
TracksRemoved event to TracksDeleted for clarity/parity with method names.
Override PruneArtistsAlbums method.
* src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs:
Fix reloading when selection changes.
* src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs:
* src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs:
* src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs:
TracksRemoved event renamed to TracksDeleted for clarity.
Modified:
trunk/banshee/ChangeLog
trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/AlbumListDatabaseModel.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/ArtistListDatabaseModel.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/TrackListDatabaseModel.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs
trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/AlbumListDatabaseModel.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/AlbumListDatabaseModel.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/AlbumListDatabaseModel.cs Mon Mar 10 19:15:42 2008
@@ -43,29 +43,35 @@
private readonly BansheeModelProvider<LibraryAlbumInfo> provider;
private readonly BansheeModelCache<LibraryAlbumInfo> cache;
private readonly TrackListDatabaseModel track_model;
+ private readonly ArtistListDatabaseModel artist_model;
private long count;
private string artist_id_filter_query;
private string reload_fragment;
- private readonly AlbumInfo select_all_album = new AlbumInfo(null);
+ private readonly AlbumInfo select_all_album = new AlbumInfo (null);
- public AlbumListDatabaseModel(BansheeDbConnection connection, string uuid)
+ public AlbumListDatabaseModel (BansheeDbConnection connection, string uuid)
{
provider = LibraryAlbumInfo.Provider;
cache = new BansheeModelCache <LibraryAlbumInfo> (connection, uuid, this, provider);
cache.HasSelectAllItem = true;
}
- public AlbumListDatabaseModel(TrackListDatabaseModel trackModel,
+ public AlbumListDatabaseModel (TrackListDatabaseModel trackModel, ArtistListDatabaseModel artistModel,
BansheeDbConnection connection, string uuid) : this (connection, uuid)
{
this.track_model = trackModel;
+ this.artist_model = artistModel;
}
private bool first_reload = true;
public override void Reload ()
{
if (!first_reload || !cache.Warm) {
+ if (artist_model != null) {
+ ArtistInfoFilter = artist_model.SelectedItems;
+ }
+
bool either = (artist_id_filter_query != null) || (track_model != null);
bool both = (artist_id_filter_query != null) && (track_model != null);
@@ -95,8 +101,8 @@
first_reload = false;
count = cache.Count + 1;
- select_all_album.Title = String.Format("All Albums ({0})", count - 1);
- OnReloaded();
+ select_all_album.Title = String.Format ("All Albums ({0})", count - 1);
+ OnReloaded ();
}
public override AlbumInfo this[int index] {
@@ -109,19 +115,18 @@
}
public override IEnumerable<ArtistInfo> ArtistInfoFilter {
- set {
- ModelHelper.BuildIdFilter<ArtistInfo>(value, "CoreAlbums.ArtistID", artist_id_filter_query,
- delegate(ArtistInfo artist) {
- if(!(artist is LibraryArtistInfo)) {
+ set {
+ ModelHelper.BuildIdFilter<ArtistInfo> (value, "CoreAlbums.ArtistID", artist_id_filter_query,
+ delegate (ArtistInfo artist) {
+ if (!(artist is LibraryArtistInfo)) {
return null;
}
- return ((LibraryArtistInfo)artist).DbId.ToString();
+ return ((LibraryArtistInfo)artist).DbId.ToString ();
},
- delegate(string new_filter) {
+ delegate (string new_filter) {
artist_id_filter_query = new_filter;
- Reload();
}
);
}
@@ -144,6 +149,15 @@
get { return reload_fragment; }
}
+ public int CacheId {
+ get { return (int) cache.CacheId; }
+ }
+
+ public void ClearCache ()
+ {
+ cache.Clear ();
+ }
+
public string JoinTable { get { return null; } }
public string JoinFragment { get { return null; } }
public string JoinPrimaryKey { get { return null; } }
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/ArtistListDatabaseModel.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/ArtistListDatabaseModel.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/ArtistListDatabaseModel.cs Mon Mar 10 19:15:42 2008
@@ -107,6 +107,15 @@
get { return (int) count; }
}
+ public int CacheId {
+ get { return (int) cache.CacheId; }
+ }
+
+ public void ClearCache ()
+ {
+ cache.Clear ();
+ }
+
// Implement ICacheableModel
public int FetchCount {
get { return 20; }
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/TrackListDatabaseModel.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/TrackListDatabaseModel.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/TrackListDatabaseModel.cs Mon Mar 10 19:15:42 2008
@@ -70,6 +70,9 @@
private string artist_id_filter_query;
private string album_id_filter_query;
+ private ArtistListDatabaseModel artist_model;
+ private AlbumListDatabaseModel album_model;
+
private string uuid;
private int rows_in_view;
@@ -82,24 +85,26 @@
}
private bool initialized = false;
- public void Initialize ()
+ public void Initialize (ArtistListDatabaseModel artist_model, AlbumListDatabaseModel album_model)
{
if (initialized)
return;
+ this.artist_model = artist_model;
+ this.album_model = album_model;
+
initialized = true;
cache = new BansheeModelCache <DatabaseTrackInfo> (connection, uuid, this, provider);
cache.AggregatesUpdated += HandleCacheAggregatesUpdated;
- Refilter ();
}
private bool have_new_filter = true;
- private void GenerateFilterQueryPart()
+ private void GenerateFilterQueryPart ()
{
if (!have_new_filter)
return;
- if (String.IsNullOrEmpty(Filter)) {
+ if (String.IsNullOrEmpty (Filter)) {
filter_query = null;
} else {
QueryNode query_tree = UserQueryParser.Parse (Filter, BansheeQuery.FieldSet);
@@ -113,29 +118,29 @@
have_new_filter = false;
}
- private void GenerateSortQueryPart()
+ private void GenerateSortQueryPart ()
{
sort_query = (sort_column == null) ?
null :
BansheeQuery.GetSort (sort_column.SortKey, sort_column.SortType == SortType.Ascending);
}
- public void Refilter()
+ public void Refilter ()
{
- lock(this) {
- GenerateFilterQueryPart();
+ lock (this) {
+ GenerateFilterQueryPart ();
cache.Clear ();
}
}
- public void Sort(ISortableColumn column)
+ public void Sort (ISortableColumn column)
{
- lock(this) {
+ lock (this) {
if (forced_sort_query) {
return;
}
- if(sort_column == column && sort_column != null) {
+ if (sort_column == column && sort_column != null) {
sort_column.SortType = sort_column.SortType == SortType.Ascending
? SortType.Descending
: SortType.Ascending;
@@ -143,7 +148,7 @@
sort_column = column;
- GenerateSortQueryPart();
+ GenerateSortQueryPart ();
cache.Clear ();
}
}
@@ -154,12 +159,12 @@
filtered_filesize = reader.IsDBNull (2) ? 0 : Convert.ToInt64 (reader[2]);
}
- public override void Clear()
+ public override void Clear ()
{
cache.Clear ();
count = 0;
filtered_count = 0;
- OnCleared();
+ OnCleared ();
}
private string unfiltered_query;
@@ -198,15 +203,32 @@
}*/
private bool first_reload = true;
- public override void Reload()
+ public override void Reload ()
+ {
+ Reload (true);
+ }
+
+ public void Reload (bool notify)
{
if (suppress_reload)
return;
+ Refilter ();
+
UpdateUnfilteredAggregates ();
StringBuilder qb = new StringBuilder ();
qb.Append (UnfilteredQuery);
+
+ if (artist_model != null) {
+ ArtistInfoFilter = artist_model.SelectedItems;
+ }
+
+ if (album_model != null) {
+ //Console.WriteLine ("album_id_filter_query was {0}, and selection count = {1}", album_id_filter_query, album_model.Selection.Count);
+ AlbumInfoFilter = album_model.SelectedItems;
+ //Console.WriteLine ("album_id_filter_query now is {0}", album_id_filter_query);
+ }
if (artist_id_filter_query != null) {
qb.Append ("AND ");
@@ -237,13 +259,15 @@
filtered_count = cache.Count;
first_reload = false;
- OnReloaded ();
+ if (notify) {
+ OnReloaded ();
+ }
}
public override int IndexOf (TrackInfo track)
{
- DatabaseTrackInfo library_track = track as DatabaseTrackInfo;
- return (int) (library_track == null ? -1 : cache.IndexOf ((int)library_track.DbId));
+ DatabaseTrackInfo db_track = track as DatabaseTrackInfo;
+ return (int) (db_track == null ? -1 : cache.IndexOf ((int)db_track.DbId));
}
public override TrackInfo this[int index] {
@@ -277,7 +301,7 @@
public string Filter {
get { return filter; }
set {
- lock(this) {
+ lock (this) {
filter = value;
have_new_filter = true;
}
@@ -317,9 +341,7 @@
public string Condition {
get { return condition; }
- set {
- condition = value;
- }
+ set { condition = value; }
}
public string ConditionFragment {
@@ -334,22 +356,20 @@
else
return String.Format (" {0} {1} ", prefix, condition);
}
-
+
public override IEnumerable<ArtistInfo> ArtistInfoFilter {
- set {
- ModelHelper.BuildIdFilter<ArtistInfo>(value, "CoreTracks.ArtistID", artist_id_filter_query,
- delegate(ArtistInfo artist) {
- if(!(artist is LibraryArtistInfo)) {
+ set {
+ ModelHelper.BuildIdFilter<ArtistInfo> (value, "CoreTracks.ArtistID", artist_id_filter_query,
+ delegate (ArtistInfo artist) {
+ if (!(artist is LibraryArtistInfo)) {
return null;
}
- return ((LibraryArtistInfo)artist).DbId.ToString();
+ return ((LibraryArtistInfo)artist).DbId.ToString ();
},
- delegate(string new_filter) {
+ delegate (string new_filter) {
artist_id_filter_query = new_filter;
- Refilter();
- Reload();
}
);
}
@@ -357,19 +377,17 @@
public override IEnumerable<AlbumInfo> AlbumInfoFilter {
set {
- ModelHelper.BuildIdFilter<AlbumInfo>(value, "CoreTracks.AlbumID", album_id_filter_query,
- delegate(AlbumInfo album) {
- if(!(album is LibraryAlbumInfo)) {
+ ModelHelper.BuildIdFilter<AlbumInfo> (value, "CoreTracks.AlbumID", album_id_filter_query,
+ delegate (AlbumInfo album) {
+ if (!(album is LibraryAlbumInfo)) {
return null;
}
- return ((LibraryAlbumInfo)album).DbId.ToString();
+ return ((LibraryAlbumInfo)album).DbId.ToString ();
},
- delegate(string new_filter) {
+ delegate (string new_filter) {
album_id_filter_query = new_filter;
- Refilter();
- Reload();
}
);
}
@@ -379,10 +397,23 @@
{
artist_id_filter_query = null;
album_id_filter_query = null;
- Refilter();
- Reload();
+ Reload ();
}
+ /*private HyenaSqliteCommand check_artists_command = new HyenaSqliteCommand (
+ "SELECT ItemID FROM CoreCache WHERE ModelID = ? AND ItemID NOT IN (SELECT ArtistID FROM CoreArtists)"
+ );
+
+ private HyenaSqliteCommand check_albums_command = new HyenaSqliteCommand (
+ "SELECT ItemID FROM CoreCache WHERE ModelID = ? AND ItemID NOT IN (SELECT AlbumID FROM CoreAlbums)"
+ );*/
+
+ /*public void CheckFilters ()
+ {
+ if (track_model.Artist
+ if (ServiceManager.DbConnection.Query<int> (
+ }*/
+
public int CacheId {
get { return (int) cache.CacheId; }
}
@@ -396,14 +427,14 @@
set { rows_in_view = value; }
}
- int IExportableModel.GetLength()
+ int IExportableModel.GetLength ()
{
return Count;
}
- IDictionary<string, object> IExportableModel.GetMetadata(int index)
+ IDictionary<string, object> IExportableModel.GetMetadata (int index)
{
- return this[index].GenerateExportable();
+ return this[index].GenerateExportable ();
}
private string track_ids_sql;
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs Mon Mar 10 19:15:42 2008
@@ -174,6 +174,7 @@
protected override void OnImportFinished ()
{
+ count = 0;
ServiceManager.SourceManager.Library.NotifyTracksAdded ();
base.OnImportFinished ();
}
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs Mon Mar 10 19:15:42 2008
@@ -149,6 +149,5 @@
{
return DbId.GetHashCode ();
}
-
}
}
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs Mon Mar 10 19:15:42 2008
@@ -271,7 +271,7 @@
}
}
- protected override void HandleTracksRemoved (Source sender, TrackEventArgs args)
+ protected override void HandleTracksDeleted (Source sender, TrackEventArgs args)
{
if (args.When > last_removed) {
last_removed = args.When;
@@ -305,7 +305,7 @@
PrimarySource primary = parent as PrimarySource;
if (primary != null) {
primary.TracksChanged += HandleTracksChanged;
- primary.TracksRemoved += HandleTracksRemoved;
+ primary.TracksDeleted += HandleTracksDeleted;
}
}
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs Mon Mar 10 19:15:42 2008
@@ -359,7 +359,7 @@
}
}
- protected override void HandleTracksRemoved (Source sender, TrackEventArgs args)
+ protected override void HandleTracksDeleted (Source sender, TrackEventArgs args)
{
if (args.When > last_removed) {
last_removed = args.When;
@@ -384,7 +384,7 @@
if (primary != null) {
primary.TracksAdded += HandleTracksAdded;
primary.TracksChanged += HandleTracksChanged;
- primary.TracksRemoved += HandleTracksRemoved;
+ primary.TracksDeleted += HandleTracksDeleted;
}
}
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs Mon Mar 10 19:15:42 2008
@@ -60,8 +60,8 @@
{
string uuid = String.Format ("{0}-{1}", this.GetType().Name, id);
track_model = new TrackListDatabaseModel (ServiceManager.DbConnection, uuid);
- album_model = new AlbumListDatabaseModel (track_model, ServiceManager.DbConnection, uuid);
artist_model = new ArtistListDatabaseModel (track_model, ServiceManager.DbConnection, uuid);
+ album_model = new AlbumListDatabaseModel (track_model, artist_model, ServiceManager.DbConnection, uuid);
reload_limiter = new RateLimiter (RateLimitedReload);
filter_limiter = new RateLimiter (RateLimitedFilter);
}
@@ -149,12 +149,17 @@
album_model.Reload ();
OnUpdated ();
}
- });
+ }
}
protected virtual void ReloadTrackModel ()
{
- track_model.Reload ();
+ ReloadTrackModel (true);
+ }
+
+ protected void ReloadTrackModel (bool notify)
+ {
+ track_model.Reload (notify);
}
protected virtual void RateLimitedFilter ()
@@ -166,7 +171,7 @@
track_model.Filter = FilterQuery;
track_model.ClearArtistAlbumFilters ();
track_model.SuppressReloads = false;
- ReloadTrackModel ();
+ ReloadTrackModel (false);
// Then, reload the artist/album models
artist_model.Reload ();
@@ -198,7 +203,7 @@
get { return false; }
}
- public virtual void RemoveTrack (int index)
+ public void RemoveTrack (int index)
{
if (index != -1) {
RemoveTrackRange (track_model, new RangeCollection.Range (index, index));
@@ -206,17 +211,11 @@
}
}
- public virtual void RemoveTrack (DatabaseTrackInfo track)
+ public void RemoveTrack (DatabaseTrackInfo track)
{
RemoveTrack (track_model.IndexOf (track));
}
- // Methods for removing tracks from this source
- /*public virtual void RemoveTracks (IEnumerable<TrackInfo> tracks)
- {
- throw new NotImplementedException();
- }*/
-
public virtual void RemoveSelectedTracks ()
{
RemoveSelectedTracks (track_model);
@@ -228,12 +227,6 @@
OnTracksRemoved ();
}
- // Methods for deleting tracks from this source
- /*public virtual void DeleteTracks (IEnumerable<TrackInfo> tracks)
- {
- throw new NotImplementedException();
- }*/
-
public virtual void DeleteSelectedTracks ()
{
DeleteSelectedTracks (track_model);
@@ -242,7 +235,8 @@
public virtual void DeleteSelectedTracks (TrackListDatabaseModel model)
{
WithTrackSelection (model, DeleteTrackRange);
- OnTracksRemoved ();
+ PruneArtistsAlbums ();
+ OnTracksDeleted ();
}
public virtual void RateSelectedTracks (int rating)
@@ -293,17 +287,23 @@
});
}
- protected virtual void OnTracksRemoved ()
+ protected virtual void OnTracksDeleted ()
{
ThreadAssist.SpawnFromMain (delegate {
- HandleTracksRemoved (this, new TrackEventArgs ());
+ HandleTracksDeleted (this, new TrackEventArgs ());
foreach (PrimarySource psource in PrimarySources) {
- psource.NotifyTracksRemoved ();
+ psource.NotifyTracksDeleted ();
}
});
}
- // If we are a PrimarySource, reload ourself and our children, otherwise if our Parent
+ protected virtual void OnTracksRemoved ()
+ {
+ PruneArtistsAlbums ();
+ Reload ();
+ }
+
+ // If we are a PrimarySource, return ourself and our children, otherwise if our Parent
// is one, do so for it, otherwise do so for all PrimarySources.
private IEnumerable<PrimarySource> PrimarySources {
get {
@@ -349,7 +349,7 @@
protected void AfterInitialized ()
{
- track_model.Initialize ();
+ track_model.Initialize (artist_model, album_model);
Reload ();
OnSetupComplete ();
}
@@ -384,6 +384,30 @@
}
}
+ protected HyenaSqliteCommand prune_command;
+ protected HyenaSqliteCommand PruneCommand {
+ get {
+ return prune_command ?? prune_command = new HyenaSqliteCommand (String.Format (
+ @"DELETE FROM CoreCache WHERE ModelID = ? AND ItemID NOT IN (SELECT ArtistID FROM CoreTracks WHERE TrackID IN ({0}));
+ DELETE FROM CoreCache WHERE ModelID = ? AND ItemID NOT IN (SELECT AlbumID FROM CoreTracks WHERE TrackID IN ({0}));",
+ track_model.TrackIdsSql
+ ),
+ artist_model.CacheId, artist_model.CacheId, 0, artist_model.Count,
+ album_model.CacheId, album_model.CacheId, 0, album_model.Count
+ );
+ }
+ }
+
+ protected virtual void PruneArtistsAlbums ()
+ {
+ //Hyena.Log.Information ("Pruning artists/albums");
+ ServiceManager.DbConnection.Execute (PruneCommand);
+ //Hyena.Log.Information ("Clearing artists/albums cache");
+ artist_model.Reload ();
+ album_model.Reload ();
+ //Hyena.Log.Information ("Done clearing artists/albums cache");
+ }
+
protected virtual void HandleTracksAdded (Source sender, TrackEventArgs args)
{
}
@@ -392,7 +416,7 @@
{
}
- protected virtual void HandleTracksRemoved (Source sender, TrackEventArgs args)
+ protected virtual void HandleTracksDeleted (Source sender, TrackEventArgs args)
{
}
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs Mon Mar 10 19:15:42 2008
@@ -76,6 +76,11 @@
INSERT INTO CoreRemovedTracks SELECT ?, TrackID, Uri FROM CoreTracks WHERE TrackID IN ({0});
DELETE FROM CoreTracks WHERE TrackID IN ({0})";
+ protected HyenaSqliteCommand prune_artists_albums_command = new HyenaSqliteCommand (@"
+ DELETE FROM CoreArtists WHERE ArtistID NOT IN (SELECT ArtistID FROM CoreTracks);
+ DELETE FROM CoreAlbums WHERE AlbumID NOT IN (SELECT AlbumID FROM CoreTracks)
+ ");
+
protected int source_id;
public int SourceId {
get { return source_id; }
@@ -89,7 +94,7 @@
public event TrackEventHandler TracksAdded;
public event TrackEventHandler TracksChanged;
- public event TrackEventHandler TracksRemoved;
+ public event TrackEventHandler TracksDeleted;
private static Dictionary<int, PrimarySource> primary_sources = new Dictionary<int, PrimarySource> ();
public static PrimarySource GetById (int id)
@@ -126,9 +131,9 @@
OnTracksChanged ();
}
- internal void NotifyTracksRemoved ()
+ internal void NotifyTracksDeleted ()
{
- OnTracksRemoved ();
+ OnTracksDeleted ();
}
protected void OnErrorSourceUpdated (object o, EventArgs args)
@@ -201,18 +206,31 @@
});
}
- protected override void OnTracksRemoved ()
+ protected override void OnTracksDeleted ()
{
ThreadAssist.SpawnFromMain (delegate {
Reload ();
- TrackEventHandler handler = TracksRemoved;
+ TrackEventHandler handler = TracksDeleted;
if (handler != null) {
handler (this, new TrackEventArgs ());
}
});
}
+ protected override void OnTracksRemoved ()
+ {
+ PruneArtistsAlbums ();
+ OnTracksDeleted ();
+ }
+
+ public override void RemoveSelectedTracks (TrackListDatabaseModel model)
+ {
+ base.RemoveSelectedTracks (model);
+ PruneArtistsAlbums ();
+ OnTracksDeleted ();
+ }
+
protected override void RemoveTrackRange (TrackListDatabaseModel model, RangeCollection.Range range)
{
ServiceManager.DbConnection.Execute (
@@ -222,5 +240,11 @@
model.CacheId, range.Start, range.End - range.Start + 1
);
}
+
+ protected override void PruneArtistsAlbums ()
+ {
+ ServiceManager.DbConnection.Execute (prune_artists_albums_command);
+ base.PruneArtistsAlbums ();
+ }
}
}
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs Mon Mar 10 19:15:42 2008
@@ -269,12 +269,14 @@
if (model != null && o == artist_view.Selection ) {
model.ClearArtistAlbumFilters ();
album_model.ArtistInfoFilter = null;
+ album_model.Reload ();
if (!album_model.Selection.AllSelected) {
UpdateAlbumSelectionFilters ();
}
artist_view.ScrollTo (0);
} else if (model != null && o == album_view.Selection) {
model.AlbumInfoFilter = null;
+ model.Reload ();
album_view.ScrollTo (0);
}
return;
@@ -290,7 +292,9 @@
model.AlbumInfoFilter = null;
model.ArtistInfoFilter = artists;
+ model.Reload ();
album_model.ArtistInfoFilter = artists;
+ album_model.Reload ();
} else if (o == album_view.Selection) {
UpdateAlbumSelectionFilters ();
}
@@ -299,6 +303,7 @@
private void UpdateAlbumSelectionFilters ()
{
(track_view.Model as TrackListModel).AlbumInfoFilter = (album_view.Model as AlbumListModel).SelectedItems;
+ track_view.Model.Reload ();
}
public void SetModels (TrackListModel track, ArtistListModel artist, AlbumListModel album)
Modified: trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs Mon Mar 10 19:15:42 2008
@@ -102,7 +102,7 @@
ServiceManager.SourceManager.ActiveSourceChanged += delegate { UpdateActions (); };
ServiceManager.SourceManager.Library.TracksChanged += HandleTracksChanged;
- ServiceManager.SourceManager.Library.TracksRemoved += HandleTracksRemoved;
+ ServiceManager.SourceManager.Library.TracksDeleted += HandleTracksDeleted;
}
public void Dispose ()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]