[arch-commits] Commit in krusader/trunk (PKGBUILD kde_bug325801.diff)
Lukas Jirkovsky
stativ at nymeria.archlinux.org
Thu Oct 31 18:17:33 UTC 2013
Date: Thursday, October 31, 2013 @ 19:17:33
Author: stativ
Revision: 100049
krusader: fix handling of rar archives with unrar 5.0
Added:
krusader/trunk/kde_bug325801.diff
Modified:
krusader/trunk/PKGBUILD
--------------------+
PKGBUILD | 17 +++--
kde_bug325801.diff | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 169 insertions(+), 5 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2013-10-31 16:25:17 UTC (rev 100048)
+++ PKGBUILD 2013-10-31 18:17:33 UTC (rev 100049)
@@ -7,7 +7,7 @@
pkgname=krusader
pkgver=2.4.0beta3
_pkgver=2.4.0-beta3
-pkgrel=3
+pkgrel=4
pkgdesc="An alternative file manager for KDE resembling Midnight Commander"
arch=('i686' 'x86_64')
url="http://krusader.sourceforge.net/"
@@ -19,16 +19,23 @@
'kdebase-konsole: open an embedded terminal')
install=$pkgname.install
source=("http://downloads.sourceforge.net/$pkgname/$pkgname-$_pkgver.tar.bz2"
- "kde_bug309119.diff")
+ "kde_bug309119.diff" "kde_bug325801.diff")
md5sums=('62a02db3f213bb76805ca6c958e9e263'
- '5e9952f6ac38e5ce323eb95ca6f20db6')
+ '5e9952f6ac38e5ce323eb95ca6f20db6'
+ '55fd27e4888e15e8b3bd8ab08b85aa9e')
-build() {
+prepare() {
cd "$srcdir/$pkgname-$_pkgver"
# fix KDE bug 309119 - "New directory" dialog: can't clear all typed text
- patch -Np1 < "$srcdir/kde_bug309119.diff"
+ patch -Np1 < "$srcdir/kde_bug309119.diff" || true
+ # fix KDE bug 32580 - Showing contents of rar archives is broken with unrar 5.00
+ patch -Np1 < "$srcdir/kde_bug325801.diff" || true
+}
+build() {
+ cd "$srcdir/$pkgname-$_pkgver"
+
cmake . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr
Added: kde_bug325801.diff
===================================================================
--- kde_bug325801.diff (rev 0)
+++ kde_bug325801.diff 2013-10-31 18:17:33 UTC (rev 100049)
@@ -0,0 +1,157 @@
+commit aca6a97fc31a80b5a35ec1afbee8f45a728b8a19
+Author: Alexander Balakhnin <Croman13n3c at gmail.com>
+Date: Sun Oct 27 19:48:38 2013 +0300
+
+ Fixing krarc support for new unrar 5
+
+diff --git a/krArc/krarc.cpp b/krArc/krarc.cpp
+index fc52ad5..c60a1f5 100644
+--- a/krArc/krarc.cpp
++++ b/krArc/krarc.cpp
+@@ -918,7 +918,7 @@ bool kio_krarcProtocol::initDirDict(const KUrl&url, bool forced)
+ }
+
+ extArcReady = false;
+-
++ isUnrarVersion5 = false;
+ if (!setArcFile(url))
+ return false; /* if the archive was changed refresh the file information */
+
+@@ -979,6 +979,14 @@ bool kio_krarcProtocol::initDirDict(const KUrl&url, bool forced)
+ if (arcType == "rar" || arcType == "arj" || arcType == "lha" || arcType == "7z") {
+ while (temp.readLine(buf, 1000) != -1) {
+ line = decodeString(buf);
++ //detect unrar version
++ if (line.startsWith(QLatin1String("UNRAR"))) {
++ //skip line with "UNRAR"
++ nextWord(line);
++ if (nextWord(line).left(1).toInt()==5){
++ isUnrarVersion5 = true;
++ }
++ }
+ if (line.startsWith(QLatin1String("----------"))) break;
+ }
+ }
+@@ -988,13 +996,20 @@ bool kio_krarcProtocol::initDirDict(const KUrl&url, bool forced)
+ // the rar list is ended with a ------ line.
+ if (line.startsWith(QLatin1String("----------"))) {
+ invalidLine = !invalidLine;
++ if (isUnrarVersion5){
++ break;
++ }
++ else{
+ continue;
++ }
+ }
+ if (invalidLine)
+ continue;
+ else {
++ if (!isUnrarVersion5){
+ temp.readLine(buf, 1000);
+ line = line + decodeString(buf);
++ }
+ if (line[0] == '*') // encrypted archives starts with '*'
+ line[0] = ' ';
+ }
+@@ -1190,23 +1205,10 @@ void kio_krarcProtocol::parseLine(int lineNo, QString line)
+ mode = parsePermString(perm);
+ }
+ if (arcType == "rar") {
+- // full name
+- fullName = nextWord(line, '\n');
+- // size
+- size = nextWord(line).toLong();
+- // ignore the next 2 fields
+- nextWord(line); nextWord(line);
+- // date & time
+- QString d = nextWord(line);
+- int year = 1900 + d.mid(6, 2).toInt();
+- if (year < 1930) year += 100;
+- QDate qdate(year, d.mid(3, 2).toInt(), d.mid(0, 2).toInt());
+- QString t = nextWord(line);
+- QTime qtime(t.mid(0, 2).toInt(), t.mid(3, 2).toInt(), 0);
+- time = QDateTime(qdate, qtime).toTime_t();
++ if (isUnrarVersion5){
++
+ // permissions
+ perm = nextWord(line);
+-
+ if (perm.length() == 7) { // windows rar permission format
+ bool isDir = (perm.at(1).toLower() == 'd');
+ bool isReadOnly = (perm.at(2).toLower() == 'r');
+@@ -1219,6 +1221,54 @@ void kio_krarcProtocol::parseLine(int lineNo, QString line)
+
+ if (perm.length() != 10) perm = (perm.at(0) == 'd') ? "drwxr-xr-x" : "-rw-r--r--" ;
+ mode = parsePermString(perm);
++ // size
++ size = nextWord(line).toLong();
++ // ignore the next 2 fields
++ nextWord(line); nextWord(line);
++ // date & time
++ QString d = nextWord(line);
++ int year = 1900 + d.mid(6, 2).toInt();
++ if (year < 1930) year += 100;
++ QDate qdate(year, d.mid(3, 2).toInt(), d.mid(0, 2).toInt());
++ QString t = nextWord(line);
++ QTime qtime(t.mid(0, 2).toInt(), t.mid(3, 2).toInt(), 0);
++ time = QDateTime(qdate, qtime).toTime_t();
++ // ignore the next 1 fields
++ nextWord(line);
++ fullName = nextWord(line, '\n');
++ }
++ else{
++
++ // full name
++ fullName = nextWord(line, '\n');
++ // size
++ size = nextWord(line).toLong();
++ // ignore the next 2 fields
++ nextWord(line); nextWord(line);
++ // date & time
++ QString d = nextWord(line);
++ int year = 1900 + d.mid(6, 2).toInt();
++ if (year < 1930) year += 100;
++ QDate qdate(year, d.mid(3, 2).toInt(), d.mid(0, 2).toInt());
++ QString t = nextWord(line);
++ QTime qtime(t.mid(0, 2).toInt(), t.mid(3, 2).toInt(), 0);
++ time = QDateTime(qdate, qtime).toTime_t();
++ // permissions
++ perm = nextWord(line);
++
++ if (perm.length() == 7) { // windows rar permission format
++ bool isDir = (perm.at(1).toLower() == 'd');
++ bool isReadOnly = (perm.at(2).toLower() == 'r');
++
++ perm = isDir ? "drwxr-xr-x" : "-rw-r--r--";
++
++ if (isReadOnly)
++ perm[ 2 ] = '-';
++ }
++
++ if (perm.length() != 10) perm = (perm.at(0) == 'd') ? "drwxr-xr-x" : "-rw-r--r--" ;
++ mode = parsePermString(perm);
++ }
+ }
+ if (arcType == "arj") {
+ nextWord(line);
+@@ -1496,6 +1546,8 @@ bool kio_krarcProtocol::initArcParameters()
+ }
+ } else if (arcType == "rar") {
+ if (KStandardDirs::findExe("rar").isEmpty()) {
++ //unrar output now ANSI
++ noencoding = true;
+ cmd = fullPathName("unrar");
+ listCmd << fullPathName("unrar") << "-c-" << "-v" << "v";
+ getCmd << fullPathName("unrar") << "p" << "-ierr" << "-idp" << "-c-" << "-y";
+diff --git a/krArc/krarc.h b/krArc/krarc.h
+index f6119d0..b6b7505 100644
+--- a/krArc/krarc.h
++++ b/krArc/krarc.h
+@@ -96,6 +96,7 @@ private:
+ bool archiveChanging; //< true if the archive is currently changing.
+ bool newArchiveURL; //< true if new archive was entered for the protocol
+ bool noencoding; //< 7z files use UTF-16, so encoding is unnecessary
++ bool isUnrarVersion5; //< thue if unrar have 5th version
+ KIO::filesize_t decompressedLen; //< the number of the decompressed bytes
+ KFileItem* arcFile; //< the archive file item.
+ QString arcPath; //< the archive location
More information about the arch-commits
mailing list