diff options
author | Carlos Soriano <csoriano@gnome.org> | 2016-08-29 18:24:05 +0200 |
---|---|---|
committer | Carlos Soriano <csoriano@gnome.org> | 2016-08-29 18:37:10 +0200 |
commit | 52d960542b4d5fdf2bd06735d0dbf7934cf2ec12 (patch) | |
tree | 5e000d5ed40b52b003c02b597e51ae0b87ff22ac /src/nautilus-shell-search-provider.c | |
parent | 4cafccd82859a4ee0bdfad3e31a310f2d94c0485 (diff) | |
download | nautilus-52d960542b4d5fdf2bd06735d0dbf7934cf2ec12.tar.gz |
general: run uncrustify
And make the style of Nautilus the same for all files.
Hopefully we can fix all the style issues we can find in the next days,
so expect a little of movement on this.
https://bugzilla.gnome.org/show_bug.cgi?id=770564
Diffstat (limited to 'src/nautilus-shell-search-provider.c')
-rw-r--r-- | src/nautilus-shell-search-provider.c | 999 |
1 files changed, 525 insertions, 474 deletions
diff --git a/src/nautilus-shell-search-provider.c b/src/nautilus-shell-search-provider.c index 41ee0d9ac..a2ab54c03 100644 --- a/src/nautilus-shell-search-provider.c +++ b/src/nautilus-shell-search-provider.c @@ -39,79 +39,89 @@ #include "nautilus-shell-search-provider-generated.h" #include "nautilus-shell-search-provider.h" -typedef struct { - NautilusShellSearchProvider *self; +typedef struct +{ + NautilusShellSearchProvider *self; - NautilusSearchEngine *engine; - NautilusQuery *query; + NautilusSearchEngine *engine; + NautilusQuery *query; - GHashTable *hits; - GDBusMethodInvocation *invocation; + GHashTable *hits; + GDBusMethodInvocation *invocation; - gint64 start_time; + gint64 start_time; } PendingSearch; -struct _NautilusShellSearchProvider { - GObject parent; +struct _NautilusShellSearchProvider +{ + GObject parent; - NautilusShellSearchProvider2 *skeleton; + NautilusShellSearchProvider2 *skeleton; - PendingSearch *current_search; + PendingSearch *current_search; - GHashTable *metas_cache; + GHashTable *metas_cache; }; G_DEFINE_TYPE (NautilusShellSearchProvider, nautilus_shell_search_provider, G_TYPE_OBJECT) static gchar * get_display_name (NautilusShellSearchProvider *self, - NautilusFile *file) + NautilusFile *file) { - GFile *location; - NautilusBookmark *bookmark; - NautilusBookmarkList *bookmarks; + GFile *location; + NautilusBookmark *bookmark; + NautilusBookmarkList *bookmarks; - bookmarks = nautilus_application_get_bookmarks (NAUTILUS_APPLICATION (g_application_get_default ())); + bookmarks = nautilus_application_get_bookmarks (NAUTILUS_APPLICATION (g_application_get_default ())); - location = nautilus_file_get_location (file); - bookmark = nautilus_bookmark_list_item_with_location (bookmarks, location, NULL); - g_object_unref (location); + location = nautilus_file_get_location (file); + bookmark = nautilus_bookmark_list_item_with_location (bookmarks, location, NULL); + g_object_unref (location); - if (bookmark) - return g_strdup (nautilus_bookmark_get_name (bookmark)); - else - return nautilus_file_get_display_name (file); + if (bookmark) + { + return g_strdup (nautilus_bookmark_get_name (bookmark)); + } + else + { + return nautilus_file_get_display_name (file); + } } static GIcon * get_gicon (NautilusShellSearchProvider *self, - NautilusFile *file) + NautilusFile *file) { - GFile *location; - NautilusBookmark *bookmark; - NautilusBookmarkList *bookmarks; + GFile *location; + NautilusBookmark *bookmark; + NautilusBookmarkList *bookmarks; - bookmarks = nautilus_application_get_bookmarks (NAUTILUS_APPLICATION (g_application_get_default ())); + bookmarks = nautilus_application_get_bookmarks (NAUTILUS_APPLICATION (g_application_get_default ())); - location = nautilus_file_get_location (file); - bookmark = nautilus_bookmark_list_item_with_location (bookmarks, location, NULL); - g_object_unref (location); + location = nautilus_file_get_location (file); + bookmark = nautilus_bookmark_list_item_with_location (bookmarks, location, NULL); + g_object_unref (location); - if (bookmark) - return nautilus_bookmark_get_icon (bookmark); - else - return nautilus_file_get_gicon (file, 0); + if (bookmark) + { + return nautilus_bookmark_get_icon (bookmark); + } + else + { + return nautilus_file_get_gicon (file, 0); + } } static void pending_search_free (PendingSearch *search) { - g_hash_table_destroy (search->hits); - g_clear_object (&search->query); - g_clear_object (&search->engine); - g_clear_object (&search->invocation); + g_hash_table_destroy (search->hits); + g_clear_object (&search->query); + g_clear_object (&search->engine); + g_clear_object (&search->invocation); - g_slice_free (PendingSearch, search); + g_slice_free (PendingSearch, search); } static void @@ -119,66 +129,74 @@ pending_search_finish (PendingSearch *search, GDBusMethodInvocation *invocation, GVariant *result) { - NautilusShellSearchProvider *self = search->self; + NautilusShellSearchProvider *self = search->self; - g_dbus_method_invocation_return_value (invocation, result); + g_dbus_method_invocation_return_value (invocation, result); - if (search == self->current_search) - self->current_search = NULL; + if (search == self->current_search) + { + self->current_search = NULL; + } - g_application_release (g_application_get_default ()); - pending_search_free (search); + g_application_release (g_application_get_default ()); + pending_search_free (search); } static void cancel_current_search (NautilusShellSearchProvider *self) { - if (self->current_search != NULL) - nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (self->current_search->engine)); + if (self->current_search != NULL) + { + nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (self->current_search->engine)); + } } static void search_hits_added_cb (NautilusSearchEngine *engine, GList *hits, gpointer user_data) - { - PendingSearch *search = user_data; - GList *l; - NautilusSearchHit *hit; - const gchar *hit_uri; + PendingSearch *search = user_data; + GList *l; + NautilusSearchHit *hit; + const gchar *hit_uri; - g_debug ("*** Search engine hits added"); + g_debug ("*** Search engine hits added"); - for (l = hits; l != NULL; l = l->next) { - hit = l->data; - nautilus_search_hit_compute_scores (hit, search->query); - hit_uri = nautilus_search_hit_get_uri (hit); - g_debug (" %s", hit_uri); + for (l = hits; l != NULL; l = l->next) + { + hit = l->data; + nautilus_search_hit_compute_scores (hit, search->query); + hit_uri = nautilus_search_hit_get_uri (hit); + g_debug (" %s", hit_uri); - g_hash_table_replace (search->hits, g_strdup (hit_uri), g_object_ref (hit)); - } + g_hash_table_replace (search->hits, g_strdup (hit_uri), g_object_ref (hit)); + } } static gint search_hit_compare_relevance (gconstpointer a, gconstpointer b) { - NautilusSearchHit *hit_a, *hit_b; - gdouble relevance_a, relevance_b; + NautilusSearchHit *hit_a, *hit_b; + gdouble relevance_a, relevance_b; - hit_a = NAUTILUS_SEARCH_HIT (a); - hit_b = NAUTILUS_SEARCH_HIT (b); + hit_a = NAUTILUS_SEARCH_HIT (a); + hit_b = NAUTILUS_SEARCH_HIT (b); - relevance_a = nautilus_search_hit_get_relevance (hit_a); - relevance_b = nautilus_search_hit_get_relevance (hit_b); + relevance_a = nautilus_search_hit_get_relevance (hit_a); + relevance_b = nautilus_search_hit_get_relevance (hit_b); - if (relevance_a > relevance_b) - return -1; - else if (relevance_a == relevance_b) - return 0; + if (relevance_a > relevance_b) + { + return -1; + } + else if (relevance_a == relevance_b) + { + return 0; + } - return 1; + return 1; } static void @@ -186,29 +204,30 @@ search_finished_cb (NautilusSearchEngine *engine, NautilusSearchProviderStatus status, gpointer user_data) { - PendingSearch *search = user_data; - GList *hits, *l; - NautilusSearchHit *hit; - GVariantBuilder builder; - gint64 current_time; + PendingSearch *search = user_data; + GList *hits, *l; + NautilusSearchHit *hit; + GVariantBuilder builder; + gint64 current_time; - current_time = g_get_monotonic_time (); - g_debug ("*** Search engine search finished - time elapsed %dms", - (gint) ((current_time - search->start_time) / 1000)); + current_time = g_get_monotonic_time (); + g_debug ("*** Search engine search finished - time elapsed %dms", + (gint) ((current_time - search->start_time) / 1000)); - hits = g_hash_table_get_values (search->hits); - hits = g_list_sort (hits, search_hit_compare_relevance); + hits = g_hash_table_get_values (search->hits); + hits = g_list_sort (hits, search_hit_compare_relevance); - g_variant_builder_init (&builder, G_VARIANT_TYPE ("as")); + g_variant_builder_init (&builder, G_VARIANT_TYPE ("as")); - for (l = hits; l != NULL; l = l->next) { - hit = l->data; - g_variant_builder_add (&builder, "s", nautilus_search_hit_get_uri (hit)); - } + for (l = hits; l != NULL; l = l->next) + { + hit = l->data; + g_variant_builder_add (&builder, "s", nautilus_search_hit_get_uri (hit)); + } - g_list_free (hits); - pending_search_finish (search, search->invocation, - g_variant_new ("(as)", &builder)); + g_list_free (hits); + pending_search_finish (search, search->invocation, + g_variant_new ("(as)", &builder)); } static void @@ -216,232 +235,253 @@ search_error_cb (NautilusSearchEngine *engine, const gchar *error_message, gpointer user_data) { - NautilusShellSearchProvider *self = user_data; - PendingSearch *search = self->current_search; + NautilusShellSearchProvider *self = user_data; + PendingSearch *search = self->current_search; - g_debug ("*** Search engine search error"); - pending_search_finish (search, search->invocation, - g_variant_new ("(as)", NULL)); + g_debug ("*** Search engine search error"); + pending_search_finish (search, search->invocation, + g_variant_new ("(as)", NULL)); } -typedef struct { - gchar *uri; - gchar *string_for_compare; +typedef struct +{ + gchar *uri; + gchar *string_for_compare; } SearchHitCandidate; static void search_hit_candidate_free (SearchHitCandidate *candidate) { - g_free (candidate->uri); - g_free (candidate->string_for_compare); + g_free (candidate->uri); + g_free (candidate->string_for_compare); - g_slice_free (SearchHitCandidate, candidate); + g_slice_free (SearchHitCandidate, candidate); } static SearchHitCandidate * search_hit_candidate_new (const gchar *uri, const gchar *name) { - SearchHitCandidate *candidate = g_slice_new0 (SearchHitCandidate); + SearchHitCandidate *candidate = g_slice_new0 (SearchHitCandidate); - candidate->uri = g_strdup (uri); - candidate->string_for_compare = g_strdup (name); + candidate->uri = g_strdup (uri); + candidate->string_for_compare = g_strdup (name); - return candidate; + return candidate; } static void search_add_volumes_and_bookmarks (PendingSearch *search) { - NautilusSearchHit *hit; - NautilusBookmark *bookmark; - const gchar *name; - gchar *string, *uri; - gdouble match; - GList *l, *m, *drives, *volumes, *mounts, *mounts_to_check, *candidates; - GDrive *drive; - GVolume *volume; - GMount *mount; - GFile *location; - SearchHitCandidate *candidate; - NautilusBookmarkList *bookmarks; - GList *all_bookmarks; - GVolumeMonitor *volume_monitor; - - bookmarks = nautilus_application_get_bookmarks (NAUTILUS_APPLICATION (g_application_get_default ())); - all_bookmarks = nautilus_bookmark_list_get_all (bookmarks); - volume_monitor = g_volume_monitor_get (); - candidates = NULL; - - /* first add bookmarks */ - for (l = all_bookmarks; l != NULL; l = l->next) { - bookmark = NAUTILUS_BOOKMARK (l->data); - name = nautilus_bookmark_get_name (bookmark); - if (name == NULL) - continue; - - uri = nautilus_bookmark_get_uri (bookmark); - candidate = search_hit_candidate_new (uri, name); - candidates = g_list_prepend (candidates, candidate); + NautilusSearchHit *hit; + NautilusBookmark *bookmark; + const gchar *name; + gchar *string, *uri; + gdouble match; + GList *l, *m, *drives, *volumes, *mounts, *mounts_to_check, *candidates; + GDrive *drive; + GVolume *volume; + GMount *mount; + GFile *location; + SearchHitCandidate *candidate; + NautilusBookmarkList *bookmarks; + GList *all_bookmarks; + GVolumeMonitor *volume_monitor; + + bookmarks = nautilus_application_get_bookmarks (NAUTILUS_APPLICATION (g_application_get_default ())); + all_bookmarks = nautilus_bookmark_list_get_all (bookmarks); + volume_monitor = g_volume_monitor_get (); + candidates = NULL; + + /* first add bookmarks */ + for (l = all_bookmarks; l != NULL; l = l->next) + { + bookmark = NAUTILUS_BOOKMARK (l->data); + name = nautilus_bookmark_get_name (bookmark); + if (name == NULL) + { + continue; + } + + uri = nautilus_bookmark_get_uri (bookmark); + candidate = search_hit_candidate_new (uri, name); + candidates = g_list_prepend (candidates, candidate); + + g_free (uri); + } + /* home dir */ + uri = nautilus_get_home_directory_uri (); + candidate = search_hit_candidate_new (uri, _("Home")); + candidates = g_list_prepend (candidates, candidate); g_free (uri); - } - - /* home dir */ - uri = nautilus_get_home_directory_uri (); - candidate = search_hit_candidate_new (uri, _("Home")); - candidates = g_list_prepend (candidates, candidate); - g_free (uri); - - /* trash */ - candidate = search_hit_candidate_new ("trash:///", _("Trash")); - candidates = g_list_prepend (candidates, candidate); - - /* now add mounts */ - mounts_to_check = NULL; - - /* first check all connected drives */ - drives = g_volume_monitor_get_connected_drives (volume_monitor); - for (l = drives; l != NULL; l = l->next) { - drive = l->data; - volumes = g_drive_get_volumes (drive); - - for (m = volumes; m != NULL; m = m->next) { - volume = m->data; - mount = g_volume_get_mount (volume); - if (mount != NULL) { - mounts_to_check = g_list_prepend (mounts_to_check, mount); - } - } - g_list_free_full (volumes, g_object_unref); - } - g_list_free_full (drives, g_object_unref); - - /* then volumes that don't have a drive */ - volumes = g_volume_monitor_get_volumes (volume_monitor); - for (l = volumes; l != NULL; l = l->next) { - volume = l->data; - drive = g_volume_get_drive (volume); - - if (drive == NULL) { - mount = g_volume_get_mount (volume); - if (mount != NULL) { - mounts_to_check = g_list_prepend (mounts_to_check, mount); - } - } - g_clear_object (&drive); - } - g_list_free_full (volumes, g_object_unref); - - /* then mounts that have no volume */ - mounts = g_volume_monitor_get_mounts (volume_monitor); - for (l = mounts; l != NULL; l = l->next) { - mount = l->data; - - if (g_mount_is_shadowed (mount)) - continue; - - volume = g_mount_get_volume (mount); - if (volume == NULL) - mounts_to_check = g_list_prepend (mounts_to_check, g_object_ref (mount)); - g_clear_object (&volume); - } - g_list_free_full (mounts, g_object_unref); - - /* actually add mounts to candidates */ - for (l = mounts_to_check; l != NULL; l = l->next) { - mount = l->data; - - string = g_mount_get_name (mount); - if (string == NULL) - continue; - - location = g_mount_get_default_location (mount); - uri = g_file_get_uri (location); - candidate = search_hit_candidate_new (uri, string); + /* trash */ + candidate = search_hit_candidate_new ("trash:///", _("Trash")); candidates = g_list_prepend (candidates, candidate); - g_free (uri); - g_free (string); - g_object_unref (location); - } - g_list_free_full (mounts_to_check, g_object_unref); - - /* now do the actual string matching */ - candidates = g_list_reverse (candidates); - - for (l = candidates; l != NULL; l = l->next) { - candidate = l->data; - match = nautilus_query_matches_string (search->query, - candidate->string_for_compare); - - if (match > -1) { - hit = nautilus_search_hit_new (candidate->uri); - nautilus_search_hit_set_fts_rank (hit, match); - nautilus_search_hit_compute_scores (hit, search->query); - g_hash_table_replace (search->hits, g_strdup (candidate->uri), hit); + /* now add mounts */ + mounts_to_check = NULL; + + /* first check all connected drives */ + drives = g_volume_monitor_get_connected_drives (volume_monitor); + for (l = drives; l != NULL; l = l->next) + { + drive = l->data; + volumes = g_drive_get_volumes (drive); + + for (m = volumes; m != NULL; m = m->next) + { + volume = m->data; + mount = g_volume_get_mount (volume); + if (mount != NULL) + { + mounts_to_check = g_list_prepend (mounts_to_check, mount); + } + } + + g_list_free_full (volumes, g_object_unref); + } + g_list_free_full (drives, g_object_unref); + + /* then volumes that don't have a drive */ + volumes = g_volume_monitor_get_volumes (volume_monitor); + for (l = volumes; l != NULL; l = l->next) + { + volume = l->data; + drive = g_volume_get_drive (volume); + + if (drive == NULL) + { + mount = g_volume_get_mount (volume); + if (mount != NULL) + { + mounts_to_check = g_list_prepend (mounts_to_check, mount); + } + } + g_clear_object (&drive); + } + g_list_free_full (volumes, g_object_unref); + + /* then mounts that have no volume */ + mounts = g_volume_monitor_get_mounts (volume_monitor); + for (l = mounts; l != NULL; l = l->next) + { + mount = l->data; + + if (g_mount_is_shadowed (mount)) + { + continue; + } + + volume = g_mount_get_volume (mount); + if (volume == NULL) + { + mounts_to_check = g_list_prepend (mounts_to_check, g_object_ref (mount)); + } + g_clear_object (&volume); } - } - g_list_free_full (candidates, (GDestroyNotify) search_hit_candidate_free); - g_object_unref (volume_monitor); + g_list_free_full (mounts, g_object_unref); + + /* actually add mounts to candidates */ + for (l = mounts_to_check; l != NULL; l = l->next) + { + mount = l->data; + + string = g_mount_get_name (mount); + if (string == NULL) + { + continue; + } + + location = g_mount_get_default_location (mount); + uri = g_file_get_uri (location); + candidate = search_hit_candidate_new (uri, string); + candidates = g_list_prepend (candidates, candidate); + + g_free (uri); + g_free (string); + g_object_unref (location); + } + g_list_free_full (mounts_to_check, g_object_unref); + + /* now do the actual string matching */ + candidates = g_list_reverse (candidates); + + for (l = candidates; l != NULL; l = l->next) + { + candidate = l->data; + match = nautilus_query_matches_string (search->query, + candidate->string_for_compare); + + if (match > -1) + { + hit = nautilus_search_hit_new (candidate->uri); + nautilus_search_hit_set_fts_rank (hit, match); + nautilus_search_hit_compute_scores (hit, search->query); + g_hash_table_replace (search->hits, g_strdup (candidate->uri), hit); + } + } + g_list_free_full (candidates, (GDestroyNotify) search_hit_candidate_free); + g_object_unref (volume_monitor); } static void -execute_search (NautilusShellSearchProvider *self, - GDBusMethodInvocation *invocation, - gchar **terms) +execute_search (NautilusShellSearchProvider *self, + GDBusMethodInvocation *invocation, + gchar **terms) { - gchar *terms_joined; - NautilusQuery *query; - PendingSearch *pending_search; - GFile *home; - - cancel_current_search (self); - - /* don't attempt searches for a single character */ - if (g_strv_length (terms) == 1 && - g_utf8_strlen (terms[0], -1) == 1) { - g_dbus_method_invocation_return_value (invocation, g_variant_new ("(as)", NULL)); - return; - } - - terms_joined = g_strjoinv (" ", terms); - home = g_file_new_for_path (g_get_home_dir ()); - - query = nautilus_query_new (); - nautilus_query_set_show_hidden_files (query, FALSE); - nautilus_query_set_text (query, terms_joined); - nautilus_query_set_location (query, home); - - pending_search = g_slice_new0 (PendingSearch); - pending_search->invocation = g_object_ref (invocation); - pending_search->hits = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); - pending_search->query = query; - pending_search->engine = nautilus_search_engine_new (); - pending_search->start_time = g_get_monotonic_time (); - pending_search->self = self; - - g_signal_connect (pending_search->engine, "hits-added", - G_CALLBACK (search_hits_added_cb), pending_search); - g_signal_connect (pending_search->engine, "finished", - G_CALLBACK (search_finished_cb), pending_search); - g_signal_connect (pending_search->engine, "error", - G_CALLBACK (search_error_cb), pending_search); - - self->current_search = pending_search; - g_application_hold (g_application_get_default ()); - - search_add_volumes_and_bookmarks (pending_search); - - /* start searching */ - g_debug ("*** Search engine search started"); - nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (pending_search->engine), - query); - nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (pending_search->engine)); - - g_clear_object (&home); - g_free (terms_joined); + gchar *terms_joined; + NautilusQuery *query; + PendingSearch *pending_search; + GFile *home; + + cancel_current_search (self); + + /* don't attempt searches for a single character */ + if (g_strv_length (terms) == 1 && + g_utf8_strlen (terms[0], -1) == 1) + { + g_dbus_method_invocation_return_value (invocation, g_variant_new ("(as)", NULL)); + return; + } + + terms_joined = g_strjoinv (" ", terms); + home = g_file_new_for_path (g_get_home_dir ()); + + query = nautilus_query_new (); + nautilus_query_set_show_hidden_files (query, FALSE); + nautilus_query_set_text (query, terms_joined); + nautilus_query_set_location (query, home); + + pending_search = g_slice_new0 (PendingSearch); + pending_search->invocation = g_object_ref (invocation); + pending_search->hits = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); + pending_search->query = query; + pending_search->engine = nautilus_search_engine_new (); + pending_search->start_time = g_get_monotonic_time (); + pending_search->self = self; + + g_signal_connect (pending_search->engine, "hits-added", + G_CALLBACK (search_hits_added_cb), pending_search); + g_signal_connect (pending_search->engine, "finished", + G_CALLBACK (search_finished_cb), pending_search); + g_signal_connect (pending_search->engine, "error", + G_CALLBACK (search_error_cb), pending_search); + + self->current_search = pending_search; + g_application_hold (g_application_get_default ()); + + search_add_volumes_and_bookmarks (pending_search); + + /* start searching */ + g_debug ("*** Search engine search started"); + nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (pending_search->engine), + query); + nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (pending_search->engine)); + + g_clear_object (&home); + g_free (terms_joined); } static gboolean @@ -450,11 +490,11 @@ handle_get_initial_result_set (NautilusShellSearchProvider2 *skeleton, gchar **terms, gpointer user_data) { - NautilusShellSearchProvider *self = user_data; + NautilusShellSearchProvider *self = user_data; - g_debug ("****** GetInitialResultSet"); - execute_search (self, invocation, terms); - return TRUE; + g_debug ("****** GetInitialResultSet"); + execute_search (self, invocation, terms); + return TRUE; } static gboolean @@ -464,126 +504,133 @@ handle_get_subsearch_result_set (NautilusShellSearchProvider2 *skeleton, gchar **terms, gpointer user_data) { - NautilusShellSearchProvider *self = user_data; + NautilusShellSearchProvider *self = user_data; - g_debug ("****** GetSubSearchResultSet"); - execute_search (self, invocation, terms); - return TRUE; + g_debug ("****** GetSubSearchResultSet"); + execute_search (self, invocation, terms); + return TRUE; } -typedef struct { - NautilusShellSearchProvider *self; +typedef struct +{ + NautilusShellSearchProvider *self; - gint64 start_time; - GDBusMethodInvocation *invocation; + gint64 start_time; + GDBusMethodInvocation *invocation; - gchar **uris; + gchar **uris; } ResultMetasData; static void result_metas_data_free (ResultMetasData *data) { - g_clear_object (&data->self); - g_clear_object (&data->invocation); - g_strfreev (data->uris); + g_clear_object (&data->self); + g_clear_object (&data->invocation); + g_strfreev (data->uris); - g_slice_free (ResultMetasData, data); + g_slice_free (ResultMetasData, data); } static void result_metas_return_from_cache (ResultMetasData *data) { - GVariantBuilder builder; - GVariant *meta; - gint64 current_time; - gint idx; - - g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{sv}")); - - for (idx = 0; data->uris[idx] != NULL; idx++) { - meta = g_hash_table_lookup (data->self->metas_cache, - data->uris[idx]); - g_variant_builder_add_value (&builder, meta); - } + GVariantBuilder builder; + GVariant *meta; + gint64 current_time; + gint idx; + + g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{sv}")); + + for (idx = 0; data->uris[idx] != NULL; idx++) + { + meta = g_hash_table_lookup (data->self->metas_cache, + data->uris[idx]); + g_variant_builder_add_value (&builder, meta); + } - current_time = g_get_monotonic_time (); - g_debug ("*** GetResultMetas completed - time elapsed %dms", - (gint) ((current_time - data->start_time) / 1000)); + current_time = g_get_monotonic_time (); + g_debug ("*** GetResultMetas completed - time elapsed %dms", + (gint) ((current_time - data->start_time) / 1000)); - g_dbus_method_invocation_return_value (data->invocation, - g_variant_new ("(aa{sv})", &builder)); + g_dbus_method_invocation_return_value (data->invocation, + g_variant_new ("(aa{sv})", &builder)); } static void result_list_attributes_ready_cb (GList *file_list, gpointer user_data) { - ResultMetasData *data = user_data; - GVariantBuilder meta; - NautilusFile *file; - GFile *file_location; - GList *l; - gchar *uri, *display_name; - gchar *description; - gchar *thumbnail_path; - GIcon *gicon; - GFile *location; - GVariant *meta_variant; - gint icon_scale; - - icon_scale = gdk_screen_get_monitor_scale_factor (gdk_screen_get_default (), 0); - - for (l = file_list; l != NULL; l = l->next) { - file = l->data; - g_variant_builder_init (&meta, G_VARIANT_TYPE ("a{sv}")); - - uri = nautilus_file_get_uri (file); - display_name = get_display_name (data->self, file); - file_location = nautilus_file_get_location (file); - description = g_file_get_path (file_location); - - g_variant_builder_add (&meta, "{sv}", - "id", g_variant_new_string (uri)); - g_variant_builder_add (&meta, "{sv}", - "name", g_variant_new_string (display_name)); - /* Some backends like trash:/// don't have a path, so we show the uri itself. */ - g_variant_builder_add (&meta, "{sv}", - "description", g_variant_new_string (description? description : uri)); - - gicon = NULL; - thumbnail_path = nautilus_file_get_thumbnail_path (file); - - if (thumbnail_path != NULL) { - location = g_file_new_for_path (thumbnail_path); - gicon = g_file_icon_new (location); - - g_free (thumbnail_path); - g_object_unref (location); - } else { - gicon = get_gicon (data->self, file); - } - - if (gicon == NULL) { - gicon = G_ICON (nautilus_file_get_icon_pixbuf (file, 128, TRUE, - icon_scale, - NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS)); + ResultMetasData *data = user_data; + GVariantBuilder meta; + NautilusFile *file; + GFile *file_location; + GList *l; + gchar *uri, *display_name; + gchar *description; + gchar *thumbnail_path; + GIcon *gicon; + GFile *location; + GVariant *meta_variant; + gint icon_scale; + + icon_scale = gdk_screen_get_monitor_scale_factor (gdk_screen_get_default (), 0); + + for (l = file_list; l != NULL; l = l->next) + { + file = l->data; + g_variant_builder_init (&meta, G_VARIANT_TYPE ("a{sv}")); + + uri = nautilus_file_get_uri (file); + display_name = get_display_name (data->self, file); + file_location = nautilus_file_get_location (file); + description = g_file_get_path (file_location); + + g_variant_builder_add (&meta, "{sv}", + "id", g_variant_new_string (uri)); + g_variant_builder_add (&meta, "{sv}", + "name", g_variant_new_string (display_name)); + /* Some backends like trash:/// don't have a path, so we show the uri itself. */ + g_variant_builder_add (&meta, "{sv}", + "description", g_variant_new_string (description ? description : uri)); + + gicon = NULL; + thumbnail_path = nautilus_file_get_thumbnail_path (file); + + if (thumbnail_path != NULL) + { + location = g_file_new_for_path (thumbnail_path); + gicon = g_file_icon_new (location); + + g_free (thumbnail_path); + g_object_unref (location); + } + else + { + gicon = get_gicon (data->self, file); + } + + if (gicon == NULL) + { + gicon = G_ICON (nautilus_file_get_icon_pixbuf (file, 128, TRUE, + icon_scale, + NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS)); + } + + g_variant_builder_add (&meta, "{sv}", + "icon", g_icon_serialize (gicon)); + g_object_unref (gicon); + + meta_variant = g_variant_builder_end (&meta); + g_hash_table_insert (data->self->metas_cache, + g_strdup (uri), g_variant_ref_sink (meta_variant)); + + g_free (display_name); + g_free (description); + g_free (uri); } - g_variant_builder_add (&meta, "{sv}", - "icon", g_icon_serialize (gicon)); - g_object_unref (gicon); - - meta_variant = g_variant_builder_end (&meta); - g_hash_table_insert (data->self->metas_cache, - g_strdup (uri), g_variant_ref_sink (meta_variant)); - - g_free (display_name); - g_free (description); - g_free (uri); - } - - result_metas_return_from_cache (data); - result_metas_data_free (data); + result_metas_return_from_cache (data); + result_metas_data_free (data); } static gboolean @@ -592,145 +639,149 @@ handle_get_result_metas (NautilusShellSearchProvider2 *skeleton, gchar **results, gpointer user_data) { - NautilusShellSearchProvider *self = user_data; - GList *missing_files = NULL; - const gchar *uri; - ResultMetasData *data; - gint idx; - - g_debug ("****** GetResultMetas"); - - for (idx = 0; results[idx] != NULL; idx++) { - uri = results[idx]; - - if (!g_hash_table_lookup (self->metas_cache, uri)) { - missing_files = g_list_prepend (missing_files, nautilus_file_get_by_uri (uri)); + NautilusShellSearchProvider *self = user_data; + GList *missing_files = NULL; + const gchar *uri; + ResultMetasData *data; + gint idx; + + g_debug ("****** GetResultMetas"); + + for (idx = 0; results[idx] != NULL; idx++) + { + uri = results[idx]; + + if (!g_hash_table_lookup (self->metas_cache, uri)) + { + missing_files = g_list_prepend (missing_files, nautilus_file_get_by_uri (uri)); + } } - } - data = g_slice_new0 (ResultMetasData); - data->self = g_object_ref (self); - data->invocation = g_object_ref (invocation); - data->start_time = g_get_monotonic_time (); - data->uris = g_strdupv (results); + data = g_slice_new0 (ResultMetasData); + data->self = g_object_ref (self); + data->invocation = g_object_ref (invocation); + data->start_time = g_get_monotonic_time (); + data->uris = g_strdupv (results); + + if (missing_files == NULL) + { + result_metas_return_from_cache (data); + result_metas_data_free (data); + return TRUE; + } - if (missing_files == NULL) { - result_metas_return_from_cache (data); - result_metas_data_free (data); + nautilus_file_list_call_when_ready (missing_files, + NAUTILUS_FILE_ATTRIBUTES_FOR_ICON, + NULL, + result_list_attributes_ready_cb, + data); + nautilus_file_list_free (missing_files); return TRUE; - } - - nautilus_file_list_call_when_ready (missing_files, - NAUTILUS_FILE_ATTRIBUTES_FOR_ICON, - NULL, - result_list_attributes_ready_cb, - data); - nautilus_file_list_free (missing_files); - return TRUE; } static gboolean -handle_activate_result (NautilusShellSearchProvider2 *skeleton, - GDBusMethodInvocation *invocation, - gchar *result, - gchar **terms, - guint32 timestamp, - gpointer user_data) +handle_activate_result (NautilusShellSearchProvider2 *skeleton, + GDBusMethodInvocation *invocation, + gchar *result, + gchar **terms, + guint32 timestamp, + gpointer user_data) { - gboolean res; - GFile *file; + gboolean res; + GFile *file; - res = gtk_show_uri (NULL, result, timestamp, NULL); + res = gtk_show_uri (NULL, result, timestamp, NULL); - if (!res) { - file = g_file_new_for_uri (result); - g_application_open (g_application_get_default (), &file, 1, ""); - g_object_unref (file); - } + if (!res) + { + file = g_file_new_for_uri (result); + g_application_open (g_application_get_default (), &file, 1, ""); + g_object_unref (file); + } - nautilus_shell_search_provider2_complete_activate_result (skeleton, invocation); - return TRUE; + nautilus_shell_search_provider2_complete_activate_result (skeleton, invocation); + return TRUE; } static gboolean -handle_launch_search (NautilusShellSearchProvider2 *skeleton, - GDBusMethodInvocation *invocation, - gchar **terms, - guint32 timestamp, - gpointer user_data) +handle_launch_search (NautilusShellSearchProvider2 *skeleton, + GDBusMethodInvocation *invocation, + gchar **terms, + guint32 timestamp, + gpointer user_data) { - GApplication *app = g_application_get_default (); - gchar *string = g_strjoinv (" ", terms); - gchar *uri = nautilus_get_home_directory_uri (); + GApplication *app = g_application_get_default (); + gchar *string = g_strjoinv (" ", terms); + gchar *uri = nautilus_get_home_directory_uri (); - nautilus_application_search (NAUTILUS_APPLICATION (app), uri, string); + nautilus_application_search (NAUTILUS_APPLICATION (app), uri, string); - g_free (string); - g_free (uri); + g_free (string); + g_free (uri); - nautilus_shell_search_provider2_complete_launch_search (skeleton, invocation); - return TRUE; + nautilus_shell_search_provider2_complete_launch_search (skeleton, invocation); + return TRUE; } static void search_provider_dispose (GObject *obj) { - NautilusShellSearchProvider *self = NAUTILUS_SHELL_SEARCH_PROVIDER (obj); + NautilusShellSearchProvider *self = NAUTILUS_SHELL_SEARCH_PROVIDER (obj); - g_clear_object (&self->skeleton); - g_hash_table_destroy (self->metas_cache); - cancel_current_search (self); + g_clear_object (&self->skeleton); + g_hash_table_destroy (self->metas_cache); + cancel_current_search (self); - G_OBJECT_CLASS (nautilus_shell_search_provider_parent_class)->dispose (obj); + G_OBJECT_CLASS (nautilus_shell_search_provider_parent_class)->dispose (obj); } static void nautilus_shell_search_provider_init (NautilusShellSearchProvider *self) { - self->metas_cache = g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, (GDestroyNotify) g_variant_unref); - - self->skeleton = nautilus_shell_search_provider2_skeleton_new (); - - g_signal_connect (self->skeleton, "handle-get-initial-result-set", - G_CALLBACK (handle_get_initial_result_set), self); - g_signal_connect (self->skeleton, "handle-get-subsearch-result-set", - G_CALLBACK (handle_get_subsearch_result_set), self); - g_signal_connect (self->skeleton, "handle-get-result-metas", - G_CALLBACK (handle_get_result_metas), self); - g_signal_connect (self->skeleton, "handle-activate-result", - G_CALLBACK (handle_activate_result), self); - g_signal_connect (self->skeleton, "handle-launch-search", - G_CALLBACK (handle_launch_search), self); + self->metas_cache = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, (GDestroyNotify) g_variant_unref); + + self->skeleton = nautilus_shell_search_provider2_skeleton_new (); + + g_signal_connect (self->skeleton, "handle-get-initial-result-set", + G_CALLBACK (handle_get_initial_result_set), self); + g_signal_connect (self->skeleton, "handle-get-subsearch-result-set", + G_CALLBACK (handle_get_subsearch_result_set), self); + g_signal_connect (self->skeleton, "handle-get-result-metas", + G_CALLBACK (handle_get_result_metas), self); + g_signal_connect (self->skeleton, "handle-activate-result", + G_CALLBACK (handle_activate_result), self); + g_signal_connect (self->skeleton, "handle-launch-search", + G_CALLBACK (handle_launch_search), self); } static void nautilus_shell_search_provider_class_init (NautilusShellSearchProviderClass *klass) { - GObjectClass *oclass = G_OBJECT_CLASS (klass); + GObjectClass *oclass = G_OBJECT_CLASS (klass); - oclass->dispose = search_provider_dispose; + oclass->dispose = search_provider_dispose; } NautilusShellSearchProvider * nautilus_shell_search_provider_new (void) { - return g_object_new (nautilus_shell_search_provider_get_type (), - NULL); + return g_object_new (nautilus_shell_search_provider_get_type (), + NULL); } gboolean -nautilus_shell_search_provider_register (NautilusShellSearchProvider *self, - GDBusConnection *connection, - GError **error) +nautilus_shell_search_provider_register (NautilusShellSearchProvider *self, + GDBusConnection *connection, + GError **error) { - return g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->skeleton), - connection, - "/org/gnome/Nautilus/SearchProvider", error); + return g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->skeleton), + connection, + "/org/gnome/Nautilus/SearchProvider", error); } void nautilus_shell_search_provider_unregister (NautilusShellSearchProvider *self) { - g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->skeleton)); + g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->skeleton)); } |