static gboolean process_rename_data_list (gpointer user_data) { BrowserData *data = user_data; GList *scan; g_source_remove (data->update_renamed_files_id); data->update_renamed_files_id = 0; for (scan = data->rename_data_list; scan; scan = scan->next) { RenameData *rename_data = scan->data; GthCatalog *catalog; GList *scan_files; GList *scan_new_files; GFile *gio_file; char *catalog_data; gsize catalog_data_size; GError *error = NULL; catalog = gth_catalog_load_from_file (rename_data->location); for (scan_files = rename_data->files, scan_new_files = rename_data->new_files; scan_files && scan_new_files; scan_files = scan_files->next, scan_new_files = scan_new_files->next) { GFile *file = scan_files->data; GFile *new_file = scan_new_files->data; int pos; pos = gth_catalog_remove_file (catalog, file); gth_catalog_insert_file (catalog, new_file, pos); } gio_file = gth_catalog_file_to_gio_file (rename_data->location); catalog_data = gth_catalog_to_data (catalog, &catalog_data_size); if (! _g_file_write (gio_file, FALSE, G_FILE_CREATE_NONE, catalog_data, catalog_data_size, NULL, &error)) { g_warning ("%s", error->message); g_clear_error (&error); } g_free (catalog_data); g_object_unref (gio_file); g_object_unref (catalog); } rename_data_list_free (data); return FALSE; }
static void gth_metadata_provider_comment_write (GthMetadataProvider *self, GthMetadataWriteFlags flags, GthFileData *file_data, const char *attributes, GCancellable *cancellable) { GthComment *comment; GthMetadata *metadata; const char *text; char *data; gsize length; GthStringList *categories; GFile *comment_file; GFile *comment_folder; comment = gth_comment_new (); /* caption */ text = NULL; metadata = (GthMetadata *) g_file_info_get_attribute_object (file_data->info, "general::title"); if (metadata != NULL) text = gth_metadata_get_raw (metadata); gth_comment_set_caption (comment, text); /* comment */ text = NULL; metadata = (GthMetadata *) g_file_info_get_attribute_object (file_data->info, "general::description"); if (metadata != NULL) text = gth_metadata_get_raw (metadata); gth_comment_set_note (comment, text); /* location */ text = NULL; metadata = (GthMetadata *) g_file_info_get_attribute_object (file_data->info, "general::location"); if (metadata != NULL) text = gth_metadata_get_raw (metadata); gth_comment_set_place (comment, text); /* time */ text = NULL; metadata = (GthMetadata *) g_file_info_get_attribute_object (file_data->info, "general::datetime"); if (metadata != NULL) text = gth_metadata_get_raw (metadata); gth_comment_set_time_from_exif_format (comment, text); /* keywords */ metadata = (GthMetadata *) g_file_info_get_attribute_object (file_data->info, "general::tags"); categories = gth_metadata_get_string_list (metadata); if (categories != NULL) { GList *list; GList *scan; list = gth_string_list_get_list (categories); for (scan = list; scan; scan = scan->next) gth_comment_add_category (comment, (char *) scan->data); } /* rating */ metadata = (GthMetadata *) g_file_info_get_attribute_object (file_data->info, "general::rating"); if (metadata != NULL) { int rating; sscanf (gth_metadata_get_raw (metadata), "%d", &rating); gth_comment_set_rating (comment, rating); } data = gth_comment_to_data (comment, &length); comment_file = gth_comment_get_comment_file (file_data->file); comment_folder = g_file_get_parent (comment_file); g_file_make_directory (comment_folder, NULL, NULL); _g_file_write (comment_file, FALSE, 0, data, length, cancellable, NULL); g_object_unref (comment_folder); g_object_unref (comment_file); g_free (data); g_object_unref (comment); }