.
This commit is contained in:
parent
f101565aed
commit
0bb098b3f1
61
src/autocomplete.cpp
Normal file
61
src/autocomplete.cpp
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#include "dropshell.hpp"
|
||||||
|
#include "init_user_directory.hpp"
|
||||||
|
#include "config.hpp"
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace fs = boost::filesystem;
|
||||||
|
|
||||||
|
namespace dropshell {
|
||||||
|
|
||||||
|
std::vector<std::string> autocomplete_list_servers() {
|
||||||
|
std::vector<std::string> servers;
|
||||||
|
std::string user_dir;
|
||||||
|
|
||||||
|
if (!get_user_directory(user_dir)) {
|
||||||
|
std::cerr << "Error: User directory not set" << std::endl;
|
||||||
|
return servers;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs::path servers_dir = fs::path(user_dir) / "servers";
|
||||||
|
if (!fs::exists(servers_dir)) {
|
||||||
|
std::cerr << "Error: Servers directory not found" << std::endl;
|
||||||
|
return servers;
|
||||||
|
}
|
||||||
|
|
||||||
|
// List all server directories
|
||||||
|
for (const auto& entry : fs::directory_iterator(servers_dir)) {
|
||||||
|
if (fs::is_directory(entry)) {
|
||||||
|
servers.push_back(entry.path().filename().string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return servers;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> autocomplete_list_services(const std::string& server_name) {
|
||||||
|
std::vector<std::string> services;
|
||||||
|
std::string user_dir;
|
||||||
|
|
||||||
|
if (!get_user_directory(user_dir)) {
|
||||||
|
std::cerr << "Error: User directory not set" << std::endl;
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs::path server_dir = fs::path(user_dir) / "servers" / server_name;
|
||||||
|
if (!fs::exists(server_dir)) {
|
||||||
|
std::cerr << "Error: Server directory not found" << std::endl;
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Look for .env files in the server directory
|
||||||
|
for (const auto& entry : fs::directory_iterator(server_dir)) {
|
||||||
|
if (entry.path().extension() == ".env" && entry.path().filename().string() != "_server.env") {
|
||||||
|
services.push_back(entry.path().stem().string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace dropshell
|
@ -7,7 +7,7 @@ _dropshell_completions() {
|
|||||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
|
||||||
# List of main commands
|
# List of main commands
|
||||||
opts="help version status servers templates"
|
opts="help version status servers templates autocomplete_list_servers autocomplete_list_services"
|
||||||
|
|
||||||
# If we're completing the first argument, show all commands
|
# If we're completing the first argument, show all commands
|
||||||
if [[ ${COMP_CWORD} -eq 1 ]] ; then
|
if [[ ${COMP_CWORD} -eq 1 ]] ; then
|
||||||
@ -22,24 +22,21 @@ _dropshell_completions() {
|
|||||||
COMPREPLY=()
|
COMPREPLY=()
|
||||||
;;
|
;;
|
||||||
servers)
|
servers)
|
||||||
# List servers from _server.env files
|
# Use the new autocomplete_list_servers command
|
||||||
local servers_dir="/opt/dropshell/user/servers"
|
local servers=($(dropshell autocomplete_list_servers))
|
||||||
local servers=()
|
COMPREPLY=( $(compgen -W "${servers[*]}" -- ${cur}) )
|
||||||
|
|
||||||
# Read all _server.env files
|
|
||||||
for server_file in "$servers_dir"/*/_server.env; do
|
|
||||||
if [ -f "$server_file" ]; then
|
|
||||||
local server_name=$(basename "$(dirname "$server_file")")
|
|
||||||
servers+=("$server_name")
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
COMPREPLY=( $(compgen -W "${servers[@]}" -- ${cur}) )
|
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
templates)
|
templates)
|
||||||
# No additional completions for templates
|
# No additional completions for templates
|
||||||
COMPREPLY=()
|
COMPREPLY=()
|
||||||
;;
|
;;
|
||||||
|
autocomplete_list_services)
|
||||||
|
# Use the new autocomplete_list_servers command for server names
|
||||||
|
local servers=($(dropshell autocomplete_list_servers))
|
||||||
|
COMPREPLY=( $(compgen -W "${servers[*]}" -- ${cur}) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -31,5 +31,7 @@ void show_server_details(const std::string& server_name);
|
|||||||
|
|
||||||
// Utility functions
|
// Utility functions
|
||||||
std::vector<ServerInfo> get_configured_servers();
|
std::vector<ServerInfo> get_configured_servers();
|
||||||
|
std::vector<std::string> autocomplete_list_servers();
|
||||||
|
std::vector<std::string> autocomplete_list_services(const std::string& server_name);
|
||||||
|
|
||||||
} // namespace dropshell
|
} // namespace dropshell
|
16
src/main.cpp
16
src/main.cpp
@ -77,6 +77,22 @@ int main(int argc, char* argv[]) {
|
|||||||
std::cerr << "Error: " << e.what() << std::endl;
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
} else if (cmd == "autocomplete_list_servers") {
|
||||||
|
auto servers = dropshell::autocomplete_list_servers();
|
||||||
|
for (const auto& server : servers) {
|
||||||
|
std::cout << server << std::endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
} else if (cmd == "autocomplete_list_services") {
|
||||||
|
if (argc < 3) {
|
||||||
|
std::cerr << "Error: autocomplete_list_services requires a server name" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
auto services = dropshell::autocomplete_list_services(argv[2]);
|
||||||
|
for (const auto& service : services) {
|
||||||
|
std::cout << service << std::endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
std::cerr << "Error: Unknown command '" << cmd << "'" << std::endl;
|
std::cerr << "Error: Unknown command '" << cmd << "'" << std::endl;
|
||||||
dropshell::print_help(desc);
|
dropshell::print_help(desc);
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
// read the _server.env file and provide a class to access the variables
|
// read the _server.env file and provide a class to access the variables
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#ifndef __SERVER_ENV_HPP
|
||||||
|
#define __SERVER_ENV_HPP
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
@ -35,3 +38,5 @@ class server_env {
|
|||||||
|
|
||||||
} // namespace dropshell
|
} // namespace dropshell
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __SERVER_ENV_HPP
|
Loading…
x
Reference in New Issue
Block a user