diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2016-04-22 22:20:18 +1000 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2016-04-22 22:20:18 +1000 |
commit | 4e99fc39eb61da7ad6fedaa05df76101c6db571e (patch) | |
tree | d5eff19d213ed8f0b3d328dd1dfeb0219f4df0fd | |
parent | 08151b49b072892f7ccf9baaa3084f2cccbbde9e (diff) | |
download | tdeutils-4e99fc39eb61da7ad6fedaa05df76101c6db571e.tar.gz tdeutils-4e99fc39eb61da7ad6fedaa05df76101c6db571e.zip |
Ark: added support for rar/unrar 5.x utilities. Both 4.x and 5.x are supported.
Special thanks to Fabio Rossi <rossi.f@inwind.it> for raising the issue and providing an initial patch.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
-rw-r--r-- | ark/rar.cpp | 114 | ||||
-rw-r--r-- | ark/rar.h | 1 |
2 files changed, 82 insertions, 33 deletions
diff --git a/ark/rar.cpp b/ark/rar.cpp index 4d6a7ce..e47c78a 100644 --- a/ark/rar.cpp +++ b/ark/rar.cpp @@ -52,8 +52,10 @@ #include "arkutils.h" #include "filelistview.h" +#define VERSION_5 5 + RarArch::RarArch( ArkWidget *_gui, const TQString & _fileName ) - : Arch( _gui, _fileName ) + : Arch( _gui, _fileName ), m_isFirstLine(false), m_version(0) { // Check if rar is available bool have_rar = !TDEGlobal::dirs()->findExe( "rar" ).isNull(); @@ -82,11 +84,7 @@ RarArch::RarArch( ArkWidget *_gui, const TQString & _fileName ) setReadOnly( true ); } - - - m_headerString = "-------------------------------------------------------------------------------"; - - m_isFirstLine = true; + m_headerString = ""; } bool RarArch::processLine( const TQCString &line ) @@ -96,7 +94,33 @@ bool RarArch::processLine( const TQCString &line ) TQTextCodec *codec = TQTextCodec::codecForLocale(); unicode_line = codec->toUnicode( line ); - if ( m_isFirstLine ) + // Look for rar/unrar version first + if (!m_version) + { + if (line.left(3) == "RAR") + { + bool ok_flag = false; + short version = line.mid(4, 1).toShort(&ok_flag); + if (ok_flag) + { + m_version = version; + if (m_version < VERSION_5) + { + m_headerString = "-------------------------------------------------------------------------------"; + m_isFirstLine = true; + } + else + { + m_headerString = "----------- --------- -------- ----- ---------- ----- -------- ----"; + } + setHeaders(); + return true; + } + } + return false; + } + + if (m_version < VERSION_5 && m_isFirstLine) { m_entryFilename = TQString::fromLocal8Bit( line ); m_entryFilename.remove( 0, 1 ); @@ -105,37 +129,59 @@ bool RarArch::processLine( const TQCString &line ) } TQStringList list; - TQStringList l2 = TQStringList::split( ' ', line ); - if( l2[5].startsWith("d") ) + if (m_version < VERSION_5) { - m_isFirstLine = true; - return true; - } - - list << m_entryFilename; // filename - list << l2[ 0 ]; // size - list << l2[ 1 ]; // packed - list << l2[ 2 ]; // ratio - - TQStringList date = TQStringList::split( '-', l2[ 3 ] ); - list << ArkUtils::fixYear( date[ 2 ].latin1() ) + '-' + date[ 1 ] + '-' + date [ 0 ] + ' ' + l2[4]; // date - list << l2[ 5 ]; // attributes - list << l2[ 6 ]; // crc - list << l2[ 7 ]; // method - list << l2[ 8 ]; // Version - - m_gui->fileList()->addItem( list ); // send to GUI - - m_isFirstLine = true; + if( l2[5].startsWith("d") ) + { + // Folder item + m_isFirstLine = true; + return true; + } + + list << m_entryFilename; // filename + list << l2[ 0 ]; // size + list << l2[ 1 ]; // packed + list << l2[ 2 ]; // ratio + + TQStringList date = TQStringList::split( '-', l2[ 3 ] ); + list << ArkUtils::fixYear( date[ 2 ].latin1() ) + '-' + date[ 1 ] + '-' + date [ 0 ] + ' ' + l2[4]; // date + list << l2[ 5 ]; // attributes + list << l2[ 6 ]; // crc + list << l2[ 7 ]; // method + list << l2[ 8 ]; // Version + + m_gui->fileList()->addItem( list ); // send to GUI + + m_isFirstLine = true; + } + else + { + if( l2[0].startsWith("d") ) + { + // Folder item + return true; + } + + m_entryFilename = line.mid(line.find(l2[7])); + list << m_entryFilename; // filename + list << l2[ 1 ]; // size + list << l2[ 2 ]; // packed + list << l2[ 3 ]; // ratio + + TQStringList date = TQStringList::split('-', l2[4]); + list << l2[ 4 ] + " " + l2[ 5 ]; // date and time + list << l2[ 0 ]; // attributes + list << l2[ 6 ]; // crc + + m_gui->fileList()->addItem( list ); // send to GUI + } return true; } void RarArch::open() { - setHeaders(); - m_buffer = ""; m_header_removed = false; m_finished = false; @@ -174,9 +220,11 @@ void RarArch::setHeaders() list.append( TIMESTAMP_COLUMN ); list.append( PERMISSION_COLUMN ); list.append( CRC_COLUMN ); - list.append( METHOD_COLUMN ); - list.append( VERSION_COLUMN ); - + if (m_version < VERSION_5) + { + list.append( METHOD_COLUMN ); + list.append( VERSION_COLUMN ); + } emit headers( list ); } @@ -65,6 +65,7 @@ class RarArch : public Arch * Therefore, the variables below are needed. */ bool m_isFirstLine; + short m_version; TQString m_entryFilename; }; |