PowerComponentDBus.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include <QtDBus/QDBusConnection>
  2. #include <QtDBus/QDBusInterface>
  3. #include <QtDBus/QDBusReply>
  4. #include "PowerComponentDBus.h"
  5. #define DBUS_SERVICE_NAME "org.freedesktop.login1"
  6. #define DBUS_SERVICE_PATH "/org/freedesktop/login1"
  7. #define DBUS_INTERFACE "org.freedesktop.login1.Manager"
  8. #define DBUS_SCREENSAVER_SERVICE_NAME "org.freedesktop.ScreenSaver"
  9. #define DBUS_SCREENSAVER_SERVICE_PATH "/org/freedesktop/ScreenSaver"
  10. #define DBUS_SCREENSAVER_INTERFACE "org.freedesktop.ScreenSaver"
  11. /////////////////////////////////////////////////////////////////////////////////////////
  12. bool PowerComponentDBus::PowerOff()
  13. {
  14. return callPowerMethod("PowerOff");
  15. }
  16. /////////////////////////////////////////////////////////////////////////////////////////
  17. bool PowerComponentDBus::Reboot()
  18. {
  19. return callPowerMethod("Reboot");
  20. }
  21. /////////////////////////////////////////////////////////////////////////////////////////
  22. bool PowerComponentDBus::callPowerMethod(QString method)
  23. {
  24. if (QDBusConnection::systemBus().isConnected())
  25. {
  26. QDBusInterface iface(DBUS_SERVICE_NAME, DBUS_SERVICE_PATH, DBUS_INTERFACE,
  27. QDBusConnection::systemBus());
  28. if (iface.isValid())
  29. {
  30. QDBusReply<bool> reply = iface.call(method, true);
  31. if (reply.isValid())
  32. {
  33. return true;
  34. }
  35. else
  36. {
  37. qCritical() << "callPowerMethod : Error while calling" << method << ":"
  38. << reply.error().message();
  39. return false;
  40. }
  41. }
  42. else
  43. {
  44. qCritical() << "callPowerMethod : failed to retrieve interface.";
  45. }
  46. }
  47. else
  48. {
  49. qCritical() << "callPowerMethod : could not find system bus";
  50. }
  51. return false;
  52. }
  53. /////////////////////////////////////////////////////////////////////////////////////////
  54. bool PowerComponentDBus::isPowerMethodAvailable(QString method)
  55. {
  56. if (QDBusConnection::systemBus().isConnected())
  57. {
  58. QDBusInterface iface(DBUS_SERVICE_NAME, DBUS_SERVICE_PATH, DBUS_INTERFACE,
  59. QDBusConnection::systemBus());
  60. if (iface.isValid())
  61. {
  62. QDBusReply<QString> reply = iface.call(method);
  63. if (reply.isValid())
  64. {
  65. return (reply.value() == "yes");
  66. }
  67. else
  68. {
  69. qCritical() << "isPowerMethodAvailable : Error while calling" << method << ":"
  70. << reply.error().message();
  71. return false;
  72. }
  73. }
  74. else
  75. {
  76. qCritical() << "isPowerMethodAvailable : failed to retrieve interface.";
  77. }
  78. }
  79. else
  80. {
  81. qCritical() << "isPowerMethodAvailable : could not find system bus";
  82. }
  83. return false;
  84. }
  85. void PowerComponentDBus::doDisableScreensaver()
  86. {
  87. if (screensaver_inhibit_cookie)
  88. {
  89. qInfo() << "doDisableScreensaver : already disabled.";
  90. return;
  91. }
  92. if (QDBusConnection::systemBus().isConnected())
  93. {
  94. QDBusInterface iface(DBUS_SCREENSAVER_SERVICE_NAME, DBUS_SCREENSAVER_SERVICE_PATH,
  95. DBUS_SCREENSAVER_INTERFACE, QDBusConnection::sessionBus());
  96. if (iface.isValid())
  97. {
  98. QDBusReply<unsigned int> reply = iface.call("Inhibit", "jellyfinmediaplayer", "playing");
  99. if (reply.isValid())
  100. {
  101. screensaver_inhibit_cookie = reply.value();
  102. }
  103. else
  104. {
  105. qCritical() << "doDisableScreensaver : Error while calling UnInhibit:"
  106. << reply.error().message();
  107. }
  108. }
  109. else
  110. {
  111. qCritical() << "doDisableScreensaver : failed to retrieve interface.";
  112. }
  113. }
  114. else
  115. {
  116. qCritical() << "doDisableScreensaver : could not find system bus";
  117. }
  118. }
  119. ///////////////////////////////////////////////////////////////////////////////////////////////////
  120. void PowerComponentDBus::doEnableScreensaver()
  121. {
  122. if (!screensaver_inhibit_cookie)
  123. {
  124. qInfo() << "doEnableScreensaver : already enabled.";
  125. return;
  126. }
  127. if (QDBusConnection::systemBus().isConnected())
  128. {
  129. QDBusInterface iface(DBUS_SCREENSAVER_SERVICE_NAME, DBUS_SCREENSAVER_SERVICE_PATH,
  130. DBUS_SCREENSAVER_INTERFACE, QDBusConnection::sessionBus());
  131. if (iface.isValid())
  132. {
  133. QDBusReply<void> reply = iface.call("UnInhibit", screensaver_inhibit_cookie);
  134. if (reply.isValid())
  135. {
  136. screensaver_inhibit_cookie = 0;
  137. }
  138. else
  139. {
  140. qCritical() << "doEnableScreensaver : Error while calling UnInhibit:"
  141. << reply.error().message();
  142. }
  143. }
  144. else
  145. {
  146. qCritical() << "doEnableScreensaver : failed to retrieve interface.";
  147. }
  148. }
  149. else
  150. {
  151. qCritical() << "doEnableScreensaver : could not find system bus";
  152. }
  153. }