DatLocaleManager.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #ifndef LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H
  2. #define LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H
  3. #include <memory>
  4. #include <map>
  5. #include "../DatOperationResult.h"
  6. #include <set>
  7. extern "C++" {
  8. namespace LOTRO_DAT {
  9. class DatFile;
  10. class SubFile;
  11. /*!
  12. * \brief Модуль работы с локалями
  13. * \author Gi1dor
  14. * \date 06.07.2018
  15. *
  16. * Класс для работы с искуственно внедряемымыми в dat контейнер копиями файлов. Позволяет независимо хранить
  17. * информацию о двух версиях каждого файла, которую можно подставлять в файловую систему.
  18. * В рамках русификации хранит информацию об оригинальной и русифицированной версии тех файлов, для которых
  19. * существует русификация.
  20. *
  21. * \warning Данные локалей чувствительны к обновлениям игры и могут быть стёрты после них!
  22. * \warning Объекты этого класса не должны создаваться отдельно! Созданием и управлением ими занимается класс DatFile
  23. */
  24. class DatLocaleManager {
  25. friend class DatStatus;
  26. public:
  27. enum LOCALE : int {
  28. ORIGINAL = 0,
  29. PATCHED = 1
  30. };
  31. DatLocaleManager() = delete;
  32. DatLocaleManager(const DatLocaleManager &other) = delete;
  33. DatLocaleManager &operator=(const DatLocaleManager &other) = delete;
  34. ~DatLocaleManager() = default;
  35. explicit DatLocaleManager(DatFile *datFilePtr);
  36. DatOperationResult<> Init();
  37. DatOperationResult<> SetLocale(LOCALE locale);
  38. DatOperationResult<> DeInit();
  39. LOCALE GetCurrentLocale();
  40. bool CheckLocaleCorrect();
  41. void UpdateLocaleFile(LOCALE locale, const SubFile &file);
  42. DatOperationResult<SubFile> GetLocaleFile(long long file_id, LOCALE locale);
  43. void PrintInformaion(FILE *file);
  44. bool CategoryIsInactive(long long category);
  45. void UpdateCategory(long long file_id, long long category);
  46. private:
  47. std::map<long long, SubFile> &GetLocaleDictReference(LOCALE locale);
  48. private:
  49. DatFile *dat;
  50. std::map<long long, SubFile> orig_dict_;
  51. std::map<long long, SubFile> patch_dict_;
  52. std::set<long long> inactive_categories;
  53. LOCALE current_locale_;
  54. };
  55. }
  56. };
  57. #endif //LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H