File indexing completed on 2024-05-12 16:06:33

0001 /*
0002     SPDX-FileCopyrightText: 2007 Pino Toscano <pino@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "unrarflavours.h"
0008 
0009 #include <QRegularExpression>
0010 
0011 ProcessArgs::ProcessArgs()
0012 {
0013 }
0014 
0015 ProcessArgs::ProcessArgs(const QStringList &args, bool lsar)
0016     : appArgs {args}
0017     , useLsar {lsar}
0018 {
0019 }
0020 
0021 UnrarFlavour::UnrarFlavour()
0022 {
0023 }
0024 
0025 UnrarFlavour::~UnrarFlavour()
0026 {
0027 }
0028 
0029 void UnrarFlavour::setFileName(const QString &fileName)
0030 {
0031     mFileName = fileName;
0032 }
0033 
0034 QString UnrarFlavour::fileName() const
0035 {
0036     return mFileName;
0037 }
0038 
0039 NonFreeUnrarFlavour::NonFreeUnrarFlavour()
0040     : UnrarFlavour()
0041 {
0042 }
0043 
0044 QStringList NonFreeUnrarFlavour::processListing(const QStringList &data)
0045 {
0046     // unrar-nonfree just lists the files
0047     return data;
0048 }
0049 
0050 QString NonFreeUnrarFlavour::name() const
0051 {
0052     return QStringLiteral("unrar-nonfree");
0053 }
0054 
0055 ProcessArgs NonFreeUnrarFlavour::processListArgs(const QString &fileName) const
0056 {
0057     return ProcessArgs(QStringList() << QStringLiteral("lb") << fileName, false);
0058 }
0059 
0060 ProcessArgs NonFreeUnrarFlavour::processOpenArchiveArgs(const QString &fileName, const QString &path) const
0061 {
0062     return ProcessArgs(QStringList() << QStringLiteral("e") << fileName << path + QLatin1Char('/'), false);
0063 }
0064 
0065 FreeUnrarFlavour::FreeUnrarFlavour()
0066     : UnrarFlavour()
0067 {
0068 }
0069 
0070 QStringList FreeUnrarFlavour::processListing(const QStringList &data)
0071 {
0072     static const QRegularExpression re(QStringLiteral("^ ([^/]+/([^\\s]+))$"));
0073 
0074     QStringList newdata;
0075     for (const QString &line : data) {
0076         QRegularExpressionMatch match = re.match(line);
0077         if (match.hasMatch()) {
0078             newdata.append(match.captured(1));
0079         }
0080     }
0081     return newdata;
0082 }
0083 
0084 QString FreeUnrarFlavour::name() const
0085 {
0086     return QStringLiteral("unrar-free");
0087 }
0088 
0089 ProcessArgs FreeUnrarFlavour::processListArgs(const QString &) const
0090 {
0091     return ProcessArgs();
0092 }
0093 
0094 ProcessArgs FreeUnrarFlavour::processOpenArchiveArgs(const QString &, const QString &) const
0095 {
0096     return ProcessArgs();
0097 }
0098 
0099 UnarFlavour::UnarFlavour()
0100     : UnrarFlavour()
0101 {
0102 }
0103 
0104 QStringList UnarFlavour::processListing(const QStringList &data)
0105 {
0106     QStringList newdata = data;
0107 
0108     newdata.removeFirst();
0109 
0110     return newdata;
0111 }
0112 
0113 QString UnarFlavour::name() const
0114 {
0115     return QStringLiteral("unar");
0116 }
0117 
0118 ProcessArgs UnarFlavour::processListArgs(const QString &fileName) const
0119 {
0120     return ProcessArgs(QStringList() << fileName, true);
0121 }
0122 
0123 ProcessArgs UnarFlavour::processOpenArchiveArgs(const QString &fileName, const QString &path) const
0124 {
0125     return ProcessArgs(QStringList() << fileName << QStringLiteral("-o") << path + QLatin1Char('/'), false);
0126 }