Do compressed checks based on mime inheritance

Instead of using a hardcoded map
BUGS: 320195
FIXED-IN: 4.10.4
remotes/origin/KDE/4.10
Albert Astals Cid 13 years ago
parent 4e05cc2526
commit d8133a173c
  1. 31
      part.cpp

@ -184,37 +184,48 @@ static QAction* actionForExportFormat( const Okular::ExportFormat& format, QObje
static QString compressedMimeFor( const QString& mime_to_check ) static QString compressedMimeFor( const QString& mime_to_check )
{ {
// The compressedMimeMap is here in case you have a very old shared mime database
// that doesn't have inheritance info for things like gzeps, etc
// Otherwise the "is()" calls below are just good enough
static QHash< QString, QString > compressedMimeMap; static QHash< QString, QString > compressedMimeMap;
static bool supportBzip = false;
static bool supportXz = false;
const QString app_gzip( QString::fromLatin1( "application/x-gzip" ) );
const QString app_bzip( QString::fromLatin1( "application/x-bzip" ) );
const QString app_xz( QString::fromLatin1( "application/x-xz" ) );
if ( compressedMimeMap.isEmpty() ) if ( compressedMimeMap.isEmpty() )
{ {
std::auto_ptr< KFilterBase > f; std::auto_ptr< KFilterBase > f;
compressedMimeMap[ QString::fromLatin1( "application/x-gzip" ) ] = compressedMimeMap[ QString::fromLatin1( "image/x-gzeps" ) ] = app_gzip;
QString::fromLatin1( "application/x-gzip" );
compressedMimeMap[ QString::fromLatin1( "image/x-gzeps" ) ] =
QString::fromLatin1( "application/x-gzip" );
// check we can read bzip2-compressed files // check we can read bzip2-compressed files
f.reset( KFilterBase::findFilterByMimeType( QString::fromLatin1( "application/x-bzip" ) ) ); f.reset( KFilterBase::findFilterByMimeType( app_bzip ) );
if ( f.get() ) if ( f.get() )
{ {
const QString app_bzip( QString::fromLatin1( "application/x-bzip" ) ); supportBzip = true;
compressedMimeMap[ app_bzip ] = app_bzip;
compressedMimeMap[ QString::fromLatin1( "application/x-bzpdf" ) ] = app_bzip; compressedMimeMap[ QString::fromLatin1( "application/x-bzpdf" ) ] = app_bzip;
compressedMimeMap[ QString::fromLatin1( "application/x-bzpostscript" ) ] = app_bzip; compressedMimeMap[ QString::fromLatin1( "application/x-bzpostscript" ) ] = app_bzip;
compressedMimeMap[ QString::fromLatin1( "application/x-bzdvi" ) ] = app_bzip; compressedMimeMap[ QString::fromLatin1( "application/x-bzdvi" ) ] = app_bzip;
compressedMimeMap[ QString::fromLatin1( "image/x-bzeps" ) ] = app_bzip; compressedMimeMap[ QString::fromLatin1( "image/x-bzeps" ) ] = app_bzip;
} }
// check we can read XZ-compressed files // check we can read XZ-compressed files
f.reset( KFilterBase::findFilterByMimeType( QString::fromLatin1( "application/x-xz" ) ) ); f.reset( KFilterBase::findFilterByMimeType( app_xz ) );
if ( f.get() ) if ( f.get() )
{ {
const QString app_xz( QString::fromLatin1( "application/x-xz" ) ); supportXz = true;
compressedMimeMap[ app_xz ] = app_xz;
} }
} }
QHash< QString, QString >::const_iterator it = compressedMimeMap.constFind( mime_to_check ); QHash< QString, QString >::const_iterator it = compressedMimeMap.constFind( mime_to_check );
if ( it != compressedMimeMap.constEnd() ) if ( it != compressedMimeMap.constEnd() )
return it.value(); return it.value();
KMimeType::Ptr mime = KMimeType::mimeType( mime_to_check );
if ( mime->is( app_gzip ) )
return app_gzip;
else if ( supportBzip && mime->is( app_bzip ) )
return app_bzip;
else if ( supportXz && mime->is( app_xz ) )
return app_xz;
return QString(); return QString();
} }

Loading…
Cancel
Save