|
@@ -31,6 +31,18 @@ void MediaControls::OBSMediaStarted(void *data, calldata_t *)
|
|
|
QMetaObject::invokeMethod(media, "SetPlayingState");
|
|
|
}
|
|
|
|
|
|
+void MediaControls::OBSMediaNext(void *data, calldata_t *)
|
|
|
+{
|
|
|
+ MediaControls *media = static_cast<MediaControls *>(data);
|
|
|
+ QMetaObject::invokeMethod(media, "UpdateSlideCounter");
|
|
|
+}
|
|
|
+
|
|
|
+void MediaControls::OBSMediaPrevious(void *data, calldata_t *)
|
|
|
+{
|
|
|
+ MediaControls *media = static_cast<MediaControls *>(data);
|
|
|
+ QMetaObject::invokeMethod(media, "UpdateSlideCounter");
|
|
|
+}
|
|
|
+
|
|
|
MediaControls::MediaControls(QWidget *parent)
|
|
|
: QWidget(parent), ui(new Ui::MediaControls)
|
|
|
{
|
|
@@ -196,6 +208,7 @@ void MediaControls::SetPlayingState()
|
|
|
|
|
|
prevPaused = false;
|
|
|
|
|
|
+ UpdateSlideCounter();
|
|
|
StartMediaTimer();
|
|
|
}
|
|
|
|
|
@@ -219,8 +232,15 @@ void MediaControls::SetRestartState()
|
|
|
QTStr("ContextBar.MediaControls.RestartMedia"));
|
|
|
|
|
|
ui->slider->setValue(0);
|
|
|
- ui->timerLabel->setText("--:--:--");
|
|
|
- ui->durationLabel->setText("--:--:--");
|
|
|
+
|
|
|
+ if (!isSlideshow) {
|
|
|
+ ui->timerLabel->setText("--:--:--");
|
|
|
+ ui->durationLabel->setText("--:--:--");
|
|
|
+ } else {
|
|
|
+ ui->timerLabel->setText("-");
|
|
|
+ ui->durationLabel->setText("-");
|
|
|
+ }
|
|
|
+
|
|
|
ui->slider->setEnabled(false);
|
|
|
|
|
|
StopMediaTimer();
|
|
@@ -255,9 +275,6 @@ void MediaControls::RefreshControls()
|
|
|
|
|
|
isSlideshow = strcmp(id, "slideshow") == 0;
|
|
|
ui->slider->setVisible(!isSlideshow);
|
|
|
- ui->timerLabel->setVisible(!isSlideshow);
|
|
|
- ui->label->setVisible(!isSlideshow);
|
|
|
- ui->durationLabel->setVisible(!isSlideshow);
|
|
|
ui->emptySpaceAgain->setVisible(isSlideshow);
|
|
|
|
|
|
obs_media_state state = obs_source_media_get_state(source);
|
|
@@ -278,7 +295,10 @@ void MediaControls::RefreshControls()
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- SetSliderPosition();
|
|
|
+ if (isSlideshow)
|
|
|
+ UpdateSlideCounter();
|
|
|
+ else
|
|
|
+ SetSliderPosition();
|
|
|
}
|
|
|
|
|
|
OBSSource MediaControls::GetSource()
|
|
@@ -299,6 +319,8 @@ void MediaControls::SetSource(OBSSource source)
|
|
|
sigs.emplace_back(sh, "media_stopped", OBSMediaStopped, this);
|
|
|
sigs.emplace_back(sh, "media_started", OBSMediaStarted, this);
|
|
|
sigs.emplace_back(sh, "media_ended", OBSMediaStopped, this);
|
|
|
+ sigs.emplace_back(sh, "media_next", OBSMediaNext, this);
|
|
|
+ sigs.emplace_back(sh, "media_previous", OBSMediaPrevious, this);
|
|
|
} else {
|
|
|
weakSource = nullptr;
|
|
|
}
|
|
@@ -467,3 +489,27 @@ void MediaControls::MoveSliderBackwards(int seconds)
|
|
|
obs_source_media_set_time(source, ms);
|
|
|
SetSliderPosition();
|
|
|
}
|
|
|
+
|
|
|
+void MediaControls::UpdateSlideCounter()
|
|
|
+{
|
|
|
+ if (!isSlideshow)
|
|
|
+ return;
|
|
|
+
|
|
|
+ OBSSource source = OBSGetStrongRef(weakSource);
|
|
|
+
|
|
|
+ if (!source)
|
|
|
+ return;
|
|
|
+
|
|
|
+ proc_handler_t *ph = obs_source_get_proc_handler(source);
|
|
|
+ calldata_t cd = {};
|
|
|
+
|
|
|
+ proc_handler_call(ph, "current_index", &cd);
|
|
|
+ int slide = calldata_int(&cd, "current_index");
|
|
|
+
|
|
|
+ proc_handler_call(ph, "total_files", &cd);
|
|
|
+ int total = calldata_int(&cd, "total_files");
|
|
|
+ calldata_free(&cd);
|
|
|
+
|
|
|
+ ui->timerLabel->setText(QString::number(slide + 1));
|
|
|
+ ui->durationLabel->setText(QString::number(total));
|
|
|
+}
|