clioutput.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include "clioutput.h"
  2. void CLIOutputApplet::readConfig() {
  3. QString homeDir = QDir::homePath();
  4. QString filename = QString("%1/.config/plainDE/clioutput-applets/%2.json").arg(homeDir, mAppletName);
  5. QFile configReader(filename);
  6. configReader.open(QIODevice::ReadOnly | QIODevice::Text);
  7. QString data = configReader.readAll();
  8. configReader.close();
  9. mAppletConfig = QJsonDocument::fromJson(data.toUtf8()).object();
  10. mCommand = mAppletConfig["command"].toString();
  11. mWaitData = mAppletConfig["waitData"].toString().split(';'); // Icon + Text
  12. mAppletType = mAppletConfig["type"].toString();
  13. mInterval = mAppletConfig["interval"].toInt();
  14. }
  15. void CLIOutputApplet::externalWidgetSetup() {
  16. mExternalWidget = new QPushButton();
  17. mExternalWidget->setFont(mCfgMan->mFont);
  18. static_cast<QPushButton*>(mExternalWidget)->setFlat(true);
  19. mExternalWidget->setObjectName("cliOutputButton");
  20. connect(static_cast<QPushButton*>(mExternalWidget),
  21. &QPushButton::clicked, this, [this]() {
  22. mTimer->stop();
  23. activate();
  24. });
  25. }
  26. void CLIOutputApplet::repeatingAction() {
  27. mProcess->start(mCommand);
  28. // Data that will be shown while command is running
  29. if (QIcon::hasThemeIcon(mWaitData[0])) {
  30. static_cast<QPushButton*>(mExternalWidget)->setIcon(
  31. QIcon::fromTheme(mWaitData[0]));
  32. }
  33. else {
  34. static_cast<QPushButton*>(mExternalWidget)->setIcon(
  35. QIcon(mWaitData[0]));
  36. }
  37. static_cast<QPushButton*>(mExternalWidget)->setText(mWaitData[1]);
  38. }
  39. void CLIOutputApplet::setData() {
  40. if (!mAppletType.compare("condition")) {
  41. QStringList result;
  42. QString condType = mAppletConfig["conditionType"].toString();
  43. QJsonObject conditions = mAppletConfig["conditions"].toObject();
  44. if (!condType.compare("stdout")) {
  45. QString stdoutData = mProcess->readAllStandardOutput();
  46. if (conditions.contains(stdoutData)) {
  47. result = conditions[stdoutData].toString().split(';'); // Icon + Text
  48. }
  49. else {
  50. result = mAppletConfig["elseCondition"].toString().split(';'); // Icon + Text
  51. }
  52. }
  53. else if (!condType.compare("exitcode")) {
  54. QString exitCode = QString::number(mProcess->exitCode());
  55. if (conditions.contains(exitCode)) {
  56. result = conditions[exitCode].toString().split(';'); // Icon + Text
  57. }
  58. else {
  59. result = mAppletConfig["elseCondition"].toString().split(';'); // Icon + Text
  60. }
  61. }
  62. if (QIcon::hasThemeIcon(result[0])) {
  63. static_cast<QPushButton*>(mExternalWidget)->setIcon(
  64. QIcon::fromTheme(result[0]));
  65. }
  66. else {
  67. static_cast<QPushButton*>(mExternalWidget)->setIcon(
  68. QIcon(result[0]));
  69. }
  70. static_cast<QPushButton*>(mExternalWidget)->setText(result[1]);
  71. }
  72. else if (!mAppletType.compare("stdout")) {
  73. QString stdoutData = mProcess->readAllStandardOutput();
  74. static_cast<QPushButton*>(mExternalWidget)->setText(stdoutData);
  75. }
  76. else if (!mAppletType.compare("data")) {
  77. QStringList dataToShow = QString(mProcess->readAllStandardOutput()).split(';');
  78. if (QIcon::hasThemeIcon(dataToShow[0])) {
  79. static_cast<QPushButton*>(mExternalWidget)->setIcon(
  80. QIcon::fromTheme(dataToShow[0]));
  81. }
  82. else {
  83. static_cast<QPushButton*>(mExternalWidget)->setIcon(
  84. QIcon(dataToShow[0]));
  85. }
  86. static_cast<QPushButton*>(mExternalWidget)->setText(dataToShow[1]);
  87. }
  88. else {
  89. qDebug() << "Unknown" << mAppletName << "CLI Output Applet type (" << mAppletType << ")!";
  90. }
  91. }
  92. CLIOutputApplet::CLIOutputApplet(ConfigManager* cfgMan,
  93. Panel* parentPanel,
  94. QString appletName) : DynamicApplet(
  95. "org.plainDE.cliOutput",
  96. cfgMan,
  97. parentPanel,
  98. -1) {
  99. mAppletName = appletName;
  100. readConfig();
  101. mProcess = new QProcess(parentPanel->mExecHolder);
  102. connect(mProcess,
  103. static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
  104. this, [this] {
  105. setData();
  106. }
  107. );
  108. }
  109. CLIOutputApplet::~CLIOutputApplet() {
  110. }