launcher.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 "core/base_integration.h"
  9. namespace Core {
  10. extern const char kOptionFractionalScalingEnabled[];
  11. extern const char kOptionFreeType[];
  12. class Launcher {
  13. public:
  14. Launcher(int argc, char *argv[]);
  15. static std::unique_ptr<Launcher> Create(int argc, char *argv[]);
  16. static Launcher &Instance() {
  17. Expects(InstanceSetter::Instance != nullptr);
  18. return *InstanceSetter::Instance;
  19. }
  20. virtual int exec();
  21. const QStringList &arguments() const;
  22. QString initialWorkingDir() const;
  23. bool customWorkingDir() const;
  24. uint64 installationTag() const;
  25. QByteArray instanceHash() const;
  26. bool checkPortableVersionFolder();
  27. bool validateCustomWorkingDir();
  28. void workingFolderReady();
  29. void writeDebugModeSetting();
  30. void writeInstallBetaVersionsSetting();
  31. virtual ~Launcher();
  32. protected:
  33. enum class UpdaterLaunch {
  34. PerformUpdate,
  35. JustRelaunch,
  36. };
  37. private:
  38. void prepareSettings();
  39. void initQtMessageLogging();
  40. void processArguments();
  41. QStringList readArguments(int argc, char *argv[]) const;
  42. virtual std::optional<QStringList> readArgumentsHook(
  43. int argc,
  44. char *argv[]) const {
  45. return std::nullopt;
  46. }
  47. void init();
  48. virtual void initHook() {
  49. }
  50. virtual void initHighDpi();
  51. virtual bool launchUpdater(UpdaterLaunch action) = 0;
  52. int executeApplication();
  53. struct InstanceSetter {
  54. InstanceSetter(not_null<Launcher*> instance) {
  55. Expects(Instance == nullptr);
  56. Instance = instance;
  57. }
  58. static Launcher *Instance;
  59. };
  60. InstanceSetter _setter = { this };
  61. int _argc;
  62. char **_argv;
  63. QStringList _arguments;
  64. BaseIntegration _baseIntegration;
  65. QString _initialWorkingDir;
  66. QString _customWorkingDir;
  67. };
  68. } // namespace Core