DatLocaleManager.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #ifndef LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H
  2. #define LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H
  3. #include <memory>
  4. #include <map>
  5. #include <set>
  6. #include "../DatOperationResult.h"
  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. DatOperationResult<> CommitLocales();
  40. LOCALE GetCurrentLocale();
  41. bool CheckLocaleCorrect();
  42. void UpdateLocaleFile(LOCALE locale, const SubFile &file);
  43. DatOperationResult<SubFile> GetLocaleFile(long long file_id, LOCALE locale);
  44. void PrintInformaion(FILE *file);
  45. bool CategoryIsInactive(long long category);
  46. void UpdateCategory(long long file_id, long long category);
  47. DatOperationResult<> EnableCategory(long long category);
  48. DatOperationResult<> DisableCategory(long long category);
  49. const std::set<long long>& GetInactiveCategories();
  50. private:
  51. std::map<long long, SubFile> &GetLocaleDictReference(LOCALE locale);
  52. void ClearData();
  53. private:
  54. DatFile *dat;
  55. std::map<long long, SubFile> orig_dict_;
  56. std::map<long long, SubFile> patch_dict_;
  57. std::set<long long> inactive_categories;
  58. LOCALE current_locale_;
  59. uint64_t dict_offset_ = 0;
  60. uint64_t dict_size_ = 0;
  61. };
  62. }
  63. };
  64. #endif //LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H