Fix memory leaks
[apps/osp/Gallery.git] / src / GlFileListPresentationModel.cpp
index 1e337a9..24a0732 100644 (file)
@@ -98,6 +98,13 @@ FileListPresentationModel::~FileListPresentationModel(void)
 {
        AppLogDebug("ENTER");
        DeviceManager::RemoveDeviceEventListener(DEVICE_TYPE_STORAGE_CARD, *this);
+       if (__pContentIdList)
+       {
+               __pContentIdList->RemoveAll(true);
+               delete __pContentIdList;
+               __pContentIdList = null;
+       }
+       delete __pContentManager;
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
 }
 
@@ -131,7 +138,9 @@ FileListPresentationModel::Construct(void)
 
        if (__pIconListViewCache != null)
        {
+               __pIconListViewCache->RemoveAll(true);
                delete __pIconListViewCache;
+               __pIconListViewCache = null;
        }
        __pIconListViewCache = new (std::nothrow) ArrayList(SingleObjectDeleter);
        __pIconListViewCache->Construct(SIZE_ICON_LIST_CACHE);
@@ -230,6 +239,7 @@ FileListPresentationModel::DestroyInstance(void)
 
        if (__pIconListViewCache != null)
        {
+               __pIconListViewCache->RemoveAll(true);
                delete __pIconListViewCache;
                __pIconListViewCache = null;
        }
@@ -448,6 +458,7 @@ FileListPresentationModel::GetThumbnailInSyncCacheN(const int index, String*& pN
        {
                delete pThumbnailInfo;
        }
+
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
 
        return E_SUCCESS;
@@ -609,6 +620,8 @@ FileListPresentationModel::OnThumbnailReceivedN(IEventArg& eventArg)
                                }
                        }
 
+                       delete pEnum;
+
                        if (isMatch == false)
                        {
                                if (SIZE_ICON_LIST_CACHE <= __pIconListViewCache->GetCount())
@@ -682,7 +695,10 @@ FileListPresentationModel::OnContentUpdated(void)
                return;
        }
        //Clear the ImageCaches when content is updated like rotate.
-       ClearImageCache();
+       if ( __pContentEventListener->GetCount() )
+       {
+               ClearImageCache();
+       }
 
        IFormContentUpdateEventListener* pInterface = null;
        if (__pContentEventListener == null)
@@ -988,10 +1004,14 @@ FileListPresentationModel::MoveToContentFile(const ContentId& contentId, const S
 
        r = File::Copy(filePath, destPath, false);
 
-       if ( r == E_SUCCESS )
+       if ( r == E_STORAGE_FULL)
        {
-               ContentManager::ScanFile(destPath);
+               File::Remove(destPath);
+       }
+       ContentManager::ScanFile(destPath);
 
+       if ( r == E_SUCCESS )
+       {
                if ( isCopyOperation == false)
                {
                        File::Remove(filePath);               // if Move Op remove original file
@@ -1006,6 +1026,12 @@ FileListPresentationModel::MoveToContentFile(const ContentId& contentId, const S
        return r;
 }
 
+void
+FileListPresentationModel::ClearProviderId(void)
+{
+       __providerId.Clear();
+}
+
 result
 FileListPresentationModel::StartAppControl(const String& providerId, const String& operationId,
                const String* pUriData, const Tizen::Base::String* pMimeType, const HashMap* pDataList,
@@ -1013,7 +1039,8 @@ FileListPresentationModel::StartAppControl(const String& providerId, const Strin
 {
        AppLogDebug("ENTER");
        AppControl* pAc = AppManager::FindAppControlN(providerId, operationId);
-       __providerId.Clear();
+
+       ClearProviderId();
        __providerId.Append(providerId);
 
        if (pAc == null)
@@ -1131,6 +1158,34 @@ FileListPresentationModel::RefreshCurrentAlbumContentInfoList(const ContentType
        return r;
 }
 
+void
+FileListPresentationModel::AddDirectoryIfNew(const String& dirName)
+{
+       bool isMatched = false;
+       int dirCount = __pDirectoryList->GetCount();
+       if (__albumName != ResourceManager::GetString(L"IDS_MEDIABR_BODY_ALL_ALBUMS"))//we are not in All albums
+       {
+               return;
+       }
+       for (int i = 0; i < dirCount ; ++i)
+       {
+               if (static_cast<String*>(__pDirectoryList->GetAt(i))->CompareTo(dirName) == 0)
+               {
+                       isMatched = true;
+                       break;
+               }
+       }
+       if (!isMatched)
+       {
+               String fullPath = Environment::GetMediaPath();
+               fullPath.Append(dirName);
+               __pDirectoryList->Add(new (std::nothrow) String(fullPath));
+
+       }
+}
+
+
+
 result
 FileListPresentationModel::RefreshContentInfoList(const ContentType contentType)
 {
@@ -1156,6 +1211,7 @@ FileListPresentationModel::RefreshContentInfoList(const ContentType contentType)
                delete __pContentInfoList;
                __pContentInfoList = null;
        }
+
        __pContentInfoList = GetContentInfoListInDirectoryListN(*__pDirectoryList, __albumContentType);
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
 
@@ -1577,36 +1633,37 @@ FileListPresentationModel::RotateImage(int index, RotateMode rotateMode)
        if (r == E_SUCCESS)
        {
                imageFormat = img.GetImageFormat(filePath);
-       }
 
-       r = rotateBuffer.Construct(filePath);
-       if (r == E_SUCCESS)
-       {
-               if (rotateMode == ROTATE_MODE_RIGHT)
+               r = rotateBuffer.Construct(filePath);
+               if (r == E_SUCCESS)
                {
-                       pRotatedBuffer = rotateBuffer.RotateN(IMAGE_ROTATION_90);
+                       if (rotateMode == ROTATE_MODE_RIGHT)
+                       {
+                               pRotatedBuffer = rotateBuffer.RotateN(IMAGE_ROTATION_90);
+                       }
+                       else
+                       {
+                               pRotatedBuffer = rotateBuffer.RotateN(IMAGE_ROTATION_270);
+                       }
                }
-               else
+
+               if (pRotatedBuffer != null)
                {
-                       pRotatedBuffer = rotateBuffer.RotateN(IMAGE_ROTATION_270);
+                       r = pRotatedBuffer->EncodeToFile(filePath, imageFormat, true, 100);
+                       delete pRotatedBuffer;
+                       ContentManager::ScanFile(filePath);
                }
        }
 
-       if (pRotatedBuffer != null)
-       {
-               r = pRotatedBuffer->EncodeToFile(filePath, imageFormat, true, 100);
-               delete pRotatedBuffer;
-               ContentManager::ScanFile(filePath);
-       }
        return r;
 }
 
 void
 FileListPresentationModel::ClearImageCache(void)
 {
-       AppLogDebug("FileListPresentationModel::ClearImageCache ++");
+       AppLogDebug("ENTER");
 
-       if(__pIconListViewCache != null && __providerId.Equals(APPCONTROL_PROVIDER_ID_IMAGE, false) == true)
+       if(__pIconListViewCache != null)
        {
                bool clearThumbnailReq = true;
                while(__pIconListViewCache->GetCount() != 0)
@@ -1620,7 +1677,7 @@ FileListPresentationModel::ClearImageCache(void)
                        __pIconListViewCache->RemoveAt(0, true);
                }
        }
-       AppLogDebug("FileListPresentationModel::ClearImageCache --");
+       AppLogDebug("EXIT");
 }
 
 void