diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2012-10-13 17:22:18 -0400 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2012-10-15 10:02:48 -0400 |
commit | 4dde18ac33476519f2fa7fb925d278f2de67d963 (patch) | |
tree | 7de47b8f896ecf2ebf7d0b719e86f5e744307954 | |
parent | 106c0362094683fe286906aad59beb338909981b (diff) | |
download | nautilus-4dde18ac33476519f2fa7fb925d278f2de67d963.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.c | 40 |
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 |