diff --git a/src/main.cpp b/src/main.cpp index f5f7a21..277490d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -37,9 +37,7 @@ void runScript(int argc, char *argv[]) // std::cout << "Running script: " << argv[1] << std::endl; - std::vector search_dirs = settings.getSetting>("search_dirs"); - - for (auto search_dir : search_dirs) + for (auto search_dir : settings.getSetting>("search_dirs")) { std::string script = search_dir + "/" + argv[1]; if (std::filesystem::exists(script)) @@ -56,14 +54,47 @@ void runScript(int argc, char *argv[]) system(script.c_str()); return; } - } - } void showScript(int argc, char *argv[]) { + + std::map dir_options; + for (auto search_dir : settings.getSetting>("search_dirs")) + { + if (std::filesystem::exists(search_dir + "/" + argv[1])) + { + dir_options[dir_options.size()] = search_dir; + } + } + + if (dir_options.size() == 0) + { + std::cout << "Script " << argv[1] << " does not exist" << std::endl; + return; + } + + if (dir_options.size() == 1) + { + dir = dir_options[0]; + } + + if (dir_options.size() > 1) + { + std::cout << "Which script do you want to show?" << std::endl; + for (auto &option : dir_options) + { + std::cout << option.first << " " << option.second << std::endl; + } + std::cout << "Enter number: "; + int num; + std::cin >> num; + dir = dir_options[num]; + } + std::string script = dir + "/" + argv[1]; + std::cout << "Showing script: " << script << std::endl; if (std::filesystem::exists(script)) { std::cout << "Showing script: " << argv[1] << std::endl; @@ -106,15 +137,30 @@ void listScripts(int argc, char *argv[]) // add a script in the autom directory void addScript(int argc, char *argv[]) { + std::string add_dir = dir; - if (std::filesystem::exists(dir + "/" + argv[1])) + if (settings.getSetting>("search_dirs").size() > 1) { - std::cout << "Script " << argv[1] << " already exists" << std::endl; + std::cout << "Which directory do you want to add the script to?" << std::endl; + std::vector search_dirs = settings.getSetting>("search_dirs"); + for (int i = 0; i < search_dirs.size(); i++) + { + std::cout << i << " " << search_dirs[i] << std::endl; + } + std::cout << "Enter number: "; + int num; + std::cin >> num; + add_dir = search_dirs[num]; + } + + if (std::filesystem::exists(add_dir + "/" + argv[1])) + { + std::cout << "Script " << argv[1] << " in folder " << add_dir << " already exists" << std::endl; return; } std::cout << "Adding script: " << argv[1] << std::endl; - std::string script = dir + "/" + argv[1]; + std::string script = add_dir + "/" + argv[1]; std::ofstream file(script); #ifdef _WIN32 @@ -127,24 +173,95 @@ void addScript(int argc, char *argv[]) file.close(); - editScript(argv[1]); + editScript(argv[1], add_dir); } // edit a script in the autom directory void editScript(int argc, char *argv[]) { - editScript(argv[1]); + + std::map dir_options; + + for (auto search_dir : settings.getSetting>("search_dirs")) + { + if (std::filesystem::exists(search_dir + "/" + argv[1])) + { + dir_options[dir_options.size()] = search_dir; + } + } + + if (dir_options.size() == 0) + { + std::cout << "Script " << argv[1] << " does not exist" << std::endl; + return; + } + + if (dir_options.size() == 1) + { + dir = dir_options[0]; + } + + if (dir_options.size() > 1) + { + std::cout << "Which script do you want to edit?" << std::endl; + for (auto &option : dir_options) + { + std::cout << option.first << " " << option.second << std::endl; + } + std::cout << "Enter number: "; + int num; + std::cin >> num; + dir = dir_options[num]; + } + + editScript(argv[1], dir); } -void editScript(std::string name) +void editScript(std::string name, std::string dir) { std::string script = dir + "/" + name; - system((+" " + script).c_str()); + system((settings.getSetting("editor") + " " + script).c_str()); } void removeScript(int argc, char *argv[]) { + + + std::map dir_options; + + for (auto search_dir : settings.getSetting>("search_dirs")) + { + if (std::filesystem::exists(search_dir + "/" + argv[1])) + { + dir_options[dir_options.size()] = search_dir; + } + } + + if (dir_options.size() == 0) + { + std::cout << "Script " << argv[1] << " does not exist" << std::endl; + return; + } + + if (dir_options.size() == 1) + { + dir = dir_options[0]; + } + + if (dir_options.size() > 1) + { + std::cout << "Which script do you want to remove?" << std::endl; + for (auto &option : dir_options) + { + std::cout << option.first << " " << option.second << std::endl; + } + std::cout << "Enter number: "; + int num; + std::cin >> num; + dir = dir_options[num]; + } + std::string script = dir + "/" + argv[1]; if (std::filesystem::exists(script)) { diff --git a/src/main.h b/src/main.h index ecb4c79..ed79e7d 100644 --- a/src/main.h +++ b/src/main.h @@ -29,7 +29,7 @@ void listScripts(int argc, char *argv[]); void addScript(int argc, char *argv[]); // edit a script in the autom directory void editScript(int argc, char *argv[]); -void editScript(std::string name); +void editScript(std::string name, std::string dir); // remove a script in the autom directory void removeScript(int argc, char *argv[]); // show a script in the autom directory