File indexing completed on 2024-05-12 05:50:20
0001 /* 0002 SPDX-FileCopyrightText: 2022 Ilya Pominov <ipominov@astralinux.ru> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef CLIPLUGIN_H 0008 #define CLIPLUGIN_H 0009 0010 #include "cliinterface.h" 0011 0012 using namespace Kerfuffle; 0013 0014 struct ArjFileEntry; 0015 0016 class CliPlugin : public Kerfuffle::CliInterface 0017 { 0018 Q_OBJECT 0019 0020 public: 0021 explicit CliPlugin(QObject *parent, const QVariantList &args); 0022 ~CliPlugin() override; 0023 0024 bool addFiles(const QVector<Kerfuffle::Archive::Entry *> &files, 0025 const Kerfuffle::Archive::Entry *destination, 0026 const Kerfuffle::CompressionOptions &options, 0027 uint numberOfEntriesToAdd = 0) override; 0028 bool 0029 moveFiles(const QVector<Kerfuffle::Archive::Entry *> &files, Kerfuffle::Archive::Entry *destination, const Kerfuffle::CompressionOptions &options) override; 0030 0031 void resetParsing() override; 0032 bool readListLine(const QString &line) override; 0033 bool readExtractLine(const QString &line) override; 0034 bool isFileExistsMsg(const QString &line) override; 0035 bool isFileExistsFileName(const QString &line) override; 0036 bool isNewMovedFileNamesMsg(const QString &line) override; 0037 0038 protected: 0039 bool handleLine(const QString &line) override; 0040 0041 protected Q_SLOTS: 0042 void processFinished(int exitCode, QProcess::ExitStatus exitStatus) override; 0043 0044 private: 0045 enum ParseState { 0046 ParseStateTitle, 0047 ParseStateProcessing, 0048 ParseStateArchiveDateTime, 0049 ParseStateArchiveComments, 0050 ParseStateEntryFileHeader, 0051 ParseStateEntryFileName, 0052 ParseStateEntryFileProperty, 0053 ParseStateEntryFileDTA, 0054 ParseStateEntryFileDTC, 0055 ParseStateEntryTotal, 0056 } m_parseState; 0057 0058 void setupCliProperties(); 0059 void ignoreLines(int lines, ParseState nextState); 0060 bool tryAddCurFileProperties(const QString &line); 0061 bool tryAddCurFileComment(const QString &line); 0062 void sendCurFileEntry(); 0063 bool readLine(const QString &line); 0064 0065 int m_remainingIgnoreLines = 0; 0066 QStringList m_headerComment; 0067 QScopedPointer<ArjFileEntry> m_currentParsedFile; 0068 bool m_testPassed = true; 0069 QVector<Archive::Entry *> m_renamedFiles; 0070 }; 0071 0072 #endif // CLIPLUGIN_H