Program Listing for File editor.cpp
↰ Return to documentation for file (include/editor/editor.cpp
)
#include "editor.hpp"
#include "PDJE_LOG_SETTER.hpp"
#include <filesystem>
namespace fs = std::filesystem;
bool
PDJE_Editor::openProject(const fs::path &projectPath)
{
pt = projectPath;
mixp = pt / "Mixes";
notep = pt / "Notes";
musicp = pt / "Musics";
kvp = pt / "KeyValues";
if (!fs::exists(pt) || !fs::is_directory(pt)) {
fs::create_directory(pt);
fs::create_directory(mixp);
fs::create_directory(notep);
fs::create_directory(musicp);
fs::create_directory(kvp);
if (!fs::exists(pt) || !fs::is_directory(pt) || !fs::exists(mixp) ||
!fs::is_directory(mixp) || !fs::exists(notep) ||
!fs::is_directory(notep) || !fs::exists(kvp) ||
!fs::is_directory(kvp) || !fs::exists(musicp) ||
!fs::is_directory(musicp)) {
critlog("some path is not created. from PDJE_Editor openProject. "
"printing path.");
critlog("editor project root: ");
critlog(pt.generic_string());
critlog("mix data directory: ");
critlog(mixp.generic_string());
critlog("note data directory: ");
critlog(notep.generic_string());
critlog("music data directory: ");
critlog(musicp.generic_string());
critlog("key value data directory: ");
critlog(kvp.generic_string());
return false;
}
}
if (!mixHandle.first->Open(mixp) || !mixHandle.second.load(mixp) ||
!KVHandler.first->Open(kvp) || !KVHandler.second.load(kvp) ||
!noteHandle.first->Open(notep) || !noteHandle.second.load(notep)) {
critlog("failed to open & load some project from PDJE_Editor "
"openProject. printing path");
critlog("editor project root: ");
critlog(pt.generic_string());
critlog("mix data directory: ");
critlog(mixp.generic_string());
critlog("note data directory: ");
critlog(notep.generic_string());
critlog("music data directory: ");
critlog(musicp.generic_string());
critlog("key value data directory: ");
critlog(kvp.generic_string());
return false;
}
for (const auto &musicSubpath : fs::directory_iterator(musicp)) {
if (fs::is_directory(musicSubpath)) {
musicHandle.emplace_back(name, email);
musicHandle.back().musicName =
musicSubpath.path().filename().string();
if (!musicHandle.back().gith->Open(musicSubpath.path()) ||
!musicHandle.back().jsonh.load(musicSubpath.path())) {
critlog("failed to open & load some music configure project "
"from PDJE_Editor openProject. musicPath: ");
auto logPath = musicSubpath.path();
critlog(logPath.generic_string());
return false;
}
}
}
return true;
}
#include <random>
bool
PDJE_Editor::AddMusicConfig(const SANITIZED &NewMusicName, fs::path &DataPath)
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<unsigned int> randomFilename(
std::numeric_limits<unsigned int>::min(),
std::numeric_limits<unsigned int>::max());
std::optional<DONT_SANITIZE> mfilename;
for (int TRY_COUNT = 0; TRY_COUNT < 50; ++TRY_COUNT) {
DONT_SANITIZE tempFilename = std::to_string(randomFilename(gen));
if (!fs::exists(musicp / fs::path(tempFilename))) {
mfilename = tempFilename;
break;
}
}
if (!mfilename.has_value()) {
warnlog(
"failed to make filename. this could be error or we have terrible "
"luck. try again or fix here. from PDJE_Editor AddMusicConfig.");
return false;
}
DataPath = musicp / fs::path(mfilename.value());
try {
if (fs::create_directory(DataPath)) {
musicHandle.emplace_back(name, email);
musicHandle.back().musicName = NewMusicName;
if (!musicHandle.back().gith->Open(DataPath) ||
!musicHandle.back().jsonh.load(DataPath)) {
fs::remove_all(DataPath);
critlog("failed to init git or json. from PDJE_Editor "
"AddMusicConfig.");
return false;
} else
return true;
}
} catch (const std::exception &e) {
critlog("something wrong on configure music. from PDJE_Editor "
"AddMusicConfig. ErrException: ");
critlog(e.what());
return false;
}
critlog("failed. on configure music. from PDJE_Editor AddMusicConfig. "
"please check logs");
return false;
}