#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 }; DatStatus() = delete; DatStatus(const DatStatus &other) = delete; DatStatus &operator=(const DatStatus &other) = delete; ~DatStatus() = default; explicit DatStatus(DatFile *datFilePtr); void UpdateStatus(); void SetPercentage(); void SetFinishedParts(unsigned long long finished_parts); void SetTotalParts(unsigned long long total_parts); unsigned GetPercentage(); void SetDebugMessage(const std::string &message); std::string GetDebugMessage(); void SetStatus(DAT_STATUS status); DAT_STATUS GetStatus(); bool CheckIfNotPatched(); void ClearAll(); private: DatFile *dat; double percentage_; unsigned long long finished_parts_; unsigned long long total_parts_; DAT_STATUS status_; using callback = std::function; std::vector callback_functions_lazy_; std::vector callback_functions_unoptimized_; std::string debug_message_; }; } #endif //LOTRO_DAT_LIBRARY_DATSTATUS_H