SystemComponent.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #ifndef __SYSTEM_COMPONENT_H__
  2. #define __SYSTEM_COMPONENT_H__
  3. #include "ComponentManager.h"
  4. #include <QTimer>
  5. #include <QNetworkReply>
  6. #include "utils/Utils.h"
  7. #include "Paths.h"
  8. #include "Names.h"
  9. // System modifiers
  10. #define SYSTEM_MODIFIER_OPENELEC "OpenELEC"
  11. class SystemComponent : public ComponentBase
  12. {
  13. Q_OBJECT
  14. DEFINE_SINGLETON(SystemComponent);
  15. public:
  16. Q_PROPERTY(bool isMacos READ platformIsMac CONSTANT)
  17. Q_PROPERTY(bool isWindows READ platformIsWindows CONSTANT)
  18. Q_PROPERTY(bool isLinux READ platformIsLinux CONSTANT)
  19. Q_PROPERTY(qreal scale MEMBER m_scale CONSTANT)
  20. bool componentExport() override { return true; }
  21. const char* componentName() override { return "system"; }
  22. bool componentInitialize() override;
  23. void componentPostInitialize() override;
  24. Q_INVOKABLE QVariantMap systemInformation() const;
  25. Q_INVOKABLE void exit();
  26. Q_INVOKABLE static void restart();
  27. Q_INVOKABLE void info(QString text);
  28. Q_INVOKABLE void setCursorVisibility(bool visible);
  29. Q_INVOKABLE QString getUserAgent();
  30. Q_INVOKABLE QString debugInformation();
  31. Q_INVOKABLE QStringList networkAddresses() const;
  32. Q_INVOKABLE void openExternalUrl(const QString& url);
  33. Q_INVOKABLE void runUserScript(QString script);
  34. Q_INVOKABLE QString getNativeShellScript();
  35. Q_INVOKABLE void checkForUpdates();
  36. // called by the web-client when everything is properly inited
  37. Q_INVOKABLE void hello(const QString& version);
  38. Q_INVOKABLE QString getCapabilitiesString();
  39. Q_SIGNAL void capabilitiesChanged(const QString& capabilities);
  40. Q_SIGNAL void userInfoChanged();
  41. Q_SIGNAL void updateInfoEmitted(QString url);
  42. // possible os types type enum
  43. enum PlatformType
  44. {
  45. platformTypeUnknown,
  46. platformTypeOsx,
  47. platformTypeWindows,
  48. platformTypeLinux,
  49. platformTypeOpenELEC
  50. };
  51. // possible values for target types
  52. enum PlatformArch
  53. {
  54. platformArchUnknown,
  55. platformArchX86_32,
  56. platformArchX86_64,
  57. platformArchRpi2
  58. };
  59. inline PlatformType getPlatformType() { return m_platformType; }
  60. inline PlatformArch getPlatformArch() { return m_platformArch; }
  61. QString getPlatformTypeString() const;
  62. QString getPlatformArchString() const;
  63. inline bool isOpenELEC() const { return m_platformType == platformTypeOpenELEC; }
  64. bool isWebClientConnected() const { return !m_webClientVersion.isEmpty(); }
  65. inline QString authenticationToken() { return m_authenticationToken; }
  66. inline bool cursorVisible() { return m_cursorVisible; }
  67. Q_INVOKABLE void crashApp();
  68. void updateScale(qreal scale);
  69. private Q_SLOTS:
  70. void updateInfoHandler(QNetworkReply* reply);
  71. signals:
  72. void hostMessage(const QString& message);
  73. void settingsMessage(const QString& setting, const QString& value);
  74. void scaleChanged(qreal scale);
  75. private:
  76. explicit SystemComponent(QObject* parent = nullptr);
  77. static QMap<QString, QString> networkInterfaces();
  78. bool platformIsWindows() const { return m_platformType == platformTypeWindows; }
  79. bool platformIsMac() const { return m_platformType == platformTypeOsx; }
  80. bool platformIsLinux() const { return m_platformType == platformTypeLinux; }
  81. QTimer* m_mouseOutTimer;
  82. PlatformType m_platformType;
  83. PlatformArch m_platformArch;
  84. bool m_doLogMessages;
  85. QString m_authenticationToken;
  86. QString m_webClientVersion;
  87. bool m_cursorVisible;
  88. qreal m_scale;
  89. };
  90. #endif