Initialize Tizen 2.3
[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         , __isTimerActive(false)
38         , __changeNotificationReceived(false)
39 {
40         AppLogDebug("ENTER");
41         AppLogDebug("EXIT");
42 }
43
44 ContentUpdateEventListener::~ContentUpdateEventListener(void)
45 {
46         AppLogDebug("ENTER");
47
48         if(__pContentManager != null)
49         {
50                 __pContentManager->RemoveContentUpdateEventListener(*this);
51                 delete __pContentManager;
52         }
53
54         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
55 }
56
57 ContentUpdateEventListener*
58 ContentUpdateEventListener::GetInstance(void)
59 {
60         AppLogDebug("ENTER");
61
62         if (__pContentUpdateEventListener == null)
63         {
64                 CreateInstance();
65         }
66         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
67
68         return __pContentUpdateEventListener;
69 }
70
71 void ContentUpdateEventListener::AddContentListener(void)
72 {
73         if(__pContentManager != null)
74         {
75                 __pContentManager->AddContentUpdateEventListener(*this);
76         }
77 }
78
79 void ContentUpdateEventListener::RemoveContentListener(void)
80 {
81         if(__pContentManager != null)
82         {
83                 __pContentManager->RemoveContentUpdateEventListener(*this);
84         }
85 }
86
87 result
88 ContentUpdateEventListener::Construct(void)
89 {
90         AppLogDebug("ENTER");
91
92         __pContentManager = new (std::nothrow) ContentManager();
93
94         if (__pContentManager != null)
95         {
96                 __pContentManager->Construct();
97                 __pContentManager->AddContentUpdateEventListener(*this);
98         }
99
100         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
101         return E_SUCCESS;
102 }
103
104 void
105 ContentUpdateEventListener::CreateInstance(void)
106 {
107         AppLogDebug("ENTER");
108         __pContentUpdateEventListener = new (std::nothrow) ContentUpdateEventListener();
109
110         if (__pContentUpdateEventListener != null)
111         {
112                 result r = __pContentUpdateEventListener->Construct();
113
114                 if (IsFailed(r) == true)
115                 {
116                         delete __pContentUpdateEventListener;
117                         __pContentUpdateEventListener = null;
118                         AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
119                         return;
120                 }
121         }
122
123         std::atexit(DestroyInstance);
124         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
125 }
126
127 void
128 ContentUpdateEventListener::DestroyInstance(void)
129 {
130         AppLogDebug("ENTER");
131
132         if (__pContentUpdateEventListener != null)
133         {
134                 delete __pContentUpdateEventListener;
135                 __pContentUpdateEventListener = null;
136         }
137
138         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
139 }
140
141 bool
142 ContentUpdateEventListener::GetChangeNotificationStatus()
143 {
144         AppLogDebug("ENTER");
145         AppLogDebug("EXIT");
146         return __changeNotificationReceived;
147 }
148
149 void
150 ContentUpdateEventListener::ResumeOperation()
151 {
152         AppLogDebug("ENTER");
153         AlbumListPresentationModel::GetInstance()->OnContentDeleted();
154         FileListPresentationModel::GetInstance()->OnContentDeleted();
155         __changeNotificationReceived = false;
156         AppLogDebug("EXIT");
157 }
158
159 String
160 ContentUpdateEventListener::GetDirecotyNameFromFullPath(const String& fullPath)const
161 {
162         AppLogDebug("ENTER");
163         if (fullPath == null)
164         {
165                 AppLogDebug("EXIT 1(%s)", GetErrorMessage(GetLastResult()));
166
167                 return null;
168         }
169         String delim(DIRECTORY_SEPARATOR);
170         StringTokenizer st(fullPath,delim);
171         String token;
172         String tokenPrev;
173         while (st.HasMoreTokens())
174         {
175                 tokenPrev = token;
176                 st.GetNextToken(token);
177         }
178
179         AppLogDebug("EXIT(%s)", GetErrorMessage(GetLastResult()));
180
181         return tokenPrev;
182 }
183
184 void
185 ContentUpdateEventListener::OnContentFileCreated(Tizen::Content::ContentId contentId, Tizen::Content::ContentType contentType, result r)
186 {
187         AppLogDebug("ENTER");
188         if ( !__isTimerActive && ( contentType == CONTENT_TYPE_IMAGE || contentType == CONTENT_TYPE_VIDEO) )
189         {
190                 Tizen::Content::ContentInfo* cntInfo = __pContentManager->GetContentInfoN(contentId);
191
192                 if ( cntInfo != NULL)
193                 {
194                         String path = cntInfo->GetContentPath();
195                         String dirName = GetDirecotyNameFromFullPath(path);
196
197                         FileListPresentationModel* pFileListPM = FileListPresentationModel::GetInstance();
198                         pFileListPM->AddDirectoryIfNew(dirName);
199                         AlbumListPresentationModel::GetInstance()->OnContentCreated();
200                         pFileListPM->OnContentCreated();
201                 }
202         }
203
204         AppLogDebug("EXIT");
205 }
206
207 void
208 ContentUpdateEventListener::OnContentFileUpdated(Tizen::Content::ContentId contentId, Tizen::Content::ContentType contentType, result r)
209 {
210         AppLogDebug("ENTER");
211         
212         if ( !__isTimerActive && ( contentType == CONTENT_TYPE_IMAGE || contentType == CONTENT_TYPE_VIDEO) )
213         {
214                 AlbumListPresentationModel::GetInstance()->OnContentUpdated();
215                 FileListPresentationModel::GetInstance()->OnContentUpdated();
216         }
217         else
218         {
219                 FileListPresentationModel::GetInstance()->OnContentUpdated(contentId);
220         }
221         AppLogDebug("EXIT");
222 }
223
224 void
225 ContentUpdateEventListener::OnContentFileDeleted(Tizen::Content::ContentId contentId, Tizen::Content::ContentType contentType, result r)
226 {
227         AppLogDebug("ENTER");
228
229         if ( !__isTimerActive && ( contentType == CONTENT_TYPE_IMAGE || contentType == CONTENT_TYPE_VIDEO) )
230         {
231                 Tizen::App::UiApp* appPtr = Tizen::App::UiApp::GetInstance();
232                 if (appPtr->GetAppUiState() == Tizen::App::APP_UI_STATE_FOREGROUND)
233                 {
234                         AlbumListPresentationModel::GetInstance()->OnContentDeleted();
235                         FileListPresentationModel::GetInstance()->OnContentDeleted();
236                 }
237                 else
238                 {
239                         __changeNotificationReceived = true;
240                 }
241
242         }
243         AppLogDebug("EXIT");
244 }
245
246 void
247 ContentUpdateEventListener::OnContentDirectoryScanCompleted(const Tizen::Base::String& directoryPath, result r)
248 {
249         AppLogDebug("ENTER");
250
251         if ( __isTimerActive )
252         {
253                 AlbumListPresentationModel::GetInstance()->OnContentScanCompleted( directoryPath );
254                 return;
255         }
256         Tizen::App::UiApp* appPtr = Tizen::App::UiApp::GetInstance();
257         if (appPtr->GetAppUiState() == Tizen::App::APP_UI_STATE_FOREGROUND)
258         {
259                 AlbumListPresentationModel::GetInstance()->OnContentDeleted();
260                 FileListPresentationModel::GetInstance()->OnContentDeleted();
261                 AlbumListPresentationModel::GetInstance()->OnContentScanCompleted(directoryPath);
262         }
263         else
264         {
265                 bool renameHandled = AlbumListPresentationModel::GetInstance()->OnContentScanCompleted(directoryPath);
266                 if (!renameHandled)
267                 {
268                         __changeNotificationReceived = true;
269                 }
270         }\r
271
272         AppLogDebug("EXIT");
273 }
274 void
275 ContentUpdateEventListener::SetTimerActive(void)
276 {
277         __isTimerActive = true;
278 }
279
280 void
281 ContentUpdateEventListener::ReSetTimerActive(void)
282 {
283         __isTimerActive = false;
284 }