#ifndef LOTRO_DAT_LIBRARY_DATSTATUS_H #define LOTRO_DAT_LIBRARY_DATSTATUS_H #include #include #include namespace LOTRO_DAT { class DatFile; /*! * \brief Модуль статуса dat-файла * \author Gi1dor * \date 06.07.2018 * * Класс для хранения информации о выполняемых процессах в dat-файле. Позволяет отслеживать прогресс выполнения * во время операций создания резервных копий, применения патчей или извлечения файлов * * \warning Объекты этого класса не должны создаваться отдельно! Созданием и управлением ими занимается класс DatFile */ class DatStatus { public: enum DAT_STATUS: int { E_INITIALISING, E_EXTRACTING, E_PATCHING, E_COMMITING, E_BACKUP_CREATING, E_BACKUP_RESTORING, E_BACKUP_REMOVING, E_GATHERING_INFO, E_FREE }; using Callback = std::function; // Callback arguments: status, percentage, finished_items, total_items, debug message DatStatus() = delete; DatStatus(const DatStatus &other) = delete; DatStatus &operator=(const DatStatus &other) = delete; ~DatStatus() = default; explicit DatStatus(DatFile *datFilePtr); void SetStatus(DAT_STATUS status); void SetFinishedParts(unsigned long long finished_parts); void SetTotalParts(unsigned long long total_parts); void SetDebugMessage(const std::string &message); DAT_STATUS GetStatus(); double GetPercentage(); unsigned long long GetFinishedParts(); unsigned long long GetTotalParts(); std::string GetDebugMessage(); void SetDefaultStatus(); bool CheckIfNotPatched(); void AddStatusChangedCallbackFunction(Callback* func); void RemoveStatusChangedCallbackFunction(Callback* func); bool IsFunctionRegisteredAsCallback(Callback* func); void EraseAllCallbackFunctions(); private: DatFile *dat = nullptr; DAT_STATUS status_ = DAT_STATUS::E_FREE; unsigned long long finished_parts_ = 0; unsigned long long total_parts_ = 0; double percentage_ = 0; std::string debug_message_ = ""; std::set callback_functions_; }; } #endif //LOTRO_DAT_LIBRARY_DATSTATUS_H