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