static void shell_xdg_migrate_cache_dir (EShell *shell, const gchar *old_base_dir) { const gchar *new_cache_dir; gchar *old_cache_dir; gchar *old_filename; gchar *new_filename; old_cache_dir = g_build_filename (old_base_dir, "cache", NULL); new_cache_dir = e_get_user_cache_dir (); g_print ("Migrating cached data\n"); g_mkdir_with_parents (new_cache_dir, 0700); old_filename = g_build_filename (old_cache_dir, "http", NULL); new_filename = g_build_filename (new_cache_dir, "http", NULL); shell_xdg_migrate_rename (old_filename, new_filename); g_free (old_filename); g_free (new_filename); old_filename = g_build_filename (old_cache_dir, "tmp", NULL); new_filename = g_build_filename (new_cache_dir, "tmp", NULL); shell_xdg_migrate_rename (old_filename, new_filename); g_free (old_filename); g_free (new_filename); /* Try to remove the old cache directory. Good chance this will * fail on the first try, since E-D-S puts stuff here too. */ shell_xdg_migrate_rmdir (old_cache_dir); g_free (old_cache_dir); }
void e_convert_local_mail (EShell *shell) { CamelSession *session; ESource *mbox_source; const gchar *user_data_dir; const gchar *user_cache_dir; gchar *mail_data_dir; gchar *mail_cache_dir; gchar *local_store; gint response; user_data_dir = e_get_user_data_dir (); user_cache_dir = e_get_user_cache_dir (); mail_data_dir = g_build_filename (user_data_dir, "mail", NULL); mail_cache_dir = g_build_filename (user_cache_dir, "mail", NULL); if (!mail_to_maildir_migration_needed (mail_data_dir)) goto exit; response = e_alert_run_dialog_for_args ( e_shell_get_active_window (NULL), "mail:ask-migrate-store", NULL); if (response == GTK_RESPONSE_CANCEL) exit (EXIT_SUCCESS); mbox_source = e_source_new (NULL, NULL, NULL); rename_mbox_dir (mbox_source, mail_data_dir); local_store = g_build_filename (mail_data_dir, "local", NULL); if (!g_file_test (local_store, G_FILE_TEST_EXISTS)) g_mkdir_with_parents (local_store, 0700); g_free (local_store); session = g_object_new ( CAMEL_TYPE_SESSION, "online", FALSE, "user-data-dir", mail_data_dir, "user-cache-dir", mail_cache_dir, NULL); migrate_mbox_to_maildir (shell, session, mbox_source); g_object_unref (session); g_object_unref (mbox_source); exit: g_free (mail_data_dir); g_free (mail_cache_dir); }
static gchar * get_filename_from_uri (const gchar *uri) { const gchar *user_cache_dir; gchar *mangled_uri, *filename; user_cache_dir = e_get_user_cache_dir (); /* Mangle the URI to not contain invalid characters. */ mangled_uri = g_strdelimit (g_strdup (uri), ":/", '_'); filename = g_build_filename ( user_cache_dir, "addressbook", mangled_uri, "cache.db", NULL); g_free (mangled_uri); return filename; }
static void migrate_to_user_cache_dir (const gchar *old_base_dir) { const gchar *new_cache_dir; gchar *old_cache_dir; gchar *src_directory; gchar *dst_directory; old_cache_dir = g_build_filename (old_base_dir, "cache", NULL); new_cache_dir = e_get_user_cache_dir (); g_print ("Migrating cached backend data\n"); /* We don't want to move the source directory directly because the * destination directory may already exist with content. Instead * we want to merge the content of the source directory into the * destination directory. * * For example, given: * * $(src_directory)/A and $(dst_directory)/B * $(src_directory)/C * * we want to end up with: * * $(dst_directory)/A * $(dst_directory)/B * $(dst_directory)/C * * Any name collisions will be left in the source directory. */ src_directory = g_build_filename (old_cache_dir, "calendar", NULL); dst_directory = g_build_filename (new_cache_dir, "calendar", NULL); migrate_move_contents (src_directory, dst_directory); migrate_rmdir (src_directory); g_free (src_directory); g_free (dst_directory); src_directory = g_build_filename (old_cache_dir, "memos", NULL); dst_directory = g_build_filename (new_cache_dir, "memos", NULL); migrate_move_contents (src_directory, dst_directory); migrate_rmdir (src_directory); g_free (src_directory); g_free (dst_directory); src_directory = g_build_filename (old_cache_dir, "tasks", NULL); dst_directory = g_build_filename (new_cache_dir, "tasks", NULL); migrate_move_contents (src_directory, dst_directory); migrate_rmdir (src_directory); g_free (src_directory); g_free (dst_directory); /* Try to remove the old cache directory. Good chance this will * fail on the first try, since Evolution puts stuff here too. */ migrate_rmdir (old_cache_dir); g_free (old_cache_dir); }