summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2012-10-13 17:22:18 -0400
committerCosimo Cecchi <cosimoc@gnome.org>2012-10-15 09:51:30 -0400
commit949af5d7132724c40891f629c49602de0427a2fd (patch)
treec3a5bdcf715e52b2955b2207684444ef415e0773
parent5a6f9bd61d18157fa2f56b58115f024708967325 (diff)
downloadnautilus-949af5d7132724c40891f629c49602de0427a2fd.tar.gz
search-engine: refactor providers status check
Make sure that we emit either finished or error when all the providers have finished.
-rw-r--r--libnautilus-private/nautilus-search-engine.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/libnautilus-private/nautilus-search-engine.c b/libnautilus-private/nautilus-search-engine.c
index ed52241a7..be2b2f07d 100644
--- a/libnautilus-private/nautilus-search-engine.c
+++ b/libnautilus-private/nautilus-search-engine.c
@@ -158,6 +158,28 @@ search_provider_hits_subtracted (NautilusSearchProvider *provider,
}
static void
+check_providers_status (NautilusSearchEngine *engine)
+{
+ gint num_finished = engine->details->providers_error + engine->details->providers_finished;
+
+ if (num_finished < engine->details->providers_running) {
+ return;
+ }
+
+ g_object_ref (engine);
+
+ if (num_finished == engine->details->providers_error) {
+ nautilus_search_provider_error (NAUTILUS_SEARCH_PROVIDER (engine),
+ _("Unable to complete the requested search"));
+ } else {
+ nautilus_search_provider_finished (NAUTILUS_SEARCH_PROVIDER (engine));
+ }
+
+ g_hash_table_remove_all (engine->details->uris);
+ g_object_unref (engine);
+}
+
+static void
search_provider_error (NautilusSearchProvider *provider,
const char *error_message,
NautilusSearchEngine *engine)
@@ -165,13 +187,8 @@ search_provider_error (NautilusSearchProvider *provider,
{
DEBUG ("Search provider error: %s", error_message);
engine->details->providers_error++;
- if (engine->details->providers_error == engine->details->providers_running) {
- g_object_ref (engine);
- nautilus_search_provider_error (NAUTILUS_SEARCH_PROVIDER (engine),
- _("Unable to complete the requested search"));
- g_hash_table_remove_all (engine->details->uris);
- g_object_unref (engine);
- }
+
+ check_providers_status (engine);
}
static void
@@ -179,13 +196,10 @@ search_provider_finished (NautilusSearchProvider *provider,
NautilusSearchEngine *engine)
{
+ DEBUG ("Search provider finished");
engine->details->providers_finished++;
- if (engine->details->providers_finished == engine->details->providers_running) {
- g_object_ref (engine);
- nautilus_search_provider_finished (NAUTILUS_SEARCH_PROVIDER (engine));
- g_hash_table_remove_all (engine->details->uris);
- g_object_unref (engine);
- }
+
+ check_providers_status (engine);
}
static void