DatStatus.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef LOTRO_DAT_LIBRARY_DATSTATUS_H
  2. #define LOTRO_DAT_LIBRARY_DATSTATUS_H
  3. #include <string>
  4. #include <functional>
  5. #include <set>
  6. namespace LOTRO_DAT {
  7. class DatFile;
  8. /*!
  9. * \brief Модуль статуса dat-файла
  10. * \author Gi1dor
  11. * \date 06.07.2018
  12. *
  13. * Класс для хранения информации о выполняемых процессах в dat-файле. Позволяет отслеживать прогресс выполнения
  14. * во время операций создания резервных копий, применения патчей или извлечения файлов
  15. *
  16. * \warning Объекты этого класса не должны создаваться отдельно! Созданием и управлением ими занимается класс DatFile
  17. */
  18. class DatStatus {
  19. public:
  20. enum DAT_STATUS: int {
  21. E_INITIALISING,
  22. E_EXTRACTING,
  23. E_PATCHING,
  24. E_COMMITING,
  25. E_BACKUP_CREATING,
  26. E_BACKUP_RESTORING,
  27. E_BACKUP_REMOVING,
  28. E_GATHERING_INFO,
  29. E_FREE
  30. };
  31. using Callback = std::function<void(DAT_STATUS, double, unsigned long long, unsigned long long, std::string)>;
  32. // Callback arguments: status, percentage, finished_items, total_items, debug message
  33. DatStatus() = delete;
  34. DatStatus(const DatStatus &other) = delete;
  35. DatStatus &operator=(const DatStatus &other) = delete;
  36. ~DatStatus() = default;
  37. explicit DatStatus(DatFile *datFilePtr);
  38. void SetStatus(DAT_STATUS status);
  39. void SetFinishedParts(unsigned long long finished_parts);
  40. void SetTotalParts(unsigned long long total_parts);
  41. void SetDebugMessage(const std::string &message);
  42. DAT_STATUS GetStatus();
  43. double GetPercentage();
  44. unsigned long long GetFinishedParts();
  45. unsigned long long GetTotalParts();
  46. std::string GetDebugMessage();
  47. void SetDefaultStatus();
  48. bool CheckIfNotPatched();
  49. void AddStatusChangedCallbackFunction(Callback* func);
  50. void RemoveStatusChangedCallbackFunction(Callback* func);
  51. bool IsFunctionRegisteredAsCallback(Callback* func);
  52. void EraseAllCallbackFunctions();
  53. private:
  54. DatFile *dat = nullptr;
  55. DAT_STATUS status_ = DAT_STATUS::E_FREE;
  56. unsigned long long finished_parts_ = 0;
  57. unsigned long long total_parts_ = 0;
  58. double percentage_ = 0;
  59. std::string debug_message_ = "";
  60. std::set<Callback*> callback_functions_;
  61. };
  62. }
  63. #endif //LOTRO_DAT_LIBRARY_DATSTATUS_H