Use functions to return directories instead of constants.
authorLaurent Monin <geeqie@norz.org>
Sat, 15 Nov 2008 17:30:45 +0000 (17:30 +0000)
committerLaurent Monin <geeqie@norz.org>
Sat, 15 Nov 2008 17:30:45 +0000 (17:30 +0000)
Following functions were added:
get_collections_dir()
get_metadata_cache_dir()
get_rc_dir()
get_thumbnails_cache_dir()
get_trash_dir()

They return the full directory path.

13 files changed:
src/bar_sort.c
src/cache.c
src/cache.h
src/cache_maint.c
src/collect-dlg.c
src/collect-io.c
src/main.c
src/main.h
src/options.c
src/remote.c
src/search.c
src/ui_fileops.c
src/ui_fileops.h

index 2bfbf77..0a4c40f 100644 (file)
@@ -89,7 +89,6 @@ static void bar_sort_add_close(SortData *sd);
 
 static void bar_sort_collection_list_build(GtkWidget *bookmarks)
 {
-       gchar *collect_path;
        FileData *dir_fd;
        GList *list;
        GList *work;
@@ -97,11 +96,9 @@ static void bar_sort_collection_list_build(GtkWidget *bookmarks)
        history_list_free_key(SORT_KEY_COLLECTIONS);
        bookmark_list_set_key(bookmarks, SORT_KEY_COLLECTIONS);
 
-       collect_path = g_build_filename(homedir(), GQ_RC_DIR_COLLECTIONS, NULL);
-       dir_fd = file_data_new_simple(collect_path);
+       dir_fd = file_data_new_simple(get_collections_dir());
        filelist_read(dir_fd, &list, NULL);
        file_data_unref(dir_fd);
-       g_free(collect_path);
 
        list = filelist_sort_path(list);
 
@@ -436,7 +433,7 @@ static void bar_sort_add_ok_cb(FileDialog *fd, gpointer data)
                        name = tmp;
                        }
 
