lang_cloud_manager.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "mtproto/sender.h"
  9. #include "base/weak_ptr.h"
  10. namespace MTP {
  11. class Instance;
  12. } // namespace MTP
  13. namespace Lang {
  14. class Instance;
  15. enum class Pack;
  16. struct Language;
  17. Language ParseLanguage(const MTPLangPackLanguage &data);
  18. class CloudManager : public base::has_weak_ptr {
  19. public:
  20. explicit CloudManager(Instance &langpack);
  21. using Languages = std::vector<Language>;
  22. void requestLanguageList();
  23. const Languages &languageList() const {
  24. return _languages;
  25. }
  26. [[nodiscard]] rpl::producer<> languageListChanged() const;
  27. [[nodiscard]] rpl::producer<> firstLanguageSuggestion() const;
  28. void requestLangPackDifference(const QString &langId);
  29. void applyLangPackDifference(const MTPLangPackDifference &difference);
  30. void setCurrentVersions(int version, int baseVersion);
  31. void resetToDefault();
  32. void switchWithWarning(const QString &id);
  33. void switchToLanguage(const QString &id);
  34. void switchToLanguage(const Language &data);
  35. void switchToTestLanguage();
  36. void setSuggestedLanguage(const QString &langCode);
  37. QString suggestedLanguage() const {
  38. return _suggestedLanguage;
  39. }
  40. private:
  41. mtpRequestId &packRequestId(Pack pack);
  42. mtpRequestId packRequestId(Pack pack) const;
  43. Pack packTypeFromId(const QString &id) const;
  44. void requestLangPackDifference(Pack pack);
  45. bool canApplyWithoutRestart(const QString &id) const;
  46. void performSwitchToCustom();
  47. void performSwitch(const Language &data);
  48. void performSwitchAndAddToRecent(const Language &data);
  49. void performSwitchAndRestart(const Language &data);
  50. void restartAfterSwitch();
  51. void offerSwitchLangPack();
  52. bool showOfferSwitchBox();
  53. Language findOfferedLanguage() const;
  54. void requestLanguageAndSwitch(const QString &id, bool warning);
  55. void applyLangPackData(Pack pack, const MTPDlangPackDifference &data);
  56. void switchLangPackId(const Language &data);
  57. void changeIdAndReInitConnection(const Language &data);
  58. void sendSwitchingToLanguageRequest();
  59. void resendRequests();
  60. std::optional<MTP::Sender> _api;
  61. Instance &_langpack;
  62. Languages _languages;
  63. mtpRequestId _langPackRequestId = 0;
  64. mtpRequestId _langPackBaseRequestId = 0;
  65. mtpRequestId _languagesRequestId = 0;
  66. QString _offerSwitchToId;
  67. bool _restartAfterSwitch = false;
  68. QString _suggestedLanguage;
  69. bool _languageWasSuggested = false;
  70. mtpRequestId _switchingToLanguageRequest = 0;
  71. QString _switchingToLanguageId;
  72. bool _switchingToLanguageWarning = false;
  73. mtpRequestId _getKeysForSwitchRequestId = 0;
  74. rpl::event_stream<> _languageListChanged;
  75. rpl::event_stream<> _firstLanguageSuggestion;
  76. rpl::lifetime _lifetime;
  77. };
  78. CloudManager &CurrentCloudManager();
  79. } // namespace Lang