SystemComponent.h 3.1 KB

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