summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntonio Diaz Diaz <antonio@gnu.org>2018-08-23 00:28:09 +0200
committerSlávek Banko <slavek.banko@axis.cz>2018-08-23 00:33:00 +0200
commit88e74ce7ce3bd064303bc6b5199c44b5f772a2e5 (patch)
tree716196313fdb11bcc360b90731dbefd979f55f8b
parentfc5a2ea7ab7dedb52cc7fbe561d16b81bbc17a59 (diff)
downloadkrusader-feat/lzip-support.tar.gz
krusader-feat/lzip-support.zip
Add support for Lzipfeat/lzip-support
Signed-off-by: Antonio Diaz Diaz <antonio@gnu.org>
-rw-r--r--doc/en/archives.docbook2
-rw-r--r--doc/en/features.docbook2
-rw-r--r--doc/en/introduction.docbook4
-rw-r--r--doc/en/konfigurator.docbook22
-rw-r--r--doc/en/vfs.docbook2
-rw-r--r--doc/krusader.14
-rw-r--r--iso/kiso.cpp21
-rw-r--r--krArc/krarc.cpp38
-rw-r--r--krusader/Dialogs/packgui.cpp1
-rw-r--r--krusader/Konfigurator/kgarchives.cpp4
-rw-r--r--krusader/Konfigurator/kgdependencies.cpp17
-rw-r--r--krusader/Konfigurator/kggeneral.cpp1
-rw-r--r--krusader/Konfigurator/kgprotocols.cpp4
-rw-r--r--krusader/Konfigurator/krresulttable.cpp3
-rw-r--r--krusader/Panel/krbriefview.cpp1
-rw-r--r--krusader/Panel/krdetailedview.cpp4
-rw-r--r--krusader/Panel/krviewitem.cpp1
-rw-r--r--krusader/Search/krsearchmod.cpp3
-rwxr-xr-xkrusader/VFS/arc_vfs.cpp43
-rw-r--r--krusader/VFS/krarchandler.cpp32
-rw-r--r--krusader/defaults.h2
21 files changed, 158 insertions, 53 deletions
diff --git a/doc/en/archives.docbook b/doc/en/archives.docbook
index 4cbd645..7288062 100644
--- a/doc/en/archives.docbook
+++ b/doc/en/archives.docbook
@@ -8,7 +8,7 @@
<para>The &vfs-lnk; allows you to browse archives as
if it was a directory. Currently &krusader; supports
the following archives types: ace, arj, bzip2, deb, gzip, iso,
- lha, rar, rpm, tar, zip and 7-zip and supports the following
+ lha, lzip, rar, rpm, tar, zip and 7-zip and supports the following
passworded archives: arj, ace, rar and zip. Passwords can be
stored in &tdewallet;. Please note that the archive
support first needs to be properly
diff --git a/doc/en/features.docbook b/doc/en/features.docbook
index b1a454c..6659caf 100644
--- a/doc/en/features.docbook
+++ b/doc/en/features.docbook
@@ -106,7 +106,7 @@
<listitem>
<para>Archive Handling: browsing, unpack, pack,
testing. Supported &archives-lnk; : ace,
- arj, bzip2, deb, gzip, iso, lha, rar, rpm, tar, zip and
+ arj, bzip2, deb, gzip, iso, lha, lzip, rar, rpm, tar, zip and
7-zip.</para>
</listitem>
<listitem>
diff --git a/doc/en/introduction.docbook b/doc/en/introduction.docbook
index 3873d90..3cb3889 100644
--- a/doc/en/introduction.docbook
+++ b/doc/en/introduction.docbook
@@ -14,7 +14,7 @@
module, viewer/editor, directory synchronization, file content
comparisons, powerful batch renaming and much, much more.
&krusader; supports archive formats: ace, arj, bzip2, deb, gzip, iso, lha,
- rar, rpm, tar, zip and 7-zip and handles other
+ lzip, rar, rpm, tar, zip and 7-zip and handles other
&tdeioslaves1-url; such as smb:// or fish://.</para>
<para>&krusader; is almost completely customizable and therefore
very user-friendly.</para>
@@ -95,7 +95,7 @@
ISO,rpm,tar.gz) between these data sources/containers
effortlessly. &krusader; currently supports VFSs for
all popular and some specialized types of archives (ace, arj,
- bzip2, gzip, iso, lha, rar, tar, zip and 7-zip), configuration
+ bzip2, gzip, iso, lha, lzip, rar, tar, zip and 7-zip), configuration
packages (rpm, deb), and traditional remote file system types
(&FTP;, NFS, Samba, FISH, SFTP).</para>
<para>&krusader; also includes a built-in
diff --git a/doc/en/konfigurator.docbook b/doc/en/konfigurator.docbook
index ab23a78..170f0d4 100644
--- a/doc/en/konfigurator.docbook
+++ b/doc/en/konfigurator.docbook
@@ -1070,7 +1070,7 @@ HTML_PARSING-->
certain archive is grayed-out, it means that
&krusader; could not find the appropriate executables
in the configured path. The next archives are supported: ace,
- arj, bzip2, deb, gzip, iso, lha, rar, rpm, tar, zip and
+ arj, bzip2, deb, gzip, iso, lha, lzip, rar, rpm, tar, zip and
7-zip.</para>
<!-- OLD
<screenshot>
@@ -1449,6 +1449,20 @@ HTML_PARSING-->
<row>
<entry>
<para>
+ <command>lzip</command>
+ </para>
+ </entry>
+ <entry>
+ <para>
+ <filename class="directory">
+ <replaceable>/usr/bin/lzip</replaceable>
+ </filename>
+ </para>
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <para>
<command>rar</command>
</para>
</entry>
@@ -1875,6 +1889,9 @@ HTML_PARSING-->
<para>application/x-lha</para>
</listitem>
<listitem>
+ <para>application/x-lzip</para>
+ </listitem>
+ <listitem>
<para>application/x-rar</para>
</listitem>
<listitem>
@@ -1900,6 +1917,9 @@ HTML_PARSING-->
<listitem>
<para>application/x-tgz</para>
</listitem>
+ <listitem>
+ <para>application/x-tlz</para>
+ </listitem>
</itemizedlist>
</listitem>
</itemizedlist></para>
diff --git a/doc/en/vfs.docbook b/doc/en/vfs.docbook
index 8acb910..22ff092 100644
--- a/doc/en/vfs.docbook
+++ b/doc/en/vfs.docbook
@@ -26,7 +26,7 @@
<para>
<link linkend="archives">Archive VFS</link>: allows to browse
archives in VFS as it was a directory (ace, arj, bzip2, deb,
- gzip, iso, lha, rar, rpm, tar, zip and 7-zip).</para>
+ gzip, iso, lha, lzip, rar, rpm, tar, zip and 7-zip).</para>
</listitem>
<listitem>
<para>
diff --git a/doc/krusader.1 b/doc/krusader.1
index 6e0e5f2..8d5a1a2 100644
--- a/doc/krusader.1
+++ b/doc/krusader.1
@@ -13,7 +13,7 @@ mounted filesystem support, FTP, advanced search module,
viewer/editor, directory synchronisation, file content comparisons,
powerful batch renaming and much much more.
It supports the following archive formats: ace, arj, bzip2, deb,
-gzip, iso, lha, rar, rpm, tar, zip and 7-zip
+gzip, iso, lha, lzip, rar, rpm, tar, zip and 7-zip
and can handle other KIOSlaves such as smb:// or fish://
It is (almost) completely customizable, very user friendly,
fast and looks great on your desktop! :-)
@@ -102,7 +102,7 @@ Powerful internal viewer and editor.
Advanced search module that can search in archives.
-Supports: ace, arj, bzip2, deb, gzip, iso, lha, rar, rpm, tar, zip and 7-zip.
+Supports: ace, arj, bzip2, deb, gzip, iso, lha, lzip, rar, rpm, tar, zip and 7-zip.
Directory comparison and filtering.
diff --git a/iso/kiso.cpp b/iso/kiso.cpp
index 1e8f192..7e5ec32 100644
--- a/iso/kiso.cpp
+++ b/iso/kiso.cpp
@@ -125,6 +125,8 @@ KIso::KIso( const TQString& filename, const TQString & _mimetype )
mimetype = "application/x-gzip";
else if ( mimetype == "application/x-tbz" ) // that's a bzipped2 tar file, so ask for bz2 filter
mimetype = "application/x-bzip2";
+ else if ( mimetype == "application/x-tlz" ) // that's a lzipped tar file, so ask for lzip filter
+ mimetype = "application/x-lzip";
else if ( mimetype == "application/x-txz" ) // that's a xzipped tar file, so ask for xz filter
mimetype = "application/x-xz";
else
@@ -136,22 +138,23 @@ KIso::KIso( const TQString& filename, const TQString & _mimetype )
unsigned char firstByte = file.getch();
unsigned char secondByte = file.getch();
unsigned char thirdByte = file.getch();
+ unsigned char fourthByte = file.getch();
if ( firstByte == 0037 && secondByte == 0213 )
mimetype = "application/x-gzip";
else if ( firstByte == 'B' && secondByte == 'Z' && thirdByte == 'h' )
mimetype = "application/x-bzip2";
- else if ( firstByte == 'P' && secondByte == 'K' && thirdByte == 3 )
- {
- unsigned char fourthByte = file.getch();
- if ( fourthByte == 4 )
+ else if ( firstByte == 'L' && secondByte == 'Z' &&
+ thirdByte == 'I' && fourthByte == 'P' )
+ mimetype = "application/x-lzip";
+ else if ( firstByte == 'P' && secondByte == 'K' &&
+ thirdByte == 3 && fourthByte == 4 )
mimetype = "application/x-zip";
- }
- else if ( firstByte == 0xfd && secondByte == '7' && thirdByte == 'z' )
+ else if ( firstByte == 0xfd && secondByte == '7' &&
+ thirdByte == 'z' && fourthByte == 'X' )
{
- unsigned char fourthByte = file.getch();
unsigned char fifthByte = file.getch();
unsigned char sixthByte = file.getch();
- if ( fourthByte == 'X' && fifthByte == 'Z' && sixthByte == 0)
+ if ( fifthByte == 'Z' && sixthByte == 0)
mimetype = "application/x-xz";
}
}
@@ -171,7 +174,7 @@ void KIso::prepareDevice( const TQString & filename,
else
{
if("application/x-gzip" == mimetype || "application/x-bzip2" == mimetype ||
- "application/x-xz" == mimetype)
+ "application/x-lzip" == mimetype || "application/x-xz" == mimetype)
forced = true;
TQIODevice *dev = KFilterDev::deviceForFile( filename, mimetype, forced );
diff --git a/krArc/krarc.cpp b/krArc/krarc.cpp
index e94c135..83c32ae 100644
--- a/krArc/krarc.cpp
+++ b/krArc/krarc.cpp
@@ -313,7 +313,9 @@ void tdeio_krarcProtocol::get(const KURL& url, int tries ){
KMimeType::Ptr mt = KMimeType::findByURL( arcTempDir+file, 0, false /* NOT local URL */ );
emit mimeType( mt->name() );
proc << getCmd << convertName( arcFile->url().path() )+" ";
- if( arcType != "gzip" && arcType != "bzip2" && arcType != "xz") proc << convertFileName( file );
+ if( arcType != "gzip" && arcType != "bzip2" &&
+ arcType != "lzip" && arcType != "xz" )
+ proc << convertFileName( file );
connect(&proc,TQT_SIGNAL(receivedStdout(TDEProcess*,char*,int)),
this,TQT_SLOT(receivedData(TDEProcess*,char*,int)) );
}
@@ -324,7 +326,8 @@ void tdeio_krarcProtocol::get(const KURL& url, int tries ){
if( !extArcReady && !decompressToFile ) {
if( !proc.normalExit() || !checkStatus( proc.exitStatus() ) ||
- ( arcType != "bzip2" && arcType != "xz" && expectedSize != decompressedLen ) ) {
+ ( arcType != "bzip2" && arcType != "lzip" &&
+ arcType != "xz" && expectedSize != decompressedLen ) ) {
if( encrypted && tries ) {
invalidatePassword();
get( url, tries - 1 );
@@ -679,6 +682,8 @@ bool tdeio_krarcProtocol::setArcFile(const KURL& url){
arcType = "bzip2";
else if( arcType == "tgz" )
arcType = "gzip";
+ else if( arcType == "tlz" )
+ arcType = "lzip";
else if( arcType == "txz" )
arcType = "xz";
@@ -707,7 +712,7 @@ bool tdeio_krarcProtocol::initDirDict(const KURL&url, bool forced){
KrShellProcess proc;
KTempFile temp( TQString(), "tmp" );
temp.setAutoDelete(true);
- if (arcType != "bzip2" && arcType != "xz") {
+ if( arcType != "bzip2" && arcType != "lzip" && arcType != "xz" ) {
if( arcType == "rpm" )
proc << listCmd << convertName( arcPath ) <<" > " << temp.name();
else
@@ -739,7 +744,7 @@ bool tdeio_krarcProtocol::initDirDict(const KURL&url, bool forced){
root->append(entry);
- if (arcType == "bzip2" || arcType == "xz"){
+ if( arcType == "bzip2" || arcType == "lzip" || arcType == "xz" ) {
KRDEBUG("Got me here...");
parseLine(0,"",temp.file());
return true;
@@ -1062,6 +1067,14 @@ void tdeio_krarcProtocol::parseLine(int lineNo, TQString line, TQFile*) {
mode = arcFile->mode();
size = arcFile->size();
}
+ if( arcType == "lzip" ){
+ if( !lineNo ) return; //ignore the first line
+ size = nextWord(line).toULong(); // uncompressed size
+ fullName = arcFile->name();
+ if( fullName.endsWith(".lz") )
+ fullName.truncate(fullName.length() - 3);
+ mode = arcFile->mode();
+ }
if(arcType == "lha"){
// permissions
perm = nextWord(line);
@@ -1311,6 +1324,13 @@ bool tdeio_krarcProtocol::initArcParameters() {
copyCmd = TQString();
delCmd = TQString();
putCmd = TQString();
+ } else if(arcType == "lzip") {
+ cmd = fullPathName( "lzip" );
+ listCmd = cmd + " -l ";
+ getCmd = cmd + " -dc ";
+ copyCmd = TQString();
+ delCmd = TQString();
+ putCmd = TQString();
} else if(arcType == "arj"){
cmd = fullPathName( "arj" );
listCmd = fullPathName( "arj" ) + " v -y -v ";
@@ -1398,7 +1418,8 @@ bool tdeio_krarcProtocol::checkStatus( int exitCode ) {
if( arcType == "zip" || arcType == "rar" || arcType == "7z" )
return exitCode == 0 || exitCode == 1;
- else if( arcType == "ace" || arcType == "bzip2" || arcType == "lha" || arcType == "rpm" || arcType == "arj" )
+ else if( arcType == "ace" || arcType == "bzip2" || arcType == "lha" ||
+ arcType == "lzip" || arcType == "rpm" || arcType == "arj" )
return exitCode == 0;
else if( arcType == "gzip"|| arcType == "xz" )
return exitCode == 0 || exitCode == 2;
@@ -1420,6 +1441,7 @@ TQString tdeio_krarcProtocol::detectArchive( bool &encrypted, TQString fileName
{"ace", 7, "**ACE**" },
{"bzip2",0, "\x42\x5a\x68\x39\x31" },
{"gzip", 0, "\x1f\x8b"},
+ {"lzip", 0, "\x4c\x5a\x49\x50\x01" },
{"deb", 0, "!<arch>\ndebian-binary " },
{"7z", 0, "7z\xbc\xaf\x27\x1c" },
{"xz", 0, "\xfd" "7zXZ\x00"} };
@@ -1451,14 +1473,16 @@ TQString tdeio_krarcProtocol::detectArchive( bool &encrypted, TQString fileName
if( j == detectionString.length() ) {
TQString type = autoDetectParams[ i ].type;
- if( type == "bzip2" || type == "gzip" ) {
+ if( type == "bzip2" || type == "gzip" || type == "lzip" ) {
KTar tapeArchive( fileName );
if( tapeArchive.open( IO_ReadOnly ) ) {
tapeArchive.close();
if( type == "bzip2" )
type = "tbz";
- else
+ else if( type == "gzip" )
type = "tgz";
+ else
+ type = "tlz";
}
}
else if( type == "zip" )
diff --git a/krusader/Dialogs/packgui.cpp b/krusader/Dialogs/packgui.cpp
index e479060..c374b4b 100644
--- a/krusader/Dialogs/packgui.cpp
+++ b/krusader/Dialogs/packgui.cpp
@@ -63,6 +63,7 @@ PackGUI::PackGUI(TQString defaultName, TQString defaultPath, int noOfFiles, TQSt
if (PS("tar")) typeData->insertItem("tar");
if (PS("tar") && PS("gzip")) typeData->insertItem("tar.gz");
if (PS("tar") && PS("bzip2")) typeData->insertItem("tar.bz2");
+ if (PS("tar") && PS("lzip")) typeData->insertItem("tar.lz");
if (PS("tar") && PS("xz")) typeData->insertItem("tar.xz");
if (PS("zip")) typeData->insertItem("zip");
if (PS("rar")) typeData->insertItem("rar");
diff --git a/krusader/Konfigurator/kgarchives.cpp b/krusader/Konfigurator/kgarchives.cpp
index f31d719..b856dd6 100644
--- a/krusader/Konfigurator/kgarchives.cpp
+++ b/krusader/Konfigurator/kgarchives.cpp
@@ -59,6 +59,7 @@ KgArchives::KgArchives( bool first, TQWidget* parent, const char* name ) :
{{"Archives","Do Tar", _DoTar, i18n( "Tar" ), false, ""},
{"Archives","Do GZip", _DoGZip, i18n( "GZip" ), false, ""},
{"Archives","Do BZip2", _DoBZip2, i18n( "BZip2" ), false, ""},
+ {"Archives","Do LZip", _DoLZip, i18n( "LZip" ), false, ""},
{"Archives","Do UnZip", _DoUnZip, i18n( "Zip" ), false, ""},
{"Archives","Do UnRar", _DoUnRar, i18n( "Rar" ), false, ""},
{"Archives","Do Unarj", _DoArj, i18n( "Arj" ), false, ""},
@@ -70,7 +71,7 @@ KgArchives::KgArchives( bool first, TQWidget* parent, const char* name ) :
{"Archives","Do Xz", _DoXz, i18n( "Xz" ), false, ""}
};
- cbs = createCheckBoxGroup( 3, 0, packers, 12, generalGrp );
+ cbs = createCheckBoxGroup( 3, 0, packers, 13, generalGrp );
generalGrid->addWidget( cbs, 1, 0 );
addLabel( generalGrid, 2, 0, i18n( "The archives that are \"greyed-out\" were unavailable on your\nsystem last time Krusader checked. If you wish Krusader to\nsearch again, click the 'Auto Configure' button." ),
@@ -126,6 +127,7 @@ void KgArchives::disableNonExistingPackers()
cbs->find( "Do Tar" )->setEnabled(PS("tar"));
cbs->find( "Do GZip" )->setEnabled(PS("gzip"));
cbs->find( "Do BZip2" )->setEnabled(PS("bzip2"));
+ cbs->find( "Do LZip" )->setEnabled(PS("lzip"));
cbs->find( "Do UnZip" )->setEnabled(PS("unzip"));
cbs->find( "Do Lha" )->setEnabled(PS("lha"));
cbs->find( "Do RPM" )->setEnabled(PS("rpm") || PS("cpio"));
diff --git a/krusader/Konfigurator/kgdependencies.cpp b/krusader/Konfigurator/kgdependencies.cpp
index 25da574..aa24908 100644
--- a/krusader/Konfigurator/kgdependencies.cpp
+++ b/krusader/Konfigurator/kgdependencies.cpp
@@ -86,14 +86,15 @@ KgDependencies::KgDependencies( bool first, TQWidget* parent, const char* name
addApplication( "dpkg", archGrid1, 4, packers_tab, PAGE_PACKERS );
addApplication( "gzip", archGrid1, 5, packers_tab, PAGE_PACKERS );
addApplication( "lha", archGrid1, 6, packers_tab, PAGE_PACKERS );
- addApplication( "rar", archGrid1, 7, packers_tab, PAGE_PACKERS );
- addApplication( "tar", archGrid1, 8, packers_tab, PAGE_PACKERS );
- addApplication( "unace", archGrid1, 9, packers_tab, PAGE_PACKERS );
- addApplication( "unarj", archGrid1,10, packers_tab, PAGE_PACKERS );
- addApplication( "unrar", archGrid1,11, packers_tab, PAGE_PACKERS );
- addApplication( "unzip", archGrid1,12, packers_tab, PAGE_PACKERS );
- addApplication( "zip", archGrid1,13, packers_tab, PAGE_PACKERS );
- addApplication( "xz", archGrid1,14, packers_tab, PAGE_PACKERS );
+ addApplication( "lzip", archGrid1, 7, packers_tab, PAGE_PACKERS );
+ addApplication( "rar", archGrid1, 8, packers_tab, PAGE_PACKERS );
+ addApplication( "tar", archGrid1, 9, packers_tab, PAGE_PACKERS );
+ addApplication( "unace", archGrid1,10, packers_tab, PAGE_PACKERS );
+ addApplication( "unarj", archGrid1,11, packers_tab, PAGE_PACKERS );
+ addApplication( "unrar", archGrid1,12, packers_tab, PAGE_PACKERS );
+ addApplication( "unzip", archGrid1,13, packers_tab, PAGE_PACKERS );
+ addApplication( "zip", archGrid1,14, packers_tab, PAGE_PACKERS );
+ addApplication( "xz", archGrid1,15, packers_tab, PAGE_PACKERS );
// ---------------------------- CHECKSUM TAB -------------------------------------
TQWidget *checksum_tab = new TQWidget( tabWidget, "tab_4" );
diff --git a/krusader/Konfigurator/kggeneral.cpp b/krusader/Konfigurator/kggeneral.cpp
index f2a9f36..d8fd37d 100644
--- a/krusader/Konfigurator/kggeneral.cpp
+++ b/krusader/Konfigurator/kggeneral.cpp
@@ -131,6 +131,7 @@ TQFrame *line2 = createLine( generalGrp, "line2" );
TQStringList defaultAtomicExtensions;
defaultAtomicExtensions += ".tar.gz";
defaultAtomicExtensions += ".tar.bz2";
+ defaultAtomicExtensions += ".tar.lz";
defaultAtomicExtensions += ".moc.cpp";
defaultAtomicExtensions += ".tar.xz";
diff --git a/krusader/Konfigurator/kgprotocols.cpp b/krusader/Konfigurator/kgprotocols.cpp
index 6ba7942..4f3134b 100644
--- a/krusader/Konfigurator/kgprotocols.cpp
+++ b/krusader/Konfigurator/kgprotocols.cpp
@@ -49,13 +49,15 @@ TQString KgProtocols::defaultKrarcMimes = "application/x-7z,application/x-7z-com
"application/x-debian-package,"
"application/x-gzip,application/x-jar,"
"application/x-lha,application/x-lha-compressed,"
+ "application/x-lzip,"
"application/x-rar,"
"application/x-rpm,"
"application/x-xz,"
"application/x-zip";
TQString KgProtocols::defaultTarMimes = "application/x-tar,application/x-tarz,"
"application/x-compressed-tar,"
- "application/x-tbz,application/x-tgz,application/x-txz";
+ "application/x-tbz,application/x-tgz,"
+ "application/x-tlz,application/x-txz";
KgProtocols::KgProtocols( bool first, TQWidget* parent, const char* name ) :
KonfiguratorPage( first, parent, name )
diff --git a/krusader/Konfigurator/krresulttable.cpp b/krusader/Konfigurator/krresulttable.cpp
index 0ab4280..abc0c55 100644
--- a/krusader/Konfigurator/krresulttable.cpp
+++ b/krusader/Konfigurator/krresulttable.cpp
@@ -102,6 +102,7 @@ KrArchiverResultTable::KrArchiverResultTable(TQWidget* parent)
Archiver* tar = new Archiver("tar", "http://www.gnu.org", PS("tar"), true, true);
Archiver* gzip = new Archiver("gzip", "http://www.gnu.org", PS("gzip"), true, true);
Archiver* bzip2 = new Archiver("bzip2", "http://www.gnu.org", PS("bzip2"), true, true);
+ Archiver* lzip = new Archiver("lzip", "http://www.nongnu.org/lzip/lzip.html", PS("lzip"), true, true);
Archiver* lha = new Archiver("lha", "http://www.gnu.org", PS("lha"), true, true);
Archiver* zip = new Archiver("zip", "http://www.info-zip.org", PS("zip"), true, false);
Archiver* unzip = new Archiver("unzip", "http://www.info-zip.org", PS("unzip"), false, true);
@@ -139,6 +140,7 @@ KrArchiverResultTable::KrArchiverResultTable(TQWidget* parent)
addRow(tar, _grid);
addRow(gzip, _grid);
addRow(bzip2, _grid);
+ addRow(lzip, _grid);
addRow(lha, _grid);
addRow(zip, _grid);
addRow(unzip, _grid);
@@ -155,6 +157,7 @@ KrArchiverResultTable::KrArchiverResultTable(TQWidget* parent)
delete tar;
delete gzip;
delete bzip2;
+ delete lzip;
delete lha;
delete zip;
delete unzip;
diff --git a/krusader/Panel/krbriefview.cpp b/krusader/Panel/krbriefview.cpp
index 571fc44..9edc906 100644
--- a/krusader/Panel/krbriefview.cpp
+++ b/krusader/Panel/krbriefview.cpp
@@ -1318,6 +1318,7 @@ void KrBriefView::initProperties() {
TQStringList defaultAtomicExtensions;
defaultAtomicExtensions += ".tar.gz";
defaultAtomicExtensions += ".tar.bz2";
+ defaultAtomicExtensions += ".tar.lz";
defaultAtomicExtensions += ".moc.cpp";
defaultAtomicExtensions += ".tar.xz";
TQStringList atomicExtensions = krConfig->readListEntry("Atomic Extensions", defaultAtomicExtensions);
diff --git a/krusader/Panel/krdetailedview.cpp b/krusader/Panel/krdetailedview.cpp
index c3db5b9..98c8750 100644
--- a/krusader/Panel/krdetailedview.cpp
+++ b/krusader/Panel/krdetailedview.cpp
@@ -1029,7 +1029,8 @@ void KrDetailedView::keyPressEvent( TQKeyEvent * e ) {
if( KRarcHandler::arcSupported( type ) ) {
KURL url = i->VF->vfile_getUrl();
- if( type == "-tar" || type == "-tgz" || type == "-tbz" )
+ if( type == "-tar" || type == "-tgz" ||
+ type == "-tbz" || type == "-tlz" )
url.setProtocol( "tar" );
else
url.setProtocol( "krarc" );
@@ -1413,6 +1414,7 @@ void KrDetailedView::initProperties() {
TQStringList defaultAtomicExtensions;
defaultAtomicExtensions += ".tar.gz";
defaultAtomicExtensions += ".tar.bz2";
+ defaultAtomicExtensions += ".tar.lz";
defaultAtomicExtensions += ".moc.cpp";
defaultAtomicExtensions += ".tar.xz";
TQStringList atomicExtensions = krConfig->readListEntry("Atomic Extensions", defaultAtomicExtensions);
diff --git a/krusader/Panel/krviewitem.cpp b/krusader/Panel/krviewitem.cpp
index cdb9ed9..4f4fcb4 100644
--- a/krusader/Panel/krviewitem.cpp
+++ b/krusader/Panel/krviewitem.cpp
@@ -11,6 +11,7 @@
TQString atomicExtensions[] = {
".tar.gz",
".tar.bz2",
+ ".tar.lz",
".moc.cpp",
".tar.xz",
};
diff --git a/krusader/Search/krsearchmod.cpp b/krusader/Search/krsearchmod.cpp
index 1ce477b..3777cf6 100644
--- a/krusader/Search/krsearchmod.cpp
+++ b/krusader/Search/krsearchmod.cpp
@@ -173,7 +173,8 @@ void KRSearchMod::scanLocalDir( KURL urlToScan )
TQString realType = KRarcHandler::getType( encrypted, url.path(), mime );
if( !encrypted ) {
- if ( realType == "-tbz" || realType == "-tgz" || realType == "tarz" || realType == "-tar" )
+ if ( realType == "-tbz" || realType == "-tgz" || realType == "-tlz" ||
+ realType == "tarz" || realType == "-tar" )
archiveURL.setProtocol( "tar" );
else
archiveURL.setProtocol( "krarc" );
diff --git a/krusader/VFS/arc_vfs.cpp b/krusader/VFS/arc_vfs.cpp
index cd0f168..1b4a269 100755
--- a/krusader/VFS/arc_vfs.cpp
+++ b/krusader/VFS/arc_vfs.cpp
@@ -102,6 +102,15 @@ arc_vfs::arc_vfs(TQString origin,TQString type,TQObject* panel,bool write):
ignoreLines = -1;
isWritable = false;
}
+ if( type == "lzip" ){
+ cmd = KrServices::fullPathName ( "lzip" );
+ listCmd = " -l ";
+ delCmd = "";
+ addCmd = cmd + " -c ";
+ getCmd = " -dc ";
+ ignoreLines = -1;
+ isWritable = false;
+ }
if(type == "-tar"){
cmd = KrServices::fullPathName( "tar" );
listCmd = " -tvf";
@@ -125,6 +134,14 @@ arc_vfs::arc_vfs(TQString origin,TQString type,TQObject* panel,bool write):
getCmd = " -xjvf";
isWritable = false;
}
+ if(type == "-tlz"){
+ cmd = KrServices::fullPathName( "tar" );
+ listCmd = " -tvf"; // tar detects format automatically
+ delCmd = "";
+ addCmd = ""; // compressed tar archives can't be modified
+ getCmd = " -xvf";
+ isWritable = false;
+ }
if(type == "-zip"){
password = KRarcHandler::getPassword(arcFile,type);
cmd = KrServices::fullPathName( "unzip" );
@@ -233,7 +250,7 @@ bool arc_vfs::getDirs(){
temp.open(IO_ReadOnly);
char buf[1000];
TQString line;
- if(vfs_type == "gzip" || vfs_type == "-zip" )
+ if( vfs_type == "gzip" || vfs_type == "lzip" || vfs_type == "-zip" )
temp.readLine(line,10000); // skip the first line - it's garbage
if( vfs_type == "-rar" ){
while(temp.readLine(line,10000) != -1)
@@ -399,7 +416,8 @@ KURL::List* arc_vfs::vfs_getFiles(TQStringList* names){
krApp, TQT_SLOT(incProgress(TDEProcess*,char*,int)) );
proc << cmd << getCmd << "\""+arcFile+"\"";
- if( vfs_type == "gzip" || vfs_type == "zip2" ) proc << ">";
+ if( vfs_type == "gzip" || vfs_type == "zip2" || vfs_type == "lzip" )
+ proc << ">";
for(unsigned int i=0 ; i < files.count() ; ){
proc << (prefix+*files.at(i++));
if ( i%MAX_FILES==0 || i==files.count() ){
@@ -595,7 +613,8 @@ void arc_vfs::repack(){
}
// finaly repack tmpDir
- if( vfs_isWritable() || vfs_type=="gzip" || vfs_type=="zip2" ){
+ if( vfs_isWritable() || vfs_type == "gzip" ||
+ vfs_type == "zip2" || vfs_type == "lzip" ){
TQStringList filesToPack;
getFilesToPack(&filesToPack);
if( !filesToPack.isEmpty() ){
@@ -604,7 +623,7 @@ void arc_vfs::repack(){
connect(&addProc,TQT_SIGNAL(receivedStdout(TDEProcess*,char*,int)),
krApp, TQT_SLOT(incProgress(TDEProcess*,char*,int)) );
- if( vfs_type=="gzip" || vfs_type=="zip2" ){
+ if( vfs_type == "gzip" || vfs_type == "zip2" || vfs_type == "lzip" ){
addProc << addCmd << *filesToPack.at(0)<< ">" << "\""+arcFile+"\"";
addProc.start(TDEProcess::NotifyOnExit);
while( addProc.isRunning() ) tqApp->processEvents();
@@ -752,16 +771,19 @@ void arc_vfs::parseLine(TQString line, TQFile* temp){
mode_t mode = 0;
- // parse gziped files
- if(vfs_type == "gzip"){
+ // parse gziped and lzipped files
+ if( vfs_type == "gzip" || vfs_type == "lzip" ) {
KDE_struct_stat stat_p;
KDE_stat(arcFile.local8Bit(),&stat_p);
- nextWord(line);
- size = nextWord(line).toLong();
- nextWord(line);
+ if( vfs_type == "gzip" ) nextWord(line); // gzip compressed size
+ size = nextWord(line).toLong(); // uncompressed size
+ if( vfs_type == "lzip" ) nextWord(line); // lzip compressed size
+ nextWord(line); // ratio or saved
name = nextWord(line,'\n');
if(name.contains('/')) name = name.mid(name.findRev('/')+1,name.length());
+ if( vfs_type == "lzip" && name.endsWith(".lz") )
+ name.truncate(name.length() - 3);
perm = KRpermHandler::mode2TQString(stat_p.st_mode) ;
owner = KRpermHandler::user2uid(qfi.owner());
group = KRpermHandler::group2gid(qfi.group());
@@ -783,7 +805,8 @@ void arc_vfs::parseLine(TQString line, TQFile* temp){
}
// parse tar files
- if(vfs_type == "-tar" || vfs_type == "-tbz" || vfs_type == "-tgz" ){
+ if(vfs_type == "-tar" || vfs_type == "-tbz" ||
+ vfs_type == "-tgz" || vfs_type == "-tlz" ){
perm = nextWord(line);
TQString temp = nextWord(line);
owner = temp.left(temp.findRev('/')).toInt();
diff --git a/krusader/VFS/krarchandler.cpp b/krusader/VFS/krarchandler.cpp
index 1e744f2..616b465 100644
--- a/krusader/VFS/krarchandler.cpp
+++ b/krusader/VFS/krarchandler.cpp
@@ -46,7 +46,7 @@
#include "../krservices.h"
#include "../Dialogs/krpleasewait.h"
-static TQStringList arcProtocols = TQStringList::split(";", "tar;bzip;bzip2;gzip;krarc;zip;xz");
+static TQStringList arcProtocols = TQStringList::split(";", "tar;bzip;bzip2;gzip;krarc;lzip;zip;xz");
TDEWallet::Wallet * KRarcHandler::wallet = 0;
@@ -57,6 +57,7 @@ TQStringList KRarcHandler::supportedPackers() {
if ( KrServices::cmdExist( "tar" ) ) packers.append( "tar" );
if ( KrServices::cmdExist( "gzip" ) ) packers.append( "gzip" );
if ( KrServices::cmdExist( "bzip2" ) ) packers.append( "bzip2" );
+ if ( KrServices::cmdExist( "lzip" ) ) packers.append( "lzip" );
if ( KrServices::cmdExist( "unzip" ) ) packers.append( "unzip" );
if ( KrServices::cmdExist( "zip" ) ) packers.append( "zip" );
if ( KrServices::cmdExist( "lha" ) ) packers.append( "lha" );
@@ -91,6 +92,8 @@ bool KRarcHandler::arcSupported( TQString type ) {
return true;
else if ( type == "-tgz" && lst.contains( "tar" ) )
return true;
+ else if ( type == "-tlz" && lst.contains( "tar" ) )
+ return true;
else if ( type == "-txz" && lst.contains( "tar" ) )
return true;
else if ( type == "tarz" && lst.contains( "tar" ) )
@@ -99,6 +102,8 @@ bool KRarcHandler::arcSupported( TQString type ) {
return true;
else if ( type == "zip2" && lst.contains( "bzip2" ) )
return true;
+ else if ( type == "lzip" && lst.contains( "lzip" ) )
+ return true;
else if ( type == "-lha" && lst.contains( "lha" ) )
return true;
else if ( type == "-ace" && lst.contains( "unace" ) )
@@ -130,9 +135,11 @@ bool KRarcHandler::arcHandled( TQString type ) {
( type == "tarz" && krConfig->readBoolEntry( "Do GZip" , _DoGZip ) ) ||
( type == "-tar" && krConfig->readBoolEntry( "Do Tar" , _DoTar ) ) ||
( type == "-tbz" && krConfig->readBoolEntry( "Do BZip2", _DoBZip2 ) ) ||
+ ( type == "-tlz" && krConfig->readBoolEntry( "Do LZip" , _DoLZip ) ) ||
( type == "-txz" && krConfig->readBoolEntry( "Do Xz" , _DoXz ) ) ||
( type == "gzip" && krConfig->readBoolEntry( "Do GZip" , _DoGZip ) ) ||
( type == "zip2" && krConfig->readBoolEntry( "Do BZip2", _DoBZip2 ) ) ||
+ ( type == "lzip" && krConfig->readBoolEntry( "Do LZip" , _DoLZip ) ) ||
( type == "-zip" && krConfig->readBoolEntry( "Do UnZip", _DoUnZip ) ) ||
( type == "-lha" && krConfig->readBoolEntry( "Do Lha" , _DoUnZip ) ) ||
( type == "-rar" && krConfig->readBoolEntry( "Do UnRar", _DoUnRar ) ) ||
@@ -155,8 +162,9 @@ long KRarcHandler::arcFileCount( TQString archive, TQString type, TQString passw
// first check if supported
if ( !arcSupported( type ) ) return 0;
- // bzip, gzip and xz archives contain only one file
- if ( type == "zip2" || type == "gzip" || type == "-xz") return 1L;
+ // bzip, gzip, lzip and xz archives contain only one file
+ if ( type == "zip2" || type == "gzip" || type == "lzip" || type == "-xz" )
+ return 1L;
// set the right lister to do the job
TQString lister;
@@ -166,6 +174,7 @@ long KRarcHandler::arcFileCount( TQString archive, TQString type, TQString passw
else if ( type == "-tgz" ) lister = KrServices::fullPathName( "tar" ) + " -tvzf";
else if ( type == "tarz" ) lister = KrServices::fullPathName( "tar" ) + " -tvzf";
else if ( type == "-tbz" ) lister = KrServices::fullPathName( "tar" ) + " -tjvf";
+ else if ( type == "-tlz" ) lister = KrServices::fullPathName( "tar" ) + " -tvf";
else if ( type == "-txz" ) lister = KrServices::fullPathName( "tar" ) + " -tJvf";
else if ( type == "-lha" ) lister = KrServices::fullPathName( "lha" ) + " l";
else if ( type == "-rar" ) lister = KrServices::fullPathName( KrServices::cmdExist( "rar" ) ? "rar" : "unrar" ) + " l -v";
@@ -250,9 +259,11 @@ bool KRarcHandler::unpack( TQString archive, TQString type, TQString password, T
else if ( type == "-tgz" ) packer = KrServices::fullPathName( "tar" ) + " -xvzf";
else if ( type == "tarz" ) packer = KrServices::fullPathName( "tar" ) + " -xvzf";
else if ( type == "-tbz" ) packer = KrServices::fullPathName( "tar" ) + " -xjvf";
+ else if ( type == "-tlz" ) packer = KrServices::fullPathName( "tar" ) + " -xvf";
else if ( type == "-txz" ) packer = KrServices::fullPathName( "tar" ) + " -xJvf";
else if ( type == "gzip" ) packer = KrServices::fullPathName( "gzip" ) + " -cd";
else if ( type == "zip2" ) packer = KrServices::fullPathName( "bzip2" ) + " -cdk";
+ else if ( type == "lzip" ) packer = KrServices::fullPathName( "lzip" ) + " -cd";
else if ( type == "-lha" ) packer = KrServices::fullPathName( "lha" ) + " xf";
else if ( type == "-rar" ) packer = KrServices::fullPathName( KrServices::cmdExist( "rar" ) ? "rar" : "unrar" ) + " -y x";
else if ( type == "-ace" ) packer = KrServices::fullPathName( "unace" ) + " x";
@@ -309,7 +320,7 @@ bool KRarcHandler::unpack( TQString archive, TQString type, TQString password, T
// unpack the files
KrShellProcess proc;
proc << packer << " " + KrServices::quote( archive );
- if( type == "zip2" || type=="gzip" ){
+ if( type == "zip2" || type=="gzip" || type=="lzip" ){
TQString arcname = archive.mid(archive.findRev("/")+1);
if( arcname.contains(".") ) arcname = arcname.left(arcname.findRev("."));
proc << ">" << KrServices::quote( dest+"/"+arcname );
@@ -365,9 +376,11 @@ bool KRarcHandler::test( TQString archive, TQString type, TQString password, lon
else if ( type == "-tgz" ) packer = KrServices::fullPathName( "tar" ) + " -tvzf";
else if ( type == "tarz" ) packer = KrServices::fullPathName( "tar" ) + " -tvzf";
else if ( type == "-tbz" ) packer = KrServices::fullPathName( "tar" ) + " -tjvf";
+ else if ( type == "-tlz" ) packer = KrServices::fullPathName( "tar" ) + " -tvf";
else if ( type == "-txz" ) packer = KrServices::fullPathName( "tar" ) + " -tJvf";
else if ( type == "gzip" ) packer = KrServices::fullPathName( "gzip" ) + " -tv";
else if ( type == "zip2" ) packer = KrServices::fullPathName( "bzip2" ) + " -tv";
+ else if ( type == "lzip" ) packer = KrServices::fullPathName( "lzip" ) + " -tv";
else if ( type == "-rar" ) packer = KrServices::fullPathName( KrServices::cmdExist( "rar" ) ? "rar" : "unrar" ) + " t";
else if ( type == "-ace" ) packer = KrServices::fullPathName( "unace" ) + " t";
else if ( type == "-lha" ) packer = KrServices::fullPathName( "lha" ) + " t";
@@ -424,6 +437,7 @@ bool KRarcHandler::pack( TQStringList fileNames, TQString type, TQString dest, l
else if ( type == "tar" ) { packer = KrServices::fullPathName( "tar" ) + " -cvf"; type = "-tar"; }
else if ( type == "tar.gz" ) { packer = KrServices::fullPathName( "tar" ) + " -cvzf"; type = "-tgz"; }
else if ( type == "tar.bz2" ) { packer = KrServices::fullPathName( "tar" ) + " -cvjf"; type = "-tbz"; }
+ else if ( type == "tar.lz" ) { packer = KrServices::fullPathName( "tar" ) + " -cv --lzip -f"; type = "-tlz"; }
else if ( type == "tar.xz" ) { packer = KrServices::fullPathName( "tar" ) + " -cvJf"; type = "-txz"; }
else if ( type == "rar" ) { packer = KrServices::fullPathName( "rar" ) + " -r a"; type = "-rar"; }
else if ( type == "lha" ) { packer = KrServices::fullPathName( "lha" ) + " a"; type = "-lha"; }
@@ -627,7 +641,8 @@ bool KRarcHandler::checkStatus( TQString type, int exitCode ) {
return exitCode == 0 || exitCode == 1;
else if( type == "-ace" || type == "zip2" || type == "-lha" || type == "-rpm" || type == "cpio" ||
type == "-tar" || type == "tarz" || type == "-tbz" || type == "-tgz" || type == "-arj" ||
- type == "-deb" || type == "-txz")
+ type == "lzip" || type == "-tlz" ||
+ type == "-deb" || type == "-txz" )
return exitCode == 0;
else if (type == "gzip" || type == "-xz")
return exitCode == 0 || exitCode == 2;
@@ -649,6 +664,7 @@ TQString KRarcHandler::detectArchive( bool &encrypted, TQString fileName, bool c
{"ace", 7, "**ACE**" },
{"bzip2",0, "\x42\x5a\x68\x39\x31" },
{"gzip", 0, "\x1f\x8b"},
+ {"lzip", 0, "\x4c\x5a\x49\x50\x01" },
{"deb", 0, "!<arch>\ndebian-binary " },
{"7z", 0, "7z\xbc\xaf\x27\x1c" },
{"xz", 0, "\xfd" "7zXZ\x00" } };
@@ -680,14 +696,16 @@ TQString KRarcHandler::detectArchive( bool &encrypted, TQString fileName, bool c
if( j == detectionString.length() ) {
TQString type = autoDetectParams[ i ].type;
- if( type == "bzip2" || type == "gzip" ) {
+ if( type == "bzip2" || type == "gzip" || type == "lzip" ) {
KTar tapeArchive( fileName );
if( tapeArchive.open( IO_ReadOnly ) ) {
tapeArchive.close();
if( type == "bzip2" )
type = "tbz";
- else
+ else if( type == "gzip" )
type = "tgz";
+ else
+ type = "tlz";
}
}
else if( type == "zip" )
diff --git a/krusader/defaults.h b/krusader/defaults.h
index 309449b..2b2ddb1 100644
--- a/krusader/defaults.h
+++ b/krusader/defaults.h
@@ -173,6 +173,8 @@
#define _DoUnZip true
// Do BZip2 ///////////
#define _DoBZip2 true
+// Do LZip ////////////
+#define _DoLZip true
// Do Rar /////////////
#define _DoRar true
// Do UnRar ///////////