static void photos_properties_dialog_get_camera (GObject *source_object, GAsyncResult *res, gpointer user_data) { PhotosPropertiesDialog *self; g_autofree gchar *camera = NULL; { g_autoptr (GError) error = NULL; camera = photos_camera_cache_get_camera_finish (PHOTOS_CAMERA_CACHE (source_object), res, &error); if (error != NULL) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) g_warning ("Unable to get camera: %s", error->message); return; } } /* Now we know that self has not been destroyed. */ self = PHOTOS_PROPERTIES_DIALOG (user_data); if (camera != NULL) { GtkWidget *camera_data; camera_data = gtk_label_new (camera); gtk_widget_set_halign (camera_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), camera_data, self->camera_w, GTK_POS_RIGHT, 2, 1); gtk_widget_show (camera_data); } }
static void photos_camera_cache_dispose (GObject *object) { PhotosCameraCache *self = PHOTOS_CAMERA_CACHE (object); g_clear_object (&self->priv->queue); G_OBJECT_CLASS (photos_camera_cache_parent_class)->dispose (object); }
static void photos_camera_cache_finalize (GObject *object) { PhotosCameraCache *self = PHOTOS_CAMERA_CACHE (object); g_clear_error (&self->queue_error); g_hash_table_unref (self->cache); G_OBJECT_CLASS (photos_camera_cache_parent_class)->finalize (object); }
static void photos_camera_cache_cursor_next (GObject *source_object, GAsyncResult *res, gpointer user_data) { GTask *task = G_TASK (user_data); PhotosCameraCache *self; PhotosCameraCachePrivate *priv; TrackerSparqlCursor *cursor = TRACKER_SPARQL_CURSOR (source_object); GError *error; const gchar *manufacturer; const gchar *model; gchar *camera; gpointer key; self = PHOTOS_CAMERA_CACHE (g_task_get_source_object (task)); priv = self->priv; error = NULL; tracker_sparql_cursor_next_finish (cursor, res, &error); if (error != NULL) { g_task_return_error (task, error); goto out; } manufacturer = tracker_sparql_cursor_get_string (cursor, 0, NULL); model = tracker_sparql_cursor_get_string (cursor, 1, NULL); if (manufacturer == NULL && model == NULL) camera = NULL; else if (manufacturer == NULL || g_str_has_prefix (model, manufacturer)) camera = g_strdup (model); else if (model == NULL) camera = g_strdup (manufacturer); else camera = g_strconcat (manufacturer, " ", model, NULL); key = g_task_get_task_data (task); g_hash_table_insert (priv->cache, key, camera); g_task_return_pointer (task, g_strdup (camera), g_free); out: tracker_sparql_cursor_close (cursor); g_object_unref (task); }