summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntía Puentes <apuentes@igalia.com>2012-04-24 11:42:53 +0200
committerJuan A. Suarez Romero <jasuarez@igalia.com>2012-04-25 16:29:56 +0200
commit308491a4aa79fd3f23ef0845fabbb08017e37392 (patch)
tree93d1d36f619b0dd4aa6e1f7d031b6f0232ddac9e
parent096ee2ec4801c781075cd6824e5ecbe2e40f86b1 (diff)
downloadgrilo-plugins-308491a4aa79fd3f23ef0845fabbb08017e37392.tar.gz
metadata-store: Save data in proper place
Save the data files in the directory specified by the XDG Base Directory Specification. If previous data files exist in $HOME, move them to the new place. Partially fixes https://bugzilla.gnome.org/show_bug.cgi?id=641115
-rw-r--r--src/metadata/metadata-store/grl-metadata-store.c43
1 files changed, 33 insertions, 10 deletions
diff --git a/src/metadata/metadata-store/grl-metadata-store.c b/src/metadata/metadata-store/grl-metadata-store.c
index e543819..b780a06 100644
--- a/src/metadata/metadata-store/grl-metadata-store.c
+++ b/src/metadata/metadata-store/grl-metadata-store.c
@@ -24,6 +24,8 @@
#include "config.h"
#endif
+#include <glib.h>
+#include <glib/gstdio.h>
#include <grilo.h>
#include <sqlite3.h>
#include <string.h>
@@ -44,7 +46,8 @@ GRL_LOG_DOMAIN_STATIC(metadata_store_log_domain);
#define SOURCE_NAME "Metadata Store"
#define SOURCE_DESC "A plugin for storing extra metadata information"
-#define GRL_SQL_DB ".grl-metadata-store"
+#define GRL_SQL_OLD_DB ".grl-metadata-store"
+#define GRL_SQL_DB "grl-metadata-store.db"
#define GRL_SQL_CREATE_TABLE_STORE \
"CREATE TABLE IF NOT EXISTS store (" \
@@ -157,24 +160,46 @@ static void
grl_metadata_store_source_init (GrlMetadataStoreSource *source)
{
gint r;
- const gchar *home;
+ gchar *path;
gchar *db_path;
+ const gchar *home;
+ gchar *old_db_path;
gchar *sql_error = NULL;
source->priv = GRL_METADATA_STORE_GET_PRIVATE (source);
- home = g_getenv ("HOME");
- if (!home) {
- GRL_WARNING ("$HOME not set, cannot open database");
- return;
+ path = g_strconcat (g_get_user_data_dir (),
+ G_DIR_SEPARATOR_S, "grilo-plugins",
+ NULL);
+
+ if (!g_file_test (path, G_FILE_TEST_IS_DIR)) {
+ g_mkdir_with_parents (path, 0775);
+ }
+
+ db_path = g_strconcat (path, G_DIR_SEPARATOR_S, GRL_SQL_DB, NULL);
+ if (!g_file_test (db_path, G_FILE_TEST_EXISTS)) {
+ home = g_get_home_dir ();
+ if (home) {
+ old_db_path = g_strconcat (home, G_DIR_SEPARATOR_S, GRL_SQL_OLD_DB, NULL);
+ if (g_file_test (old_db_path, G_FILE_TEST_IS_REGULAR)) {
+ if (g_rename (old_db_path, db_path) == 0) {
+ GRL_DEBUG ("Database moved to the new location");
+ } else {
+ GRL_WARNING ("Failed to move the database to the new location");
+ }
+ }
+ g_free (old_db_path);
+ }
}
GRL_DEBUG ("Opening database connection...");
- db_path = g_strconcat (home, G_DIR_SEPARATOR_S, GRL_SQL_DB, NULL);
r = sqlite3_open (db_path, &source->priv->db);
+ g_free (path);
+ g_free (db_path);
+
if (r) {
g_critical ("Failed to open database '%s': %s",
- db_path, sqlite3_errmsg (source->priv->db));
+ db_path, sqlite3_errmsg (source->priv->db));
sqlite3_close (source->priv->db);
return;
}
@@ -196,8 +221,6 @@ grl_metadata_store_source_init (GrlMetadataStoreSource *source)
return;
}
GRL_DEBUG (" OK");
-
- g_free (db_path);
}
G_DEFINE_TYPE (GrlMetadataStoreSource, grl_metadata_store_source,