Program Listing for File editorObject.cpp
↰ Return to documentation for file (include\MainObjects\editorObject\editorObject.cpp
)
#include "editorObject.hpp"
trackdata
editorObject::makeTrackData(const UNSANITIZED &trackTitle,
std::unordered_map<SANITIZED, SANITIZED> &titles)
{
trackdata td;
auto mixRendered = E_obj->mixHandle.second.render();
auto mixData = mixRendered->Wp->getDatas();
for (unsigned long long i = 0; i < mixData.size(); ++i) {
if (mixData[i].getType() == TypeEnum::LOAD) {
auto first = SANITIZED(mixData[i].getFirst().cStr());
auto second = SANITIZED(mixData[i].getSecond().cStr());
titles.insert(std::pair(first, second));
}
}
auto safeTitle = PDJE_Name_Sanitizer::sanitizeFileName(trackTitle);
if (!safeTitle) {
critlog("failed to sanitize title. from editorObject makeTrackData. "
"trackTitle: ");
critlog(trackTitle);
}
td.trackTitle = safeTitle.value();
td.mixBinary = mixRendered->out();
td.noteBinary = E_obj->noteHandle.second.render()->out();
for (auto &i : titles) {
td.cachedMixList += (i.first + ",");
}
if (!titles.empty()) {
td.cachedMixList.pop_back();
}
return std::move(td);
}
void
editorObject::demoPlayInit(std::shared_ptr<audioPlayer> &player,
unsigned int frameBufferSize,
const UNSANITIZED &trackTitle)
{
if (player) {
player.reset();
}
trackdata tdtemp(trackTitle);
auto searchedTd = projectLocalDB->GetBuildedProject() << tdtemp;
if (!searchedTd.has_value()) {
critlog("failed to search trackdata from project local database. from "
"editorObject demoPlayInit. trackTitle: ");
critlog(trackTitle);
return;
}
if (searchedTd->empty()) {
warnlog("cannot find trackdata from project local database. from "
"editorObject demoPlayInit. trackTitle: ");
warnlog(trackTitle);
return;
}
player = std::make_shared<audioPlayer>(projectLocalDB->GetBuildedProject(),
searchedTd->front(),
frameBufferSize,
true);
}
DONT_SANITIZE
editorObject::DESTROY_PROJECT()
{
try {
E_obj.reset();
projectLocalDB.reset();
auto deletedAmount = fs::remove_all(projectRoot);
if (deletedAmount < 1) {
return "DELETED NOTHING";
} else {
return "COMPLETE";
}
} catch (const std::exception &e) {
critlog("failed to destroy project. from editorObject DESTROY_PROJECT "
"ErrException: ");
critlog(e.what());
return e.what();
}
}
bool
editorObject::ConfigNewMusic(const UNSANITIZED &NewMusicName,
const UNSANITIZED &composer,
const fs::path &musicPath,
const DONT_SANITIZE &firstBeat)
{
auto safeMus = PDJE_Name_Sanitizer::sanitizeFileName(NewMusicName);
auto safeComposer = PDJE_Name_Sanitizer::sanitizeFileName(composer);
if (!safeMus.has_value() || !safeComposer.has_value()) {
critlog("failed to sanitize in editorObject ConfigNewMusic. datas: ");
critlog(NewMusicName);
critlog(composer);
return false;
}
fs::path tempDataPath;
if (E_obj->AddMusicConfig(safeMus.value(), tempDataPath)) {
E_obj->musicHandle.back().jsonh[PDJE_JSON_TITLE] = safeMus.value();
E_obj->musicHandle.back().jsonh[PDJE_JSON_COMPOSER] = safeComposer.value();
E_obj->musicHandle.back().dataPath = tempDataPath;
try {
if (!fs::exists(musicPath)) {
critlog("music path does not exists. from editorObject "
"ConfigNewMusic. path: ");
critlog(musicPath.generic_string());
return false;
}
fs::path absPath;
if (musicPath.is_absolute()) {
absPath = musicPath.lexically_normal();
} else {
absPath = fs::absolute(musicPath).lexically_normal();
}
E_obj->musicHandle.back().jsonh[PDJE_JSON_PATH] = absPath;
} catch (const std::exception &e) {
critlog("something failed in editorObject ConfigNewMusic. "
"ErrException: ");
critlog(e.what());
return false;
}
E_obj->musicHandle.back().jsonh[PDJE_JSON_FIRST_BEAT] = firstBeat;
return true;
} else {
critlog("failed to add music config. from editorObject ConfigNewMusic. "
"musicName: ");
critlog(NewMusicName);
return false;
}
}
bool
editorObject::Open(const fs::path &projectPath)
{
projectRoot = projectPath;
mixFilePath = projectPath / "Mixes" / "mixmetadata.PDJE";
noteFilePath = projectPath / "Notes" / "notemetadata.PDJE";
kvFilePath = projectPath / "KeyValues" / "keyvaluemetadata.PDJE";
musicFileRootPath = projectPath / "Musics";
projectLocalDB.emplace();
return E_obj->openProject(projectPath) && projectLocalDB->Open(projectPath);
}
bool
editorObject::pushToRootDB(litedb &ROOTDB, const UNSANITIZED &trackTitleToPush)
{
TITLE_COMPOSER tcData;
auto td = makeTrackData(trackTitleToPush, tcData);
if (!(ROOTDB <= td)) {
critlog("failed to push trackdata to root database. from editorObject "
"pushToRootDB. trackTitle: ");
critlog(trackTitleToPush);
return false;
}
for (auto &tcTemp : tcData) {
UNSANITIZED musTitle = PDJE_Name_Sanitizer::getFileName(tcTemp.first);
UNSANITIZED musComposer =
PDJE_Name_Sanitizer::getFileName(tcTemp.second);
pushToRootDB(ROOTDB, musTitle, musComposer);
}
return true;
}
bool
editorObject::pushToRootDB(litedb &ROOTDB,
const UNSANITIZED &musicTitle,
const UNSANITIZED &musicComposer)
{
auto fromProjectSearchQuery = musdata(musicTitle, musicComposer);
auto searched = projectLocalDB->GetBuildedProject()
<< fromProjectSearchQuery;
if (!searched.has_value()) {
critlog("searched has no value. from editorObject pushToRootDB. "
"musicTitle & composer: ");
critlog(musicTitle);
critlog(musicComposer);
return false;
}
if (searched->empty()) {
warnlog("searched is empty. from editorObject pushToRootDB. musicTitle "
"& composer: ");
warnlog(musicTitle);
warnlog(musicComposer);
return false;
}
auto checkRoot = ROOTDB << searched->front();
if (checkRoot.has_value()) {
if (!checkRoot->empty()) {
warnlog("checkRoot not empty. from editorObject pushToRootDB. "
"musicTitle & composer: ");
warnlog(musicTitle);
warnlog(musicComposer);
return false;
}
} else {
critlog("checkRoot has no value. from editorObject pushToRootDB. "
"musicTitle & composer: ");
critlog(musicTitle);
critlog(musicComposer);
return false;
}
auto resultToInsert = searched->front();
try {
auto Key =
PDJE_Name_Sanitizer::sanitizeFileName(musicTitle + musicComposer);
if (!Key) {
critlog("failed to sanitize musicTitle + musicComposer. from "
"editorObject pushToRootDB. musicTitle & composer: ");
critlog(musicTitle);
critlog(musicComposer);
return false;
}
resultToInsert.musicPath = Key.value();
auto originMusicPath = fs::path(searched->front().musicPath);
if (!fs::exists(originMusicPath)) {
critlog("origin music path does not exists. from editorObject "
"pushToRootDB. path: ");
critlog(originMusicPath.generic_string());
return false;
}
std::ifstream musicFile(originMusicPath, std::ios::binary);
std::vector<uint8_t> fileData{ std::istreambuf_iterator<char>(
musicFile),
std::istreambuf_iterator<char>() };
std::string MusBin(reinterpret_cast<const char *>(fileData.data()),
fileData.size());
if (!ROOTDB.KVPut(resultToInsert.musicPath, MusBin)) {
critlog(
"KVPUT failed. from editorObject pushToRootDB. musicPath: ");
critlog(resultToInsert.musicPath);
return false;
}
} catch (std::exception &e) {
critlog(
"something failed in editorObject pushToRootDB. ErrException: ");
critlog(e.what());
return false;
}
if (!(ROOTDB <= resultToInsert)) {
critlog("failed to push musicdata to root database. from editorObject "
"pushToRootDB. musicTitle & composer: ");
critlog(musicTitle);
critlog(musicComposer);
return false;
}
return true;
}