add vlc as player
authorKonrad Rosenbaum <konrad@silmor.de>
Tue, 12 Jan 2021 19:41:54 +0000 (20:41 +0100)
committerKonrad Rosenbaum <konrad@silmor.de>
Tue, 12 Jan 2021 19:41:54 +0000 (20:41 +0100)
kino.cpp
kino.h

index 0274b6d..53d4494 100644 (file)
--- a/kino.cpp
+++ b/kino.cpp
@@ -49,11 +49,13 @@ Kino::Kino(QWidget* parent, Qt::WindowFlags f): QWidget(parent, f)
        bar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
        bar->setIconSize(QSize(48,48));
        QAction*a=mplayaction=bar->addAction(QIcon(":/play-dvd.png"),"&Play",this,SLOT(playMedia()));
-       a->setShortcut(QKeySequence("Alt+P"));
        a->setToolTip("Play Media: Alt-P\nPlay without full-screen: Alt-Shift-P");
-    addAction(a=new QAction(this));
-    a->setShortcut(QKeySequence("Alt+Shift+P"));
-    connect(a,&QAction::triggered,this,[this](){this->playMedia(false);});
+    QMenu*m=new QMenu;
+    a->setMenu(m);
+    a=m->addAction("Play with Xine",this,SLOT(playMedia()),QKeySequence("Alt+P"));
+    a=m->addAction("Play with Xine, no FullScreen",this,[this](){this->playMedia(false);},QKeySequence("Alt+Shift+P"));
+    a=m->addAction("Play with VLC",this,[this](){this->playMedia(true,Player::Vlc);},QKeySequence("Alt+V"));
+    a=m->addAction("Play with VLC, no FullScreen",this,[this](){this->playMedia(false,Player::Vlc);},QKeySequence("Alt+Shift+V"));
        a=meditaction=bar->addAction(QIcon(":/configure.png"),"&Edit Description",this,SLOT(editMedia()));
        a->setShortcut(QKeySequence("Alt+E"));
        a->setToolTip("Edit Media Description: Alt-E");
@@ -109,6 +111,7 @@ Kino::Kino(QWidget* parent, Qt::WindowFlags f): QWidget(parent, f)
        csplit->setStretchFactor(0,15);
        csplit->addWidget(mText=new QTextBrowser);
        mText->setFrameShape(QFrame::StyledPanel);
+    mText->setLineWrapMode(QTextEdit::WidgetWidth);
        csplit->setStretchFactor(1,3);
        split->setSizes(QList<int>()<<100<<500);
 
@@ -162,7 +165,7 @@ void Kino::findRoot()
                if(std::find_if(mvolumes.constBegin(),mvolumes.constEnd(),[&id](const Volume&v){return v.volumeId()==id;})==mvolumes.constEnd())
                        mvolumes<<Volume(id);
        //sort
-       qSort(mvolumes.begin(),mvolumes.end(),[](const Volume&a,const Volume&b){
+       std::sort(mvolumes.begin(),mvolumes.end(),[](const Volume&a,const Volume&b){
                if(a.isCached()==b.isCached())return a.label()<b.label();
                return b.isCached();
        });
@@ -314,11 +317,11 @@ void Kino::updateCurrent(QString l)
 
 }
 
-void Kino::playMedia(bool full)
+void Kino::playMedia(bool full,Player player)
 {
        const QString p=getCurrent();
        //play
-       if(play(p,full)){
+       if(play(p,full,player)){
                //remember
                if(mrecent.contains(p))
                        mrecent.removeAll(p);
@@ -366,19 +369,23 @@ void Kino::gotoRecent(QString id)
        }
 }
 
-bool Kino::play(QString p,bool f)
+bool Kino::play(QString p,bool f,Player player)
 {
        auto &vol=getVolume(p);
        if(vol.volumeId().isNull())return false;
        auto &ent=getEntry(vol,p);
        if(!ent.isPlayable())return false;
        //construct MRL
-       QString mrl=QString("dvd:%1/%2").arg(vol.rootdir()).arg(ent.directory());
+       QString mrl=QString("dvd://%1/%2").arg(vol.rootdir()).arg(ent.directory());
        //start; TODO: keep track of running processes
     QStringList args;
-    if(f)args<<"-f";
+    if(f){
+        if(player==Player::Xine)args<<"-f";
+        else if(player==Player::Vlc)args<<"--fullscreen";
+        else qDebug()<<"OOOOPS! Unknown Player type!";
+    }
     args<<mrl;
-       QProcess::startDetached("xine",args);
+       QProcess::startDetached(player==Player::Xine?"xine":"vlc",args);
        return true;
 }
 
diff --git a/kino.h b/kino.h
index af85ad9..11af822 100644 (file)
--- a/kino.h
+++ b/kino.h
@@ -38,9 +38,10 @@ struct History_s
 class Kino:public QWidget
 {
        Q_OBJECT
+       enum class Player {Xine,Vlc,Default=Xine};
 public:
        ///instantiates main window, loads old state
-       explicit Kino(QWidget* parent = 0, Qt::WindowFlags f = 0);
+       explicit Kino(QWidget* parent = 0, Qt::WindowFlags f = Qt::WindowFlags());
        ///deletes main window, saves state
        ~Kino();
 private slots:
@@ -49,7 +50,7 @@ private slots:
        ///edit media/path properties
        void editMedia();
        ///play media via play button
-       void playMedia(bool full=true);
+       void playMedia(bool full=true,Player p=Player::Default);
        ///goto recently played disc
        void gotoRecent(QString id=QString());
        ///called when selection changes
@@ -88,7 +89,7 @@ private:
     void sync();
 
        ///helper: plays media
-       bool play(QString,bool);
+       bool play(QString,bool,Player p);
 
        QStandardItemModel *mModel=0;
        QLabel *mPicture=0;