photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp
branchRCL_3
changeset 12 ce1c7ad1f18b
parent 4 57d388cc48c1
child 15 191387a8b767
--- a/photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp	Fri Mar 12 15:42:44 2010 +0200
+++ b/photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp	Mon Mar 15 12:40:30 2010 +0200
@@ -19,9 +19,17 @@
 #include "glximageviewermanager.h"
 #include <glxsingletonstore.h>
 #include <glxtracer.h>
+#include <glxlog.h>
 
 #include <f32file.h>
+#include <caf/manager.h>
+#include <driveinfo.h>
+#include <coeutils.h>
 
+_LIT( KPrivateFolder, "\\Private\\" );
+_LIT( KGifFileExt, ".gif" );
+_LIT( KTempFilePath, "?:\\data\\images\\200104E7.gif" );
+    
 EXPORT_C CGlxImageViewerManager* CGlxImageViewerManager::InstanceL()
     {
     TRACER("CGlxImageViewerManager::InstanceL()");
@@ -52,6 +60,12 @@
     return iIsPrivate;
     }
 
+EXPORT_C TBool CGlxImageViewerManager::IsPrivateGif()
+    {
+    TRACER("CGlxImageViewerManager::IsPrivateGif()");    
+    return iIsPrivateGif;
+    }
+
 CGlxImageViewerManager::CGlxImageViewerManager()
     : iImageUri(NULL), iFile(NULL), iIsPrivate(EFalse)
     {
@@ -121,6 +135,18 @@
     delete iFile;
     iFile = NULL;
 
+    if (iIsPrivateGif)
+        {
+        iManager->DeleteFile(iImageUri->Des());
+        iIsPrivateGif = EFalse;
+        }
+
+    if ( iManager )
+        {
+        delete iManager;
+        iManager = NULL;
+        }
+    
     if ( iImageUri )
         {
         delete iImageUri;
@@ -136,18 +162,34 @@
 EXPORT_C void CGlxImageViewerManager::SetImageFileHandleL(const RFile& aFileHandle)
     {
     TRACER("void CGlxImageViewerManager::SetImageFileHandleL()");
-    _LIT( KPrivateFolder, "\\Private\\" );    // Platsec private folder  
     TFileName filePath;
-    User::LeaveIfError( aFileHandle.FullName( filePath ) );
-    SetImageUriL( filePath );
-    TParsePtrC parse( filePath );
-    if( parse.PathPresent() &&
-        parse.Path().Length() > KPrivateFolder().Length() &&
-        parse.Path().Left( KPrivateFolder().Length() ).CompareF( KPrivateFolder ) == 0 )
+    User::LeaveIfError(aFileHandle.FullName(filePath));
+    TParsePtrC parse(filePath);
+    if (parse.PathPresent() && parse.Path().Length()
+            > KPrivateFolder().Length() && parse.Path().Left(
+            KPrivateFolder().Length()).CompareF(KPrivateFolder) == 0)
         {
         // File is in private folder; duplicate file handle
         iFile = new (ELeave) RFile64;
-        User::LeaveIfError( iFile->Duplicate( aFileHandle ) );
+        User::LeaveIfError(iFile->Duplicate(aFileHandle));
         iIsPrivate = ETrue;
+        if (parse.Ext().Compare(KGifFileExt) == 0)
+            {
+            // Gif file from private path, hence make a local copy.
+            TFileName ramFilePath(KTempFilePath);
+            TChar drive;
+            User::LeaveIfError(DriveInfo::GetDefaultDrive(
+                    DriveInfo::EDefaultRam, drive));
+            ramFilePath[0] = drive;
+            ConeUtils::EnsurePathExistsL(ramFilePath);
+            if (!iManager)
+                {
+                iManager = ContentAccess::CManager::NewL();    
+                }
+            iManager->CopyFile(*iFile, ramFilePath);
+            filePath.Copy(ramFilePath);
+            iIsPrivateGif = ETrue;
+            }
         }
+    SetImageUriL( filePath );
     }