[banshee: 21/57] A server may return partial results, make sure we query all available.
- From: Bertrand Lorentz <blorentz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee: 21/57] A server may return partial results, make sure we query all available.
- Date: Mon, 13 Feb 2012 20:29:35 +0000 (UTC)
commit 89dc5b9fb96768f5351c44b0c9eb9a1e78623346
Author: Tobias Arrskog <topfs2 xbmc org>
Date: Tue Jul 5 17:30:45 2011 +0200
A server may return partial results, make sure we query all available.
.../Banshee.UPnPClient/UPnPService.cs | 56 +++++++++++++-------
1 files changed, 37 insertions(+), 19 deletions(-)
---
diff --git a/src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPService.cs b/src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPService.cs
index 55c3cdc..39d44fe 100644
--- a/src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPService.cs
+++ b/src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPService.cs
@@ -105,9 +105,19 @@ namespace Banshee.UPnPClient
if (!recursiveBrowse) {
try {
Hyena.Log.Debug ("Searchable, lets search");
- foreach (var item in remoteContentDirectory.Search<MusicTrack>(root, visitor => visitor.VisitDerivedFrom("upnp:class", "object.item.audioItem.musicTrack"), new ResultsSettings())) {
- musicTracks.Add(item as MusicTrack);
- }
+ 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);
+ else
+ hasresults = false;
+ }
} catch (Exception exception) {
Hyena.Log.Exception (exception);
recursiveBrowse = true;
@@ -132,26 +142,34 @@ 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 (source, remoteContentDirectory, upnp_object as Container, depth + 1, musicTracks);
+ }
- foreach (var upnp_object in remoteContentDirectory.GetChildren<Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.Object>(container)) {
- 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);
+ if (musicTracks.Count > 500) {
+ source.AddTracks (musicTracks);
+ musicTracks.Clear();
}
}
- else if (upnp_object is Container) {
- ParseContainer (source, remoteContentDirectory, upnp_object as Container, depth + 1, musicTracks);
- }
- if (musicTracks.Count > 500) {
- source.AddTracks (musicTracks);
- musicTracks.Clear();
- }
+ if (results.HasMoreResults)
+ results = results.GetMoreResults(remoteContentDirectory);
+ else
+ hasresults = false;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]