Fixed prevent issue
[apps/osp/Gallery.git] / src / GlAlbumListPresentationModel.cpp
index 0f0fd89..477d0a3 100644 (file)
 #include "GlAlbumListPresentationModel.h"
 #include "GlAlbumRenameEventListener.h"
 #include "GlContentUpdateEventListener.h"
+#include "GlFileListPresentationModel.h"
 #include "GlGalleryApp.h"
 #include "GlThumbnailEvent.h"
 #include "GlThumbnailEventArg.h"
 #include "GlThumbnailProvider.h"
+#include "GlTimerScanDirListener.h"
 
 using namespace Tizen::App;
 using namespace Tizen::Base;
@@ -67,7 +69,7 @@ static const int GAP = 10;
 static const int HEIGHT_OFFSET = 5;
 static const int Y_POS_CANVAS = 260;
 static const int FOLDER_NAME_WIDTH = 165;
-static const int FOLDER_NAME_HEIGHT = 38 ;
+static const int FOLDER_NAME_HEIGHT = 38;
 
 
 static const int ALPHA_BG = 110;
@@ -78,7 +80,7 @@ static const String RESERVED_MEDIA_PATH = Environment::GetMediaPath();
 static const String RESERVED_CAMERA_PATH = Environment::GetMediaPath() + L"Camera";
 static const String RESERVED_CAMERA_PATH_EXT = Environment::GetExternalStoragePath() + L"Camera";
 static const String RESERVED_DOWNLOAD_PATH = Environment::GetMediaPath() + L"Downloads";
-static const String CONTENT_INFO_ORDER = L"ContentFileName";
+static const String DATE_TIME = L"DateTime";
 
 static const int FORMAT_BUFFER_SIZE = 256;
 
@@ -94,12 +96,13 @@ IList* AlbumListPresentationModel::__pAlbumInfoList = null;
 
 AlbumListPresentationModel::AlbumListPresentationModel(void)
        : __pFolderBackgroundBitmap(null)
-       , __pContentManager(null)
        , __pAlbumListener(null)
        , __appControlMode(APPCONTROL_MODE_MAIN)
        , __appControlMediaType(APPCONTROL_MEDIA_TYPE_IMAGE)
        , __appControlSelectionMode(APPCONTROL_SELECTION_MODE_SINGLE)
        , __updateProgressStatus(false)
