diff options
Diffstat (limited to 'krusader/VFS')
-rwxr-xr-x | krusader/VFS/arc_vfs.cpp | 43 | ||||
-rw-r--r-- | krusader/VFS/krarchandler.cpp | 32 |
2 files changed, 58 insertions, 17 deletions
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" ) |