summaryrefslogtreecommitdiff
blob: 755faac9d2afe6ffbd25636026e98d23c93d2041 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
From df228459d4332f3cb675d28d1d4185ae22929b81 Mon Sep 17 00:00:00 2001
From: Lionel Landwerlin <lionel.g.landwerlin@linux.intel.com>
Date: Wed, 29 Jun 2011 13:13:38 +0000
Subject: media-source: manage end of search/browse with splitted sources

When running in splitted modes (usually when dealing with websites),
if you get less results than what the user would like to get, we
currently end up in an infinite loop with the core of grilo keeping
asking for new items from a source which can't deliver anymore.

To manage this specific case, we just check whether the plugin has
returned a remaining results number equals to 0 as well as a null
item.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@linux.intel.com>
---
diff --git a/src/grl-media-source.c b/src/grl-media-source.c
index 459e29c..00494c3 100644
--- a/src/grl-media-source.c
+++ b/src/grl-media-source.c
@@ -643,8 +643,6 @@ browse_result_relay_cb (GrlMediaSource *source,
 
   brc = (struct BrowseRelayCb *) user_data;
 
-  plugin_remaining = remaining;
-
   /* --- operation cancel management --- */
 
   /* Check if operation is still valid , otherwise do not emit the result
@@ -697,9 +695,13 @@ browse_result_relay_cb (GrlMediaSource *source,
     as_info->count--;
     as_info->chunk_consumed++;
 
-    /* FIXME: If we received less than we requested we should
-       not do an extra query */
-    remaining = as_info->count;
+    /* When auto split, if less results than what a chunk should give,
+     * that means we've reached the end of the results. */
+    if ((plugin_remaining == 0) &&
+        (as_info->chunk_consumed < as_info->chunk_requested))
+      remaining = 0;
+    else
+      remaining = as_info->count;
   }
 
   /* --- relay operation  --- */
--
cgit v0.9