Program Listing for File render.cpp

Return to documentation for file (include/MainObjects/editorObject/render.cpp)

#include "editorObject.hpp"
bool
editorObject::render(const UNSANITIZED& trackTitle, litedb& ROOTDB)
{
    std::unordered_map<SANITIZED, SANITIZED> titles;
    auto td = makeTrackData(trackTitle, titles);

    std::vector<musdata> mds;
    for(auto& i : E_obj->musicHandle){
        mds.emplace_back();

        auto rendered = i.jsonh.render();
        mds.back().title = i.musicName;
        auto rdout = rendered->out();
        mds.back().bpmBinary.assign(rdout.begin(), rdout.end());
        auto tempCOMPOSER   = i.jsonh["COMPOSER"    ].get<SANITIZED>();
        auto tempPATH       = i.jsonh["PATH"        ].get<SANITIZED>();
        auto tempFIRST_BAR  = i.jsonh["FIRST_BAR"   ].get<DONT_SANITIZE>();

        mds.back().composer     = (tempCOMPOSER);
        mds.back().musicPath    = (tempPATH);
        mds.back().firstBar     = (tempFIRST_BAR);
        try{
            mds.back().bpm = std::stod(rendered->Wp->getDatas()[0].getBpm().cStr());
        }
        catch(std::exception& e){
            critlog("failed to convert bpm to double. from editorObject render. ErrException: ");
            critlog(e.what());
            critlog("music name: ");
            critlog(i.musicName);
            continue;
        }
        titles[i.musicName] = "";
    }

    for(auto& i : titles){
        if(i.second != ""){

            auto findFromRoot = musdata();
            findFromRoot.title = i.first;
            findFromRoot.composer = i.second;
            auto mus = ROOTDB << findFromRoot;
            if(mus.has_value()){
                if(mus->empty()) continue;
                musdata fromRoot = mus->front();
                try{
                    fromRoot.musicPath =
                    fs::relative(
                        fs::absolute(ROOTDB.getRoot().parent_path() / fromRoot.musicPath),
                        projectRoot
                    ).string();
                }
                catch(std::exception& e){
                    critlog("failed to convert relative path. from editorObject render. ErrException: ");
                    critlog(e.what());
                    critlog("music path: ");
                    critlog(fromRoot.musicPath);
                    critlog("project root: ");
                    critlog(projectRoot.generic_string());
                    return false;
                }
                mds.push_back(fromRoot);
            }
        }
    }

    return projectLocalDB->BuildProject(td, mds);
}