File indexing completed on 2024-05-12 05:50:21

0001 /*
0002     SPDX-FileCopyrightText: 2009 Harald Hvaal <haraldhv@stud.ntnu.no>
0003     SPDX-FileCopyrightText: 2009-2010 Raphael Kubo da Costa <rakuco@FreeBSD.org>
0004     SPDX-FileCopyrightText: 2015-2016 Ragnar Thomsen <rthomsen6@gmail.com>
0005     SPDX-FileCopyrightText: 2016 Vladyslav Batyrenko <mvlabat@gmail.com>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #ifndef CLIPLUGIN_H
0011 #define CLIPLUGIN_H
0012 
0013 #include "cliinterface.h"
0014 
0015 class CliPlugin : public Kerfuffle::CliInterface
0016 {
0017     Q_OBJECT
0018 
0019 public:
0020     explicit CliPlugin(QObject *parent, const QVariantList &args);
0021     ~CliPlugin() override;
0022 
0023     void resetParsing() override;
0024     bool readListLine(const QString &line) override;
0025     bool readExtractLine(const QString &line) override;
0026     bool hasBatchExtractionProgress() const override;
0027     bool isPasswordPrompt(const QString &line) override;
0028     bool isWrongPasswordMsg(const QString &line) override;
0029     bool isCorruptArchiveMsg(const QString &line) override;
0030     bool isDiskFullMsg(const QString &line) override;
0031     bool isFileExistsMsg(const QString &line) override;
0032     bool isFileExistsFileName(const QString &line) override;
0033     bool isLocked() const override;
0034 
0035 private:
0036     enum ParseState {
0037         ParseStateTitle = 0,
0038         ParseStateComment,
0039         ParseStateHeader,
0040         ParseStateEntryFileName,
0041         ParseStateEntryDetails,
0042         ParseStateLinkTarget
0043     } m_parseState;
0044 
0045     void setupCliProperties();
0046 
0047     bool handleUnrar5Line(const QString &line);
0048     void handleUnrar5Entry();
0049     bool handleUnrar4Line(const QString &line);
0050     void handleUnrar4Entry();
0051     void ignoreLines(int lines, ParseState nextState);
0052 
0053     QStringList m_unrar4Details;
0054     QHash<QString, QString> m_unrar5Details;
0055 
0056     QString m_unrarVersion;
0057     bool m_isUnrar5;
0058     bool m_isPasswordProtected;
0059     bool m_isSolid;
0060     bool m_isRAR5;
0061     bool m_isLocked;
0062 
0063     int m_remainingIgnoreLines;
0064     int m_linesComment;
0065 };
0066 
0067 #endif // CLIPLUGIN_H