#ifndef ASIDEFILECLASS_H #define ASIDEFILECLASS_H #include #include #include "CCFile.h" #include "CCList.h" class AsideFileClass { inline static CCMap> AsideFileList; inline static CCMutex _Mutex; public: static void AddData(const AsideFileClass data) { CTL::AutoLock lock(_Mutex,[&]() { AsideFileList[data.DirPath].emplace_back(data); }); } static void UpData(const CTL::String &data) { const CCVar A = GetList(data); CTL::AutoLock lock(_Mutex,[&]() { AsideFileList[data] = A; }); } static void DeleteData(const AsideFileClass data) { CTL::AutoLock lock(_Mutex,[&]() { const CCFile file(data.Path); if (bool F = file.Delete()) { const CCVar A = GetList(data.DirPath); AsideFileList[data.DirPath] = A; } }); } static CCVector GetData(const CTL::String& DirPath) { CCVar List = AsideFileList[DirPath]; if (List.empty()) { UpData(DirPath); List = AsideFileList[DirPath]; } CCVector ListB; for (CCVar & i : List) { JSON json = i.GetJson(); ListB.emplace_back(json); } return ListB; } private: static CCList GetList(const CTL::String& DirPath) { CCList ListA; const CCVar L = CCFile::GetDirectoryContents(DirPath); for (const CCVar& List = L; const auto &[Name, Size, IsDirectory, LastWriteTime] : List) { AsideFileClass data; data.name = Name; data.type = IsDirectory ? 1 : 0; if (data.type != 1) { data.size = Size; } data.DirPath = DirPath; ListA.emplace_back(data); } return ListA; } public: CTL::String name; CTL::String Path; CTL::String DirPath; int size = 0; int type = 0; //----------------------------------------------------------------------------------- JSON GetJson() { JSON json; json["name"] = name; json["size"] = size; json["type"] = type; json["DirPath"] = DirPath; json["Path"] = Path; return json; } }; #endif