summaryrefslogtreecommitdiffstats
path: root/tdeio
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2014-09-27 18:45:46 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2014-09-27 18:45:46 -0500
commita21cb20628b557c569f3066aa4d4ad4bedc9959c (patch)
treeab153907c6301584b3f2288e083bd2441bf95d09 /tdeio
parent4ffab32f5ff5480f82301d2cde67961a2010fd3c (diff)
downloadtdelibs-a21cb20628b557c569f3066aa4d4ad4bedc9959c.tar.gz
tdelibs-a21cb20628b557c569f3066aa4d4ad4bedc9959c.zip
Add fast mimetype accessor for use by Konqueror when checking for media device icons
This relates to Bug 699
Diffstat (limited to 'tdeio')
-rw-r--r--tdeio/tdeio/tdefileitem.cpp78
-rw-r--r--tdeio/tdeio/tdefileitem.h8
2 files changed, 70 insertions, 16 deletions
diff --git a/tdeio/tdeio/tdefileitem.cpp b/tdeio/tdeio/tdefileitem.cpp
index 16f37f0d3..0b3b020fb 100644
--- a/tdeio/tdeio/tdefileitem.cpp
+++ b/tdeio/tdeio/tdefileitem.cpp
@@ -57,7 +57,12 @@
class KFileItem::KFileItemPrivate {
public:
+ KFileItemPrivate() : commentCached(false) {}
+
+ public:
TQString iconName;
+ TQString comment;
+ bool commentCached;
};
KFileItem::KFileItem( const TDEIO::UDSEntry& _entry, const KURL& _url,
@@ -255,8 +260,9 @@ void KFileItem::readUDSEntry( bool _urlIsDirectory )
break;
case TDEIO::UDS_ICON_NAME:
- if ( !d )
+ if ( !d ) {
d = new KFileItemPrivate();
+ }
d->iconName = (*it).m_str;
break;
@@ -296,6 +302,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
}
@@ -543,6 +554,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 )
@@ -568,17 +589,28 @@ bool KFileItem::isMimeTypeKnown() const
TQString KFileItem::mimeComment()
{
- KMimeType::Ptr mType = determineMimeType();
+ if (d && (d->commentCached)) return d->comment;
- bool isLocalURL;
- KURL url = mostLocalURL(isLocalURL);
+ 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()
@@ -589,7 +621,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
@@ -855,12 +891,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 += " ";
@@ -1031,8 +1073,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;
@@ -1061,8 +1104,11 @@ void KFileItem::setUDSEntry( const TDEIO::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 );
diff --git a/tdeio/tdeio/tdefileitem.h b/tdeio/tdeio/tdefileitem.h
index eace44d94..b6c1b0bb8 100644
--- a/tdeio/tdeio/tdefileitem.h
+++ b/tdeio/tdeio/tdefileitem.h
@@ -328,6 +328,14 @@ public:
/**
* 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
* the mimetype first.
* @return the mime type