]> git.sesse.net Git - nageru/commitdiff
Expose the queue status over HTTP.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 14 Oct 2018 17:53:39 +0000 (19:53 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 14 Oct 2018 17:53:39 +0000 (19:53 +0200)
main.cpp
mainwindow.cpp
mainwindow.h

index b81471d64ce38aee758d1bacd0ba028f6643fb6c..1266c2ab13e546cf329a1b91f5142c6a9e436e7c 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -76,7 +76,6 @@ int main(int argc, char **argv)
 
        avformat_network_init();
        global_httpd = new HTTPD;
-       global_httpd->start(DEFAULT_HTTPD_PORT);
 
        QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
 
@@ -112,8 +111,11 @@ int main(int argc, char **argv)
                // TODO: Delete the surface, too.
        }
 
-       MainWindow mainWindow;
-       mainWindow.show();
+       MainWindow main_window;
+       main_window.show();
+
+       global_httpd->add_endpoint("/queue_status", bind(&MainWindow::get_queue_status, &main_window), HTTPD::NO_CORS_POLICY);
+       global_httpd->start(DEFAULT_HTTPD_PORT);
 
        init_jpeg_vaapi();
 
index 0932a757bbdcafa5f76c1fea2407ed2ecb944364..2fb897bb55e6e7215d9ee825010ac61594d1d910 100644 (file)
@@ -134,6 +134,7 @@ MainWindow::MainWindow()
                        live_player_clip_progress(played_this_clip, total_length);
                });
        });
+       set_output_status("paused");
 
        defer_timeout = new QTimer(this);
        defer_timeout->setSingleShot(true);
@@ -335,7 +336,7 @@ void MainWindow::live_player_clip_done()
 {
        int row = playlist_clips->get_currently_playing();
        if (row == -1 || row == int(playlist_clips->size()) - 1) {
-               ui->live_label->setText("Current output (paused)");
+               set_output_status("paused");
                playlist_clips->set_currently_playing(-1, 0.0f);
        } else {
                playlist_clips->set_currently_playing(row + 1, 0.0f);
@@ -377,8 +378,8 @@ void MainWindow::live_player_clip_progress(double played_this_clip, double total
        int m = remaining_ms;
 
        char buf[256];
-       snprintf(buf, sizeof(buf), "Current output (%d:%02d.%03d left)", m, s, ms);
-       ui->live_label->setText(buf);
+       snprintf(buf, sizeof(buf), "%d:%02d.%03d left", m, s, ms);
+       set_output_status(buf);
 }
 
 void MainWindow::resizeEvent(QResizeEvent *event)
@@ -704,3 +705,16 @@ void MainWindow::highlight_camera_input(int stream_idx)
                ui->input4_frame->setStyleSheet("");
        }
 }
+
+void MainWindow::set_output_status(const string &status)
+{
+       ui->live_label->setText(QString::fromStdString("Current output (" + status + ")"));
+
+       lock_guard<mutex> lock(queue_status_mu);
+       queue_status = status;
+}
+
+pair<string, string> MainWindow::get_queue_status() const {
+       lock_guard<mutex> lock(queue_status_mu);
+       return {queue_status, "text/plain"};
+}
index 103dd8379a962ee3ac5f558602359c34adf752d6..16a4baad8a98d82924448efaec077d7f0915f05c 100644 (file)
@@ -5,10 +5,13 @@
 #include "db.h"
 #include "state.pb.h"
 
+#include <mutex>
 #include <QLabel>
 #include <QMainWindow>
 #include <stdbool.h>
 #include <sys/types.h>
+#include <string>
+#include <utility>
 
 namespace Ui {
 class MainWindow;
@@ -22,6 +25,9 @@ class MainWindow : public QMainWindow {
 public:
        MainWindow();
 
+       // HTTP callback. TODO: Does perhaps not belong to MainWindow?
+       std::pair<std::string, std::string> get_queue_status() const;
+
 //private:
        Ui::MainWindow *ui;
 
@@ -60,6 +66,9 @@ private:
        bool currently_deferring_model_changes = false;
        std::string current_change_id;
 
+       mutable std::mutex queue_status_mu;
+       std::string queue_status;  // Under queue_status_mu.
+
        void cue_in_clicked();
        void cue_out_clicked();
        void queue_clicked();
@@ -69,6 +78,7 @@ private:
        void live_player_clip_done();
        Clip live_player_get_next_clip();
        void live_player_clip_progress(double played_this_clip, double total_length);
+       void set_output_status(const std::string &status);
        void playlist_duplicate();
        void playlist_remove();
        void playlist_move(int delta);