1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
/*
SPDX-FileCopyrightText: 2022 Ilya Pominov <ipominov@astralinux.ru>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef CLIPLUGIN_H
#define CLIPLUGIN_H
#include "cliinterface.h"
using namespace Kerfuffle;
struct ArjFileEntry;
class CliPlugin : public Kerfuffle::CliInterface
{
Q_OBJECT
public:
explicit CliPlugin(QObject *parent, const QVariantList &args);
~CliPlugin() override;
bool addFiles(const QList<Kerfuffle::Archive::Entry *> &files,
const Kerfuffle::Archive::Entry *destination,
const Kerfuffle::CompressionOptions &options,
uint numberOfEntriesToAdd = 0) override;
bool
moveFiles(const QList<Kerfuffle::Archive::Entry *> &files, Kerfuffle::Archive::Entry *destination, const Kerfuffle::CompressionOptions &options) override;
void resetParsing() override;
bool readListLine(const QString &line) override;
bool readExtractLine(const QString &line) override;
bool isFileExistsMsg(const QString &line) override;
bool isFileExistsFileName(const QString &line) override;
bool isNewMovedFileNamesMsg(const QString &line) override;
protected:
bool handleLine(const QString &line) override;
protected Q_SLOTS:
void processFinished(int exitCode, QProcess::ExitStatus exitStatus) override;
private:
enum ParseState {
ParseStateTitle,
ParseStateProcessing,
ParseStateArchiveDateTime,
ParseStateArchiveComments,
ParseStateEntryFileHeader,
ParseStateEntryFileName,
ParseStateEntryFileProperty,
ParseStateEntryFileDTA,
ParseStateEntryFileDTC,
ParseStateEntryTotal,
} m_parseState;
void setupCliProperties();
void ignoreLines(int lines, ParseState nextState);
bool tryAddCurFileProperties(const QString &line);
bool tryAddCurFileComment(const QString &line);
void sendCurFileEntry();
bool readLine(const QString &line);
int m_remainingIgnoreLines = 0;
QStringList m_headerComment;
QScopedPointer<ArjFileEntry> m_currentParsedFile;
bool m_testPassed = true;
QList<Archive::Entry *> m_renamedFiles;
};
#endif // CLIPLUGIN_H
|