[banshee: 32/57] Added a chunk result handler to unify the code when doing all media type searches
- From: Bertrand Lorentz <blorentz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee: 32/57] Added a chunk result handler to unify the code when doing all media type searches
- Date: Mon, 13 Feb 2012 20:30:31 +0000 (UTC)
commit cbbf5ab81eebfe146b13e2a67e2063f80d3916fa
Author: Tobias Arrskog <topfs2 xbmc org>
Date: Thu Jul 14 19:06:27 2011 +0200
Added a chunk result handler to unify the code when doing all media type searches
.../Banshee.UPnPClient/UPnPServerSource.cs | 92 ++++++++++---------
1 files changed, 48 insertions(+), 44 deletions(-)
---
diff --git a/src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPServerSource.cs b/src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPServerSource.cs
index 5ccaef7..d99bf72 100644
--- a/src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPServerSource.cs
+++ b/src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPServerSource.cs
@@ -82,6 +82,20 @@ namespace Banshee.UPnPClient
music_source = null;
}
+ delegate void ChunkHandler<T> (Results<T> results);
+ void HandleResults<T> (Results<T> results, RemoteContentDirectory remoteContentDirectory, ChunkHandler<T> chunkHandler)
+ {
+ bool hasresults = results.Count > 0;
+
+ while (hasresults) {
+ chunkHandler(results);
+
+ hasresults = results.HasMoreResults;
+ if (hasresults)
+ results = results.GetMoreResults(remoteContentDirectory);
+ }
+ }
+
void Parse (ContentDirectoryController contentDirectory)
{
RemoteContentDirectory remoteContentDirectory = new RemoteContentDirectory (contentDirectory);
@@ -93,22 +107,15 @@ namespace Banshee.UPnPClient
if (!recursiveBrowse) {
try {
Hyena.Log.Debug ("Searchable, lets search");
- Results<MusicTrack> results = remoteContentDirectory.Search<MusicTrack>(root, visitor => visitor.VisitDerivedFrom("upnp:class", "object.item.audioItem.musicTrack"), new ResultsSettings());
- bool hasresults = results.Count > 0;
-
- while (hasresults) {
- foreach (var item in results) {
- musicTracks.Add(item as MusicTrack);
- }
-
- if (results.HasMoreResults) {
- results = results.GetMoreResults(remoteContentDirectory);
- music_source.AddTracks (musicTracks);
- musicTracks.Clear();
- }
- else
- hasresults = false;
- }
+
+ HandleResults<MusicTrack> (remoteContentDirectory.Search<MusicTrack>(root, visitor => visitor.VisitDerivedFrom("upnp:class", "object.item.audioItem.musicTrack"), new ResultsSettings()),
+ remoteContentDirectory,
+ chunk => {
+ foreach (var item in chunk)
+ musicTracks.Add(item as MusicTrack);
+
+ music_source.AddTracks (musicTracks);
+ });
} catch (Exception exception) {
Hyena.Log.Exception (exception);
recursiveBrowse = true;
@@ -133,35 +140,32 @@ namespace Banshee.UPnPClient
{
if (depth > 10 || (container.ChildCount != null && container.ChildCount == 0))
return;
- Results<Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.Object> results = remoteContentDirectory.GetChildren<Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.Object>(container);
- bool hasresults = results.Count > 0;
- while (hasresults) {
- foreach (var upnp_object in results) {
- if (upnp_object is Item) {
- Item item = upnp_object as Item;
-
- if (item.IsReference || item.Resources.Count == 0)
- continue;
-
- if (item is MusicTrack) {
- musicTracks.Add(item as MusicTrack);
- }
- }
- else if (upnp_object is Container) {
- ParseContainer (remoteContentDirectory, upnp_object as Container, depth + 1, musicTracks);
- }
-
- if (musicTracks.Count > 500) {
- music_source.AddTracks (musicTracks);
- musicTracks.Clear();
- }
- }
- if (results.HasMoreResults)
- results = results.GetMoreResults(remoteContentDirectory);
- else
- hasresults = false;
- }
+ HandleResults<Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.Object> (
+ remoteContentDirectory.GetChildren<Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.Object>(container),
+ remoteContentDirectory,
+ chunk => {
+ foreach (var upnp_object in chunk) {
+ if (upnp_object is Item) {
+ Item item = upnp_object as Item;
+
+ if (item.IsReference || item.Resources.Count == 0)
+ continue;
+
+ if (item is MusicTrack) {
+ musicTracks.Add(item as MusicTrack);
+ }
+ }
+ else if (upnp_object is Container) {
+ ParseContainer (remoteContentDirectory, upnp_object as Container, depth + 1, musicTracks);
+ }
+
+ if (musicTracks.Count > 500) {
+ music_source.AddTracks (musicTracks);
+ musicTracks.Clear();
+ }
+ }
+ });
}
public void Disconnect ()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]