Add fast mimetype accessor for use by Konqueror when checking for media device icons

This relates to Bug 699
(cherry picked from commit a21cb20628)
v3.5.13-sru
Timothy Pearson 10 years ago committed by Slávek Banko
parent cdeb154369
commit f52fdb1b4a

@ -47,8 +47,13 @@
#include <krun.h>
class KFileItem::KFileItemPrivate {
public:
KFileItemPrivate() : commentCached(false) {}
public:
TQString iconName;
TQString comment;
bool commentCached;
};
KFileItem::KFileItem( const KIO::UDSEntry& _entry, const KURL& _url,
@ -239,8 +244,9 @@ void KFileItem::readUDSEntry( bool _urlIsDirectory )
break;
case KIO::UDS_ICON_NAME:
if ( !d )
if ( !d ) {
d = new KFileItemPrivate();
}
d->iconName = (*it).m_str;
break;
@ -279,6 +285,11 @@ void KFileItem::refresh()
void KFileItem::refreshMimeType()
{
if ( d ) {
d->iconName = TQString::null;
d->comment = TQString::null;
d->commentCached = false;
}
m_pMimeType = 0L;
init( false ); // Will determine the mimetype
}
@ -510,6 +521,16 @@ TQString KFileItem::mimetype() const
return that->determineMimeType()->name();
}
TQString KFileItem::mimetypeFast() const
{
if (isMimeTypeKnown()) {
return mimetype();
}
else {
return m_pMimeType->name();
}
}
KMimeType::Ptr KFileItem::determineMimeType()
{
if ( !m_pMimeType || !m_bMimeTypeKnown )
@ -535,17 +556,28 @@ bool KFileItem::isMimeTypeKnown() const
TQString KFileItem::mimeComment()
{
KMimeType::Ptr mType = determineMimeType();
bool isLocalURL;
KURL url = mostLocalURL(isLocalURL);
if (d && (d->commentCached)) return d->comment;
KMimeType::Ptr mType = determineMimeType();
bool isLocalURL;
KURL url = mostLocalURL(isLocalURL);
TQString comment = mType->comment( url, isLocalURL );
//kdDebug() << "finding comment for " << url.url() << " : " << m_pMimeType->name() << endl;
if ( !d ) {
d = new KFileItemPrivate();
}
if (!comment.isEmpty()) {
d->comment = comment;
d->commentCached = true;
}
else {
d->comment = mType->name();
d->commentCached = true;
}
TQString comment = mType->comment( url, isLocalURL );
//kdDebug() << "finding comment for " << url.url() << " : " << m_pMimeType->name() << endl;
if (!comment.isEmpty())
return comment;
else
return mType->name();
return d->comment;
}
TQString KFileItem::iconName()
@ -556,7 +588,11 @@ TQString KFileItem::iconName()
KURL url = mostLocalURL(isLocalURL);
//kdDebug() << "finding icon for " << url.url() << " : " << m_pMimeType->name() << endl;
return determineMimeType()->icon(url, isLocalURL);
if ( !d ) {
d = new KFileItemPrivate();
}
d->iconName = determineMimeType()->icon(url, isLocalURL);
return d->iconName;
}
int KFileItem::overlays() const
@ -745,12 +781,18 @@ TQString KFileItem::getStatusBarInfo()
if ( m_bLink )
{
TQString comment = determineMimeType()->comment( m_url, m_bIsLocalURL );
if ( !d ) {
d = new KFileItemPrivate();
}
if (!d->commentCached) {
d->comment = determineMimeType()->comment( m_url, m_bIsLocalURL );
d->commentCached = true;
}
TQString tmp;
if ( comment.isEmpty() )
if ( d->comment.isEmpty() )
tmp = i18n ( "Symbolic Link" );
else
tmp = i18n("%1 (Link)").arg(comment);
tmp = i18n("%1 (Link)").arg(d->comment);
text += "->";
text += linkDest();
text += " ";
@ -921,8 +963,9 @@ void KFileItem::assign( const KFileItem & item )
determineMimeType();
if ( item.d ) {
if ( !d )
if ( !d ) {
d = new KFileItemPrivate;
}
d->iconName = item.d->iconName;
} else {
delete d;
@ -951,8 +994,11 @@ void KFileItem::setUDSEntry( const KIO::UDSEntry& _entry, const KURL& _url,
m_guessedMimeType = TQString::null;
m_metaInfo = KFileMetaInfo();
if ( d )
if ( d ) {
d->iconName = TQString::null;
d->comment = TQString::null;
d->commentCached = false;
}
readUDSEntry( _urlIsDirectory );
init( _determineMimeTypeOnDemand );

@ -312,6 +312,14 @@ public:
*/
TQString mimetype() const;
/**
* Returns the mimetype of the file item.
* If @p _determineMimeTypeOnDemand was used in the constructor, this will return
* the mimetype as fast as possible at the expense of accuracy.
* @return the fast mime type of the file
*/
TQString mimetypeFast() const;
/**
* Returns the mimetype of the file item.
* If _determineMimeTypeOnDemand was used in the constructor, this will determine

Loading…
Cancel
Save