]> git.notmuchmail.org Git - notmuch/blobdiff - lib/open.cc
lib/open: set HOOK_DIR on open
[notmuch] / lib / open.cc
index 577fc88a40879267e9572e699ee904421cc959e6..b4637ec5445cba1ffbb93bd9cde237f0e0a3e327 100644 (file)
@@ -68,6 +68,44 @@ _xdg_dir (void *ctx,
                            profile_name);
 }
 
+static notmuch_status_t
+_choose_hook_dir (notmuch_database_t *notmuch,
+                 const char *profile,
+                 char **message)
+{
+    const char *config;
+    const char *hook_dir;
+    struct stat st;
+    int err;
+
+    hook_dir = notmuch_config_get (notmuch, NOTMUCH_CONFIG_HOOK_DIR);
+
+    if (hook_dir)
+       return NOTMUCH_STATUS_SUCCESS;
+
+    config = _xdg_dir (notmuch, "XDG_CONFIG_HOME", ".config", profile);
+    if (! config)
+       return  NOTMUCH_STATUS_PATH_ERROR;
+
+    hook_dir = talloc_asprintf (notmuch, "%s/hooks", config);
+
+    err = stat (hook_dir, &st);
+    if (err) {
+       if (errno == ENOENT) {
+           const char *database_path = notmuch_database_get_path (notmuch);
+           hook_dir = talloc_asprintf (notmuch, "%s/.notmuch/hooks", database_path);
+       } else {
+           IGNORE_RESULT (asprintf (message, "Error: Cannot stat %s: %s.\n",
+                                    hook_dir, strerror (errno)));
+           return NOTMUCH_STATUS_FILE_ERROR;
+       }
+    }
+
+    _notmuch_config_cache (notmuch, NOTMUCH_CONFIG_HOOK_DIR, hook_dir);
+
+    return NOTMUCH_STATUS_SUCCESS;
+}
+
 static notmuch_status_t
 _load_key_file (const char *path,
                const char *profile,
@@ -301,6 +339,10 @@ notmuch_database_open_with_config (const char *database_path,
        if (status)
            goto DONE;
 
+       status = _choose_hook_dir (notmuch, profile, &message);
+       if (status)
+           goto DONE;
+
        status = _notmuch_config_load_defaults (notmuch);
        if (status)
            goto DONE;