File indexing completed on 2024-04-28 04:49:19

0001 /*
0002  * SPDX-FileCopyrightText: 2023 George Florea Bănuș <georgefb899@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "mpvpreview.h"
0008 
0009 #include <MpvController>
0010 
0011 #include "generalsettings.h"
0012 #include "mpvproperties.h"
0013 
0014 MpvPreview::MpvPreview()
0015 {
0016     observeProperty(MpvProperties::self()->Position, MPV_FORMAT_DOUBLE);
0017     observeProperty(MpvProperties::self()->AspectRatio, MPV_FORMAT_DOUBLE);
0018 
0019     setProperty(MpvProperties::self()->Mute, true);
0020     setProperty(MpvProperties::self()->Pause, true);
0021     setProperty(MpvProperties::self()->ReallyQuiet, true);
0022 
0023     setProperty(MpvProperties::self()->HardwareDecoding, QStringLiteral("auto-safe"));
0024     setProperty(MpvProperties::self()->AccurateSeek, GeneralSettings::accuratePreviewThumbnail());
0025     setProperty(MpvProperties::self()->AudioId, false);
0026     setProperty(MpvProperties::self()->AudioFileAuto, false);
0027     setProperty(MpvProperties::self()->SubtitleId, false);
0028     setProperty(MpvProperties::self()->SubtitleAuto, false);
0029     setProperty(MpvProperties::self()->OsdLevel, 0);
0030     setProperty(MpvProperties::self()->AudioPitchCorection, false);
0031     setProperty(MpvProperties::self()->UseTextOsd, false);
0032     setProperty(MpvProperties::self()->AudioDisplay, false);
0033 
0034     connect(mpvController(), &MpvController::propertyChanged, this, [=](const QString &property, const QVariant &value) {
0035         Q_UNUSED(value)
0036         if (property == MpvProperties::self()->AspectRatio) {
0037             Q_EMIT aspectRatioChanged();
0038         }
0039     });
0040     connect(this, &MpvPreview::fileChanged, this, &MpvPreview::loadFile);
0041     connect(this, &MpvPreview::ready, this, [=]() {
0042         m_isReady = true;
0043         loadFile();
0044     });
0045 }
0046 
0047 void MpvPreview::loadFile()
0048 {
0049     if (m_isReady && !m_file.isEmpty()) {
0050         command(QStringList() << QStringLiteral("loadfile") << m_file);
0051     }
0052 }
0053 
0054 double MpvPreview::position()
0055 {
0056     return getProperty(MpvProperties::self()->Position).toDouble();
0057 }
0058 
0059 void MpvPreview::setPosition(double value)
0060 {
0061     if (qFuzzyCompare(m_position, value)) {
0062         return;
0063     }
0064     setPropertyAsync(MpvProperties::self()->Position, value);
0065 }
0066 
0067 double MpvPreview::aspectRatio()
0068 {
0069     return getProperty(MpvProperties::self()->AspectRatio).toDouble();
0070 }
0071 
0072 QString MpvPreview::file() const
0073 {
0074     return m_file;
0075 }
0076 
0077 void MpvPreview::setFile(const QString &_file)
0078 {
0079     if (m_file == _file) {
0080         return;
0081     }
0082     m_file = _file;
0083     auto url = QUrl::fromUserInput(m_file);
0084     setIsLocalFile(url.isLocalFile());
0085 
0086     Q_EMIT fileChanged();
0087 }
0088 
0089 bool MpvPreview::accuratePreview() const
0090 {
0091     return m_accuratePreview;
0092 }
0093 
0094 void MpvPreview::setAccuratePreview(bool _accuratePreview)
0095 {
0096     if (m_accuratePreview == _accuratePreview) {
0097         return;
0098     }
0099     m_accuratePreview = _accuratePreview;
0100     setProperty(MpvProperties::self()->AccurateSeek, _accuratePreview);
0101     Q_EMIT accuratePreviewChanged();
0102 }
0103 
0104 bool MpvPreview::isLocalFile() const
0105 {
0106     return m_isLocalFile;
0107 }
0108 
0109 void MpvPreview::setIsLocalFile(bool _isLocalFile)
0110 {
0111     if (m_isLocalFile == _isLocalFile) {
0112         return;
0113     }
0114     m_isLocalFile = _isLocalFile;
0115     Q_EMIT isLocalFileChanged();
0116 }
0117 
0118 #include "moc_mpvpreview.cpp"