pidgin/pidgin

Migrate xmpp-caps.xml to XDG cache dir
xdg-dirs
2016-10-02, qarkai
6d800b496317
Parents 4e9c691a1d2d
Children 2eb179d4f7ac
Migrate xmpp-caps.xml to XDG cache dir
--- a/libpurple/protocols/jabber/caps.c Sun Oct 02 07:13:45 2016 +0300
+++ b/libpurple/protocols/jabber/caps.c Sun Oct 02 08:13:03 2016 +0300
@@ -209,10 +209,11 @@
char *str;
int length = 0;
PurpleXmlNode *root = purple_xmlnode_new("capabilities");
+
g_hash_table_foreach(capstable, jabber_caps_store_client, root);
str = purple_xmlnode_to_formatted_str(root, &length);
purple_xmlnode_free(root);
- purple_util_write_data_to_file(JABBER_CAPS_FILENAME, str, length);
+ purple_util_write_data_to_cache_file(JABBER_CAPS_FILENAME, str, length);
g_free(str);
save_timer = 0;
@@ -229,7 +230,7 @@
static void
jabber_caps_load(void)
{
- PurpleXmlNode *capsdata = purple_util_read_xml_from_file(JABBER_CAPS_FILENAME, "XMPP capabilities cache");
+ PurpleXmlNode *capsdata = purple_util_read_xml_from_cache_file(JABBER_CAPS_FILENAME, "XMPP capabilities cache");
PurpleXmlNode *client;
if(!capsdata)
@@ -332,6 +333,7 @@
{
nodetable = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)jabber_caps_node_exts_unref);
capstable = g_hash_table_new_full(jabber_caps_hash, jabber_caps_compare, NULL, (GDestroyNotify)jabber_caps_client_info_destroy);
+ purple_move_to_xdg_base_dir(purple_cache_dir(), JABBER_CAPS_FILENAME);
jabber_caps_load();
}
--- a/libpurple/util.c Sun Oct 02 07:13:45 2016 +0300
+++ b/libpurple/util.c Sun Oct 02 08:13:03 2016 +0300
@@ -48,47 +48,6 @@
static JsonNode *escape_js_node = NULL;
static JsonGenerator *escape_js_gen = NULL;
-static void
-move_to_xdg_base_dir(const char *purple_xdg_dir, char *name)
-{
- char *xdg_path;
- gboolean xdg_path_exists;
-
- /* Check if destination dir exists, otherwise create it */
- xdg_path_exists = g_file_test(purple_xdg_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR);
- if (!xdg_path_exists) {
- gint mkdir_res;
-
- mkdir_res = purple_build_dir(purple_xdg_dir, S_IRWXU);
- if (mkdir_res == -1) {
- purple_debug_error("util", "Error creating xdg directory %s: %s; failed migration\n",
- purple_xdg_dir, g_strerror(errno));
- return;
- }
- }
-
- xdg_path = g_build_filename(purple_xdg_dir, name, NULL);
- xdg_path_exists = g_file_test(xdg_path, G_FILE_TEST_EXISTS);
- if (!xdg_path_exists) {
- char *old_path;
- gboolean old_path_exists;
-
- old_path = g_build_filename(purple_user_dir(), name, NULL);
- old_path_exists = g_file_test(old_path, G_FILE_TEST_EXISTS);
- if (old_path_exists) {
- g_rename(old_path, xdg_path);
- }
-
- g_free(old_path);
- old_path = NULL;
- }
-
- g_free(xdg_path);
- xdg_path = NULL;
-
- return;
-}
-
/* If legacy directory for libpurple exists, move it to location following
* xdg base dir spec. https://developer.pidgin.im/ticket/10029
*/
@@ -101,9 +60,9 @@
legacy_purple_dir = purple_user_dir();
dir_exists = g_file_test(legacy_purple_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR);
if (dir_exists) {
- move_to_xdg_base_dir(purple_data_dir(), "certificates");
- move_to_xdg_base_dir(purple_cache_dir(), "icons");
- move_to_xdg_base_dir(purple_data_dir(), "logs");
+ purple_move_to_xdg_base_dir(purple_data_dir(), "certificates");
+ purple_move_to_xdg_base_dir(purple_cache_dir(), "icons");
+ purple_move_to_xdg_base_dir(purple_data_dir(), "logs");
}
return;
@@ -3041,6 +3000,47 @@
return data_dir;
}
+void
+purple_move_to_xdg_base_dir(const char *purple_xdg_dir, char *path)
+{
+ char *xdg_path;
+ gboolean xdg_path_exists;
+
+ /* Check if destination dir exists, otherwise create it */
+ xdg_path_exists = g_file_test(purple_xdg_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR);
+ if (!xdg_path_exists) {
+ gint mkdir_res;
+
+ mkdir_res = purple_build_dir(purple_xdg_dir, S_IRWXU);
+ if (mkdir_res == -1) {
+ purple_debug_error("util", "Error creating xdg directory %s: %s; failed migration\n",
+ purple_xdg_dir, g_strerror(errno));
+ return;
+ }
+ }
+
+ xdg_path = g_build_filename(purple_xdg_dir, path, NULL);
+ xdg_path_exists = g_file_test(xdg_path, G_FILE_TEST_EXISTS);
+ if (!xdg_path_exists) {
+ char *old_path;
+ gboolean old_path_exists;
+
+ old_path = g_build_filename(purple_user_dir(), path, NULL);
+ old_path_exists = g_file_test(old_path, G_FILE_TEST_EXISTS);
+ if (old_path_exists) {
+ g_rename(old_path, xdg_path);
+ }
+
+ g_free(old_path);
+ old_path = NULL;
+ }
+
+ g_free(xdg_path);
+ xdg_path = NULL;
+
+ return;
+}
+
void purple_util_set_user_dir(const char *dir)
{
g_free(custom_user_dir);
--- a/libpurple/util.h Sun Oct 02 07:13:45 2016 +0300
+++ b/libpurple/util.h Sun Oct 02 08:13:03 2016 +0300
@@ -824,6 +824,18 @@
const char *purple_data_dir(void);
/**
+ * purple_move_to_xdg_base_dir:
+ * @purple_xdg_dir: The path to cache, config or data dir.
+ * Use respective function
+ * @path: File or directory in purple_user_dir
+ *
+ * Moves file or directory from legacy user dir to XDG
+ * based dir.
+ */
+void
+purple_move_to_xdg_base_dir(const char *purple_xdg_dir, char *path);
+
+/**
* purple_util_set_user_dir:
* @dir: The custom settings directory
*