Hello community,

here is the log from the commit of package ark for openSUSE:Factory checked in 
at 2013-08-28 21:13:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ark (Old)
 and      /work/SRC/openSUSE:Factory/.ark.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ark"

Changes:
--------
--- /work/SRC/openSUSE:Factory/ark/ark.changes  2013-08-16 13:42:28.000000000 
+0200
+++ /work/SRC/openSUSE:Factory/.ark.new/ark.changes     2013-08-28 
21:13:53.000000000 +0200
@@ -1,0 +2,5 @@
+Tue Aug 27 22:36:24 UTC 2013 - hrvoje.sen...@gmail.com
+
+- Added ark-unrar5.diff which adds support for unrar5 (kde#319303)
+
+-------------------------------------------------------------------

New:
----
  ark-unrar5.diff

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ark.spec ++++++
--- /var/tmp/diff_new_pack.R5zmA0/_old  2013-08-28 21:13:54.000000000 +0200
+++ /var/tmp/diff_new_pack.R5zmA0/_new  2013-08-28 21:13:54.000000000 +0200
@@ -24,6 +24,8 @@
 Group:          Productivity/Other
 Url:            http://www.kde.org
 Source0:        ark-%{version}.tar.xz
+# PATCH-FIX-UPSTREAM ark-unrar5.diff -- adds support for unrar5 
https://git.reviewboard.kde.org/r/111625/ (kde#319303)
+Patch0:         ark-unrar5.diff
 BuildRequires:  libarchive-devel
 BuildRequires:  libkde4-devel
 BuildRequires:  libkonq-devel
@@ -57,6 +59,7 @@
 
 %prep
 %setup -q -n ark-%{version}
+%patch0 -p1
 
 %build
 %cmake_kde4 -d build

++++++ ark-unrar5.diff ++++++
diff --git a/kerfuffle/cliinterface.h b/kerfuffle/cliinterface.h
index b76f5a2..7d78b4a 100644
--- a/kerfuffle/cliinterface.h
+++ b/kerfuffle/cliinterface.h
@@ -263,6 +263,13 @@ public:
      */
     void setEscapedCharacters(const QString& characters);
 
+    /**
+     * Sets if the listing should include empty lines.
+     *
+     * The default value is false.
+     */
+    void setListEmptyLines(bool emptyLines);
+
 private:
     void substituteListVariables(QStringList& params);
 
@@ -330,6 +337,7 @@ private:
 
     ParameterList m_param;
     QVariantList m_removedFiles;
+    bool m_listEmptyLines;
 
 private slots:
     void readStdout(bool handleAll = false);
diff --git a/kerfuffle/cliinterface.cpp b/kerfuffle/cliinterface.cpp
index 79ae085..3e835b8 100644
--- a/kerfuffle/cliinterface.cpp
+++ b/kerfuffle/cliinterface.cpp
@@ -53,7 +53,8 @@ namespace Kerfuffle
 {
 CliInterface::CliInterface(QObject *parent, const QVariantList & args)
         : ReadWriteArchiveInterface(parent, args),
-        m_process(0)
+        m_process(0),
+        m_listEmptyLines(false)
 {
     //because this interface uses the event loop
     setWaitForFinishedSignal(true);
@@ -78,6 +79,11 @@ CliInterface::~CliInterface()
     Q_ASSERT(!m_process);
 }
 
+void CliInterface::setListEmptyLines(bool emptyLines)
+{
+    m_listEmptyLines = emptyLines;
+}
+
 bool CliInterface::list()
 {
     cacheParameterList();
@@ -476,7 +482,7 @@ void CliInterface::readStdout(bool handleAll)
     }
 
     foreach(const QByteArray& line, lines) {
-        if (!line.isEmpty()) {
+        if (!line.isEmpty() || (m_listEmptyLines && m_operationMode == List)) {
             handleLine(QString::fromLocal8Bit(line));
         }
     }
diff --git a/plugins/clirarplugin/cliplugin.h b/plugins/clirarplugin/cliplugin.h
index 9f95563..8b2ca3e 100644
--- a/plugins/clirarplugin/cliplugin.h
+++ b/plugins/clirarplugin/cliplugin.h
@@ -51,12 +51,14 @@ private:
     } m_parseState;
 
     QString m_entryFileName;
+    QHash<QString, QString> m_entryDetails;
 
     bool m_isPasswordProtected;
 
     int m_remainingIgnoredSubHeaderLines;
 
     bool m_isUnrarFree;
+    bool m_isUnrarVersion5;
 };
 
 #endif // CLIPLUGIN_H
diff --git a/plugins/clirarplugin/cliplugin.cpp 
b/plugins/clirarplugin/cliplugin.cpp
index 6867e65..bf3af74 100644
--- a/plugins/clirarplugin/cliplugin.cpp
+++ b/plugins/clirarplugin/cliplugin.cpp
@@ -39,6 +39,7 @@ CliPlugin::CliPlugin(QObject *parent, const QVariantList& 
args)
         , m_isPasswordProtected(false)
         , m_remainingIgnoredSubHeaderLines(0)
         , m_isUnrarFree(false)
+        , m_isUnrarVersion5(false)
 {
 }
 
@@ -107,9 +108,86 @@ bool CliPlugin::readListLine(const QString &line)
     static const QLatin1String columnDescription1String("                  
Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver");
     static const QLatin1String columnDescription2String("               Host 
OS    Solid   Old"); // Only present in unrar-nonfree
 
+    if (m_isUnrarVersion5) {
+        int colonPos = line.indexOf(QLatin1Char(':'));
+        if (colonPos == -1) {
+            if (m_entryFileName.isEmpty()) {
+                return true;
+            }
+            ArchiveEntry e;
+
+            QString compressionRatio = 
m_entryDetails.value(QLatin1String("ratio"));
+            compressionRatio.chop(1); // Remove the '%'
+
+            QString time = m_entryDetails.value(QLatin1String("mtime"));
+            // FIXME unrar 5 beta 8 seems to lack the seconds, or the trailing 
,000 is not the milliseconds
+            QDateTime ts = QDateTime::fromString(time, 
QLatin1String("yyyy-MM-dd HH:mm,zzz"));
+
+            bool isDirectory = m_entryDetails.value(QLatin1String("type")) == 
QLatin1String("Directory");
+            if (isDirectory && !m_entryFileName.endsWith(QLatin1Char( '/' ))) {
+                m_entryFileName += QLatin1Char( '/' );
+            }
+
+            QString compression = 
m_entryDetails.value(QLatin1String("compression"));
+            int optionPos = compression.indexOf(QLatin1Char('-'));
+            if (optionPos != -1) {
+                e[Method] = compression.mid(optionPos);
+                e[Version] = compression.left(optionPos).trimmed();
+            } else {
+                // no method specified
+                e[Method].clear();
+                e[Version] = compression;
+            }
+
+            m_isPasswordProtected = 
m_entryDetails.value(QLatin1String("flags")).contains(QLatin1String("encrypted"));
+
+            e[FileName] = m_entryFileName;
+            e[InternalID] = m_entryFileName;
+            e[Size] = m_entryDetails.value(QLatin1String("size"));
+            e[CompressedSize] = m_entryDetails.value(QLatin1String("packed 
size"));
+            e[Ratio] = compressionRatio;
+            e[Timestamp] = ts;
+            e[IsDirectory] = isDirectory;
+            e[Permissions] = m_entryDetails.value(QLatin1String("attributes"));
+            e[CRC] = m_entryDetails.value(QLatin1String("crc32"));
+            e[IsPasswordProtected] = m_isPasswordProtected;
+            kDebug() << "Added entry: " << e;
+
+            emit entry(e);
+
+            m_entryFileName.clear();
+
+            return true;
+        }
+
+        QString key = line.left(colonPos).trimmed().toLower();
+        QString value = line.mid(colonPos + 2);
+
+        if (key == QLatin1String("name")) {
+            m_entryFileName = value;
+            m_entryDetails.clear();
+            return true;
+        }
+
+        // in multivolume archives, the split CRC32 is denoted specially
+        if (key == QLatin1String("pack-crc32")) {
+            key = key.mid(5);
+        }
+
+        m_entryDetails.insert(key, value);
+
+        return true;
+    }
+
     switch (m_parseState)
     {
     case ParseStateColumnDescription1:
+        if (line.startsWith(QLatin1String("Details:"))) {
+            m_isUnrarVersion5 = true;
+            setListEmptyLines(true);
+            // no previously detected entry
+            m_entryFileName.clear();
+        }
         if (line.startsWith(columnDescription1String)) {
             m_parseState = ParseStateColumnDescription2;
         }
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to