#pragma once #include #include #include #include #include #include #include #include #include #include #include #include "logger/logger.h" class Settings { public: enum Action { convert, help, config, _actionsSize }; enum Type { mp3, _typesSize }; Settings(int argc, char **argv); std::string getInput() const; std::string getOutput() const; std::string getConfigPath() const; bool isConfigDefault() const; Logger::Severity getLogLevel() const; Type getType() const; Action getAction() const; unsigned int getThreads() const; bool readConfigFile(); void readConfigLine(const std::string& line); std::string defaultConfig() const; static Action stringToAction(const std::string& source); static Action stringToAction(const std::string_view& source); static Type stringToType(const std::string& source); private: void parseArguments(); static void strip(std::string& line); static void stripComment(std::string& line); static std::string resolvePath(const std::string& line); private: std::vector arguments; std::optional action; std::optional outputType; std::optional input; std::optional output; std::optional logLevel; std::optional configPath; std::optional threads; };