DatLocaleManager.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. const std::set<long long>& GetInactiveCategories();
  48. private:
  49. std::map<long long, SubFile> &GetLocaleDictReference(LOCALE locale);
  50. private:
  51. DatFile *dat;
  52. std::map<long long, SubFile> orig_dict_;
  53. std::map<long long, SubFile> patch_dict_;
  54. std::set<long long> inactive_categories;
  55. LOCALE current_locale_;
  56. };
  57. }
  58. };
  59. #endif //LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H