settings.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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 "base/integration.h"
  9. #include "ui/style/style_core.h"
  10. #define DeclareReadSetting(Type, Name) extern Type g##Name; \
  11. inline const Type &c##Name() { \
  12. return g##Name; \
  13. }
  14. #define DeclareSetting(Type, Name) DeclareReadSetting(Type, Name) \
  15. inline void cSet##Name(const Type &Name) { \
  16. g##Name = Name; \
  17. }
  18. #define DeclareRefSetting(Type, Name) DeclareSetting(Type, Name) \
  19. inline Type &cRef##Name() { \
  20. return g##Name; \
  21. }
  22. DeclareSetting(Qt::LayoutDirection, LangDir);
  23. inline bool rtl() {
  24. return style::RightToLeft();
  25. }
  26. DeclareSetting(bool, InstallBetaVersion);
  27. DeclareSetting(uint64, AlphaVersion);
  28. DeclareSetting(uint64, RealAlphaVersion);
  29. DeclareSetting(QByteArray, AlphaPrivateKey);
  30. DeclareSetting(bool, AutoStart);
  31. DeclareSetting(bool, StartMinimized);
  32. DeclareSetting(bool, StartInTray);
  33. DeclareSetting(bool, SendToMenu);
  34. enum LaunchMode {
  35. LaunchModeNormal = 0,
  36. LaunchModeAutoStart,
  37. LaunchModeFixPrevious,
  38. LaunchModeCleanup,
  39. };
  40. DeclareReadSetting(LaunchMode, LaunchMode);
  41. DeclareSetting(QString, WorkingDir);
  42. inline void cForceWorkingDir(const QString &newDir) {
  43. cSetWorkingDir(newDir);
  44. if (!gWorkingDir.isEmpty()) {
  45. cSetWorkingDir(QDir(gWorkingDir).absolutePath() + '/');
  46. QDir().mkpath(gWorkingDir);
  47. QFile::setPermissions(gWorkingDir,
  48. QFileDevice::ReadUser | QFileDevice::WriteUser | QFileDevice::ExeUser);
  49. }
  50. }
  51. inline QString cExeName() {
  52. return base::Integration::Instance().executableName();
  53. }
  54. inline QString cExeDir() {
  55. return base::Integration::Instance().executableDir();
  56. }
  57. DeclareSetting(QString, DialogLastPath);
  58. DeclareSetting(QString, DialogHelperPath);
  59. inline QString cDialogHelperPathFinal() {
  60. return cDialogHelperPath().isEmpty() ? cExeDir() : cDialogHelperPath();
  61. }
  62. DeclareSetting(bool, AutoUpdate);
  63. DeclareSetting(bool, SeenTrayTooltip);
  64. DeclareSetting(bool, RestartingUpdate);
  65. DeclareSetting(bool, Restarting);
  66. DeclareSetting(bool, RestartingToSettings);
  67. DeclareSetting(bool, WriteProtected);
  68. DeclareSetting(int32, LastUpdateCheck);
  69. DeclareSetting(bool, NoStartUpdate);
  70. DeclareSetting(bool, StartToSettings);
  71. DeclareSetting(bool, DebugMode);
  72. DeclareReadSetting(bool, ManyInstance);
  73. DeclareSetting(bool, Quit);
  74. DeclareSetting(QByteArray, LocalSalt);
  75. DeclareSetting(int, ScreenScale);
  76. DeclareSetting(int, ConfigScale);
  77. class DocumentData;
  78. typedef QList<QPair<DocumentData*, int16>> RecentStickerPackOld;
  79. typedef QVector<QPair<uint64, ushort>> RecentStickerPreload;
  80. typedef QVector<QPair<DocumentData*, ushort>> RecentStickerPack;
  81. DeclareSetting(RecentStickerPreload, RecentStickersPreload);
  82. DeclareRefSetting(RecentStickerPack, RecentStickers);
  83. typedef QList<QPair<QString, ushort>> RecentHashtagPack;
  84. DeclareRefSetting(RecentHashtagPack, RecentWriteHashtags);
  85. DeclareSetting(RecentHashtagPack, RecentSearchHashtags);
  86. class UserData;
  87. typedef QVector<UserData*> RecentInlineBots;
  88. DeclareRefSetting(RecentInlineBots, RecentInlineBots);
  89. DeclareSetting(bool, PasswordRecovered);
  90. DeclareSetting(int32, PasscodeBadTries);
  91. DeclareSetting(crl::time, PasscodeLastTry);
  92. DeclareSetting(QStringList, SendPaths);
  93. DeclareSetting(QString, StartUrl);
  94. DeclareSetting(int, OtherOnline);
  95. inline bool passcodeCanTry() {
  96. if (cPasscodeBadTries() < 3) return true;
  97. auto dt = crl::now() - cPasscodeLastTry();
  98. switch (cPasscodeBadTries()) {
  99. case 3: return dt >= 5000;
  100. case 4: return dt >= 10000;
  101. case 5: return dt >= 15000;
  102. case 6: return dt >= 20000;
  103. case 7: return dt >= 25000;
  104. }
  105. return dt >= 30000;
  106. }
  107. inline int cEvalScale(int scale) {
  108. return (scale == style::kScaleAuto) ? cScreenScale() : scale;
  109. }
  110. inline int cScale() {
  111. return style::Scale();
  112. }
  113. inline void SetScaleChecked(int scale) {
  114. cSetConfigScale(style::CheckScale(scale));
  115. }
  116. inline void ValidateScale() {
  117. SetScaleChecked(cConfigScale());
  118. style::SetScale(cEvalScale(cConfigScale()));
  119. }