diff --git a/obs_scene_switcher.py b/obs_scene_switcher.py index 148a8f0..8830506 100644 --- a/obs_scene_switcher.py +++ b/obs_scene_switcher.py @@ -3,6 +3,7 @@ from urllib.parse import urlparse, parse_qs import threading import obspython as obs + def set_current_scene(scene_name): scenes = obs.obs_frontend_get_scenes() for scene in scenes: @@ -12,6 +13,7 @@ def set_current_scene(scene_name): return 0 return 1 + class RqstHandler(BaseHTTPRequestHandler): def do_GET(self): @@ -25,12 +27,15 @@ class RqstHandler(BaseHTTPRequestHandler): self.send_response(200) self.end_headers() + def log_message(self, format, *args): pass + def run(name): httpd = HTTPServer(('127.0.0.1', 9302), RqstHandler) httpd.serve_forever() + t = threading.Thread(target=run, args=(1,), daemon=True) t.start() diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9e016ef..4231272 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -20,10 +20,10 @@ MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) { const auto mainWidget = new QWidget(this); const auto rootLyt = new QVBoxLayout; const auto controlsLayout = new QGridLayout; - const auto slideView = new SlideView(this); + m_slideView = new SlideView(this); setCentralWidget(mainWidget); mainWidget->setLayout(rootLyt); - rootLyt->addWidget(slideView); + rootLyt->addWidget(m_slideView); rootLyt->addLayout(controlsLayout); // setup slide controls const auto btnPrevSong = new QPushButton(tr("Previous Song (Left)"), this); @@ -52,12 +52,12 @@ MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) { connect(btnBlankSlides, &QPushButton::clicked, &m_openlpClient, &OpenLPClient::blankScreen); connect(btnBlankSlides, &QPushButton::clicked, &m_obsClient, &OBSClient::hideSlides); connect(btnShowSlides, &QPushButton::clicked, &m_openlpClient, &OpenLPClient::showSlides); - connect(&m_openlpClient, &OpenLPClient::pollUpdate, slideView, &SlideView::pollUpdate); - connect(&m_openlpClient, &OpenLPClient::songListUpdate, slideView, &SlideView::songListUpdate); - connect(&m_openlpClient, &OpenLPClient::slideListUpdate, slideView, &SlideView::slideListUpdate); - connect(&m_openlpClient, &OpenLPClient::pollFailed, slideView, &SlideView::reset); - connect(slideView, &SlideView::songChanged, &m_openlpClient, &OpenLPClient::changeSong); - connect(slideView, &SlideView::slideChanged, &m_openlpClient, &OpenLPClient::changeSlide); + connect(&m_openlpClient, &OpenLPClient::pollUpdate, m_slideView, &SlideView::pollUpdate); + connect(&m_openlpClient, &OpenLPClient::songListUpdate, m_slideView, &SlideView::songListUpdate); + connect(&m_openlpClient, &OpenLPClient::slideListUpdate, m_slideView, &SlideView::slideListUpdate); + connect(&m_openlpClient, &OpenLPClient::pollFailed, m_slideView, &SlideView::reset); + connect(m_slideView, &SlideView::songChanged, &m_openlpClient, &OpenLPClient::changeSong); + connect(m_slideView, &SlideView::slideChanged, &m_openlpClient, &OpenLPClient::changeSlide); // setup scene selector const auto btnObsHideSlides = new QPushButton(tr("Hide Slides in OBS (;)"), mainWidget); const auto btnObsShowSlides = new QPushButton(tr("Show Slides in OBS (')"), mainWidget); @@ -107,5 +107,7 @@ void MainWindow::obsConnectionLost() { void MainWindow::refreshStatusBar() { const auto openLpStatus = m_openLpConnected ? tr("OpenLP: Connected") : tr("OpenLP: Not Connected"); const auto obsStatus = m_obsConnected ? tr("OBS: Connected") : tr("OBS: Not Connected"); - statusBar()->showMessage(openLpStatus + " | " + obsStatus); + const auto nextSong = m_slideView->getNextSong(); + const auto nextSongTxt = m_openLpConnected ? " | Next Song: " + nextSong : ""; + statusBar()->showMessage(openLpStatus + " | " + obsStatus + nextSongTxt); } diff --git a/src/mainwindow.hpp b/src/mainwindow.hpp index 00b2ed4..3b870a5 100644 --- a/src/mainwindow.hpp +++ b/src/mainwindow.hpp @@ -21,6 +21,7 @@ class MainWindow: public QMainWindow { private: OBSClient m_obsClient; OpenLPClient m_openlpClient; + class SlideView *m_slideView = nullptr; bool m_openLpConnected = false; bool m_obsConnected = false; diff --git a/src/slideview.cpp b/src/slideview.cpp index 223cdae..198b3c8 100644 --- a/src/slideview.cpp +++ b/src/slideview.cpp @@ -33,6 +33,15 @@ SlideView::SlideView(QWidget *parent): QWidget(parent) { connect(m_slideTable, &QTableWidget::currentCellChanged, this, &SlideView::slideChanged); } +QString SlideView::getNextSong() const { + const auto cnt = m_songSelector->count(); + const auto idx = m_songSelector->currentIndex() + 1; + if (idx < cnt) { + return m_songSelector->itemText(idx); + } + return ""; +} + void SlideView::pollUpdate(QString songName, int slide) { if (songName != m_currentSong) { m_currentSong = songName; diff --git a/src/slideview.hpp b/src/slideview.hpp index eb9566a..6abf69f 100644 --- a/src/slideview.hpp +++ b/src/slideview.hpp @@ -19,6 +19,8 @@ class SlideView: public QWidget { public: explicit SlideView(QWidget *parent = nullptr); + QString getNextSong() const; + public slots: void pollUpdate(QString songId, int slideNum);