Browse Source

client now waits for file completion event before sending task

logicp 5 years ago
parent
commit
147f706b90
7 changed files with 32 additions and 19 deletions
  1. 2 2
      argdialog.cpp
  2. 1 1
      argdialog.h
  3. 12 8
      client.cpp
  4. 2 1
      client.hpp
  5. 3 0
      headers/util.hpp
  6. 1 1
      ky_gui.pro.user
  7. 11 6
      mainwindow.cpp

+ 2 - 2
argdialog.cpp

@@ -73,12 +73,11 @@ ArgDialog::ArgDialog(QWidget *parent) :
         if (button->text() == "Save") {
             if (m_ig_post.isReady()) {
                 setTaskArguments();
-                emit ArgDialog::taskRequestReady(m_task);
                 QFile file(m_ig_post.video.path);
                 std::vector<char> byte_array{};
                 if (file.open(QIODevice::ReadOnly)) {
                     QByteArray bytes = file.readAll();
-//                    emit ArgDialog::uploadFile(bytes);
+                    emit ArgDialog::uploadFile(bytes);
                     qDebug() << "Would be sending file..";
                 } else {
                     QMessageBox::warning(
@@ -87,6 +86,7 @@ ArgDialog::ArgDialog(QWidget *parent) :
                         tr("Unable to read file")
                     );
                 }
+                emit ArgDialog::taskRequestReady(m_task, true);
             }
         }
     });

+ 1 - 1
argdialog.h

@@ -62,7 +62,7 @@ class ArgDialog : public QDialog {
 
  signals:
   void uploadFile(QByteArray bytes);
-  void taskRequestReady(Task task);
+  void taskRequestReady(Task task, bool file_pending);
 
  private:
   void clearPost();

+ 12 - 8
client.cpp

@@ -84,6 +84,10 @@ void Client::handleMessages() {
             QString event = getEvent(data_string.c_str());
             QVector<QString> args = getArgs(data_string.c_str());
             emit Client::messageReceived(EVENT_UPDATE_TYPE, event, args);
+            if (isUploadCompleteEvent(event.toUtf8().constData())) {
+                std::string operation_string = createOperation("Schedule", m_task);
+                sendEncoded(operation_string);
+            }
         }
         std::string formatted_json = getJsonString(data_string);
         emit Client::messageReceived(MESSAGE_UPDATE_TYPE, QString::fromUtf8(formatted_json.data(), formatted_json.size()), {});
@@ -295,14 +299,14 @@ void Client::execute() {
     }
 }
 
-void Client::scheduleTask(std::vector<std::string> task_args) {
-    qDebug() << "Requesting a task to be scheduled";
-//    auto datetime = task_args.at(1);
-    std::string operation_string = createOperation("Schedule", task_args);
-//    qDebug() << "Operation string: " << operation_string.c_str();
-//    std::string message = createMessage(operation_string.c_str(), "");
-//    auto operation_string = createOperation("blah", {});
-    sendEncoded(operation_string);
+void Client::scheduleTask(std::vector<std::string> task_args, bool file_pending) {
+    if (file_pending) {
+        m_task = task_args;
+    } else {
+        qDebug() << "Requesting a task to be scheduled";
+        std::string operation_string = createOperation("Schedule", task_args);
+        sendEncoded(operation_string);
+    }
 }
 
 void Client::sendFile(QByteArray bytes) {

+ 2 - 1
client.hpp

@@ -52,7 +52,7 @@ public:
     QString getAppName(int mask);
     int getSelectedApp();
     // Move this to private after moving responsibilities to Client
-    void scheduleTask(std::vector<std::string> task_args);
+    void scheduleTask(std::vector<std::string> task_args, bool file_pending);
     MessageHandler createMessageHandler(std::function<void()> cb);
 
 public slots:
@@ -72,6 +72,7 @@ private:
     int argc;
     char** argv;
     int m_client_socket_fd;
+    std::vector<std::string> m_task;
     bool executing;
     CommandMap m_commands;
     CommandArgMap m_command_arg_map;

+ 3 - 0
headers/util.hpp

@@ -59,6 +59,9 @@ bool isOperation(const char* data) {
     return strcmp(d["type"].GetString(), "operation") == 0;
 }
 
+bool isUploadCompleteEvent(const char* event) {
+    return strcmp(event, "File Transfer Complete") == 0;
+}
 
 bool isEvent(const char* data) {
     Document d;

+ 1 - 1
ky_gui.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.0, 2020-01-05T16:02:29. -->
+<!-- Written by QtCreator 4.11.0, 2020-01-05T22:31:56. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>

+ 11 - 6
mainwindow.cpp

@@ -91,7 +91,7 @@ void MainWindow::connectClient() {
         q_client->sendFile(bytes);
     });
 
-    QObject::connect(arg_ui, &ArgDialog::taskRequestReady, this, [this](Task task) {
+    QObject::connect(arg_ui, &ArgDialog::taskRequestReady, this, [this](Task task, bool file_pending) {
         // TODO: Maybe this should be handled by the Client class directly
         auto mask = q_client->getSelectedApp();
         if (mask > -1) {
@@ -103,7 +103,7 @@ void MainWindow::connectClient() {
                 if (seconds_diff > 3600) {
                     qDebug() << "Scheduling a task";
                     task.args.push_back(std::to_string(mask));
-                    q_client->scheduleTask(task.args);
+                    q_client->scheduleTask(task.args, file_pending);
                 }
             }
         }
@@ -134,10 +134,15 @@ void MainWindow::updateMessages(int t, const QString& message, StringVec v) {
         //TODO: We do this because a CommandLinkButton turns transparent by default, except when hovered or checked
         ui->connect->setChecked(true);
     } else if(t == EVENT_UPDATE_TYPE) {
-        auto mask = v.at(0);
-        auto event_message = q_client->getAppName(std::stoi(mask.toUtf8().constData()));
-        event_message += ": ";
-        event_message += v.at(1);
+        QString event_message{};
+        if (!v.empty()) {
+            auto mask = v.at(0);
+            auto event_message = q_client->getAppName(std::stoi(mask.toUtf8().constData()));
+            event_message += ": ";
+            event_message += v.at(1);
+        } else {
+            event_message += message;
+        }
         m_events.push_front(event_message);
         ui->eventList->clear();
         for (const auto& i : m_events) {