File indexing completed on 2024-06-09 04:53:02

0001 /*
0002     SPDX-FileCopyrightText: 2007-2009 Sergio Pistone <sergio_pistone@yahoo.com.ar>
0003     SPDX-FileCopyrightText: 2010-2022 Mladen Milinkovic <max@smoothware.net>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #ifndef FORMATMANAGER_H
0009 #define FORMATMANAGER_H
0010 
0011 #include "format.h"
0012 
0013 #include <QString>
0014 #include <QStringList>
0015 #include <QMap>
0016 
0017 #include <QUrl>
0018 #include <KEncodingProber>
0019 
0020 QT_FORWARD_DECLARE_CLASS(QTextCodec)
0021 
0022 namespace SubtitleComposer {
0023 class InputFormat;
0024 class OutputFormat;
0025 class Subtitle;
0026 class FormatManager
0027 {
0028 public:
0029     enum Status {
0030         SUCCESS = 1,
0031         CANCEL = 0,
0032         ERROR = -1
0033     };
0034     static FormatManager & instance();
0035 
0036     bool hasInput(const QString &name) const;
0037     const InputFormat * input(const QString &name) const;
0038     QStringList inputNames() const;
0039 
0040     Status readSubtitle(Subtitle &subtitle, bool primary, const QUrl &url,
0041                         QTextCodec **codec, QString *format = nullptr) const;
0042 
0043     bool hasOutput(const QString &name) const;
0044     const OutputFormat * output(const QString &name) const;
0045     const OutputFormat * defaultOutput() const;
0046     QStringList outputNames() const;
0047 
0048     bool writeSubtitle(const Subtitle &subtitle, bool primary, const QUrl &url,
0049                        QTextCodec *codec, const QString &format, bool overwrite) const;
0050 
0051 protected:
0052     FormatManager();
0053     ~FormatManager();
0054 
0055     Status readBinary(Subtitle &subtitle, const QUrl &url, bool primary,
0056                       QTextCodec **codec, QString *format) const;
0057     Status readText(Subtitle &subtitle, const QUrl &url, bool primary,
0058                     QTextCodec **codec, QString *formatName) const;
0059 
0060     QMap<QString, InputFormat *> m_inputFormats;
0061     QMap<QString, OutputFormat *> m_outputFormats;
0062 };
0063 }
0064 #endif