banshee r3379 - in trunk/banshee: . src/Core/Banshee.Services/Banshee.Collection src/Core/Banshee.Services/Banshee.Collection.Database src/Core/Banshee.Services/Banshee.Playlist src/Core/Banshee.Services/Banshee.SmartPlaylist src/Core/Banshee.Services/Banshee.Sources src/Core/Banshee.ThickClient/Banshee.Gui src/Libraries/Hyena src/Libraries/Hyena/Hyena.Data src/Libraries/Hyena/Hyena.Data.Sqlite
- From: gburt svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r3379 - in trunk/banshee: . src/Core/Banshee.Services/Banshee.Collection src/Core/Banshee.Services/Banshee.Collection.Database src/Core/Banshee.Services/Banshee.Playlist src/Core/Banshee.Services/Banshee.SmartPlaylist src/Core/Banshee.Services/Banshee.Sources src/Core/Banshee.ThickClient/Banshee.Gui src/Libraries/Hyena src/Libraries/Hyena/Hyena.Data src/Libraries/Hyena/Hyena.Data.Sqlite
- Date: Wed, 5 Mar 2008 01:42:13 +0000 (GMT)
Author: gburt
Date: Wed Mar 5 01:42:12 2008
New Revision: 3379
URL: http://svn.gnome.org/viewvc/banshee?rev=3379&view=rev
Log:
2008-03-04 Gabriel Burt <gabriel burt gmail com>
This commit fixes a long standing bug in trunk - selections now persist
across source reloads (assuming the tracks are still in the source/not
filtered).
* src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs:
* src/Core/Banshee.Services/Banshee.Collection.Database/TrackListDatabaseModel.cs:
Add a bool CachesJoinTableEntries property so Smart Playlists can use the
join table but fill the CoreCache with TrackIDS not EntryIDS - needed,
since their EntryIDs don't last long b/c they are wiped/created anew every
time its Reloaded.
* src/Core/Banshee.Services/Banshee.Collection/BansheeListModel.cs: Don't
clear the selection on reload.
* src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs:
Override CachesJoinTableEntries to false.
* src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs:
* src/Core/Banshee.Services/Banshee.Collection.Database/AlbumListDatabaseModel.cs:
* src/Core/Banshee.Services/Banshee.Collection.Database/ArtistListDatabaseModel.cs:
* src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs: Check
model.CachesJoinTableEntries instead of JoinTable != null.
* src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs: Whitespace.
* src/Libraries/Hyena/Hyena.Data.Sqlite/ICacheableDatabaseModel.cs:
Inherit from ISelectable and add CachesJoinTableEntries property.
* src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs: SaveSelection
before a Reload and RestoreSelection afterward.
* src/Libraries/Hyena/Hyena.Data/ModelCache.cs:
* src/Libraries/Hyena/Hyena.Data/ArrayModelCache.cs:
* src/Libraries/Hyena/Hyena.Data/DictionaryModelCache.cs: Update to use
Int64s where appropriate.
* src/Libraries/Hyena/Hyena.Data/IListModel.cs: Inherit from ISelectable.
* src/Libraries/Hyena/Hyena.Data/ModelSelection.cs: Comment out
unimplemented IndexOf method.
* src/Libraries/Hyena/Makefile.am: New ISelectable interface.
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.Collection/BansheeListModel.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.ThickClient/Banshee.Gui/TrackActions.cs
trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/ICacheableDatabaseModel.cs
trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs
trunk/banshee/src/Libraries/Hyena/Hyena.Data/ArrayModelCache.cs
trunk/banshee/src/Libraries/Hyena/Hyena.Data/DictionaryModelCache.cs
trunk/banshee/src/Libraries/Hyena/Hyena.Data/IListModel.cs
trunk/banshee/src/Libraries/Hyena/Hyena.Data/ModelCache.cs
trunk/banshee/src/Libraries/Hyena/Hyena.Data/ModelSelection.cs
trunk/banshee/src/Libraries/Hyena/Makefile.am
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 Wed Mar 5 01:42:12 2008
@@ -43,7 +43,7 @@
private readonly BansheeModelProvider<LibraryAlbumInfo> provider;
private readonly BansheeModelCache<LibraryAlbumInfo> cache;
private readonly TrackListDatabaseModel track_model;
- private int count;
+ private long count;
private string artist_id_filter_query;
private string reload_fragment;
@@ -79,8 +79,8 @@
WHERE CoreCache.ModelID = {0} AND
CoreCache.ItemId = {2})",
track_model.CacheId,
- track_model.JoinFragment,
- track_model.JoinTable == null
+ track_model.CachesJoinTableEntries ? track_model.JoinFragment : null,
+ (!track_model.CachesJoinTableEntries)
? "CoreTracks.TrackID"
: String.Format ("{0}.{1} AND CoreTracks.TrackID = {0}.{2}", track_model.JoinTable, track_model.JoinPrimaryKey, track_model.JoinColumn)
),
@@ -127,7 +127,7 @@
}
public override int Count {
- get { return count; }
+ get { return (int) count; }
}
// Implement ICacheableModel
@@ -147,5 +147,6 @@
public string JoinFragment { get { return null; } }
public string JoinPrimaryKey { get { return null; } }
public string JoinColumn { get { return null; } }
+ public bool CachesJoinTableEntries { get { return false; } }
}
}
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 Wed Mar 5 01:42:12 2008
@@ -43,7 +43,7 @@
private readonly BansheeModelCache<LibraryArtistInfo> cache;
private readonly TrackListDatabaseModel track_model;
private string reload_fragment;
- private int count;
+ private long count;
private readonly ArtistInfo select_all_artist = new ArtistInfo(null);
@@ -75,8 +75,8 @@
CoreCache.ItemID = CoreTracks.TrackID AND
CoreArtists.ArtistID = CoreTracks.ArtistID)",*/
track_model.CacheId,
- track_model.JoinFragment,
- track_model.JoinTable == null
+ track_model.CachesJoinTableEntries ? track_model.JoinFragment : null,
+ (!track_model.CachesJoinTableEntries)
? "CoreTracks.TrackID"
: String.Format ("{0}.{1} AND CoreTracks.TrackID = {0}.{2}", track_model.JoinTable, track_model.JoinPrimaryKey, track_model.JoinColumn)
) : null
@@ -103,7 +103,7 @@
}
public override int Count {
- get { return count; }
+ get { return (int) count; }
}
// Implement ICacheableModel
@@ -121,5 +121,6 @@
public string JoinFragment { get { return null; } }
public string JoinPrimaryKey { get { return null; } }
public string JoinColumn { get { return null; } }
+ public bool CachesJoinTableEntries { get { return false; } }
}
}
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 Wed Mar 5 01:42:12 2008
@@ -409,7 +409,7 @@
public string TrackIdsSql {
get {
if (track_ids_sql == null) {
- if (JoinTable == null) {
+ if (!CachesJoinTableEntries) {
track_ids_sql = "SELECT ItemID FROM CoreCache WHERE ModelID = ? LIMIT ?, ?";
} else {
track_ids_sql = String.Format (
@@ -422,7 +422,11 @@
}
}
-
+ private bool caches_join_table_entries = false;
+ public bool CachesJoinTableEntries {
+ get { return caches_join_table_entries; }
+ set { caches_join_table_entries = value; }
+ }
// Implement ICacheableModel
public int FetchCount {
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection/BansheeListModel.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Collection/BansheeListModel.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection/BansheeListModel.cs Wed Mar 5 01:42:12 2008
@@ -62,8 +62,6 @@
protected virtual void OnReloaded ()
{
- selection.Clear ();
-
Banshee.Base.ThreadAssist.ProxyToMain (delegate {
EventHandler handler = Reloaded;
if(handler != null) {
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 Wed Mar 5 01:42:12 2008
@@ -72,6 +72,10 @@
get { return "EntryID"; }
}
+ protected virtual bool CachesJoinTableEntries {
+ get { return true; }
+ }
+
public int? DbId {
get { return dbid; }
protected set {
@@ -82,6 +86,7 @@
track_model.JoinTable = TrackJoinTable;
track_model.JoinPrimaryKey = JoinPrimaryKey;
track_model.JoinColumn = "TrackID";
+ track_model.CachesJoinTableEntries = CachesJoinTableEntries;
track_model.Condition = String.Format (TrackCondition, dbid);
AfterInitialized ();
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 Wed Mar 5 01:42:12 2008
@@ -251,7 +251,7 @@
HyenaSqliteCommand last_add_range_command = null;
protected virtual void AddTrackRange (TrackListDatabaseModel from, RangeCollection.Range range)
{
- last_add_range_command = (from.JoinTable == null)
+ last_add_range_command = (!from.CachesJoinTableEntries)
? add_track_range_command
: from == last_add_range_from_model
? last_add_range_command
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 Wed Mar 5 01:42:12 2008
@@ -85,6 +85,10 @@
get { return "CoreSmartPlaylistEntries"; }
}
+ protected override bool CachesJoinTableEntries {
+ get { return false; }
+ }
+
// Custom properties
private QueryNode condition;
public QueryNode ConditionTree {
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 Wed Mar 5 01:42:12 2008
@@ -305,7 +305,7 @@
protected HyenaSqliteCommand RateTrackRangeCommand {
get {
if (rate_track_range_command == null) {
- if (track_model.JoinTable != null) {
+ if (track_model.CachesJoinTableEntries) {
rate_track_range_command = new HyenaSqliteCommand (String.Format (@"
UPDATE CoreTracks SET Rating = ?, DateUpdatedStamp = ? WHERE
TrackID IN (SELECT TrackID FROM {0} WHERE
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs Wed Mar 5 01:42:12 2008
@@ -262,7 +262,6 @@
TrackSelector.TrackSelectionProxy.Selection.Clear ();
}
-
private void OnTrackContextMenu (object o, EventArgs args)
{
ResetRating ();
Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/ICacheableDatabaseModel.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/ICacheableDatabaseModel.cs (original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/ICacheableDatabaseModel.cs Wed Mar 5 01:42:12 2008
@@ -32,7 +32,7 @@
namespace Hyena.Data.Sqlite
{
- public interface ICacheableDatabaseModel : ICacheableModel
+ public interface ICacheableDatabaseModel : ICacheableModel, ISelectable
{
string ReloadFragment { get; }
string SelectAggregates { get; }
@@ -40,5 +40,6 @@
string JoinFragment { get; }
string JoinPrimaryKey { get; }
string JoinColumn { get; }
+ bool CachesJoinTableEntries { get; }
}
}
Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs (original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs Wed Mar 5 01:42:12 2008
@@ -41,12 +41,17 @@
private HyenaSqliteCommand select_single_command;
private HyenaSqliteCommand select_first_command;
private HyenaSqliteCommand count_command;
+ private HyenaSqliteCommand delete_selection_command;
+ private HyenaSqliteCommand save_selection_command;
+ private HyenaSqliteCommand get_selection_command;
private string reload_sql;
- private int uid;
- private int rows;
+ private long uid;
+ private long selection_uid;
+ private long rows;
// private bool warm;
- private int first_order_id;
+ private bool first_reload = true;
+ private long first_order_id;
public delegate void AggregatesUpdatedEventHandler (IDataReader reader);
public event AggregatesUpdatedEventHandler AggregatesUpdated;
@@ -64,7 +69,7 @@
CheckCacheTable ();
if (model.SelectAggregates != null) {
- if (model.JoinFragment != null) {
+ if (model.CachesJoinTableEntries) {
count_command = new HyenaSqliteCommand (String.Format (@"
SELECT count(*), {0} FROM {1}{2} j
WHERE j.{4} IN (SELECT ItemID FROM {3} WHERE ModelID = ?)
@@ -89,9 +94,10 @@
));
}
- FindOrCreateCacheModelId (String.Format ("{0}-{1}", uuid, typeof(T).Name));
+ uid = FindOrCreateCacheModelId (String.Format ("{0}-{1}", uuid, typeof(T).Name));
+ selection_uid = FindOrCreateCacheModelId (String.Format ("{0}-{1}-Selection", uuid, typeof(T).Name));
- if (model.JoinFragment != null) {
+ if (model.CachesJoinTableEntries) {
select_range_command = new HyenaSqliteCommand (
String.Format (@"
SELECT {0} FROM {1}
@@ -167,6 +173,19 @@
)
);
+ delete_selection_command = new HyenaSqliteCommand (String.Format (
+ "DELETE FROM {0} WHERE ModelID = {1}", CacheTableName, selection_uid
+ ));
+
+ save_selection_command = new HyenaSqliteCommand (String.Format (
+ "INSERT INTO {0} SELECT null, {1}, ItemID FROM {0} WHERE ModelID = {2} LIMIT ?, ?",
+ CacheTableName, selection_uid, uid
+ ));
+
+ get_selection_command = new HyenaSqliteCommand (String.Format (
+ "SELECT OrderID FROM {0} WHERE ModelID = {1} AND ItemID IN (SELECT ItemID FROM {0} WHERE ModelID = {2})",
+ CacheTableName, uid, selection_uid
+ ));
}
public bool Warm {
@@ -174,11 +193,11 @@
get { return false; }
}
- public int Count {
+ public long Count {
get { return rows; }
}
- public int CacheId {
+ public long CacheId {
get { return uid; }
}
@@ -189,27 +208,33 @@
protected virtual string CacheTableName {
get { return "HyenaCache"; }
}
+
+ private long FirstOrderId {
+ get {
+ if (first_order_id == -1) {
+ first_order_id = connection.Query<long> (select_first_command);
+ }
+ return first_order_id;
+ }
+ }
- public int IndexOf (int item_id)
+ public long IndexOf (long item_id)
{
if (rows == 0) {
return -1;
}
select_single_command.ApplyValues (item_id);
- int target_id = connection.Query<int> (select_single_command);
+ long target_id = connection.Query<long> (select_single_command);
if (target_id == 0) {
return -1;
}
- if (first_order_id == -1) {
- first_order_id = connection.Query<int> (select_first_command);
- }
- return target_id - first_order_id;
+ return target_id - FirstOrderId;
}
private HyenaSqliteCommand last_reload_command;
private string last_reload_fragment;
- public override int Reload ()
+ public override long Reload ()
{
if (last_reload_fragment == model.ReloadFragment) {
last_reload_command = last_reload_command;
@@ -218,6 +243,10 @@
last_reload_command = new HyenaSqliteCommand (reload_sql + last_reload_fragment);
}
+ if (!first_reload) {
+ SaveSelection ();
+ }
+
Clear ();
//using (new Timer (String.Format ("Generating cache table for {0}", model))) {
@@ -225,17 +254,56 @@
//}
first_order_id = -1;
UpdateAggregates ();
+
+ if (!first_reload) {
+ RestoreSelection ();
+ } else {
+ first_reload = false;
+ }
+
return rows;
}
- protected override void FetchSet (int offset, int limit)
+ private void SaveSelection ()
+ {
+ connection.Execute (delete_selection_command);
+
+ if (model.Selection.Count > 0) {
+ foreach (Hyena.Collections.RangeCollection.Range range in model.Selection.Ranges) {
+ connection.Execute (save_selection_command.ApplyValues (range.Start, range.End - range.Start + 1));
+ }
+ }
+ }
+
+ private void RestoreSelection ()
+ {
+ model.Selection.Clear (false);
+ long selected_id = -1;
+ long first_id = FirstOrderId;
+ using (IDataReader reader = connection.Query (get_selection_command)) {
+ while (reader.Read ()) {
+ selected_id = Convert.ToInt64 (reader[0]);
+ selected_id -= first_id;
+ model.Selection.QuietSelect ((int)selected_id);
+ }
+ }
+
+ // Trigger a model Changed event
+ if (selected_id == -1) {
+ model.Selection.Clear ();
+ } else {
+ model.Selection.Select ((int)selected_id);
+ }
+ }
+
+ protected override void FetchSet (long offset, long limit)
{
//using (new Timer (String.Format ("Fetching set for {0}", model))) {
select_range_command.ApplyValues (offset, limit);
using (IDataReader reader = connection.Query (select_range_command)) {
while (reader.Read ()) {
if (!ContainsKey (offset)) {
- Add (offset, provider.Load (reader, offset));
+ Add (offset, provider.Load (reader, (int)offset));
}
offset++;
}
@@ -247,7 +315,7 @@
{
using (IDataReader reader = connection.Query (count_command.ApplyValues (uid))) {
if (reader.Read ()) {
- rows = Convert.ToInt32 (reader[0]);
+ rows = Convert.ToInt64 (reader[0]);
AggregatesUpdatedEventHandler handler = AggregatesUpdated;
if (handler != null) {
@@ -257,25 +325,27 @@
}
}
- private void FindOrCreateCacheModelId (string id)
+ private long FindOrCreateCacheModelId (string id)
{
- uid = connection.Query<int> (String.Format (
+ long model_id = connection.Query<long> (String.Format (
"SELECT CacheID FROM {0} WHERE ModelID = '{1}'",
CacheModelsTableName, id
));
- if (uid == 0) {
+ if (model_id == 0) {
//Console.WriteLine ("Didn't find existing cache for {0}, creating", id);
- uid = connection.Execute (new HyenaSqliteCommand (String.Format (
+ model_id = connection.Execute (new HyenaSqliteCommand (String.Format (
"INSERT INTO {0} (ModelID) VALUES (?)", CacheModelsTableName
), id
));
} else {
//Console.WriteLine ("Found existing cache for {0}: {1}", id, uid);
//warm = true;
- Clear ();
- UpdateAggregates ();
+ //Clear ();
+ //UpdateAggregates ();
}
+
+ return model_id;
}
private static string checked_cache_table;
Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data/ArrayModelCache.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data/ArrayModelCache.cs (original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data/ArrayModelCache.cs Wed Mar 5 01:42:12 2008
@@ -33,21 +33,21 @@
public abstract class ArrayModelCache<T> : ModelCache<T>
{
protected T [] cache;
- protected int offset = -1;
- protected int limit = 0;
+ protected long offset = -1;
+ protected long limit = 0;
public ArrayModelCache (ICacheableModel model) : base (model)
{
cache = new T [model.FetchCount];
}
- public override bool ContainsKey (int i)
+ public override bool ContainsKey (long i)
{
return (i >= offset &&
i <= (offset + limit));
}
- public override void Add (int i, T item)
+ public override void Add (long i, T item)
{
if (cache.Length != model.FetchCount) {
cache = new T [model.FetchCount];
@@ -63,7 +63,7 @@
limit++;
}
- public override T this [int i] {
+ public override T this [long i] {
get { return cache [i - offset]; }
}
Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data/DictionaryModelCache.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data/DictionaryModelCache.cs (original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data/DictionaryModelCache.cs Wed Mar 5 01:42:12 2008
@@ -33,24 +33,24 @@
{
public abstract class DictionaryModelCache<T> : ModelCache<T>
{
- protected Dictionary<int, T> cache;
+ protected Dictionary<long, T> cache;
public DictionaryModelCache (ICacheableModel model) : base (model)
{
- cache = new Dictionary<int, T> (model.FetchCount);
+ cache = new Dictionary<long, T> (model.FetchCount);
}
- public override bool ContainsKey (int i)
+ public override bool ContainsKey (long i)
{
return cache.ContainsKey (i);
}
- public override void Add (int i, T item)
+ public override void Add (long i, T item)
{
cache.Add (i, item);
}
- public override T this [int i] {
+ public override T this [long i] {
get { return cache [i]; }
}
Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data/IListModel.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data/IListModel.cs (original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data/IListModel.cs Wed Mar 5 01:42:12 2008
@@ -32,7 +32,7 @@
namespace Hyena.Data
{
- public interface IListModel<T>
+ public interface IListModel<T> : ISelectable
{
event EventHandler Cleared;
event EventHandler Reloaded;
@@ -42,7 +42,6 @@
T this[int index] { get; }
int Count { get; }
- Selection Selection { get; }
}
public interface IObjectListModel : IListModel<object>
Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data/ModelCache.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data/ModelCache.cs (original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data/ModelCache.cs Wed Mar 5 01:42:12 2008
@@ -40,7 +40,7 @@
this.model = model;
}
- public virtual T GetValue (int index)
+ public virtual T GetValue (long index)
{
if (ContainsKey (index))
return this[index];
@@ -54,14 +54,14 @@
}
// Responsible for fetching a set of items and placing them in the cache
- protected abstract void FetchSet (int offset, int limit);
+ protected abstract void FetchSet (long offset, long limit);
// Reset the cache and return the total # of items in the model
- public abstract int Reload ();
+ public abstract long Reload ();
- public abstract bool ContainsKey (int i);
- public abstract void Add (int i, T item);
- public abstract T this[int i] { get; }
+ public abstract bool ContainsKey (long i);
+ public abstract void Add (long i, T item);
+ public abstract T this[long i] { get; }
public abstract void Clear ();
}
}
Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data/ModelSelection.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data/ModelSelection.cs (original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data/ModelSelection.cs Wed Mar 5 01:42:12 2008
@@ -65,11 +65,11 @@
#region Methods
- public int IndexOf (T value)
+ /*public int IndexOf (T value)
{
//selection.IndexOf (model.IndexOf (value));
return -1;
- }
+ }*/
public IEnumerator<T> GetEnumerator ()
{
Modified: trunk/banshee/src/Libraries/Hyena/Makefile.am
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Makefile.am (original)
+++ trunk/banshee/src/Libraries/Hyena/Makefile.am Wed Mar 5 01:42:12 2008
@@ -27,6 +27,7 @@
Hyena.Data/IFilterable.cs \
Hyena.Data/IListModel.cs \
Hyena.Data/IPropertyStoreExpose.cs \
+ Hyena.Data/ISelectable.cs \
Hyena.Data/ISortable.cs \
Hyena.Data/ISortableColumn.cs \
Hyena.Data/ModelCache.cs \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]