aboutsummaryrefslogtreecommitdiff
path: root/src/Config.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2022-10-31 22:54:59 +0100
committerdec05eba <dec05eba@protonmail.com>2022-10-31 22:54:59 +0100
commit53316e4bada29f1392df2528d8616afde17f570b (patch)
tree4b687dc2bd2b46da1b2d31648bc40ceb6179972f /src/Config.cpp
parent9540ab168be53f3ec2aec513d855df0194d9cb8a (diff)
Add ctrl+shift+s to download files without a dialog
Diffstat (limited to 'src/Config.cpp')
-rw-r--r--src/Config.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/Config.cpp b/src/Config.cpp
index 540286f..3f2d68c 100644
--- a/src/Config.cpp
+++ b/src/Config.cpp
@@ -256,6 +256,45 @@ namespace QuickMedia {
if(!has_known_peertube_homeservers_config)
peertube_known_instances_fallback();
+ const std::string home_dir = get_home_dir().data;
+
+ struct DownloadPaths {
+ const char *json_field;
+ std::string fallback_dir;
+ const char *xdg_var_name;
+ std::string *config_var;
+ };
+
+ const int num_download_paths = 4;
+ DownloadPaths download_paths_list[num_download_paths] = {
+ { "video_directory", home_dir + "/Videos", "XDG_VIDEOS_DIR", &config->download.video_directory },
+ { "image_directory", home_dir + "/Pictures", "XDG_PICTURES_DIR", &config->download.image_directory },
+ { "music_directory", home_dir + "/Music", "XDG_MUSIC_DIR", &config->download.music_directory },
+ { "file_directory", home_dir + "/Downloads", "XDG_DOWNLOAD_DIR", &config->download.file_directory },
+ };
+
+ const Json::Value &download_json = json_root["download"];
+ if(download_json.isObject()) {
+ for(const DownloadPaths &download_paths : download_paths_list) {
+ const Json::Value &directory_json = download_json[download_paths.json_field];
+ if(!directory_json.isString()) {
+ fprintf(stderr, "Warning: config variable config.download.%s is not a string, using path \"%s\" instead\n", download_paths.json_field, download_paths.fallback_dir.c_str());
+ continue;
+ }
+ *download_paths.config_var = path_expanduser(directory_json.asString());
+ }
+ }
+
+ for(const DownloadPaths &download_paths : download_paths_list) {
+ if(download_paths.config_var->empty()) {
+ std::string dir = download_paths.fallback_dir;
+ const char *xdg_var = getenv(download_paths.xdg_var_name);
+ if(xdg_var)
+ dir = xdg_var;
+ *download_paths.config_var = std::move(dir);
+ }
+ }
+
get_json_value(json_root, "use_system_fonts", config->use_system_fonts);
get_json_value(json_root, "use_system_mpv_config", config->use_system_mpv_config);
get_json_value(json_root, "enable_shaders", config->enable_shaders);