qmlhandler.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. #include <QDebug>
  2. #include <QGuiApplication>
  3. #include <csignal>
  4. #include <cstdio>
  5. #include <cstdlib>
  6. #include <iostream>
  7. #include <poll.h>
  8. #include <string>
  9. #include <sys/prctl.h>
  10. #include <sys/stat.h>
  11. #include <sys/wait.h>
  12. #include <thread>
  13. #include <unistd.h>
  14. #include "../include/climanager.h"
  15. #include "../include/cmdmanager.h"
  16. #include "../include/config.h"
  17. #include "../include/jsonhandler.h"
  18. #include "../include/qmlhandler.h"
  19. #include <iostream>
  20. #include <json/json.h>
  21. using namespace std;
  22. QUrl sendFileUrl = QUrl("");
  23. bool _RESTART = false;
  24. QMLHandler::QMLHandler(QObject *parent) : QObject(parent) {}
  25. void QMLHandler::loadSettingsToGUI() {
  26. stringstream ss;
  27. // The space is needed to get the stringstream to perform proper formatting of multiple values
  28. bool saveIP, saveUsername;
  29. ss << Config::getValue("Autofill-IP") << " " << Config::getValue("Autofill-Username");
  30. ss >> saveIP >> saveUsername;
  31. QString cliPath = QString::fromStdString(Config::getValue("CLI-Path"));
  32. QString keyPath = QString::fromStdString(Config::getValue("Keyfile-Path"));
  33. emit loadSettings(saveIP, saveUsername, cliPath, keyPath);
  34. }
  35. // ### QML Handlers ###
  36. void QMLHandler::onStart() {
  37. bool configExists = Config::loadFile();
  38. if (configExists) {
  39. // Config exists
  40. if (Config::checkConfig()) {
  41. // Config is valid
  42. if (Config::getValue("Autofill-IP") == "1") {
  43. emit ipPopupSetIP(QString::fromStdString(Config::getValue("Default-IP")));
  44. emit ipPopupCheckSaveCheckbox();
  45. }
  46. if (Config::getValue("Autofill-Username") == "1") {
  47. emit loginSetUsername(QString::fromStdString(Config::getValue("Default-Username")));
  48. emit loginSignupCheckSaveCheckbox();
  49. }
  50. if (!ifstream(Config::getValue("CLI-Path"))) {
  51. // Invalid CLI Path
  52. emit invalidCliPathPopupOpen();
  53. } else {
  54. // Everything OK, init CLI
  55. CliManager::init();
  56. }
  57. } else {
  58. // Config is invalid
  59. emit invalidConfigPopupOpen();
  60. }
  61. } else {
  62. // Config doesn't exist
  63. Config::setupDefaultConfig();
  64. emit noConfigFoundPopupOpen();
  65. }
  66. }
  67. // No Config Found Popup
  68. void QMLHandler::onNoConfigFoundPopupContinueButton(QString cli_path) {
  69. Config::setValue("CLI-Path", cli_path.toUtf8().constData());
  70. Config::saveFile();
  71. onStart();
  72. }
  73. // Invalid Cli Path Popup
  74. void QMLHandler::onInvalidCliPathPopupContinueButton(QString cli_path) {
  75. Config::setValue("CLI-Path", cli_path.toUtf8().constData());
  76. Config::saveFile();
  77. onStart();
  78. }
  79. void QMLHandler::onInvalidCliPathPopupQuitButton() { emit closeWindow(); }
  80. // Invalid Config Popup
  81. void QMLHandler::onInvalidConfigPopupQuitButton() { emit closeWindow(); }
  82. void QMLHandler::onInvalidConfigPopupCreateDefaultButton() {
  83. Config::setupDefaultConfig();
  84. emit noConfigFoundPopupOpen();
  85. }
  86. // Sending
  87. void QMLHandler::onSendingSelectFileButton(QUrl url) {
  88. sendFileUrl = url.toLocalFile();
  89. emit log("File Selected: " + sendFileUrl.toString());
  90. emit sendingSetFileUrlText("Selected File: " + sendFileUrl.toString());
  91. emit sendingEnableSendButton();
  92. }
  93. void QMLHandler::onSendingSendFileButton() {
  94. QString command = "put \"" + sendFileUrl.toString() + "\"";
  95. CliManager::writeToCli(command);
  96. CliManager::writeToCli("extendedlist");
  97. }
  98. void QMLHandler::onSendingClearSelectionButton() {
  99. sendFileUrl = QUrl("");
  100. emit log("Cleared Selection");
  101. emit sendingSetFileUrlText("Selected File: None");
  102. emit sendingDisableSendButton();
  103. }
  104. // Receiving
  105. void QMLHandler::onReceivingListFilesButton() { CliManager::writeToCli("extendedlist"); }
  106. void QMLHandler::onReceivingDownloadFileButton(QString fileName) {
  107. QString command = "get \"" + fileName + "\"";
  108. CliManager::writeToCli(command);
  109. }
  110. void QMLHandler::onReceivingConfirmDeleteFileButton(QString fileName) {
  111. QString command = "deletefile \"" + fileName + "\"";
  112. CliManager::writeToCli(command);
  113. CliManager::writeToCli("extendedlist");
  114. }
  115. // Messages
  116. void QMLHandler::onMessagesSendButton(QString msg) { emit message(msg); }
  117. // Settings
  118. void QMLHandler::onKeyfileSelected(QString path) {
  119. QString command = "keyfile \"" + path + "\"";
  120. CliManager::writeToCli(command);
  121. }
  122. void QMLHandler::onKeyfileClosed() { CliManager::writeToCli("closekey"); }
  123. void QMLHandler::onSettingsDeleteMeButton(QString password) {
  124. QString command = "deleteme " + password;
  125. CliManager::writeToCli(command);
  126. }
  127. void QMLHandler::onSettingsRevertChangesButton() {
  128. Config::loadFile();
  129. loadSettingsToGUI();
  130. emit log("Settings changes reverted.");
  131. }
  132. void QMLHandler::onSettingsResetButton() {
  133. string cli_path = Config::getValue("CLI-Path");
  134. Config::setupDefaultConfig();
  135. Config::setValue("CLI-Path", cli_path);
  136. loadSettingsToGUI();
  137. emit log("Settings resetted to default.");
  138. }
  139. void QMLHandler::onSettingsSaveButton(bool saveIP, bool saveUsername, QString cliPath, QString keyPath) {
  140. Config::setValue("Autofill-IP", to_string(saveIP));
  141. Config::setValue("Autofill-Username", to_string(saveUsername));
  142. Config::setValue("CLI-Path", cliPath.toUtf8().constData());
  143. Config::setValue("Keyfile-Path", keyPath.toUtf8().constData());
  144. Config::saveFile();
  145. emit log("Settings saved.");
  146. }
  147. // Ip Popup
  148. void QMLHandler::onIpPopupConnectButton(QString ip, bool saveAsDefault) {
  149. QStringList ipport = ip.split(":");
  150. QString command = "connect " + ipport[0];
  151. CmdManager::setCachedIP(ipport[0]);
  152. if (ipport.size() > 1) {
  153. command += " " + ipport[1];
  154. CmdManager::setCachedPort(ipport[1]);
  155. }
  156. CliManager::writeToCli(command);
  157. emit ipPopupDisableConnectButton();
  158. if (saveAsDefault) {
  159. Config::setValue("Default-IP", ip.toUtf8().constData());
  160. Config::setValue("Autofill-IP", "1");
  161. Config::saveFile();
  162. loadSettingsToGUI();
  163. }
  164. }
  165. // Login
  166. void QMLHandler::onLoginLoginButton(QString username, QString password, bool saveAsDefault) {
  167. QString command = "login " + username + " " + password;
  168. CliManager::writeToCli(command);
  169. emit loginDisableLoginButton();
  170. if (saveAsDefault) {
  171. Config::setValue("Default-Username", username.toUtf8().constData());
  172. Config::setValue("Autofill-Username", "1");
  173. Config::saveFile();
  174. loadSettingsToGUI();
  175. }
  176. }
  177. // Signup
  178. void QMLHandler::onSignupRegisterButton(QString username, QString passwordOne, QString passwordTwo, bool saveAsDefault) {
  179. if (QString::compare(passwordOne, passwordTwo, Qt::CaseSensitive)) {
  180. emit signupSetStatus("Passwords don't match");
  181. return;
  182. }
  183. QString command = "signup " + username + " " + passwordOne;
  184. CliManager::writeToCli(command);
  185. emit signupDisableRegisterButton();
  186. if (saveAsDefault) {
  187. Config::setValue("Default-Username", username.toUtf8().constData());
  188. Config::setValue("Autofill-Username", "1");
  189. Config::saveFile();
  190. loadSettingsToGUI();
  191. }
  192. }
  193. // Footer
  194. void QMLHandler::onFooterGetStatusButton() { CliManager::writeToCli("extendedstatus"); }
  195. // Notifications
  196. void QMLHandler::onDismissNotificationButton(int index) { emit dismissNotification(index); }
  197. // Queueing
  198. void QMLHandler::onReceivingQueueFileButton(QString fileName) {
  199. QString command = "queue " + fileName;
  200. CliManager::writeToCli(command);
  201. }
  202. void QMLHandler::onReceivingDequeueFileButton(QString fileName) {
  203. QString command = "dequeue " + fileName;
  204. CliManager::writeToCli(command);
  205. }
  206. void QMLHandler::setRestart(bool restart) { _RESTART = restart; }