static void mail_store_prepare_for_offline_thread (GSimpleAsyncResult *simple, CamelStore *store, GCancellable *cancellable) { CamelService *service; gchar *service_name; GError *error = NULL; service = CAMEL_SERVICE (store); service_name = camel_service_get_name (service, TRUE); camel_operation_push_message ( cancellable, _("Preparing account '%s' for offline"), service_name); g_free (service_name); if (CAMEL_IS_DISCO_STORE (store)) camel_disco_store_prepare_for_offline ( CAMEL_DISCO_STORE (store), cancellable, &error); else if (CAMEL_IS_OFFLINE_STORE (store)) camel_offline_store_prepare_for_offline_sync ( CAMEL_OFFLINE_STORE (store), cancellable, &error); if (error != NULL) g_simple_async_result_take_error (simple, error); camel_operation_pop_message (cancellable); }
static void setline_check(void *key, void *value, void *data) { CamelService *service = key; struct _setline_data *sd = data; if (CAMEL_IS_DISCO_STORE(service) || CAMEL_IS_OFFLINE_STORE(service)) { sd->pending++; mail_store_set_offline((CamelStore *)service, !sd->status, setline_done, sd); } }
static void mail_store_go_offline_thread (GSimpleAsyncResult *simple, CamelStore *store, GCancellable *cancellable) { CamelService *service; gchar *service_name; GError *error = NULL; service = CAMEL_SERVICE (store); service_name = camel_service_get_name (service, TRUE); camel_operation_push_message ( cancellable, _("Disconnecting from '%s'"), service_name); g_free (service_name); if (CAMEL_IS_DISCO_STORE (store)) { CamelDiscoStore *disco_store; disco_store = CAMEL_DISCO_STORE (store); if (camel_disco_store_can_work_offline (disco_store)) camel_disco_store_set_status ( disco_store, CAMEL_DISCO_STORE_OFFLINE, cancellable, &error); else em_utils_disconnect_service_sync (service, TRUE, cancellable, &error); } else if (CAMEL_IS_OFFLINE_STORE (store)) { CamelOfflineStore *offline_store; offline_store = CAMEL_OFFLINE_STORE (store); camel_offline_store_set_online_sync ( offline_store, FALSE, cancellable, &error); } else em_utils_disconnect_service_sync (service, TRUE, cancellable, &error); if (error != NULL) g_simple_async_result_take_error (simple, error); camel_operation_pop_message (cancellable); }
CamelDiscoDiary * camel_disco_diary_new (CamelDiscoStore *store, const char *filename, CamelException *ex) { CamelDiscoDiary *diary; g_return_val_if_fail (CAMEL_IS_DISCO_STORE (store), NULL); g_return_val_if_fail (filename != NULL, NULL); diary = CAMEL_DISCO_DIARY (camel_object_new (CAMEL_DISCO_DIARY_TYPE)); diary->store = store; d(printf("diary log file '%s'\n", filename)); /* Note that the linux man page says: a+ Open for reading and appending (writing at end of file). The file is created if it does not exist. The stream is positioned at the end of the file. However, c99 (which glibc uses?) says: a+ append; open or create text file for update, writing at end-of-file So we must seek ourselves. */ diary->file = g_fopen (filename, "a+b"); if (!diary->file) { camel_object_unref (diary); camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, "Could not open journal file: %s", g_strerror (errno)); return NULL; } fseek(diary->file, 0, SEEK_END); d(printf(" is at %ld\n", ftell(diary->file))); return diary; }