18 #include "emailfolder.h" |
18 #include "emailfolder.h" |
19 #include "emailmailbox.h" |
19 #include "emailmailbox.h" |
20 #include "emailapiutils.h" |
20 #include "emailapiutils.h" |
21 #include "messageiterator.h" |
21 #include "messageiterator.h" |
22 #include "emailsorting.h" |
22 #include "emailsorting.h" |
23 #include "cfsmailfolder.h" |
23 #include "CFSMailFolder.h" |
24 #include "cfsmailplugin.h" |
24 #include "CFSMailPlugin.h" |
25 #include "emailclientapi.hrh" |
25 #include "emailclientapi.hrh" |
26 #include "emailclientapiimpldefs.h" |
26 #include "emailclientapiimpldefs.h" |
27 |
|
28 |
27 |
29 // ----------------------------------------------------------------------------- |
28 // ----------------------------------------------------------------------------- |
30 // |
29 // |
31 // ----------------------------------------------------------------------------- |
30 // ----------------------------------------------------------------------------- |
32 CEmailFolder* CEmailFolder::NewLC( |
31 CEmailFolder* CEmailFolder::NewLC( |
156 // ----------------------------------------------------------------------------- |
157 // ----------------------------------------------------------------------------- |
157 // |
158 // |
158 // ----------------------------------------------------------------------------- |
159 // ----------------------------------------------------------------------------- |
159 TPtrC CEmailFolder::Name() const |
160 TPtrC CEmailFolder::Name() const |
160 { |
161 { |
161 return TPtrC (iFolder->GetFolderName()); |
162 if ( !iFolder ) |
|
163 return KNullDesC(); |
|
164 return TPtrC ( iFolder->GetFolderName() ); |
162 } |
165 } |
163 |
166 |
164 // ----------------------------------------------------------------------------- |
167 // ----------------------------------------------------------------------------- |
165 // |
168 // |
166 // ----------------------------------------------------------------------------- |
169 // ----------------------------------------------------------------------------- |
167 TInt CEmailFolder::GetSubfoldersL( RFolderArray& aSubfolders ) const |
170 TInt CEmailFolder::GetSubfoldersL( RFolderArray& aSubfolders ) const |
168 { |
171 { |
|
172 User::LeaveIfNull( iFolder ); |
|
173 |
169 RPointerArray<CFSMailFolder> folders; |
174 RPointerArray<CFSMailFolder> folders; |
170 CleanupResetAndDestroy<RPointerArray<CFSMailFolder> >::PushL( folders ); |
175 CleanupResetAndDestroy<RPointerArray<CFSMailFolder> >::PushL( folders ); |
171 |
176 |
172 iFolder->GetSubFoldersL(folders); |
177 iFolder->GetSubFoldersL( folders ); |
173 |
178 |
174 TInt res( folders.Count() ); |
179 TInt res( folders.Count() ); |
175 |
180 |
176 for ( TInt i = 0; i < res; i++ ) |
181 for ( TInt i = 0; i < res; i++ ) |
177 { |
182 { |
178 const CFSMailFolder* fsfolder = folders[i]; |
183 const CFSMailFolder* fsfolder = folders[i]; |
179 const TEntryId id = fsfolder->GetFolderId().Id(); |
184 const TEntryId id = fsfolder->GetFolderId().Id(); |
180 const TFolderId folderId( id, iFolderId.iMailboxId.iId ); |
185 const TFolderId folderId( id, iFolderId.iMailboxId.iId ); |
181 MEmailFolder* folder = CEmailFolder::NewLC( iPluginData, folderId, folders[i]); |
186 MEmailFolder* folder = CEmailFolder::NewL( iPluginData, folderId, folders[i] ); |
182 aSubfolders.AppendL( folder ); |
187 aSubfolders.AppendL( folder ); |
183 CleanupStack::Pop( folder ); // asubfolders took ownership |
188 } |
184 folders[i] = NULL; |
189 CleanupStack::Pop( &folders ); |
185 } |
190 folders.Close(); |
186 CleanupStack::Pop( &folders ); // folders |
|
187 folders.Close(); // aSubfolders took ownership |
|
188 return res; |
191 return res; |
189 } |
192 } |
190 |
193 |
191 // ----------------------------------------------------------------------------- |
194 // ----------------------------------------------------------------------------- |
192 // CEmailFolder::MessagesL |
195 // CEmailFolder::MessagesL |
193 // ----------------------------------------------------------------------------- |
196 // ----------------------------------------------------------------------------- |
194 MMessageIterator* CEmailFolder::MessagesL( |
197 MMessageIterator* CEmailFolder::MessagesL( |
195 const RSortCriteriaArray& aCriteria ) |
198 const RSortCriteriaArray& aCriteria ) |
196 { |
199 { |
197 RArray<TFSMailSortCriteria> sortCriterias; |
200 RArray<TFSMailSortCriteria> sortCriterias; |
|
201 CleanupClosePushL( sortCriterias ); |
198 CEmailFolder::ToFsSortCriteriaL( aCriteria, sortCriterias ); |
202 CEmailFolder::ToFsSortCriteriaL( aCriteria, sortCriterias ); |
199 |
203 |
200 MFSMailIterator* fsIter = iFolder->ListMessagesL(EFSMsgDataEnvelope, sortCriterias); |
204 MFSMailIterator* fsIter = iFolder->ListMessagesL( EFSMsgDataEnvelope, sortCriterias ); |
201 TUint count = iFolder->GetMessageCount(); |
205 TUint count = iFolder->GetMessageCount(); |
202 |
206 |
|
207 CleanupStack::PopAndDestroy( &sortCriterias ); |
203 CMessageIterator* iter = CMessageIterator::NewL( |
208 CMessageIterator* iter = CMessageIterator::NewL( |
204 fsIter, iPluginData, count ); |
209 fsIter, iPluginData, count ); |
205 |
210 |
206 sortCriterias.Reset(); |
|
207 return iter; |
211 return iter; |
208 } |
212 } |
209 |
213 |
210 // ----------------------------------------------------------------------------- |
214 // ----------------------------------------------------------------------------- |
211 // |
215 // |
212 // ----------------------------------------------------------------------------- |
216 // ----------------------------------------------------------------------------- |
213 void CEmailFolder::DeleteMessagesL( const REmailMessageIdArray& aMessageIds ) |
217 void CEmailFolder::DeleteMessagesL( const REmailMessageIdArray& aMessageIds ) |
218 for ( TInt i = 0; i < count; i++ ) |
222 for ( TInt i = 0; i < count; i++ ) |
219 { |
223 { |
220 TMessageId msgId = aMessageIds[i]; |
224 TMessageId msgId = aMessageIds[i]; |
221 if ( iFolderId != msgId.iFolderId ) |
225 if ( iFolderId != msgId.iFolderId ) |
222 { |
226 { |
223 // not all messages in the same folder, plugin API doesn't accept |
227 // not all messages in the same folder, plugin API doesn't accept this. |
224 // this! |
|
225 User::Leave( KErrArgument ); |
228 User::Leave( KErrArgument ); |
226 } |
229 } |
227 fsArray.AppendL( FsMsgId( iPluginData, msgId ) ); |
230 fsArray.AppendL( FsMsgId( iPluginData, msgId ) ); |
228 } |
231 } |
229 iPlugin->DeleteMessagesByUidL( |
232 iPlugin->DeleteMessagesByUidL( |
230 FsMsgId( iPluginData, iFolderId.iMailboxId ), |
233 FsMsgId( iPluginData, iFolderId.iMailboxId ), |
231 FsMsgId( iPluginData, iFolderId ), |
234 FsMsgId( iPluginData, iFolderId ), |
232 fsArray ); |
235 fsArray ); |
233 CleanupStack::PopAndDestroy(); // fsArray |
236 CleanupStack::PopAndDestroy( &fsArray ); |
234 } |
237 } |
235 |
238 |
236 // ----------------------------------------------------------------------------- |
239 // ----------------------------------------------------------------------------- |
237 // Maps email api sort criteria to sort criteria type that protocol plugin |
240 // Maps email api sort criteria to sort criteria type that protocol plugin |
238 // accepts. |
241 // accepts. |
250 EFSMailSortByPriority, |
253 EFSMailSortByPriority, |
251 EFSMailSortByFlagStatus, |
254 EFSMailSortByFlagStatus, |
252 EFSMailSortByUnread, |
255 EFSMailSortByUnread, |
253 EFSMailSortBySize, |
256 EFSMailSortBySize, |
254 EFSMailSortByAttachment }; |
257 EFSMailSortByAttachment }; |
255 |
258 |
256 for ( TInt i=0; i < aSortCriteria.Count(); i++ ) |
259 for ( TInt i=0; i < aSortCriteria.Count(); i++ ) |
257 { |
260 { |
258 const TEmailSortCriteria& criteria = aSortCriteria[i]; |
261 const TEmailSortCriteria& criteria = aSortCriteria[i]; |
259 __ASSERT_ALWAYS( criteria.iField < sizeof( fieldValues ) / sizeof (fieldValues [i] ), |
262 __ASSERT_ALWAYS( criteria.iField < sizeof( fieldValues ) / sizeof (fieldValues [i] ), |
260 Panic( EMailPanicSortMapIndexOutOfBounds ) ); |
263 Panic( EMailPanicSortMapIndexOutOfBounds ) ); |