Git commit 0f4ae19b09680f94e328dd71449604187da7de5b by Ragnar Thomsen. Committed on 16/07/2016 at 17:46. Pushed by rthomsen into branch 'master'.
Detect multi-volume archives and show info in PropertiesDialog Two variables were added to ReadOnlyArchiveInterface: A boolean describing whether the archive is multi-volume and an int used for storing number of volumes. Two corresponding Q_PROPERTY's were added to Archive which fetch the info from ReadOnlyArchiveInterface. The detection of multi-volume archives was fixed in cli7z. The information is displayed in PropertiesDialog and will be used when implementing support for creating multi-volume archives. GUI: M +10 -0 kerfuffle/archive_kerfuffle.cpp M +4 -0 kerfuffle/archive_kerfuffle.h M +12 -0 kerfuffle/archiveinterface.cpp M +5 -0 kerfuffle/archiveinterface.h M +1 -0 kerfuffle/propertiesdialog.cpp M +32 -18 kerfuffle/propertiesdialog.ui M +2 -0 plugins/cli7zplugin/cliplugin.cpp M +11 -6 plugins/clirarplugin/cliplugin.cpp M +0 -1 plugins/clirarplugin/cliplugin.h http://commits.kde.org/ark/0f4ae19b09680f94e328dd71449604187da7de5b diff --git a/kerfuffle/archive_kerfuffle.cpp b/kerfuffle/archive_kerfuffle.cpp index 01cb8b1..5dc7085 100644 --- a/kerfuffle/archive_kerfuffle.cpp +++ b/kerfuffle/archive_kerfuffle.cpp @@ -227,6 +227,16 @@ bool Archive::hasComment() const return isValid() ? !comment().isEmpty() : false; } +bool Archive::isMultiVolume() const +{ + return m_iface->isMultiVolume(); +} + +int Archive::numberOfVolumes() const +{ + return m_iface->numberOfVolumes(); +} + Archive::EncryptionType Archive::encryptionType() { if (!isValid()) { diff --git a/kerfuffle/archive_kerfuffle.h b/kerfuffle/archive_kerfuffle.h index a510a03..9490e49 100644 --- a/kerfuffle/archive_kerfuffle.h +++ b/kerfuffle/archive_kerfuffle.h @@ -151,6 +151,8 @@ class KERFUFFLE_EXPORT Archive : public QObject Q_PROPERTY(QMimeType mimeType READ mimeType CONSTANT) Q_PROPERTY(bool isReadOnly READ isReadOnly CONSTANT) Q_PROPERTY(bool isSingleFolderArchive READ isSingleFolderArchive) + Q_PROPERTY(bool isMultiVolume READ isMultiVolume) + Q_PROPERTY(bool numberOfVolumes READ numberOfVolumes) Q_PROPERTY(EncryptionType encryptionType READ encryptionType) Q_PROPERTY(qulonglong numberOfFiles READ numberOfFiles) Q_PROPERTY(qulonglong numberOfFolders READ numberOfFolders) @@ -174,6 +176,8 @@ public: bool isReadOnly() const; bool isSingleFolderArchive(); bool hasComment() const; + bool isMultiVolume() const; + int numberOfVolumes() const; EncryptionType encryptionType(); qulonglong numberOfFiles(); qulonglong numberOfFolders(); diff --git a/kerfuffle/archiveinterface.cpp b/kerfuffle/archiveinterface.cpp index ad4ae1e..d0b9767 100644 --- a/kerfuffle/archiveinterface.cpp +++ b/kerfuffle/archiveinterface.cpp @@ -41,6 +41,8 @@ ReadOnlyArchiveInterface::ReadOnlyArchiveInterface(QObject *parent, const QVaria , m_waitForFinishedSignal(false) , m_isHeaderEncryptionEnabled(false) , m_isCorrupt(false) + , m_isMultiVolume(false) + , m_numberOfVolumes(0) { qCDebug(ARK) << "Created read-only interface for" << args.first().toString(); m_filename = args.first().toString(); @@ -113,6 +115,16 @@ bool ReadOnlyArchiveInterface::isCorrupt() const return m_isCorrupt; } +bool ReadOnlyArchiveInterface::isMultiVolume() const +{ + return m_isMultiVolume; +} + +int ReadOnlyArchiveInterface::numberOfVolumes() const +{ + return m_numberOfVolumes; +} + ReadWriteArchiveInterface::ReadWriteArchiveInterface(QObject *parent, const QVariantList & args) : ReadOnlyArchiveInterface(parent, args) { diff --git a/kerfuffle/archiveinterface.h b/kerfuffle/archiveinterface.h index ec20537..e61f5d6 100644 --- a/kerfuffle/archiveinterface.h +++ b/kerfuffle/archiveinterface.h @@ -62,6 +62,9 @@ public: */ QString password() const; + bool isMultiVolume() const; + int numberOfVolumes() const; + /** * Returns whether the file can only be read. * @@ -126,6 +129,8 @@ protected: void setCorrupt(bool isCorrupt); bool isCorrupt() const; QString m_comment; + bool m_isMultiVolume; + int m_numberOfVolumes; private: QString m_filename; diff --git a/kerfuffle/propertiesdialog.cpp b/kerfuffle/propertiesdialog.cpp index 7f3c3e8..d8e81b6 100644 --- a/kerfuffle/propertiesdialog.cpp +++ b/kerfuffle/propertiesdialog.cpp @@ -64,6 +64,7 @@ PropertiesDialog::PropertiesDialog(QWidget *parent, Archive *archive, qulonglong m_ui->lblArchiveType->setText(archive->mimeType().comment()); m_ui->lblMimetype->setText(archive->mimeType().name()); m_ui->lblReadOnly->setText(archive->isReadOnly() ? i18n("yes") : i18n("no")); + m_ui->lblMultiVolume->setText(archive->isMultiVolume() ? i18n("yes (%1 volumes)", archive->numberOfVolumes()) : i18n("no")); m_ui->lblHasComment->setText(archive->hasComment() ? i18n("yes") : i18n("no")); m_ui->lblNumberOfEntries->setText(i18np("%1 file", "%1 files", numberOfFiles) + i18np(", %1 folder", ", %1 folders", numberOfFolders)); diff --git a/kerfuffle/propertiesdialog.ui b/kerfuffle/propertiesdialog.ui index f329441..c5b8e69 100644 --- a/kerfuffle/propertiesdialog.ui +++ b/kerfuffle/propertiesdialog.ui @@ -101,98 +101,98 @@ </property> </widget> </item> - <item row="5" column="0"> + <item row="6" column="0"> <widget class="QLabel" name="label_10"> <property name="text"> <string>Has comment:</string> </property> </widget> </item> - <item row="5" column="1"> + <item row="6" column="1"> <widget class="QLabel" name="lblHasComment"> <property name="text"> <string/> </property> </widget> </item> - <item row="6" column="0"> + <item row="7" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> <string>Number of entries:</string> </property> </widget> </item> - <item row="6" column="1"> + <item row="7" column="1"> <widget class="QLabel" name="lblNumberOfEntries"> <property name="text"> <string/> </property> </widget> </item> - <item row="7" column="0"> + <item row="8" column="0"> <widget class="QLabel" name="label_5"> <property name="text"> <string>Unpacked size:</string> </property> </widget> </item> - <item row="7" column="1"> + <item row="8" column="1"> <widget class="QLabel" name="lblUnpackedSize"> <property name="text"> <string/> </property> </widget> </item> - <item row="8" column="0"> + <item row="9" column="0"> <widget class="QLabel" name="label_7"> <property name="text"> <string>Packed size:</string> </property> </widget> </item> - <item row="8" column="1"> + <item row="9" column="1"> <widget class="QLabel" name="lblPackedSize"> <property name="text"> <string/> </property> </widget> </item> - <item row="9" column="0"> + <item row="10" column="0"> <widget class="QLabel" name="label_9"> <property name="text"> <string>Compression ratio:</string> </property> </widget> </item> - <item row="9" column="1"> + <item row="10" column="1"> <widget class="QLabel" name="lblCompressionRatio"> <property name="text"> <string/> </property> </widget> </item> - <item row="10" column="0"> + <item row="11" column="0"> <widget class="QLabel" name="label_6"> <property name="text"> <string>Last modified:</string> </property> </widget> </item> - <item row="10" column="1"> + <item row="11" column="1"> <widget class="QLabel" name="lblLastModified"> <property name="text"> <string/> </property> </widget> </item> - <item row="11" column="0"> + <item row="12" column="0"> <widget class="QLabel" name="label_12"> <property name="text"> <string>MD5 hash:</string> </property> </widget> </item> - <item row="11" column="1"> + <item row="12" column="1"> <widget class="QLabel" name="lblMD5"> <property name="text"> <string/> @@ -205,14 +205,14 @@ </property> </widget> </item> - <item row="12" column="0"> + <item row="13" column="0"> <widget class="QLabel" name="label_13"> <property name="text"> <string>SHA-1 hash:</string> </property> </widget> </item> - <item row="12" column="1"> + <item row="13" column="1"> <widget class="QLabel" name="lblSHA1"> <property name="text"> <string/> @@ -222,14 +222,14 @@ </property> </widget> </item> - <item row="13" column="0"> + <item row="14" column="0"> <widget class="QLabel" name="label_14"> <property name="text"> <string>SHA-256 hash:</string> </property> </widget> </item> - <item row="13" column="1"> + <item row="14" column="1"> <widget class="QLabel" name="lblSHA256"> <property name="text"> <string notr="true">nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn</string> @@ -239,6 +239,20 @@ </property> </widget> </item> + <item row="5" column="0"> + <widget class="QLabel" name="label_15"> + <property name="text"> + <string>Multi-volume:</string> + </property> + </widget> + </item> + <item row="5" column="1"> + <widget class="QLabel" name="lblMultiVolume"> + <property name="text"> + <string/> + </property> + </widget> + </item> </layout> </item> <item> diff --git a/plugins/cli7zplugin/cliplugin.cpp b/plugins/cli7zplugin/cliplugin.cpp index 788890e..b154235 100644 --- a/plugins/cli7zplugin/cliplugin.cpp +++ b/plugins/cli7zplugin/cliplugin.cpp @@ -159,6 +159,8 @@ bool CliPlugin::readListLine(const QString& line) m_archiveType = ArchiveTypeZip; } else if (type == QLatin1String("Rar")) { m_archiveType = ArchiveTypeRar; + } else if (type == QLatin1String("Split")) { + m_isMultiVolume = true; } else { // Should not happen qCWarning(ARK) << "Unsupported archive type"; diff --git a/plugins/clirarplugin/cliplugin.cpp b/plugins/clirarplugin/cliplugin.cpp index ab31ffb..90b0d4a 100644 --- a/plugins/clirarplugin/cliplugin.cpp +++ b/plugins/clirarplugin/cliplugin.cpp @@ -38,7 +38,6 @@ CliPlugin::CliPlugin(QObject *parent, const QVariantList& args) , m_parseState(ParseStateTitle) , m_isUnrar5(false) , m_isPasswordProtected(false) - , m_isMultiVolume(false) , m_isSolid(false) , m_remainingIgnoreLines(1) //The first line of UNRAR output is empty. , m_linesComment(0) @@ -206,9 +205,12 @@ void CliPlugin::handleUnrar5Line(const QString &line) { // "Details: " indicates end of header. if (line.startsWith(QStringLiteral("Details: "))) { ignoreLines(1, ParseStateEntryDetails); - if (line.contains(QLatin1String("volume")) && !m_isMultiVolume) { - m_isMultiVolume = true; - qCDebug(ARK) << "Multi-volume archive detected"; + if (line.contains(QLatin1String("volume"))) { + m_numberOfVolumes++; + if (!m_isMultiVolume) { + m_isMultiVolume = true; + qCDebug(ARK) << "Multi-volume archive detected"; + } } if (line.contains(QLatin1String("solid")) && !m_isSolid) { m_isSolid = true; @@ -309,8 +311,11 @@ void CliPlugin::handleUnrar4Line(const QString &line) { if (rxCommentEnd.match(line).hasMatch()) { if (line.startsWith(QLatin1String("Volume")) && !m_isMultiVolume) { - m_isMultiVolume = true; - qCDebug(ARK) << "Multi-volume archive detected"; + m_numberOfVolumes++; + if (!m_isMultiVolume) { + m_isMultiVolume = true; + qCDebug(ARK) << "Multi-volume archive detected"; + } } if (line.startsWith(QLatin1String("Solid archive")) && !m_isSolid) { m_isSolid = true; diff --git a/plugins/clirarplugin/cliplugin.h b/plugins/clirarplugin/cliplugin.h index dd98088..8687e19 100644 --- a/plugins/clirarplugin/cliplugin.h +++ b/plugins/clirarplugin/cliplugin.h @@ -60,7 +60,6 @@ private: bool m_isUnrar5; bool m_isPasswordProtected; - bool m_isMultiVolume; bool m_isSolid; int m_remainingIgnoreLines; _______________________________________________ kde-doc-english mailing list [email protected] https://mail.kde.org/mailman/listinfo/kde-doc-english
