imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp
changeset 36 c5df59b4ae2d
parent 30 b67379558a75
child 43 473df7bf149f
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -416,6 +416,7 @@
             "CThumbnailServer::ThreadFunctionL() -- CActiveScheduler::Start() out" );
         // Comes here if server gets shut down
         delete server;
+        server = NULL;
         CleanupStack::PopAndDestroy( scheduler );
         }
     }
@@ -443,7 +444,10 @@
         iSessionCount );
     iSessionCount--;
     
-    iProcessor->RemoveTasks(aSession);
+    if(iProcessor)
+        {
+        iProcessor->RemoveTasks(aSession);
+        }
     
     TN_DEBUG2( "CThumbnailServer::DropSession() aSession = 0x%08x", aSession );        
     
@@ -459,7 +463,7 @@
             {
             TN_DEBUG2( "CThumbnailServer::DropSession() - ref->iSession = 0x%08x", ref->iSession );
         
-            delete ref->iBitmap;            
+            delete ref->iBitmap;
             bpiter.RemoveCurrent();
                         
             TN_DEBUG2( "CThumbnailServer::DropSession() - deleted bitmap, left=%d", iBitmapPool.Count());
@@ -570,7 +574,7 @@
     
     if( iFetchedChecker )    
         {
-        iFetchedChecker->SetFetchResult( aPath, KErrNone );
+        iFetchedChecker->SetFetchResult( aPath, aThumbnailSize, KErrNone );
         }
     }
 
@@ -585,7 +589,7 @@
     TN_DEBUG3( "CThumbnailServer::FetchThumbnailL(aPath=%S aThumbnailSize=%d)", &aPath, aThumbnailSize );
     if( iFetchedChecker )
         {
-        TInt err( iFetchedChecker->LastFetchResult( aPath ) );
+        TInt err( iFetchedChecker->LastFetchResult( aPath, aThumbnailSize ) );
         if ( err == KErrNone ) // To avoid useless sql gets that fails for sure
             {
             // custom sizes are not stored to db, skip fetching
@@ -597,7 +601,7 @@
             TRAP( err, StoreForPathL( aPath )->FetchThumbnailL( aPath, aThumbnail, aData, aThumbnailSize, aOriginalSize) );
             if ( err != KErrNone )
                 {
-                iFetchedChecker->SetFetchResult( aPath, err );
+                iFetchedChecker->SetFetchResult( aPath, aThumbnailSize, err );
                 }
             }
         User::LeaveIfError( err );
@@ -666,7 +670,7 @@
     
     if( iFetchedChecker ) 
         {
-        iFetchedChecker->SetFetchResult( aPath, KErrNone );
+        iFetchedChecker->DeleteFetchResult( aPath );
         }
     }
 
@@ -852,7 +856,7 @@
         if ( ref->iSession == aRequestId.iSession && 
              ref->iRequestId == aRequestId.iRequestId )
             {            
-            delete ref->iBitmap;            
+            delete ref->iBitmap;
             bpiter.RemoveCurrent();                        
                         
             TN_DEBUG2( "CThumbnailServer::DequeTask() - deleted bitmap, left=%d", 
@@ -944,7 +948,7 @@
         }
     else
         {
-        if(iFormatting)
+        if( iFormatting )
            {
            TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - FORMATTING! - ABORT");
            User::Leave( KErrNotSupported );
@@ -953,17 +957,31 @@
         TVolumeInfo volumeInfo;
         TInt err = iFs.Volume( volumeInfo, aDrive );
         
-        if ( err || volumeInfo.iDrive.iDriveAtt& KDriveAttRom ||
-            volumeInfo.iDrive.iDriveAtt& KDriveAttRemote ||
-            volumeInfo.iDrive.iMediaAtt& KMediaAttWriteProtected ||
-            volumeInfo.iDrive.iMediaAtt& KMediaAttLocked )
+        if ( err )
+            {
+            // Locked
+            TN_DEBUG2( "CThumbnailServer::StoreForDriveL() - err %d", err);
+            User::Leave( err);
+            }
+        else if( volumeInfo.iDrive.iMediaAtt& KMediaAttLocked )
             {
-            // We don't support ROM disks or remote mounts. Media
-            // must be read-write and not locked.
-            User::Leave( KErrAccessDenied);
+            TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - locked");
+            User::Leave( KErrAccessDenied );
             }
-        
-        res = CThumbnailStore::NewL( iFs, aDrive, iImei, this );
+		else if ( volumeInfo.iDrive.iDriveAtt& KDriveAttRom ||
+            volumeInfo.iDrive.iDriveAtt& KDriveAttRemote ||
+            volumeInfo.iDrive.iMediaAtt& KMediaAttWriteProtected )
+            {
+            // We support ROM disks and remote disks in read only mode.
+            TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - rom/remote/write protected");
+            res = CThumbnailStore::NewL( iFs, aDrive, iImei, this, ETrue );
+            }
+        else
+            {
+            TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - normal");
+            res = CThumbnailStore::NewL( iFs, aDrive, iImei, this, EFalse );
+            }
+			
         CleanupStack::PushL( res );
         iStores.InsertL( aDrive, res );
         res->SetPersistentSizes(iPersistentSizes);
@@ -1057,6 +1075,7 @@
     if (store)
         {
         delete *store;
+        *store = NULL;
         iStores.Remove( aDrive );
         }
     }
@@ -1145,7 +1164,7 @@
           // If drive-list entry is zero, drive is not available
             continue;
            }
-            
+
         TInt err = iFs.Volume(volumeInfo, drive);
         TInt err_drive = iFs.Drive(driveInfo, drive);    
         
@@ -1295,7 +1314,7 @@
             
             if( iFetchedChecker ) 
                 {
-                iFetchedChecker->SetFetchResult( aPath, KErrNone );
+                iFetchedChecker->DeleteFetchResult( aPath );
                 }
             
             // need to create new thumbs
@@ -1327,8 +1346,7 @@
     
     if( iFetchedChecker ) 
         {
-        iFetchedChecker->SetFetchResult( aNewPath, iFetchedChecker->LastFetchResult(aCurrentPath) );
-        iFetchedChecker->SetFetchResult( aCurrentPath, KErrNone );
+        iFetchedChecker->RenameFetchResultL( aNewPath, aCurrentPath );
         }
     }
 
@@ -1453,6 +1471,10 @@
         {
         aMimeType = TDataType( KContactMime );
         } 
+    else if ( ext.CompareF( KAlbumArtExt ) == 0 )
+        {
+        aMimeType = TDataType( KAlbumArtMime );
+        }
     else
         {
         aMimeType = TDataType( KNullDesC8 );
@@ -1569,7 +1591,8 @@
          mimeType.CompareF( KRealVideoMime ) == 0 ||
          mimeType.CompareF( KFlashVideoMime ) == 0 ||
          mimeType.CompareF( KMatroskaVideoMime ) == 0 ||
-         mimeType.CompareF( KContactMime ) == 0 )
+         mimeType.CompareF( KContactMime ) == 0 ||
+         mimeType.CompareF( KAlbumArtMime ) == 0 )
         {
         return ETrue;
         }
@@ -1603,6 +1626,7 @@
             "CThumbnailServer::E32Main() -- thread function out, result=%d",
             result );
         delete cleanup;
+        cleanup = NULL;
         }
     if ( result != KErrNone )
         {