Program Listing for File editor.cpp

Return to documentation for file (include/editor/editor.cpp)

#include "editor.hpp"
#include <filesystem>
#include "PDJE_LOG_SETTER.hpp"

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;
}