From: Steinar H. Gunderson Date: Sun, 14 Oct 2018 17:53:39 +0000 (+0200) Subject: Expose the queue status over HTTP. X-Git-Tag: 1.8.0~76^2~58 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=7215da9bf2c630552d2fb09e4ca8acc0b6c6d245;p=nageru Expose the queue status over HTTP. --- diff --git a/main.cpp b/main.cpp index b81471d..1266c2a 100644 --- 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(); diff --git a/mainwindow.cpp b/mainwindow.cpp index 0932a75..2fb897b 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -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 lock(queue_status_mu); + queue_status = status; +} + +pair MainWindow::get_queue_status() const { + lock_guard lock(queue_status_mu); + return {queue_status, "text/plain"}; +} diff --git a/mainwindow.h b/mainwindow.h index 103dd83..16a4baa 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -5,10 +5,13 @@ #include "db.h" #include "state.pb.h" +#include #include #include #include #include +#include +#include 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 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);