reorganized the project, some idea of how to handle settings
This commit is contained in:
parent
e4cc5e8d0e
commit
870842f63d
@ -19,15 +19,9 @@ find_package(JPEG REQUIRED)
|
|||||||
pkg_check_modules(LAME REQUIRED IMPORTED_TARGET lame)
|
pkg_check_modules(LAME REQUIRED IMPORTED_TARGET lame)
|
||||||
pkg_check_modules(TAGLIB REQUIRED IMPORTED_TARGET taglib)
|
pkg_check_modules(TAGLIB REQUIRED IMPORTED_TARGET taglib)
|
||||||
|
|
||||||
add_executable(mlc
|
add_executable(mlc)
|
||||||
main.cpp
|
|
||||||
help.cpp
|
add_subdirectory(src)
|
||||||
decoded.cpp
|
|
||||||
flactomp3.cpp
|
|
||||||
collection.cpp
|
|
||||||
taskmanager.cpp
|
|
||||||
loggable.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(mlc
|
target_link_libraries(mlc
|
||||||
FLAC::FLAC
|
FLAC::FLAC
|
||||||
|
22
src/CMakeLists.txt
Normal file
22
src/CMakeLists.txt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
set(SOURCES
|
||||||
|
main.cpp
|
||||||
|
help.cpp
|
||||||
|
decoded.cpp
|
||||||
|
flactomp3.cpp
|
||||||
|
collection.cpp
|
||||||
|
taskmanager.cpp
|
||||||
|
loggable.cpp
|
||||||
|
settings.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set(HEADERS
|
||||||
|
help.h
|
||||||
|
decoded.h
|
||||||
|
flactomp3.h
|
||||||
|
collection.h
|
||||||
|
taskmanager.h
|
||||||
|
loggable.h
|
||||||
|
settings.h
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(${PROJECT_NAME} PRIVATE ${SOURCES})
|
@ -11,17 +11,14 @@ Collection::Collection(const std::string& path, TaskManager* tm) :
|
|||||||
countMusical(0),
|
countMusical(0),
|
||||||
counted(false),
|
counted(false),
|
||||||
taskManager(tm)
|
taskManager(tm)
|
||||||
{
|
{}
|
||||||
}
|
|
||||||
|
|
||||||
Collection::Collection(const std::filesystem::path& path, TaskManager* tm):
|
Collection::Collection(const std::filesystem::path& path, TaskManager* tm):
|
||||||
path(fs::canonical(path)),
|
path(fs::canonical(path)),
|
||||||
countMusical(0),
|
countMusical(0),
|
||||||
counted(false),
|
counted(false),
|
||||||
taskManager(tm)
|
taskManager(tm)
|
||||||
{
|
{}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Collection::~Collection() {
|
Collection::~Collection() {
|
||||||
}
|
}
|
@ -9,27 +9,32 @@
|
|||||||
#include "help.h"
|
#include "help.h"
|
||||||
#include "collection.h"
|
#include "collection.h"
|
||||||
#include "taskmanager.h"
|
#include "taskmanager.h"
|
||||||
|
#include "settings.h"
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
if (argc < 3) {
|
Settings settings(argc, argv);
|
||||||
std::cout << "Insufficient amount of arguments, launch with \"--help\" argument to see usage" << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::string firstArgument(argv[1]);
|
switch (settings.getAction()) {
|
||||||
if (firstArgument == "--help") {
|
case Settings::help:
|
||||||
printHelp();
|
printHelp();
|
||||||
return 0;
|
return 0;
|
||||||
|
case Settings::printConfig:
|
||||||
|
//printHelp();
|
||||||
|
return 0;
|
||||||
|
case Settings::convert:
|
||||||
|
std::cout << "Converting..." << std::endl;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
std::cout << "Error in action" << std::endl;
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string secondArgument(argv[2]);
|
|
||||||
|
|
||||||
TaskManager taskManager;
|
TaskManager taskManager;
|
||||||
taskManager.start();
|
taskManager.start();
|
||||||
|
|
||||||
std::chrono::time_point start = std::chrono::system_clock::now();
|
std::chrono::time_point start = std::chrono::system_clock::now();
|
||||||
Collection collection(firstArgument, &taskManager);
|
Collection collection(settings.getInput(), &taskManager);
|
||||||
collection.convert(secondArgument);
|
collection.convert(settings.getOutput());
|
||||||
|
|
||||||
taskManager.printProgress();
|
taskManager.printProgress();
|
||||||
taskManager.wait();
|
taskManager.wait();
|
84
src/settings.cpp
Normal file
84
src/settings.cpp
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#include "settings.h"
|
||||||
|
|
||||||
|
constexpr std::array<std::string_view, Settings::_actionsSize> actions({
|
||||||
|
"convert",
|
||||||
|
"help",
|
||||||
|
"printConfig"
|
||||||
|
});
|
||||||
|
|
||||||
|
Settings::Settings(int argc, char ** argv):
|
||||||
|
arguments(),
|
||||||
|
action(std::nullopt),
|
||||||
|
input(std::nullopt),
|
||||||
|
output(std::nullopt),
|
||||||
|
logLevel(std::nullopt)
|
||||||
|
{
|
||||||
|
for (int i = 1; i < argc; ++i)
|
||||||
|
arguments.push_back(argv[i]);
|
||||||
|
|
||||||
|
parseArguments();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Settings::parseArguments() {
|
||||||
|
for (int i = 0; i < arguments.size(); ++i) {
|
||||||
|
const std::string_view& arg = arguments[i];
|
||||||
|
if (i == 0) {
|
||||||
|
std::string_view act = stripFlags(arg);
|
||||||
|
int dist = std::distance(actions.begin(), std::find(actions.begin(), actions.end(), act));
|
||||||
|
if (dist < _actionsSize) {
|
||||||
|
action = static_cast<Settings::Action>(dist);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getAction() == convert) {
|
||||||
|
if (!input.has_value()) {
|
||||||
|
input = arg;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!output.has_value()) {
|
||||||
|
input = arg;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings::Action Settings::getAction() const {
|
||||||
|
if (action.has_value())
|
||||||
|
return action.value();
|
||||||
|
else
|
||||||
|
return convert;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Settings::getInput() const {
|
||||||
|
if (input.has_value())
|
||||||
|
return input.value();
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Settings::getOutput() const {
|
||||||
|
if (output.has_value())
|
||||||
|
return output.value();
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
Loggable::Severity Settings::getLogLevel() const {
|
||||||
|
if (logLevel.has_value())
|
||||||
|
return logLevel.value();
|
||||||
|
else
|
||||||
|
return Loggable::info;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string_view Settings::stripFlags(const std::string_view& option) {
|
||||||
|
if (option[0] == '-') {
|
||||||
|
if (option[1] == '-')
|
||||||
|
return option.substr(2);
|
||||||
|
|
||||||
|
return option.substr(1);
|
||||||
|
}
|
||||||
|
return option;
|
||||||
|
}
|
39
src/settings.h
Normal file
39
src/settings.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <string_view>
|
||||||
|
#include <optional>
|
||||||
|
#include <vector>
|
||||||
|
#include <array>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include "loggable.h"
|
||||||
|
|
||||||
|
class Settings {
|
||||||
|
public:
|
||||||
|
enum Action {
|
||||||
|
convert,
|
||||||
|
help,
|
||||||
|
printConfig,
|
||||||
|
_actionsSize
|
||||||
|
};
|
||||||
|
|
||||||
|
Settings(int argc, char **argv);
|
||||||
|
|
||||||
|
std::string getInput() const;
|
||||||
|
std::string getOutput() const;
|
||||||
|
Loggable::Severity getLogLevel() const;
|
||||||
|
Action getAction() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void parseArguments();
|
||||||
|
|
||||||
|
static std::string_view stripFlags(const std::string_view& option);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<std::string_view> arguments;
|
||||||
|
std::optional<Action> action;
|
||||||
|
std::optional<std::string> input;
|
||||||
|
std::optional<std::string> output;
|
||||||
|
std::optional<Loggable::Severity> logLevel;
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user