static EMsgComposer * composer_registry_lookup (GQueue *registry, const gchar *basename) { GList *iter; /* Find the composer with the given snapshot filename. */ for (iter = registry->head; iter != NULL; iter = iter->next) { EMsgComposer *composer; GFile *snapshot_file; gchar *snapshot_name; composer = E_MSG_COMPOSER (iter->data); snapshot_file = e_composer_get_snapshot_file (composer); if (!G_IS_FILE (snapshot_file)) continue; snapshot_name = g_file_get_basename (snapshot_file); if (g_strcmp0 (basename, snapshot_name) == 0) { g_free (snapshot_name); return composer; } g_free (snapshot_name); } return NULL; }
void e_composer_save_snapshot (EMsgComposer *composer, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *simple; SaveContext *context; GFile *snapshot_file; GError *local_error = NULL; g_return_if_fail (E_IS_MSG_COMPOSER (composer)); context = g_slice_new0 (SaveContext); if (G_IS_CANCELLABLE (cancellable)) context->cancellable = g_object_ref (cancellable); simple = g_simple_async_result_new ( G_OBJECT (composer), callback, user_data, e_composer_save_snapshot); g_simple_async_result_set_check_cancellable (simple, cancellable); g_simple_async_result_set_op_res_gpointer ( simple, context, (GDestroyNotify) save_context_free); snapshot_file = e_composer_get_snapshot_file (composer); if (!G_IS_FILE (snapshot_file)) snapshot_file = create_snapshot_file (composer, &local_error); if (local_error != NULL) { g_warn_if_fail (snapshot_file == NULL); g_simple_async_result_take_error (simple, local_error); g_simple_async_result_complete (simple); g_object_unref (simple); return; } g_return_if_fail (G_IS_FILE (snapshot_file)); g_file_replace_async ( snapshot_file, NULL, FALSE, G_FILE_CREATE_PRIVATE, G_PRIORITY_DEFAULT, context->cancellable, (GAsyncReadyCallback) save_snapshot_replace_cb, simple); }
static GFile * create_snapshot_file (EMsgComposer *composer, GError **error) { GFile *snapshot_file; const gchar *user_data_dir; gchar *path; gint fd; snapshot_file = e_composer_get_snapshot_file (composer); if (G_IS_FILE (snapshot_file)) return snapshot_file; user_data_dir = e_get_user_data_dir (); path = g_build_filename (user_data_dir, SNAPSHOT_FILE_SEED, NULL); /* g_mkstemp() modifies the XXXXXX part of the * template string to form the actual filename. */ errno = 0; fd = g_mkstemp (path); if (fd == -1) { g_set_error ( error, G_FILE_ERROR, g_file_error_from_errno (errno), "%s", g_strerror (errno)); g_free (path); return NULL; } close (fd); snapshot_file = g_file_new_for_path (path); /* Save the GFile for subsequent snapshots. */ g_object_set_data_full ( G_OBJECT (composer), SNAPSHOT_FILE_KEY, snapshot_file, (GDestroyNotify) delete_snapshot_file); g_free (path); return snapshot_file; }