Move data directory creation/query code to ag_get_user_data_dir()
This commit is contained in:
		
							
								
								
									
										17
									
								
								src/ag-db.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								src/ag-db.c
									
									
									
									
									
								
							| @@ -456,30 +456,17 @@ static void | |||||||
| ag_db_init(AgDb *db) | ag_db_init(AgDb *db) | ||||||
| { | { | ||||||
|     GdaSqlParser *parser; |     GdaSqlParser *parser; | ||||||
|     GFile        *user_data_dir = g_file_new_for_path(g_get_user_data_dir()), |     GFile        *ag_data_dir   = ag_get_user_data_dir(); | ||||||
|                  *ag_data_dir   = g_file_get_child(user_data_dir, "astrognome"); |  | ||||||
|     AgDbPrivate  *priv          = ag_db_get_instance_private(db); |     AgDbPrivate  *priv          = ag_db_get_instance_private(db); | ||||||
|     gchar        *path          = g_file_get_path(ag_data_dir); |     gchar        *path          = g_file_get_path(ag_data_dir); | ||||||
|     GError       *err           = NULL; |     GError       *err           = NULL; | ||||||
|  |  | ||||||
|     gda_init(); |     gda_init(); | ||||||
|  |  | ||||||
|     if (!g_file_query_exists(ag_data_dir, NULL)) { |  | ||||||
|         gchar *path = g_file_get_path(ag_data_dir); |  | ||||||
|  |  | ||||||
|         if (g_mkdir_with_parents(path, 0700) != 0) { |  | ||||||
|             g_error( |  | ||||||
|                     "Data directory %s does not exist and can not be created.", |  | ||||||
|                     path |  | ||||||
|                 ); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     priv->dsn = g_strdup_printf("SQLite://DB_DIR=%s;DB_NAME=charts", path); |     priv->dsn = g_strdup_printf("SQLite://DB_DIR=%s;DB_NAME=charts", path); | ||||||
|  |  | ||||||
|     g_free(path); |     g_free(path); | ||||||
|     g_object_unref(user_data_dir); |     g_clear_object(&ag_data_dir); | ||||||
|     g_object_unref(ag_data_dir); |  | ||||||
|  |  | ||||||
|     priv->conn = gda_connection_open_from_string( |     priv->conn = gda_connection_open_from_string( | ||||||
|             NULL, |             NULL, | ||||||
|   | |||||||
| @@ -188,6 +188,40 @@ ag_house_system_nick_to_id(const gchar *nick) | |||||||
|     return GSWE_HOUSE_SYSTEM_NONE; |     return GSWE_HOUSE_SYSTEM_NONE; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * ag_get_user_data_dir: | ||||||
|  |  * | ||||||
|  |  * Creates the astrognome data directory (~/.local/share/astrognome on XDG | ||||||
|  |  * compatible systems) if necessary, and returns a GFile handle to it. | ||||||
|  |  * | ||||||
|  |  * Returns: (transfer full): a #GFile handle to the application data directory | ||||||
|  |  *          that must be freed with g_object_unref(). | ||||||
|  |  */ | ||||||
|  | GFile * | ||||||
|  | ag_get_user_data_dir(void) | ||||||
|  | { | ||||||
|  |     GFile *user_data_dir = g_file_new_for_path(g_get_user_data_dir()), | ||||||
|  |           *ag_data_dir   = g_file_get_child(user_data_dir, "astrognome"); | ||||||
|  |  | ||||||
|  |     g_clear_object(&user_data_dir); | ||||||
|  |     g_assert(ag_data_dir); | ||||||
|  |  | ||||||
|  |     if (!g_file_query_exists(ag_data_dir, NULL)) { | ||||||
|  |         gchar *path = g_file_get_path(ag_data_dir); | ||||||
|  |  | ||||||
|  |         if (g_mkdir_with_parents(path, 0700) != 0) { | ||||||
|  |             g_error( | ||||||
|  |                     "Data directory ‘%s’ does not exist and cannot be created.", | ||||||
|  |                     path | ||||||
|  |                 ); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         g_free(path); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return ag_data_dir; | ||||||
|  | } | ||||||
|  |  | ||||||
| int | int | ||||||
| main(int argc, char *argv[]) | main(int argc, char *argv[]) | ||||||
| { | { | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| #ifndef __ASTROGNOME_H__ | #ifndef __ASTROGNOME_H__ | ||||||
| #define __ASTROGNOME_H__ | #define __ASTROGNOME_H__ | ||||||
|  |  | ||||||
|  | #include <gtk/gtk.h> | ||||||
| #include <swe-glib.h> | #include <swe-glib.h> | ||||||
|  |  | ||||||
| typedef struct { | typedef struct { | ||||||
| @@ -34,6 +35,7 @@ enum { | |||||||
|  |  | ||||||
| const gchar *ag_house_system_id_to_nick(GsweHouseSystem house_system); | const gchar *ag_house_system_id_to_nick(GsweHouseSystem house_system); | ||||||
| GsweHouseSystem ag_house_system_nick_to_id(const gchar *nick); | GsweHouseSystem ag_house_system_nick_to_id(const gchar *nick); | ||||||
|  | GFile *ag_get_user_data_dir(void); | ||||||
|  |  | ||||||
| #ifndef GDOUBLE_FROM_LE | #ifndef GDOUBLE_FROM_LE | ||||||
| inline static gdouble | inline static gdouble | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user