[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.3/kdelibs/nepomuk/core
From:       Sebastian Trueg <sebastian () trueg ! de>
Date:       2009-09-28 9:41:05
Message-ID: 1254130865.304700.13184.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1028823 by trueg:

Backport: fixed handling of local file paths and symlinks

 M  +19 -35    resourcemanager.cpp  


--- branches/KDE/4.3/kdelibs/nepomuk/core/resourcemanager.cpp #1028822:1028823
@@ -56,44 +56,40 @@
 
 Nepomuk::ResourceData* Nepomuk::ResourceManagerPrivate::data( const QUrl& uri, const QUrl& type )
 {
-    if ( uri.isEmpty() ) {
+    QUrl url( uri );
+
+    if ( url.isEmpty() ) {
         // return an invalid resource which may be activated by calling setProperty
-        return new ResourceData( uri, QString(), type, this );
+        return new ResourceData( url, QString(), type, this );
     }
 
     // default to "file" scheme, i.e. we do not allow an empty scheme
-    if ( uri.scheme().isEmpty() ) {
-        QUrl fileUri( uri );
-        fileUri.setScheme( "file" );
-        return data( fileUri, type );
+    if ( url.scheme().isEmpty() ) {
+        url.setScheme( "file" );
     }
 
     // if scheme is file, try to follow a symlink
-    if ( uri.scheme() == "file" ) {
-        QFileInfo fileInfo( uri.toLocalFile() );
-        if ( fileInfo.isSymLink() ) {
-            QString linkTarget = fileInfo.canonicalFilePath();
-            // linkTarget is empty for dangling symlinks
-            if ( !linkTarget.isEmpty() ) {
-                QUrl targetUri( linkTarget );
-                targetUri.setScheme( "file" );
-                return data( targetUri, type );
-            }
+    if ( url.scheme() == "file" ) {
+        QFileInfo fileInfo( url.toLocalFile() );
+        QString linkTarget = fileInfo.canonicalFilePath();
+        // linkTarget is empty for dangling symlinks
+        if ( !linkTarget.isEmpty() ) {
+            url = QUrl::fromLocalFile( linkTarget );
         }
     }
 
-    ResourceDataHash::iterator it = m_initializedData.find( uri.toString() );
+    ResourceDataHash::iterator it = m_initializedData.find( url.toString() );
 
     //
     // The uriOrId has no local representation yet -> create one
     //
     if( it == m_initializedData.end() ) {
-//        kDebug() << "No existing ResourceData instance found for uri " << uri;
+//        kDebug() << "No existing ResourceData instance found for uri " << url;
         //
         // The actual URI is already known here
         //
-        ResourceData* d = new ResourceData( uri, QString(), type, this );
-        m_initializedData.insert( uri.toString(), d );
+        ResourceData* d = new ResourceData( url, QString(), type, this );
+        m_initializedData.insert( url.toString(), d );
 
         return d;
     }
@@ -112,21 +108,9 @@
         return new ResourceData( QUrl(), QString(), type, this );
     }
 
-    // special case: files (only absolute paths for now)
-    if ( uriOrId[0] == '/' ) {
-        // try to follow a symlink
-        QFileInfo fileInfo( uriOrId );
-        if ( fileInfo.isSymLink() ) {
-            QString linkTarget = fileInfo.canonicalFilePath();
-            // linkTarget is empty for dangling symlinks, use given url for those
-            if ( !linkTarget.isEmpty() ) {
-                return data( linkTarget, type );
-            }
-        }
-        ResourceDataHash::iterator it = m_initializedData.find( "file://" + uriOrId );
-        if ( it != m_initializedData.end() ) {
-            return *it;
-        }
+    // special case: local files
+    if ( QFile::exists(uriOrId) ) {
+        return data( QUrl::fromLocalFile (uriOrId), type );
     }
 
     ResourceDataHash::iterator it = m_initializedData.find( uriOrId );
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic