]> git.sur5r.net Git - minitube/blobdiff - src/mediaview.cpp
New upstream version 3.4
[minitube] / src / mediaview.cpp
index e6343ab9b2c498507ff3973611047a040f157c1b..46eb8ead94571fd0d95036c2b01245daa086ff51 100644 (file)
@@ -34,6 +34,7 @@ $END_LICENSE */
 #include "videoarea.h"
 #ifdef APP_ACTIVATION
 #include "activation.h"
+#include "activationview.h"
 #endif
 #ifdef APP_EXTRA
 #include "extra.h"
@@ -132,7 +133,16 @@ void MediaView::initialize() {
 #ifdef APP_ACTIVATION
     demoTimer = new QTimer(this);
     demoTimer->setSingleShot(true);
-    connect(demoTimer, &QTimer::timeout, mainWindow, &MainWindow::showActivationView,
+    connect(
+            demoTimer, &QTimer::timeout, this,
+            [this] {
+                if (media->state() != Media::PlayingState) return;
+                media->pause();
+                connect(
+                        ActivationView::instance(), &ActivationView::done, media,
+                        [this] { media->play(); }, Qt::UniqueConnection);
+                MainWindow::instance()->showActivationView();
+            },
             Qt::QueuedConnection);
 #endif
 
@@ -153,6 +163,45 @@ void MediaView::initialize() {
     for (auto *name : videoActionNames) {
         currentVideoActions.append(mainWindow->getAction(name));
     }
+
+    for (int i = 0; i < 10; ++i) {
+        QAction *action = new QAction(QString());
+        action->setShortcut(Qt::Key_0 + i);
+        action->setAutoRepeat(false);
+        connect(action, &QAction::triggered, this, [this, i] {
+            qint64 duration = media->duration();
+            // dur : pos = 100 : i*10
+            qint64 position = (duration * (i * 10)) / 100;
+            media->seek(position);
+        });
+        addAction(action);
+        playingVideoActions << action;
+    }
+
+    QAction *leftAction = new QAction(tr("Rewind %1 seconds").arg(10));
+    leftAction->setShortcut(Qt::Key_Left);
+    leftAction->setAutoRepeat(false);
+    connect(leftAction, &QAction::triggered, this, [this] {
+        qint64 position = media->position();
+        position -= 10000;
+        if (position < 0) position = 0;
+        media->seek(position);
+    });
+    addAction(leftAction);
+    playingVideoActions << leftAction;
+
+    QAction *rightAction = new QAction(tr("Fast forward %1 seconds").arg(10));
+    rightAction->setShortcut(Qt::Key_Right);
+    rightAction->setAutoRepeat(false);
+    connect(rightAction, &QAction::triggered, this, [this] {
+        qint64 position = media->position();
+        position += 10000;
+        qint64 duration = media->duration();
+        if (position > duration) position = duration;
+        media->seek(position);
+    });
+    addAction(rightAction);
+    playingVideoActions << rightAction;
 }
 
 void MediaView::setMedia(Media *media) {
@@ -319,6 +368,10 @@ void MediaView::mediaStateChanged(Media::State state) {
         handleError(media->errorString());
     }
 
+    bool enablePlayingVideoActions = state == Media::PlayingState || state == Media::PausedState;
+    for (QAction *action : qAsConst(playingVideoActions))
+        action->setEnabled(enablePlayingVideoActions);
+
     if (state == Media::PlayingState) {
         bool res = Idle::preventDisplaySleep(QString("%1 is playing").arg(Constants::NAME));
         if (!res) qWarning() << "Error disabling idle display sleep" << Idle::displayErrorMessage();
@@ -497,8 +550,8 @@ void MediaView::gotStreamUrl(const QString &streamUrl, const QString &audioUrl)
     }
 
 #ifdef APP_ACTIVATION
-    if (!Activation::instance().isActivated() && !demoTimer->isActive()) {
-        int ms = (60000 * 5) + (qrand() % (60000 * 5));
+    if (!demoTimer->isActive() && !Activation::instance().isActivated()) {
+        int ms = (60000 * 2) + (QRandomGenerator::global()->generate() % (60000 * 2));
         demoTimer->start(ms);
     }
 #endif