+       , __pTimerScanListener(null)
+       , __scanCount(0)
 {
        AppLogDebug("ENTER");
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
@@ -109,6 +112,7 @@ AlbumListPresentationModel::~AlbumListPresentationModel(void)
 {
        AppLogDebug("ENTER");
        DeviceManager::RemoveDeviceEventListener(DEVICE_TYPE_STORAGE_CARD, *this);
+       delete __pFolderBackgroundBitmap;
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
 }
 
@@ -140,9 +144,6 @@ AlbumListPresentationModel::Construct(void)
        __pThumbnailEvent = new (std::nothrow) ThumbnailEvent();
        __pThumbnailEvent->AddListener(*pThumbnailEventListener, true);
 
-       __pContentManager = new (std::nothrow) ContentManager();
-       __pContentManager->Construct();
-
        DeviceManager::AddDeviceEventListener(DEVICE_TYPE_STORAGE_CARD, *this);
 
        __pThumbnailProvider = ThumbnailProvider::GetInstance();
@@ -311,7 +312,6 @@ AlbumListPresentationModel::RenameAlbum(const String& orgPath, const String& new
        {
                __pAlbumListener = pAlbumListener;
                __renameNewPath = newPath;\r
-               __renameOrgPath = orgPath;\r
                r = ContentManager::ScanDirectory(newPath, true, NULL, __reqId);\r
                AppLogDebug("Content scan failed (%s)", GetErrorMessage(r));
                r = ContentManager::ScanDirectory(orgPath, true, NULL, __reqId);\r
@@ -321,15 +321,69 @@ AlbumListPresentationModel::RenameAlbum(const String& orgPath, const String& new
        return r;
 }
 
-void AlbumListPresentationModel::OnContentScanCompleted (const Tizen::Base::String &scanPath)\r
+void
+AlbumListPresentationModel::ShowAnimation(void)
+{
+       IFormContentUpdateEventListener* pInterface = null;
+       IEnumerator* pEventEnum = __pContentEventListener->GetEnumeratorN();
+       while (pEventEnum->MoveNext() == E_SUCCESS)
+       {
+               pInterface = static_cast<IFormContentUpdateEventListener*>(pEventEnum->GetCurrent());
+               pInterface->ShowAnimation();
+       }
+       delete pEventEnum;
+}
+
+void
+AlbumListPresentationModel::StopAnimation(void)
+{
+       IFormContentUpdateEventListener* pInterface = null;
+       IEnumerator* pEventEnum = __pContentEventListener->GetEnumeratorN();
+       while (pEventEnum->MoveNext() == E_SUCCESS)
+       {
+               pInterface = static_cast<IFormContentUpdateEventListener*>(pEventEnum->GetCurrent());
+               pInterface->StopAnimation();
+       }
+       delete pEventEnum;
+}
+
+void
+AlbumListPresentationModel::AddTimerScanListener(ITimerScanDirListener* pListener, int scanCount)
+{
+       __pTimerScanListener = pListener;
+       __scanCount = scanCount;
+}
+
+void
+AlbumListPresentationModel::RemoveTimerScanListener(void)
+{
+       __pTimerScanListener = null;
+       __scanCount = 0;
+}
+
+bool
+AlbumListPresentationModel::OnContentScanCompleted (const Tizen::Base::String &scanPath)\r
 {
        AppLogDebug("ENTER");\r
+       if (__pTimerScanListener)
+       {
+               __scanCount--;
+               if ( __scanCount == 0 )
+               {
+                       __pTimerScanListener->OnTimerScanDirComplete();
+               }
+               return false;
+       }
        if (__pAlbumListener && ( scanPath == __renameNewPath))\r
        {
                InitializeAlbumInfoList(CONTENT_TYPE_ALL);
                __pAlbumListener->OnAlbumRenameComplete();
+               __renameNewPath = L"";
+               AppLogDebug("EXIT");
+               return true;
        }
        AppLogDebug("EXIT");
+       return false;
 }
 
 void
@@ -383,16 +437,25 @@ AlbumListPresentationModel::DrawFontImage(Canvas& canvas, AlbumInfo* pAlbumInfo,
 
        String strFolderName = pAlbumInfo->GetAlbumName();
 
+       if (strFolderName == ALL_ALBUMS_REAL_NAME)
+       {
+               strFolderName = ResourceManager::GetString(L"IDS_MEDIABR_BODY_ALL_ALBUMS");
+       }
+
+       String strDirectory = pAlbumInfo->GetDirectory(0);
+       AppLog("The directory path is  %ls" , strDirectory.GetPointer());
+
        Rectangle rectCanvas(ICON_CAP + FOLDER_CAP, Y_POS_CANVAS, CANVAS_WIDTH, CANVAS_HEIGHT);
        Color bgColor(COLOR_CANVAS_BG);
        bgColor.SetAlpha(ALPHA_BG);
        canvas.FillRectangle(bgColor, rectCanvas);
 
-       if (strFolderName == ResourceManager::GetString(L"IDS_COM_BODY_DOWNLOADS"))
+
+       if (strDirectory == RESERVED_DOWNLOAD_PATH)
        {
                pBitmap = ResourceManager::GetBitmapN(IDB_ALBUM_ICON_DOWNLOAD);
        }
-       else if (strFolderName == ResourceManager::GetString(L"IDS_MEDIABR_BODY_CAMERA_ROLL_ABB"))
+       else if (strDirectory == RESERVED_CAMERA_PATH ||  strDirectory == RESERVED_CAMERA_PATH_EXT)
        {
                pBitmap = ResourceManager::GetBitmapN(IDB_ALBUM_ICON_CAMERA);
        }
@@ -439,12 +502,14 @@ AlbumListPresentationModel::DrawFontImage(Canvas& canvas, AlbumInfo* pAlbumInfo,
        enTextCount.SetTextAbbreviationEnabled(true);
        enTextCount.Add(textElementCount);
 
-       pointText = Point(CANVAS_MARGIN_LEFT + CANVAS_IMAGE_FOLDER_WIDTH + GAP + FOLDER_NAME_WIDTH , rectCanvas.y + HEIGHT_OFFSET);
+       pointText = Point(CANVAS_MARGIN_LEFT + CANVAS_IMAGE_FOLDER_WIDTH + GAP + FOLDER_NAME_WIDTH,
+                       rectCanvas.y + HEIGHT_OFFSET);
        canvas.SetFont(ftCnt);
        canvas.SetForegroundColor(Color::GetColor(COLOR_ID_WHITE));
        canvas.DrawText(pointText, enTextCount);
 
-       pointText = Point(CANVAS_MARGIN_LEFT + CANVAS_IMAGE_FOLDER_WIDTH + GAP , rectCanvas.y + GAP + HEIGHT_OFFSET);
+       pointText = Point(CANVAS_MARGIN_LEFT + CANVAS_IMAGE_FOLDER_WIDTH + GAP,
+                       rectCanvas.y + GAP + HEIGHT_OFFSET);
        canvas.SetForegroundColor(Color::GetColor(COLOR_ID_WHITE));
        canvas.DrawText(pointText, enText);
 
@@ -505,6 +570,7 @@ AlbumListPresentationModel::StartAppControl(const String& providerId, const Stri
                IAppControlResponseListener* pListener)
 {
        AppLogDebug("ENTER");
+       FileListPresentationModel::GetInstance()->ClearProviderId();
        AppControl* pAc = AppManager::FindAppControlN(providerId, operationId);
        if (pAc == null)
        {
@@ -532,7 +598,7 @@ AlbumListPresentationModel::GetDirectoryName(String& directoryPath) const
 {
        AppLogDebug("ENTER");
        String directoryName;
-       int lastIndex = -1 ;
+       int lastIndex = -1;
 
        directoryPath.LastIndexOf(DIRECTORY_SEPARATOR, directoryPath.GetLength() - 1, lastIndex);
        directoryPath.SubString(lastIndex + 1, directoryName);
@@ -562,15 +628,6 @@ AlbumListPresentationModel::InitializeAlbumInfoList(const ContentType& contentTy
 
        if (__pAlbumInfoList != null)
        {
-               AlbumInfo* pInfo = null;
-               for (int i = 0; i < __pAlbumInfoList->GetCount(); ++i)
-               {
-                       pInfo = static_cast<AlbumInfo*>(__pAlbumInfoList->GetAt(i));
-                       if (pInfo->GetAlbumName().IsEmpty() == false)
-                       {
-                               AppLog("Print AlbumName(%d)(%ls)", i, pInfo->GetAlbumName().GetPointer());
-                       }
-               }
                delete __pAlbumInfoList;
        }
        __pAlbumInfoList = new (std::nothrow) ArrayList(SingleObjectDeleter);
@@ -618,7 +675,7 @@ AlbumListPresentationModel::InitializeAlbumInfoList(const ContentType& contentTy
 
        result r = pAllAlbumInfo->Construct();
        TryCatch(IsFailed(r) == E_SUCCESS,,"new pNoNameAlbumInfo is %s",GetErrorMessage(r));
-       pAllAlbumInfo->SetAlbumName(ResourceManager::GetString(L"IDS_MEDIABR_BODY_ALL_ALBUMS"));
+       pAllAlbumInfo->SetAlbumName(ALL_ALBUMS_REAL_NAME);
 
        r = pCameraAlbumInfo->Construct();
        TryCatch(IsFailed(r) == E_SUCCESS,,"new pNoNameAlbumInfo is %s",GetErrorMessage(r));
@@ -638,11 +695,14 @@ AlbumListPresentationModel::InitializeAlbumInfoList(const ContentType& contentTy
                while (pEnum->MoveNext() == E_SUCCESS)
                {
                        pDirPath = static_cast<String*>(pEnum->GetCurrent());
+                       String mediaPath = RESERVED_MEDIA_PATH;
+                       int length = mediaPath.GetLength();
+                       mediaPath.Remove(length-1,1);
+
                        if (pDirPath == null)
                        {
                                continue;
                        }
-
                        if ((*pDirPath == RESERVED_CAMERA_PATH) ||(*pDirPath == RESERVED_CAMERA_PATH_EXT))
                        {
                                IList* pContentIdList = GetContentIdListInDirectoryN(*pDirPath, contentType);
@@ -668,10 +728,12 @@ AlbumListPresentationModel::InitializeAlbumInfoList(const ContentType& contentTy
 
                                        pAllAlbumInfo->AppendDirectory(*pDirPath);
                                        pAllAlbumInfo->AppendContentIdList(*pContentIdList);
+
+                                       pContentIdList->RemoveAll(true);
                                        delete pContentIdList;
                                }
                        }
-                       else if (*pDirPath == RESERVED_MEDIA_PATH)
+                       else if (*pDirPath == mediaPath)
                        {
                                IList* pContentIdList = GetContentIdListInDirectoryN(*pDirPath, contentType);
 
@@ -682,6 +744,8 @@ AlbumListPresentationModel::InitializeAlbumInfoList(const ContentType& contentTy
 
                                        pAllAlbumInfo->AppendDirectory(*pDirPath);
                                        pAllAlbumInfo->AppendContentIdList(*pContentIdList);
+
+                                       pContentIdList->RemoveAll(true);
                                        delete pContentIdList;
                                }
                        }
@@ -703,13 +767,21 @@ AlbumListPresentationModel::InitializeAlbumInfoList(const ContentType& contentTy
 
                                                pAllAlbumInfo->AppendDirectory(*pDirPath);
                                                pAllAlbumInfo->AppendContentIdList(*pContentIdList);
+
+                                               pSubDirList->RemoveAll(true);
                                                delete pSubDirList;
                                        }
-                                       delete pContentIdList;
+
+                                       if (pContentIdList != NULL)
+                                       {
+                                               pContentIdList->RemoveAll(true);
+                                               delete pContentIdList;
+                                       }
                                }
                                if (pAlbumInfo != null && pAlbumInfo->GetContentIdCount() > 0)
                                {
                                        __pAlbumInfoList->Add(pAlbumInfo);
+                                       AppLog("Adding album");
                                }
                                else
                                {
@@ -768,32 +840,23 @@ AlbumListPresentationModel::InitializeAlbumInfoList(const ContentType& contentTy
 
        if (pContentDirectoryPathList != null)
        {
+               pContentDirectoryPathList->RemoveAll(true);
                delete pContentDirectoryPathList;
        }
+       ClearThumbnailRequests(false);
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
        return;
 
 CATCH:
-       if (pContentDirectoryPathList != null)
-       {
-               delete pContentDirectoryPathList;
-       }
-       if (pAllAlbumInfo != null)
-       {
-               delete pAllAlbumInfo;
-       }
-       if (pCameraAlbumInfo != null)
-       {
-               delete pCameraAlbumInfo;
-       }
-       if (pDownloadAlbumInfo != null)
-       {
-               delete pDownloadAlbumInfo;
-       }
-       if (pNoNameAlbumInfo != null)
-       {
-               delete pNoNameAlbumInfo;
-       }
+if (pContentDirectoryPathList != null)
+{
+       pContentDirectoryPathList->RemoveAll(true);
+       delete pContentDirectoryPathList;
+}
+       delete pAllAlbumInfo;
+       delete pCameraAlbumInfo;
+       delete pDownloadAlbumInfo;
+       delete pNoNameAlbumInfo;
 }
 
 String
@@ -856,8 +919,10 @@ AlbumListPresentationModel::GetContentIdListInDirectoryN(const String& directory
 
        int pageNo = 1;
        int countPerPage = directory.GetContentDirectoryItemCount(contentDirectoryPath);
+
        IList* pContentInfoList = directory.GetContentDirectoryItemListN(contentDirectoryPath, pageNo, countPerPage,
-                       CONTENT_INFO_ORDER, SORT_ORDER_ASCENDING);
+                       DATE_TIME, SORT_ORDER_DESCENDING);
+
        IList* pContentIdList = new (std::nothrow) ArrayList(SingleObjectDeleter);
 
        if ((pContentInfoList != null) && (pContentInfoList->GetCount() > 0))
@@ -872,25 +937,25 @@ AlbumListPresentationModel::GetContentIdListInDirectoryN(const String& directory
                }
                delete pEnum;
        }
-       delete pContentInfoList;
+
+       if (pContentInfoList != NULL)
+       {
+               pContentInfoList->RemoveAll(true);
+               delete pContentInfoList;
+       }
+
        AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
 
        return pContentIdList;
 }
 
 result
-AlbumListPresentationModel::DeleteContentFile(const ContentId& contentId)
+AlbumListPresentationModel::DeleteContentFile(const String& filePath)
 {
        AppLogDebug("ENTER");
        result r = E_SUCCESS;
-       ContentManager contentManager;
-       r = contentManager.Construct();
-       if (r == E_SUCCESS)
-       {
-               r = contentManager.DeleteContent(contentId);
-       }
-       AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
-
+       r = File::Remove(filePath);
+       AppLogDebug("Exit");
        return r;
 }
 
@@ -1037,6 +1102,8 @@ AlbumListPresentationModel::OnThumbnailReceivedN(IEventArg& eventArg)
                        }
                }
 
+               delete pThumbnailInfo;
+
                if (__pPresentationModelListener->GetCount() > 0)
                {
                        IEnumerator* pEnum = __pPresentationModelListener->GetEnumeratorN();
@@ -1151,7 +1218,7 @@ AlbumListPresentationModel::SetUpdateProgressStatus(const bool status)
 }
 
 result
-AlbumListPresentationModel::RotateImage(int index, RotateMode rotateMode)
+AlbumListPresentationModel::RotateImage(const ContentId&, RotateMode rotateMode)
 {
        return E_SUCCESS;
 }