/** * ephy_web_application_delete: * @name: the name of the web application do delete * * Deletes all the data associated with a Web Application created by * Epiphany. * * Returns: %TRUE if the web app was succesfully deleted, %FALSE otherwise **/ gboolean ephy_web_application_delete (const char *name) { char *profile_dir = NULL; char *desktop_file = NULL, *desktop_path = NULL; char *wm_class; GFile *profile = NULL, *launcher = NULL; gboolean return_value = FALSE; g_return_val_if_fail (name, FALSE); profile_dir = ephy_web_application_get_profile_directory (name); if (!profile_dir) goto out; /* If there's no profile dir for this app, it means it does not * exist. */ if (!g_file_test (profile_dir, G_FILE_TEST_IS_DIR)) { g_warning ("No application with name '%s' is installed.\n", name); goto out; } profile = g_file_new_for_path (profile_dir); if (!ephy_file_delete_dir_recursively (profile, NULL)) goto out; LOG ("Deleted application profile.\n"); wm_class = get_wm_class_from_app_title (name); desktop_file = desktop_filename_from_wm_class (wm_class); g_free (wm_class); if (!desktop_file) goto out; desktop_path = g_build_filename (g_get_user_data_dir (), "applications", desktop_file, NULL); launcher = g_file_new_for_path (desktop_path); if (!g_file_delete (launcher, NULL, NULL)) goto out; LOG ("Deleted application launcher.\n"); return_value = TRUE; out: if (profile) g_object_unref (profile); g_free (profile_dir); if (launcher) g_object_unref (launcher); g_free (desktop_file); g_free (desktop_path); return return_value; }
/** * ephy_web_application_delete: * @id: the identifier of the web application do delete * * Deletes all the data associated with a Web Application created by * Epiphany. * * Returns: %TRUE if the web app was succesfully deleted, %FALSE otherwise **/ gboolean ephy_web_application_delete (const char *id) { g_autofree char *profile_dir = NULL; g_autofree char *cache_dir = NULL; g_autofree char *config_dir = NULL; g_autofree char *desktop_file = NULL; g_autofree char *desktop_path = NULL; g_autoptr(GFile) launcher = NULL; g_autoptr(GError) error = NULL; g_assert (id); profile_dir = ephy_web_application_get_profile_directory (id); if (!profile_dir) return FALSE; /* If there's no profile dir for this app, it means it does not * exist. */ if (!g_file_test (profile_dir, G_FILE_TEST_IS_DIR)) { g_warning ("No application with id '%s' is installed.\n", id); return FALSE; } if (!ephy_file_delete_dir_recursively (profile_dir, &error)) { g_warning ("Failed to recursively delete %s: %s", profile_dir, error->message); return FALSE; } LOG ("Deleted application profile.\n"); cache_dir = ephy_web_application_get_cache_directory (id); if (g_file_test (cache_dir, G_FILE_TEST_IS_DIR)) { if (!ephy_file_delete_dir_recursively (cache_dir, &error)) { g_warning ("Failed to recursively delete %s: %s", cache_dir, error->message); return FALSE; } LOG ("Deleted application cache directory.\n"); } config_dir = ephy_web_application_get_config_directory (id); if (g_file_test (config_dir, G_FILE_TEST_IS_DIR)) { if (!ephy_file_delete_dir_recursively (config_dir, &error)) { g_warning ("Failed to recursively delete %s: %s", config_dir, error->message); return FALSE; } LOG ("Deleted application config directory.\n"); } desktop_file = get_app_desktop_filename (id); if (!desktop_file) { g_warning ("Failed to compute desktop filename for app %s", id); return FALSE; } desktop_path = g_build_filename (g_get_user_data_dir (), "applications", desktop_file, NULL); if (g_file_test (desktop_path, G_FILE_TEST_IS_SYMLINK)) { launcher = g_file_new_for_path (desktop_path); if (!g_file_delete (launcher, NULL, &error)) { g_warning ("Failed to delete %s: %s", desktop_path, error->message); return FALSE; } LOG ("Deleted application launcher.\n"); } return TRUE; }