For NSE_43972
[apps/osp/Gallery.git] / src / GlContentUpdateEventListener.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.1 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://floralicense.org/license/
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 /**
18  * @file                GlContentUpdateEventListener.cpp
19  * @brief               This is the implementation file for ContentUpdateEventListener class.
20  */
21
22 #include <FApp.h>
23 #include <FUi.h>
24 #include "GlContentUpdateEventListener.h"
25 #include "GlFileListPresentationModel.h"
26 #include "GlAlbumListPresentationModel.h"
27
28 using namespace Tizen::Base;
29 using namespace Tizen::Base::Collection;
30 using namespace Tizen::Base::Utility;
31 using namespace Tizen::Content;
32
33 ContentUpdateEventListener* ContentUpdateEventListener::__pContentUpdateEventListener = null;
34
35 ContentUpdateEventListener::ContentUpdateEventListener(void)
36         : __pContentManager(null)
37 {
38         AppLogDebug("ENTER");
39         AppLogDebug("EXIT");
40 }
41
42 ContentUpdateEventListener::~ContentUpdateEventListener(void)
43 {
44         AppLogDebug("ENTER");
45         __pContentManager->RemoveContentUpdateEventListener(*this);
46         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
47 }
48
49 ContentUpdateEventListener*
50 ContentUpdateEventListener::GetInstance(void)
51 {
52         AppLogDebug("ENTER");
53         if (__pContentUpdateEventListener == null)
54         {
55                 CreateInstance();
56         }
57         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
58
59         return __pContentUpdateEventListener;
60 }
61
62 void ContentUpdateEventListener::AddContentListener(void)
63 {
64         __pContentManager->AddContentUpdateEventListener(*this);
65 }
66
67 void ContentUpdateEventListener::RemoveContentListener(void)
68 {
69         __pContentManager->RemoveContentUpdateEventListener(*this);
70 }
71
72 result
73 ContentUpdateEventListener::Construct(void)
74 {
75         AppLogDebug("ENTER");
76
77         __pContentManager = new (std::nothrow) ContentManager();
78         __pContentManager->Construct();
79         __pContentManager->AddContentUpdateEventListener(*this);
80
81         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
82         return E_SUCCESS;
83 }
84
85 void
86 ContentUpdateEventListener::CreateInstance(void)
87 {
88         AppLogDebug("ENTER");
89         __pContentUpdateEventListener = new (std::nothrow) ContentUpdateEventListener();
90         result r = __pContentUpdateEventListener->Construct();
91         if (IsFailed(r) == true)
92         {
93                 delete __pContentUpdateEventListener;
94                 __pContentUpdateEventListener = null;
95                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
96
97                 return;
98         }
99
100         std::atexit(DestroyInstance);
101         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
102 }
103
104 void
105 ContentUpdateEventListener::DestroyInstance(void)
106 {
107         AppLogDebug("ENTER");
108
109         delete __pContentUpdateEventListener;
110         __pContentUpdateEventListener = null;
111
112         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
113 }
114
115 bool
116 ContentUpdateEventListener::GetChangeNotificationStatus()
117 {
118         AppLogDebug("ENTER");
119         AppLogDebug("EXIT");
120         return __changeNotificationReceived;
121 }
122
123 void
124 ContentUpdateEventListener::ResumeOperation()
125 {
126         AppLogDebug("ENTER");
127         AlbumListPresentationModel::GetInstance()->OnContentDeleted();
128         FileListPresentationModel::GetInstance()->OnContentDeleted();
129         __changeNotificationReceived = false;
130         AppLogDebug("EXIT");
131 }
132
133 String
134 ContentUpdateEventListener::GetDirecotyNameFromFullPath(const String& fullPath)const
135 {
136         AppLogDebug("ENTER");
137         if (fullPath == null)
138         {
139                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
140
141                 return null;
142         }
143         String delim(DIRECTORY_SEPARATOR);
144         StringTokenizer st(fullPath,delim);
145         String token;
146         String tokenPrev;
147         while (st.HasMoreTokens())
148         {
149                 tokenPrev = token;
150                 st.GetNextToken(token);
151         }
152
153         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
154
155         return tokenPrev;
156 }
157
158 void
159 ContentUpdateEventListener::OnContentFileCreated(Tizen::Content::ContentId contentId, Tizen::Content::ContentType contentType, result r)
160 {
161         AppLogDebug("ENTER");
162         if ( contentType == CONTENT_TYPE_IMAGE || contentType == CONTENT_TYPE_VIDEO)
163         {
164                 Tizen::Content::ContentInfo* cntInfo = __pContentManager->GetContentInfoN(contentId);
165                 String path = cntInfo->GetContentPath();
166                 String dirName = GetDirecotyNameFromFullPath(path);
167
168                 FileListPresentationModel* pFileListPM = FileListPresentationModel::GetInstance();
169                 pFileListPM->AddDirectoryIfNew(dirName);
170                 AlbumListPresentationModel::GetInstance()->OnContentCreated();
171                 pFileListPM->OnContentCreated();
172         }
173
174         AppLogDebug("EXIT");
175 }
176
177 void
178 ContentUpdateEventListener::OnContentFileUpdated(Tizen::Content::ContentId contentId, Tizen::Content::ContentType contentType, result r)
179 {
180         AppLogDebug("ENTER");
181         
182         if ( contentType == CONTENT_TYPE_IMAGE || contentType == CONTENT_TYPE_VIDEO)
183         {
184                 AlbumListPresentationModel::GetInstance()->OnContentUpdated();
185                 FileListPresentationModel::GetInstance()->OnContentUpdated();
186         }
187         AppLogDebug("EXIT");
188 }
189
190 void
191 ContentUpdateEventListener::OnContentFileDeleted(Tizen::Content::ContentId contentId, Tizen::Content::ContentType contentType, result r)
192 {
193         AppLogDebug("ENTER");
194
195         if ( contentType == CONTENT_TYPE_IMAGE || contentType == CONTENT_TYPE_VIDEO)
196         {
197                 Tizen::App::UiApp* appPtr = Tizen::App::UiApp::GetInstance();
198                 if (appPtr->GetAppUiState() == Tizen::App::APP_UI_STATE_FOREGROUND)
199                 {
200                         AlbumListPresentationModel::GetInstance()->OnContentDeleted();
201                         FileListPresentationModel::GetInstance()->OnContentDeleted();
202                 }
203                 else
204                 {
205                         __changeNotificationReceived = true;
206                 }
207
208         }
209         AppLogDebug("EXIT");
210 }
211
212 void
213 ContentUpdateEventListener::OnContentDirectoryScanCompleted(const Tizen::Base::String& directoryPath, result r)
214 {
215         AppLogDebug("ENTER");
216
217         Tizen::App::UiApp* appPtr = Tizen::App::UiApp::GetInstance();
218         if (appPtr->GetAppUiState() == Tizen::App::APP_UI_STATE_FOREGROUND)
219         {
220                 AlbumListPresentationModel::GetInstance()->OnContentDeleted();
221                 FileListPresentationModel::GetInstance()->OnContentDeleted();
222                 AlbumListPresentationModel::GetInstance()->OnContentScanCompleted( directoryPath );
223         }
224         else
225         {
226                 __changeNotificationReceived = true;
227         }\r
228
229         AppLogDebug("EXIT");
230 }