2016-10-02 21:59:28 +02:00
|
|
|
#include "./args.h"
|
|
|
|
|
2017-09-17 21:49:09 +02:00
|
|
|
#include "resources/config.h"
|
|
|
|
|
2016-10-02 21:59:28 +02:00
|
|
|
namespace Cli {
|
|
|
|
|
2017-05-01 03:34:43 +02:00
|
|
|
Args::Args()
|
|
|
|
: help(parser)
|
|
|
|
, status("status", 's', "shows the status")
|
|
|
|
, log("log", 'l', "shows the Syncthing log")
|
|
|
|
, stop("stop", '\0', "stops Syncthing")
|
|
|
|
, restart("restart", '\0', "restarts Syncthing")
|
|
|
|
, rescan("rescan", 'r', "rescans the specified directories")
|
|
|
|
, rescanAll("rescan-all", '\0', "rescans all directories")
|
|
|
|
, pause("pause", '\0', "pauses the specified devices")
|
|
|
|
, pauseAllDevs("pause-all-devs", '\0', "pauses all devices")
|
|
|
|
, pauseAllDirs("pause-all-dirs", '\0', "pauses all directories")
|
|
|
|
, resume("resume", '\0', "resumes the specified devices")
|
|
|
|
, resumeAllDevs("resume-all-devs", '\0', "resumes all devices")
|
|
|
|
, resumeAllDirs("resume-all-dirs", '\0', "resumes all directories")
|
|
|
|
, waitForIdle("wait-for-idle", 'w', "waits until the specified dirs/devs are idling")
|
|
|
|
, pwd("pwd", 'p', "operates in the current working directory")
|
|
|
|
, statusPwd("status", 's', "prints the status of the current working directory")
|
|
|
|
, rescanPwd("rescan", 'r', "rescans the current working directory")
|
|
|
|
, pausePwd("pause", 'p', "pauses the current working directory")
|
|
|
|
, resumePwd("resume", '\0', "resumes the current working directory")
|
2017-09-17 21:49:09 +02:00
|
|
|
, statusDir("dir", 'd', "specifies the directories, default is all dirs", { "ID" })
|
|
|
|
, statusDev("dev", '\0', "specifies the devices, default is all devs", { "ID" })
|
2017-05-01 03:34:43 +02:00
|
|
|
, pauseDir("dir", 'd', "specifies the directories", { "ID" })
|
|
|
|
, pauseDev("dev", '\0', "specifies the devices", { "ID" })
|
2017-09-17 21:49:09 +02:00
|
|
|
, configFile("config-file", 'f', "specifies the Syncthing config file to read API key and URL from, when not explicitely specified", { "path" })
|
2017-05-01 03:34:43 +02:00
|
|
|
, apiKey("api-key", 'k', "specifies the API key", { "key" })
|
|
|
|
, url("url", 'u', "specifies the Syncthing URL, default is http://localhost:8080", { "URL" })
|
|
|
|
, credentials("credentials", 'c', "specifies user name and password", { "user name", "password" })
|
|
|
|
, certificate("cert", '\0', "specifies the certificate used by the Syncthing instance", { "path" })
|
2016-10-02 21:59:28 +02:00
|
|
|
{
|
2017-05-01 03:34:43 +02:00
|
|
|
for (Argument *arg : { &statusDir, &statusDev, &pauseDev, &pauseDir }) {
|
2017-09-17 20:53:30 +02:00
|
|
|
arg->setConstraints(0, Argument::varValueCount);
|
2017-02-23 17:47:19 +01:00
|
|
|
}
|
2017-05-01 03:34:43 +02:00
|
|
|
status.setSubArguments({ &statusDir, &statusDev });
|
2017-09-17 21:49:09 +02:00
|
|
|
status.setExample(PROJECT_NAME " status # shows all dirs and devs\n" PROJECT_NAME " status --dir dir1 --dir dir2 --dev dev1 --dev dev2");
|
2017-05-01 03:34:43 +02:00
|
|
|
waitForIdle.setSubArguments({ &statusDir, &statusDev });
|
2017-09-17 21:49:09 +02:00
|
|
|
waitForIdle.setExample(PROJECT_NAME " wait-for-idle --dir dir1 --dir dir2 --dev dev1 --dev dev2");
|
2017-05-01 03:34:43 +02:00
|
|
|
pwd.setSubArguments({ &statusPwd, &rescanPwd, &pausePwd, &resumePwd });
|
2016-10-02 21:59:28 +02:00
|
|
|
|
2017-05-01 03:34:43 +02:00
|
|
|
rescan.setValueNames({ "dir ID" });
|
2017-09-17 20:53:30 +02:00
|
|
|
rescan.setRequiredValueCount(Argument::varValueCount);
|
2017-09-17 21:49:09 +02:00
|
|
|
rescan.setExample(PROJECT_NAME " rescan dir1 dir2 dir4 dir5");
|
2017-05-01 03:34:43 +02:00
|
|
|
pause.setSubArguments({ &pauseDir, &pauseDev });
|
2017-09-17 21:49:09 +02:00
|
|
|
pause.setExample(PROJECT_NAME " pause --dir dir1 --dir dir2 --dev dev1 --dev dev2");
|
2017-05-01 03:34:43 +02:00
|
|
|
resume.setSubArguments({ &pauseDir, &pauseDev });
|
2017-09-17 21:49:09 +02:00
|
|
|
resume.setExample(PROJECT_NAME " resume --dir dir1 --dir dir2 --dev dev1 --dev dev2");
|
|
|
|
|
|
|
|
configFile.setExample(PROJECT_NAME " status --dir dir1 --config-file ~/.config/syncthing/config.xml");
|
|
|
|
credentials.setExample(PROJECT_NAME " status --dir dir1 --credentials name supersecret");
|
2016-10-02 21:59:28 +02:00
|
|
|
|
2017-05-01 03:34:43 +02:00
|
|
|
parser.setMainArguments({ &status, &log, &stop, &restart, &rescan, &rescanAll, &pause, &pauseAllDevs, &pauseAllDirs, &resume, &resumeAllDevs,
|
|
|
|
&resumeAllDirs, &waitForIdle, &pwd, &configFile, &apiKey, &url, &credentials, &certificate, &help });
|
2016-10-02 21:59:28 +02:00
|
|
|
|
|
|
|
// allow setting default values via environment
|
|
|
|
configFile.setEnvironmentVariable("SYNCTHING_CTL_CONFIG_FILE");
|
|
|
|
apiKey.setEnvironmentVariable("SYNCTHING_CTL_API_KEY");
|
|
|
|
url.setEnvironmentVariable("SYNCTHING_CTL_URL");
|
|
|
|
certificate.setEnvironmentVariable("SYNCTHING_CTL_CERTIFICATE");
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace Cli
|