Ark: info for folders in rar archives are now displayed as well.

This relates to bug 2541.
Signed-off-by: Fabio Rossi <rossi.f@inwind.it>

Patch updated and slightly reworked to fit TQt framework
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>

(cherry picked from commit 058176316e)
pull/30/head
Fabio Rossi 8 years ago committed by Michele Calgaro
parent 0123b079a9
commit 1ac492f796

@ -404,6 +404,61 @@ void FileListView::addItem( const TQStringList & entries )
flvi->setPixmap( 0, mimeType->pixmap( TDEIcon::Small ) );
}
void FileListView::updateItem( const TQStringList &entries )
{
TQStringList ancestorList = TQStringList::split( '/', entries[0] );
// Checks if the listview contains the first item in the list of ancestors
TQListViewItem *item = firstChild();
while ( item )
{
if ( item->text( 0 ) == ancestorList[0] || item->text( 0 ) == ancestorList[0].stripWhiteSpace())
break;
item = item->nextSibling();
}
// If the list view does not contain the item ...
if ( !item )
{
kdError( 1601 ) << ancestorList[0] << " not found" << endl;
return;
}
// We've already dealt with the first item, remove it
ancestorList.pop_front();
while ( ancestorList.count() > 0 )
{
TQString name = ancestorList[0];
FileLVI *parent = static_cast< FileLVI*>( item );
item = parent->firstChild();
while ( item )
{
if ( item->text(0) == name )
break;
item = item->nextSibling();
}
if ( !item )
{
kdError( 1601 ) << name << " not found" << endl;
return;
}
ancestorList.pop_front();
}
int i = 0;
for (TQStringList::ConstIterator it = entries.begin(); it != entries.end(); ++it)
{
item->setText(i, *it);
++i;
}
item->setOpen( true );
}
void FileListView::selectAll()
{
TQListView::selectAll( true );

@ -110,8 +110,14 @@ class FileListView: public TDEListView
* Adds a file and stats to the file listing
* @param entries A stringlist of the entries for each column of the list.
*/
void addItem( const TQStringList & entries );
void addItem( const TQStringList& entries );
/**
* Updates a file or folder item already included in the listview
* @param entries A stringlist of the updated entries for each column of the list.
*/
void updateItem( const TQStringList& entries );
/**
* Returns the number of files in the archive.
*/

@ -133,13 +133,6 @@ bool RarArch::processLine( const TQCString &line )
if (m_version < VERSION_5)
{
if( l2[5].startsWith("d") )
{
// Folder item
m_isFirstLine = true;
return true;
}
list << m_entryFilename; // filename
list << l2[ 0 ]; // size
list << l2[ 1 ]; // packed
@ -151,19 +144,11 @@ bool RarArch::processLine( const TQCString &line )
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
@ -174,9 +159,18 @@ bool RarArch::processLine( const TQCString &line )
list << l2[ 4 ] + " " + l2[ 5 ]; // date and time
list << l2[ 0 ]; // attributes
list << l2[ 6 ]; // crc
m_gui->fileList()->addItem( list ); // send to GUI
}
// send to GUI
if ( l2[6] == "00000000" )
{
// folders have CRC equal to 00000000
// RAR utilities show the folders at the end of the listing so the folders
// have been already added to the listview at this point without specifying
// all the columns but the name. Update the item with the missing info
m_gui->fileList()->updateItem( list );
}
else
m_gui->fileList()->addItem( list );
return true;
}
@ -355,7 +349,7 @@ void RarArch::unarchFileInternal()
bool RarArch::passwordRequired()
{
return m_lastShellOutput.find("Enter password") >= 0;
return m_lastShellOutput.find("Enter password") >= 0 || m_lastShellOutput.find("encrypted") >= 0;
}
void RarArch::remove( TQStringList *list )

Loading…
Cancel
Save