Program Listing for File PDJE_interface.cpp
↰ Return to documentation for file (include/interface/PDJE_interface.cpp
)
#include "PDJE_interface.hpp"
#include "PDJE_LOG_SETTER.hpp"
PDJE::PDJE(const fs::path& rootPath)
{
startlog();
DBROOT = std::make_shared<litedb>();
DBROOT->openDB(rootPath);
}
TRACK_VEC
PDJE::SearchTrack(const UNSANITIZED& Title)
{
trackdata td;
auto safeTitle = PDJE_Name_Sanitizer::sanitizeFileName(Title);
if(!safeTitle){
critlog("failed to make sanitized filename in PDJE SearchTrack. Errtitle: ");
critlog(Title);
return TRACK_VEC();
}
td.trackTitle = safeTitle.value();
auto dbres = (*DBROOT) << td;
if(dbres.has_value()){
return dbres.value();
}
else{
warnlog("failed to find trackdata from PDJE database. Errtitle: ");
warnlog(Title);
return TRACK_VEC();
}
}
MUS_VEC
PDJE::SearchMusic(
const UNSANITIZED& Title,
const UNSANITIZED& composer,
const double bpm)
{
musdata md;
auto safeTitle = PDJE_Name_Sanitizer::sanitizeFileName(Title);
auto safeComposer = PDJE_Name_Sanitizer::sanitizeFileName(composer);
if(!safeTitle || !safeComposer){
critlog("failed to sanitize filename in PDJE SearchMusic. Errs: ");
critlog(Title);
critlog(composer);
return MUS_VEC();
}
md.title = safeTitle.value();
md.composer = safeComposer.value();
md.bpm = bpm;
auto dbres = (*DBROOT) << md;
if(dbres.has_value()){
return dbres.value();
}
else{
warnlog("failed to find music from PDJE database. ErrTitle: ");
warnlog(Title);
warnlog(composer);
return MUS_VEC();
}
}
bool
PDJE::InitPlayer(
PLAY_MODE mode,
trackdata& td,
const unsigned int FrameBufferSize)
{
switch (mode)
{
case PLAY_MODE::FULL_PRE_RENDER:
player =
std::make_shared<audioPlayer>(
(*DBROOT),
td,
FrameBufferSize,
false
);
break;
case PLAY_MODE::HYBRID_RENDER:
player =
std::make_shared<audioPlayer>(
(*DBROOT),
td,
FrameBufferSize,
true
);
break;
case PLAY_MODE::FULL_MANUAL_RENDER:
player =
std::make_shared<audioPlayer>(
FrameBufferSize
);
break;
default:
break;
}
if(!player){
critlog("failed to init player on PDJE initPlayer.");
return false;
}
else{
if(player->STATUS != "OK"){
critlog("PDJE initPlayer failed. STATUS not OK. ErrStatus: ");
critlog(player->STATUS);
return false;
}
else{
return true;
}
}
}
bool
PDJE::GetNoteObjects(
trackdata& td,
OBJ_SETTER_CALLBACK& ObjectSetCallback)
{
CapReader<NoteBinaryCapnpData> notereader;
CapReader<MixBinaryCapnpData> mixreader;
if( !notereader.open(td.noteBinary)){
warnlog("failed to read notebinary from trackdata from PDJE GetNoteObjects");
return false;
}
if(!mixreader.open(td.mixBinary)){
warnlog("failed to read mixBinary from trackdata from PDJE GetNoteObjects");
return false;
}
auto noteTrans = new NoteTranslator();
auto mixTrans = new MixTranslator();
if(mixTrans->bpms.has_value()){
noteTrans->Read(
notereader,
mixTrans->bpms.value().bpmVec,
ObjectSetCallback);
}
else{
critlog("failed to emplace optional object from PDJE GetNoteObjects");
delete noteTrans;
delete mixTrans;
return false;
}
delete noteTrans;
delete mixTrans;
return true;
}
bool
PDJE::InitEditor(
const DONT_SANITIZE &auth_name,
const DONT_SANITIZE &auth_email,
const fs::path& projectRoot)
{
editor = std::make_shared<editorObject>(auth_name, auth_email);
return editor->Open(projectRoot);
}