static gboolean kolab_folder_metadata_ui_syncstrategy_set (KolabFolderMetaUIData *uidata, GCancellable *cancellable, GError **err) { ESource *source = NULL; ESourceResource *resource = NULL; gboolean is_kolab = FALSE; GError *tmp_err = NULL; gboolean ok = TRUE; g_return_val_if_fail (uidata != NULL, FALSE); g_return_val_if_fail (E_IS_SHELL_VIEW (uidata->shell_view), FALSE); /* cancellable may be NULL */ g_return_val_if_fail (err == NULL || *err == NULL, FALSE); is_kolab = e_kolab_plugin_util_ui_get_selected_source (uidata->shell_view, &source); if (! is_kolab) { g_warning ("%s()[%u] expected Kolab source, got something else, skipping", __func__, __LINE__); goto exit; } resource = E_SOURCE_RESOURCE (e_source_get_extension (source, E_SOURCE_EXTENSION_KOLAB_FOLDER)); e_source_kolab_folder_set_sync_strategy (E_SOURCE_KOLAB_FOLDER (resource), uidata->metadata->strategy); ok = e_source_write_sync (source, cancellable, &tmp_err); exit: if (tmp_err != NULL) { g_propagate_error (err, tmp_err); ok = FALSE; } if (source != NULL) g_object_unref (source); return ok; }
static void save_source_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable) { ESource *source = source_object; SaveSourceData *data = task_data; GError *local_error = NULL; g_return_if_fail (E_IS_SOURCE (source)); g_return_if_fail (data != NULL); if (data->error) local_error = g_error_copy (data->error); else if (data->call_save) e_source_write_sync (source, cancellable, &local_error); if (local_error != NULL) { g_task_return_error (task, local_error); } else { g_task_return_boolean (task, TRUE); } }
gboolean e_mail_store_save_initial_setup_sync (CamelStore *store, GHashTable *save_setup, ESource *collection_source, ESource *account_source, ESource *submission_source, ESource *transport_source, gboolean write_sources, GCancellable *cancellable, GError **error) { gboolean collection_changed = FALSE; gboolean account_changed = FALSE; gboolean submission_changed = FALSE; gboolean transport_changed = FALSE; gboolean success = TRUE; GHashTableIter iter; gpointer key, value; g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE); g_return_val_if_fail (save_setup != NULL, FALSE); g_return_val_if_fail (E_IS_SOURCE (account_source), FALSE); if (!g_hash_table_size (save_setup)) return TRUE; /* The key name consists of up to four parts: Source:Extension:Property[:Type] Source can be 'Collection', 'Account', 'Submission', 'Transport', 'Backend' Extension is any extension name; it's up to the key creator to make sure the extension belongs to that particular Source. Property is a property name in the Extension. Type is an optional letter describing the type of the value; if not set, then string is used. Available values are: 'b' for boolean, 'i' for integer, 's' for string, 'f' for folder full path. All the part values are case sensitive. */ g_hash_table_iter_init (&iter, save_setup); while (g_hash_table_iter_next (&iter, &key, &value)) { gchar **keys; keys = g_strsplit (key, ":", -1); if (g_strv_length (keys) < 3 || g_strv_length (keys) > 4) { g_warning ("%s: Incorrect store setup key, expects 3 or 4 parts, but %d given in '%s'", G_STRFUNC, g_strv_length (keys), (const gchar *) key); } else if (g_str_equal (keys[0], "Collection")) { if (mail_store_save_setup_key (store, collection_source, keys[1], keys[2], keys[3], value)) collection_changed = TRUE; } else if (g_str_equal (keys[0], "Account")) { if (mail_store_save_setup_key (store, account_source, keys[1], keys[2], keys[3], value)) account_changed = TRUE; } else if (g_str_equal (keys[0], "Submission")) { if (mail_store_save_setup_key (store, submission_source, keys[1], keys[2], keys[3], value)) submission_changed = TRUE; } else if (g_str_equal (keys[0], "Transport")) { if (mail_store_save_setup_key (store, transport_source, keys[1], keys[2], keys[3], value)) transport_changed = TRUE; } else if (g_str_equal (keys[0], "Backend")) { ESource *backend_source = NULL; if (collection_source && e_source_has_extension (collection_source, keys[1])) backend_source = collection_source; else if (account_source && e_source_has_extension (account_source, keys[1])) backend_source = account_source; if (mail_store_save_setup_key (store, backend_source, keys[1], keys[2], keys[3], value)) transport_changed = TRUE; } else { g_warning ("%s: Unknown source name '%s' given in '%s'", G_STRFUNC, keys[0], (const gchar *) key); } } if (write_sources) { if (transport_changed && success && e_source_get_writable (transport_source)) success = e_source_write_sync (transport_source, cancellable, error); if (submission_changed && success && e_source_get_writable (submission_source)) success = e_source_write_sync (submission_source, cancellable, error); if (account_changed && success && e_source_get_writable (account_source)) success = e_source_write_sync (account_source, cancellable, error); if (collection_changed && success && e_source_get_writable (collection_source)) success = e_source_write_sync (collection_source, cancellable, error); } return success; }