/* * Copyright (c) 2014-2026 Meltytech, LLC * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef MLTXMLCHECKER_H #define MLTXMLCHECKER_H #include #include #include #include #include #include #include #include #include class QUIDevice; class MltXmlChecker { public: enum { ShotcutHashRole = Qt::UserRole + 1 }; enum { MissingColumn = 0, ReplacementColumn, ColumnCount }; MltXmlChecker(); QXmlStreamReader::Error check(const QString &fileName); QString errorString() const; bool needsGPU() const { return m_needsGPU; } bool needsCPU() const { return m_needsCPU; } bool hasEffects() const { return m_hasEffects; } bool isConverted() const { return m_isConverted; } bool isCorrected() const { return m_isCorrected; } bool isUpdated() const { return m_isUpdated; } QTemporaryFile &tempFile() const { return *m_tempFile; } QStandardItemModel &unlinkedFilesModel() { return m_unlinkedFilesModel; } QString shotcutVersion() const { return m_shotcutVersion; } private: typedef QPair MltProperty; void readMlt(); void processProperties(); void checkInAndOutPoints(); bool checkNumericString(QString &value); bool fixWebVfxPath(QString &resource); bool readResourceProperty(const QString &name, QString &value); void checkGpuEffects(const QString &mlt_service); void checkCpuEffects(const QString &mlt_service); void checkUnlinkedFile(const QString &mlt_service); bool fixUnlinkedFile(QString &value); void fixStreamIndex(MltProperty &property); bool fixVersion1701WindowsPathBug(QString &value); void checkIncludesSelf(QVector &properties); void checkLumaAlphaOver(const QString &mlt_service, QVector &properties); void updateMaskApply(const QString &mlt_service, QVector &properties); void checkAudioGain(const QString &mlt_service, QVector &properties); void replaceWebVfxCropFilters(QString &mlt_service, QVector &properties); void replaceWebVfxChoppyFilter(QString &mlt_service, QVector &properties); void replaceMovitServices(QString &mlt_service, QVector &properties); void checkForProxy(const QString &mlt_service, QVector &properties); bool checkMltVersion(); QXmlStreamReader m_xml; QXmlStreamWriter m_newXml; bool m_needsGPU; bool m_needsCPU; bool m_hasEffects; bool m_isConverted; bool m_isCorrected; bool m_isUpdated; QChar m_decimalPoint; QScopedPointer m_tempFile; bool m_numericValueChanged; QFileInfo m_fileInfo; QStandardItemModel m_unlinkedFilesModel; QString mlt_class; QVector m_properties; struct MltXmlResource { QFileInfo info; QString hash; QString newHash; QString newDetail; QString prefix; QString suffix; int audio_index, video_index; bool isProxy; bool notProxyMeta; void clear() { info.setFile(QString()); hash.clear(); newHash.clear(); newDetail.clear(); prefix.clear(); suffix.clear(); audio_index = video_index = -1; isProxy = false; notProxyMeta = false; } } m_resource; QVersionNumber m_mltVersion; QString m_shotcutVersion; QString m_processingMode; bool m_isTractorTransition; }; #endif // MLTXMLCHECKER_H