-               path = g_build_filename(homedir(), GQ_RC_DIR_COLLECTIONS, name, NULL);
+               path = g_build_filename(get_collections_dir(), name, NULL);
                if (isfile(path))
                        {
                        gchar *text = g_strdup_printf(_("The collection:\n%s\nalready exists."), name);
index 33fc1ca..48a04ab 100644 (file)
@@ -623,17 +623,17 @@ static void cache_path_parts(CacheType type,
        switch (type)
                {
                case CACHE_TYPE_THUMB:
-                       *cache_rc = GQ_CACHE_RC_THUMB;
+                       *cache_rc = get_thumbnails_cache_dir();
                        *cache_local = GQ_CACHE_LOCAL_THUMB;
                        *cache_ext = GQ_CACHE_EXT_THUMB;
                        break;
                case CACHE_TYPE_SIM:
-                       *cache_rc = GQ_CACHE_RC_THUMB;
+                       *cache_rc = get_thumbnails_cache_dir();
                        *cache_local = GQ_CACHE_LOCAL_THUMB;
                        *cache_ext = GQ_CACHE_EXT_SIM;
                        break;
                case CACHE_TYPE_METADATA:
-                       *cache_rc = GQ_CACHE_RC_METADATA;
+                       *cache_rc = get_metadata_cache_dir();
                        *cache_local = GQ_CACHE_LOCAL_METADATA;
                        *cache_ext = GQ_CACHE_EXT_METADATA;
                        break;
@@ -669,7 +669,7 @@ gchar *cache_get_location(CacheType type, const gchar *source, gint include_name
 
        if (!path)
                {
-               path = g_build_filename(homedir(), cache_rc, base, name, NULL);
+               path = g_build_filename(cache_rc, base, name, NULL);
                if (mode) *mode = 0755;
                }
 
@@ -695,7 +695,7 @@ static gchar *cache_build_path_rc(const gchar *source, const gchar *cache_rc, co
 {
        gchar *path;
        gchar *name = g_strconcat(source, cache_ext, NULL);
-       path = g_build_filename(homedir(), cache_rc, name, NULL);
+       path = g_build_filename(cache_rc, name, NULL);
        g_free(name);
 
        return path;
@@ -794,4 +794,25 @@ gint cache_time_valid(const gchar *cache, const gchar *path)
 
        return ret;
 }
+
+const gchar *get_thumbnails_cache_dir(void)
+{
+       static gchar *thumbnails_cache_dir = NULL;
+
+       if (thumbnails_cache_dir) return thumbnails_cache_dir;
+
+       thumbnails_cache_dir = g_build_filename(get_rc_dir(), GQ_CACHE_THUMB, NULL);
+       return thumbnails_cache_dir;
+}
+
+const gchar *get_metadata_cache_dir(void)
+{
+       static gchar *metadata_cache_dir = NULL;
+
+       if (metadata_cache_dir) return metadata_cache_dir;
+
+       metadata_cache_dir = g_build_filename(get_rc_dir(), GQ_CACHE_METADATA, NULL);
+       return metadata_cache_dir;
+}
+
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index fa5f3f3..a16db5b 100644 (file)
@@ -18,8 +18,8 @@
 #include "similar.h"
 
 
-#define GQ_CACHE_RC_THUMB       GQ_RC_DIR G_DIR_SEPARATOR_S "thumbnails"
-#define GQ_CACHE_RC_METADATA    GQ_RC_DIR G_DIR_SEPARATOR_S "metadata"
+#define GQ_CACHE_THUMB         "thumbnails"
+#define GQ_CACHE_METADATA      "metadata"
 
 #define GQ_CACHE_LOCAL_THUMB    ".thumbnails"
 #define GQ_CACHE_LOCAL_METADATA ".metadata"
@@ -74,6 +74,8 @@ gint cache_ensure_dir_exists(gchar *path, mode_t mode);
 gchar *cache_get_location(CacheType type, const gchar *source, gint include_name, mode_t *mode);
 gchar *cache_find_location(CacheType type, const gchar *source);
 
+const gchar *get_thumbnails_cache_dir(void);
+const gchar *get_metadata_cache_dir(void);
 
 #endif
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index cd4d81c..46c9475 100644 (file)
@@ -143,20 +143,17 @@ static gint cache_maintain_home_cb(gpointer data)
        gboolean still_have_a_file = TRUE;
        gsize base_length;
        const gchar *cache_folder;
-       gchar *base;
 
        if (cm->metadata)
                {
-               cache_folder = GQ_CACHE_RC_METADATA;
+               cache_folder = get_metadata_cache_dir();
                }
        else
                {
-               cache_folder = GQ_CACHE_RC_THUMB;
+               cache_folder = get_thumbnails_cache_dir();
                }
 
-       base = g_build_filename(homedir(), cache_folder, NULL);
-       base_length = strlen(base);
-       g_free(base);
+       base_length = strlen(cache_folder);
 
        if (!cm->list)
                {
@@ -276,7 +273,6 @@ void cache_maintain_home(gint metadata, gint clear, GtkWidget *parent)
 {
        CMData *cm;
        GList *dlist;
-       gchar *base;
        FileData *dir_fd;
        const gchar *msg;
        const gchar *cache_folder;
@@ -284,24 +280,21 @@ void cache_maintain_home(gint metadata, gint clear, GtkWidget *parent)
 
        if (metadata)
                {
-               cache_folder = GQ_CACHE_RC_METADATA;
+               cache_folder = get_metadata_cache_dir();
                }
        else
                {
-               cache_folder = GQ_CACHE_RC_THUMB;
+               cache_folder = get_thumbnails_cache_dir();
                }
 
-       base = g_build_filename(homedir(), cache_folder, NULL);
-       dir_fd = file_data_new_simple(base);
+       dir_fd = file_data_new_simple(cache_folder);
        if (!filelist_read(dir_fd, NULL, &dlist))
                {
-               g_free(base);
                file_data_unref(dir_fd);
                return;
                }
 
        dlist = g_list_append(dlist, dir_fd);
-       g_free(base);
 
        cm = g_new0(CMData, 1);
        cm->list = dlist;
@@ -1246,7 +1239,7 @@ void cache_manager_show(void)
 
        group = pref_group_new(gd->vbox, FALSE, _("Thumbnail cache"), GTK_ORIENTATION_VERTICAL);
 
-       cache_manager_location_label(group, GQ_CACHE_RC_THUMB);
+       cache_manager_location_label(group, get_thumbnails_cache_dir());
 
        table = pref_table_new(group, 2, 2, FALSE, FALSE);
 
@@ -1288,7 +1281,7 @@ void cache_manager_show(void)
 
        group = pref_group_new(gd->vbox, FALSE, _("Metadata"), GTK_ORIENTATION_VERTICAL);
 
-       cache_manager_location_label(group, GQ_CACHE_RC_METADATA);
+       cache_manager_location_label(group, get_metadata_cache_dir());
 
        table = pref_table_new(group, 2, 1, FALSE, FALSE);
 
index 2c03ea3..1839eba 100644 (file)
@@ -162,7 +162,6 @@ static void collection_save_or_load_dialog(const gchar *path,
        const gchar *title;
        const gchar *btntext;
        gpointer btnfunc;
-       gchar *base;
        const gchar *stock_id;
 
        if (type == DIALOG_SAVE || type == DIALOG_SAVE_CLOSE)
@@ -200,10 +199,8 @@ static void collection_save_or_load_dialog(const gchar *path,
        generic_dialog_add_message(GENERIC_DIALOG(fd), NULL, title, NULL);
        file_dialog_add_button(fd, stock_id, btntext, btnfunc, TRUE);
 
-       base = g_build_filename(homedir(), GQ_RC_DIR_COLLECTIONS, NULL);
-       file_dialog_add_path_widgets(fd, base, path,
+       file_dialog_add_path_widgets(fd, get_collections_dir(), path,
                                     "collection_load_save", GQ_COLLECTION_EXT, _("Collection Files"));
-       g_free(base);
 
        fd->type = type;
 
index 846d671..b8d1b92 100644 (file)
@@ -668,14 +668,11 @@ static void collect_manager_refresh(void)
 {
        GList *list;
        GList *work;
-       gchar *base;
        FileData *dir_fd;
 
-       base = g_build_filename(homedir(), GQ_RC_DIR_COLLECTIONS, NULL);
-       dir_fd = file_data_new_simple(base);
+       dir_fd = file_data_new_simple(get_collections_dir());
        filelist_read(dir_fd, &list, NULL);
        file_data_unref(dir_fd);
-       g_free(base);
 
        work = collection_manager_entry_list;
        while (work && list)
index 9651625..10f1171 100644 (file)
@@ -430,7 +430,7 @@ static void keys_load(void)
 {
        gchar *path;
 
-       path = g_build_filename(homedir(), GQ_RC_DIR, RC_HISTORY_NAME, NULL);
+       path = g_build_filename(get_rc_dir(), RC_HISTORY_NAME, NULL);
        history_list_load(path);
        g_free(path);
 }
@@ -439,26 +439,21 @@ static void keys_save(void)
 {
        gchar *path;
 
-       path = g_build_filename(homedir(), GQ_RC_DIR, RC_HISTORY_NAME, NULL);
+       path = g_build_filename(get_rc_dir(), RC_HISTORY_NAME, NULL);
        history_list_save(path);
        g_free(path);
 }
 
-static void check_for_home_path(gchar *path)
+static void check_for_home_path(const gchar *path)
 {
-       gchar *buf;
+       if (isdir(path)) return;
 
-       buf = g_build_filename(homedir(), path, NULL);
-       if (!isdir(buf))
-               {
-               log_printf(_("Creating %s dir:%s\n"), GQ_APPNAME, buf);
+       log_printf(_("Creating %s dir:%s\n"), GQ_APPNAME, path);
 
-               if (!mkdir_utf8(buf, 0755))
-                       {
-                       log_printf(_("Could not create dir:%s\n"), buf);
-                       }
+       if (!mkdir_utf8(path, 0755))
+               {
+               log_printf(_("Could not create dir:%s\n"), path);
                }
-       g_free(buf);
 }
 
 
@@ -538,7 +533,7 @@ static gboolean gq_accel_map_save(const gchar *path)
 
 static gchar *accep_map_filename(void)
 {
-       return g_build_filename(homedir(), GQ_RC_DIR, "accels", NULL);
+       return g_build_filename(get_rc_dir(), "accels", NULL);
 }
 
 static void accel_map_save(void)
@@ -569,7 +564,7 @@ static void gtkrc_load(void)
 
        /* If a gtkrc file exists in the rc directory, add it to the
         * list of files to be parsed at the end of gtk_init() */
-       path = g_build_filename(homedir(), GQ_RC_DIR, "gtkrc", NULL);
+       path = g_build_filename(get_rc_dir(), "gtkrc", NULL);
        pathl = path_from_utf8(path);
        if (access(pathl, R_OK) == 0)
                gtk_rc_add_default_file(pathl);
@@ -722,10 +717,10 @@ gint main(gint argc, gchar *argv[])
                log_printf("!!! %s may quit unexpectedly with a relocation error.\n", GQ_APPNAME);
                }
 
-       check_for_home_path(GQ_RC_DIR);
-       check_for_home_path(GQ_RC_DIR_COLLECTIONS);
-       check_for_home_path(GQ_CACHE_RC_THUMB);
-       check_for_home_path(GQ_CACHE_RC_METADATA);
+       check_for_home_path(get_rc_dir());
+       check_for_home_path(get_collections_dir());
+       check_for_home_path(get_thumbnails_cache_dir());
+       check_for_home_path(get_metadata_cache_dir());
 
        keys_load();
        filter_add_defaults();
@@ -856,7 +851,7 @@ gint main(gint argc, gchar *argv[])
        if (startup_full_screen) layout_image_full_screen_start(lw);
        if (startup_in_slideshow) layout_image_slideshow_start(lw);
 
-       buf = g_build_filename(homedir(), GQ_RC_DIR, ".command", NULL);
+       buf = g_build_filename(get_rc_dir(), ".command", NULL);
        remote_connection = remote_server_init(buf, cd);
        g_free(buf);
        
index 671d947..8be8be9 100644 (file)
@@ -71,9 +71,9 @@
 
 #define GQ_WMCLASS GQ_APPNAME_LC
 
-#define GQ_RC_DIR             "." GQ_APPNAME_LC
-#define GQ_RC_DIR_COLLECTIONS GQ_RC_DIR G_DIR_SEPARATOR_S "collections"
-#define GQ_RC_DIR_TRASH       GQ_RC_DIR G_DIR_SEPARATOR_S "trash"
+#define GQ_RC_DIR              "." GQ_APPNAME_LC
+#define GQ_COLLECTIONS_DIR     "collections"
+#define GQ_TRASH_DIR           "trash"
 
 #define GQ_SYSTEM_WIDE_DIR    "/etc/" GQ_APPNAME_LC
 
index b5a7fc3..e13f3b4 100644 (file)
@@ -183,12 +183,10 @@ void setup_default_options(ConfOptions *options)
        path = g_build_filename(homedir(), "Desktop", NULL);
        bookmark_add_default(_("Desktop"), path);
        g_free(path);
-       path = g_build_filename(homedir(), GQ_RC_DIR_COLLECTIONS, NULL);
-       bookmark_add_default(_("Collections"), path);
-       g_free(path);
+       bookmark_add_default(_("Collections"), get_collections_dir());
 
        g_free(options->file_ops.safe_delete_path);
-       options->file_ops.safe_delete_path = g_build_filename(homedir(), GQ_RC_DIR_TRASH, NULL);
+       options->file_ops.safe_delete_path = g_strdup(get_trash_dir());
 
        for (i = 0; i < COLOR_PROFILE_INPUTS; i++)
                {
@@ -260,7 +258,7 @@ void save_options(ConfOptions *options)
 
        sync_options_with_current_state(options);
 
-       rc_path = g_build_filename(homedir(), GQ_RC_DIR, RC_FILE_NAME, NULL);
+       rc_path = g_build_filename(get_rc_dir(), RC_FILE_NAME, NULL);
        save_options_to(rc_path, options);
        g_free(rc_path);
 }
@@ -278,7 +276,7 @@ void load_options(ConfOptions *options)
                g_free(rc_path);
                }
        
-       rc_path = g_build_filename(homedir(), GQ_RC_DIR, RC_FILE_NAME, NULL);
+       rc_path = g_build_filename(get_rc_dir(), RC_FILE_NAME, NULL);
        success = load_options_from(rc_path, options);
        DEBUG_1("Loading options from %s ... %s", rc_path, success ? "done" : "failed");
        g_free(rc_path);
index 19ba426..38d52c2 100644 (file)
@@ -701,7 +701,7 @@ void remote_control(const gchar *arg_exec, GList *remote_list, const gchar *path
        gint started = FALSE;
        gchar *buf;
 
-       buf = g_build_filename(homedir(), GQ_RC_DIR, ".command", NULL);
+       buf = g_build_filename(get_rc_dir(), ".command", NULL);
        rc = remote_client_open(buf);
        if (!rc)
                {
index 52fb39e..9e94aba 100644 (file)
@@ -2219,12 +2219,8 @@ static void search_start_cb(GtkWidget *widget, gpointer data)
        else if (sd->search_type == SEARCH_MATCH_ALL)
                {
                /* search metadata */
-               path = g_build_filename(homedir(), GQ_CACHE_RC_METADATA, NULL);
-
                file_data_unref(sd->search_dir_fd);
-               sd->search_dir_fd = file_data_new_simple(path);
-               g_free(path);
-
+               sd->search_dir_fd = file_data_new_simple(get_metadata_cache_dir());
                search_start(sd);
                }
        else if (sd->search_type == SEARCH_MATCH_CONTAINS)
index a479398..a864334 100644 (file)
@@ -186,6 +186,39 @@ const gchar *homedir(void)
        return home;
 }
 
+const gchar *get_rc_dir(void)
+{
+       static gchar *rc_dir = NULL;
+       
+       if (rc_dir) return rc_dir;
+
+       rc_dir = g_build_filename(homedir(), GQ_RC_DIR, NULL);
+       
+       return rc_dir;
+}
+
+const gchar *get_collections_dir(void)
+{
+       static gchar *collections_dir = NULL;
+
+       if (collections_dir) return collections_dir;
+
+       collections_dir = g_build_filename(get_rc_dir(), GQ_COLLECTIONS_DIR, NULL);
+       
+       return collections_dir;
+}
+
+const gchar *get_trash_dir(void)
+{
+       static gchar *trash_dir = NULL;
+
+       if (trash_dir) return trash_dir;
+
+       trash_dir = g_build_filename(get_rc_dir(), GQ_TRASH_DIR, NULL);
+       
+       return trash_dir;
+}
+
 gint stat_utf8(const gchar *s, struct stat *st)
 {
        gchar *sl;
index 79562cd..2ba463c 100644 (file)
@@ -35,6 +35,10 @@ gchar *path_to_utf8(const gchar *path);
 gchar *path_from_utf8(const gchar *path);
 
 const gchar *homedir(void);
+const gchar *get_rc_dir(void);
+const gchar *get_collections_dir(void);
+const gchar *get_trash_dir(void);
+
 gint stat_utf8(const gchar *s, struct stat *st);
 gint lstat_utf8(const gchar *s, struct stat *st);
 gint isname(const gchar *s);