emailservices/emailcommon/src/CFSMailFolder.cpp
changeset 65 478bc57ad291
parent 59 16ed8d08d0b1
equal deleted inserted replaced
59:16ed8d08d0b1 65:478bc57ad291
     1 /*
     1 /*
     2 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). 
     2 * Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). 
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    19 
    19 
    20 // <qmail>
    20 // <qmail>
    21 #include <nmcommonheaders.h>
    21 #include <nmcommonheaders.h>
    22 // </qmail>
    22 // </qmail>
    23 
    23 
    24 //<cmail>
       
    25 #include "CFSMailFolder.h"
    24 #include "CFSMailFolder.h"
    26 #include "CFSMailPlugin.h"
    25 #include "CFSMailPlugin.h"
    27 //</cmail>
       
    28 
       
    29 #include "CFSMailIterator.h"
    26 #include "CFSMailIterator.h"
    30 #include "CFSMailRequestObserver.h"
    27 #include "CFSMailRequestObserver.h"
    31 
    28 
    32 // ================= MEMBER FUNCTIONS ==========================================
    29 // ================= MEMBER FUNCTIONS ==========================================
    33 // -----------------------------------------------------------------------------
    30 // -----------------------------------------------------------------------------
    72     
    69     
    73 // <qmail>
    70 // <qmail>
    74     CFSMailFolderBase::ConstructL( aFolderId );
    71     CFSMailFolderBase::ConstructL( aFolderId );
    75 // </qmail>
    72 // </qmail>
    76     
    73     
    77 	// get requesthandler pointer
    74   // get requesthandler pointer
    78 	iRequestHandler = static_cast<CFSMailRequestHandler*>(Dll::Tls());
    75     iRequestHandler = static_cast<CFSMailRequestHandler*>(Dll::Tls());
    79 }
    76 }
    80 
    77 
    81 // -----------------------------------------------------------------------------
    78 // -----------------------------------------------------------------------------
    82 // CFSMailFolder::~CFSMailFolder
    79 // CFSMailFolder::~CFSMailFolder
    83 // -----------------------------------------------------------------------------
    80 // -----------------------------------------------------------------------------
    88 
    85 
    89 // -----------------------------------------------------------------------------
    86 // -----------------------------------------------------------------------------
    90 // CFSMailFolder::ListMessagesL
    87 // CFSMailFolder::ListMessagesL
    91 // -----------------------------------------------------------------------------
    88 // -----------------------------------------------------------------------------
    92 EXPORT_C MFSMailIterator* CFSMailFolder::ListMessagesL( const TFSMailDetails aDetails,
    89 EXPORT_C MFSMailIterator* CFSMailFolder::ListMessagesL( const TFSMailDetails aDetails,
    93         						const RArray<TFSMailSortCriteria>& aSorting)
    90                     const RArray<TFSMailSortCriteria>& aSorting )
    94 {
    91 {
    95     NM_FUNCTION;
    92     NM_FUNCTION;
    96     
    93     
    97 	CFSMailIterator* iterator = NULL;
    94     CFSMailIterator* iterator(NULL);
    98 	if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
    95     if (CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
    99 		{
    96         {
   100 		MFSMailIterator* pluginIterator =
    97         MFSMailIterator* pluginIterator =
   101 		plugin->ListMessagesL(GetMailBoxId(),GetFolderId(),aDetails,aSorting);
    98         plugin->ListMessagesL(GetMailBoxId(),GetFolderId(),aDetails,aSorting);
   102 		if(pluginIterator)
    99         if(pluginIterator)
   103 			{
   100             {
   104 			iterator = CFSMailIterator::NewL(*pluginIterator,iRequestHandler );
   101             iterator = CFSMailIterator::NewL(*pluginIterator,iRequestHandler );
   105 			}
   102             }
   106 		}
   103         }
   107 	return iterator;
   104   return iterator;
   108 }
   105 }
   109 
   106 
   110 // -----------------------------------------------------------------------------
   107 // -----------------------------------------------------------------------------
   111 // CFSMailFolder::FetchMessagesL
   108 // CFSMailFolder::FetchMessagesL
   112 // -----------------------------------------------------------------------------
   109 // -----------------------------------------------------------------------------
   113 EXPORT_C TInt CFSMailFolder::FetchMessagesL( 	const RArray<TFSMailMsgId>& aMessageIds,
   110 EXPORT_C TInt CFSMailFolder::FetchMessagesL( const RArray<TFSMailMsgId>& aMessageIds,
   114      							 				TFSMailDetails aDetails,
   111                           TFSMailDetails aDetails,
   115      							 				MFSMailRequestObserver& aObserver )
   112                           MFSMailRequestObserver& aObserver )
   116 	{
   113   {
   117     NM_FUNCTION;
   114     NM_FUNCTION;
   118     
   115     
   119 	// init asynchronous request
   116     // init asynchronous request
   120 	CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId());
   117     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId());
   121     TFSPendingRequest request = 
   118     TFSPendingRequest request = 
   122     	iRequestHandler->InitAsyncRequestL(	GetFolderId().PluginId(), aObserver );
   119         iRequestHandler->InitAsyncRequestL( GetFolderId().PluginId(), aObserver );
   123 
   120     TInt err (KErrNone);
   124     TInt err = KErrNone;
       
   125     
   121     
   126     if (plugin)
   122     if (plugin)
   127         {
   123         {
   128         MFSMailRequestObserver* observer = request.iObserver;
   124         MFSMailRequestObserver* observer = request.iObserver;
   129         TRAP(err,plugin->FetchMessagesL(	GetMailBoxId(),
   125         TRAP(err,plugin->FetchMessagesL(  GetMailBoxId(),
   130                                             GetFolderId(),
   126                                             GetFolderId(),
   131                                             aMessageIds,
   127                                             aMessageIds,
   132                                             aDetails,
   128                                             aDetails,
   133                                             *observer,
   129                                             *observer,
   134                                             request.iRequestId));
   130                                             request.iRequestId));
   136     else 
   132     else 
   137         {
   133         {
   138         err = KErrNotFound;        
   134         err = KErrNotFound;        
   139         }
   135         }
   140     
   136     
   141     if(err != KErrNone)
   137     if (err != KErrNone)
   142         {
   138         {
   143         iRequestHandler->CompleteRequest(request.iRequestId);
   139         iRequestHandler->CompleteRequest(request.iRequestId);
   144         User::Leave(err);
   140         User::Leave(err);
   145         }
   141         }
   146     return request.iRequestId;
   142     return request.iRequestId;
   147     
   143   }
   148 	}
       
   149 
   144 
   150 
   145 
   151 // -----------------------------------------------------------------------------
   146 // -----------------------------------------------------------------------------
   152 // CFSMailFolder::GetSubFoldersL
   147 // CFSMailFolder::GetSubFoldersL
   153 // -----------------------------------------------------------------------------
   148 // -----------------------------------------------------------------------------
   154 EXPORT_C void CFSMailFolder::GetSubFoldersL(RPointerArray<CFSMailFolder>& aSubFolders)
   149 EXPORT_C void CFSMailFolder::GetSubFoldersL( RPointerArray<CFSMailFolder>& aSubFolders )
   155 {
   150 {
   156     NM_FUNCTION;
   151     NM_FUNCTION;
   157     
   152     
   158 	if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
   153     if (CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
   159 		{
   154         {
   160 		TRAPD(err,plugin->ListFoldersL( GetMailBoxId(), GetFolderId(), aSubFolders));
   155         TRAPD(err,plugin->ListFoldersL( GetMailBoxId(), GetFolderId(), aSubFolders));
   161 		if(err != KErrNone)
   156         if(err != KErrNone)
   162 			{
   157             {
   163 			aSubFolders.ResetAndDestroy();
   158             aSubFolders.ResetAndDestroy();
   164 			}
   159             }
   165 		}
   160         }
   166 }
   161 }
   167 	
   162   
   168 // -----------------------------------------------------------------------------
   163 // -----------------------------------------------------------------------------
   169 // CFSMailFolder::RemoveMessageL
   164 // CFSMailFolder::RemoveMessageL
   170 // -----------------------------------------------------------------------------
   165 // -----------------------------------------------------------------------------
   171 EXPORT_C void CFSMailFolder::RemoveMessageL(TFSMailMsgId aMessage)
   166 EXPORT_C void CFSMailFolder::RemoveMessageL( TFSMailMsgId aMessage )
   172 {
   167 {
   173     NM_FUNCTION;
   168     NM_FUNCTION;
   174     
   169     
   175 	if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
   170     if (CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
   176 		{
   171         {
   177 		RArray<TFSMailMsgId> messages;
   172         RArray<TFSMailMsgId> messages;
   178 		messages.Reset();
   173         messages.AppendL(aMessage);
   179 		messages.AppendL(aMessage);
   174         plugin->DeleteMessagesByUidL(GetMailBoxId(),GetFolderId(),messages);
   180 		plugin->DeleteMessagesByUidL(GetMailBoxId(),GetFolderId(),messages);
   175         messages.Close();
   181 		messages.Close();
   176     }
   182 		}
       
   183 }
   177 }
   184 
   178 
   185 // <qmail>
   179 // <qmail>
   186 // -----------------------------------------------------------------------------
   180 // -----------------------------------------------------------------------------
   187 // CFSMailFolder::RemoveMessageL
   181 // CFSMailFolder::RemoveMessageL
   188 // -----------------------------------------------------------------------------
   182 // -----------------------------------------------------------------------------
   189 EXPORT_C TInt CFSMailFolder::RemoveMessageL(TFSMailMsgId aMessage,
   183 EXPORT_C TInt CFSMailFolder::RemoveMessageL( TFSMailMsgId aMessage,
   190                                             MFSMailRequestObserver& aObserver)
   184                                              MFSMailRequestObserver& aObserver )
   191 {
   185 {
   192     NM_FUNCTION;
   186     NM_FUNCTION;
   193 
   187 
   194     // init asynchronous request
   188     // init asynchronous request
   195     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId());
   189     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId());
   196     TFSPendingRequest request = 
   190     TFSPendingRequest request = 
   197         iRequestHandler->InitAsyncRequestL( GetFolderId().PluginId(), aObserver );
   191         iRequestHandler->InitAsyncRequestL( GetFolderId().PluginId(), aObserver );
   198 
   192 
   199     TInt err = KErrNone;
   193     TInt err(KErrNone);
   200     
   194     
   201     if (plugin)
   195     if (plugin)
   202         {
   196         {
   203         MFSMailRequestObserver* observer = request.iObserver;
   197         MFSMailRequestObserver* observer = request.iObserver;
   204         
   198         
   205         RArray<TFSMailMsgId> messages;
   199         RArray<TFSMailMsgId> messages;
   206         messages.Reset();
       
   207         messages.AppendL(aMessage);
   200         messages.AppendL(aMessage);
   208         
   201         
   209         TRAP(err,plugin->DeleteMessagesByUidL(
   202         TRAP(err,plugin->DeleteMessagesByUidL(
   210             GetMailBoxId(),
   203             GetMailBoxId(),
   211             GetFolderId(),
   204             GetFolderId(),
   228     return request.iRequestId;
   221     return request.iRequestId;
   229 }
   222 }
   230 // </qmail>
   223 // </qmail>
   231 
   224 
   232 // -----------------------------------------------------------------------------
   225 // -----------------------------------------------------------------------------
   233 // CFSMailFolder::SupportsCopyFromL
       
   234 // -----------------------------------------------------------------------------
       
   235 EXPORT_C TBool CFSMailFolder::SupportsCopyFromL( TFSFolderType aFolderType )
       
   236 	{
       
   237     NM_FUNCTION;
       
   238     
       
   239 	if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
       
   240 		{
       
   241 		TFSMailBoxStatus onlineStatus = plugin->GetMailBoxStatus(GetMailBoxId());
       
   242 		if(onlineStatus == EFSMailBoxOnline)
       
   243 			{
       
   244 			for(TInt i=0;i<iCopyOnlineBlocked.Count();i++)
       
   245 				{
       
   246 				if(iCopyOnlineBlocked[i] == aFolderType)
       
   247 					{
       
   248 					return EFalse;
       
   249 					}			
       
   250 				}
       
   251 			}
       
   252 		else if(onlineStatus == EFSMailBoxOffline)
       
   253 			{
       
   254 			for(TInt i=0;i<iCopyOfflineBlocked.Count();i++)
       
   255 				{
       
   256 				if(iCopyOfflineBlocked[i] == aFolderType)
       
   257 					{
       
   258 					return EFalse;
       
   259 					}
       
   260 				}
       
   261 			}
       
   262 		}
       
   263 		return ETrue;
       
   264 	}
       
   265 
       
   266 // -----------------------------------------------------------------------------
       
   267 // CFSMailFolder::SupportsMoveFromL
   226 // CFSMailFolder::SupportsMoveFromL
   268 // -----------------------------------------------------------------------------
   227 // -----------------------------------------------------------------------------
   269 EXPORT_C TBool CFSMailFolder::SupportsMoveFromL( TFSFolderType aFolderType )
   228 EXPORT_C TBool CFSMailFolder::SupportsMoveFromL( TFSFolderType aFolderType )
   270 	{
   229 {
   271     NM_FUNCTION;
   230     NM_FUNCTION;
   272     
   231     
   273 	if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
   232     TBool ret(ETrue);
   274 		{
   233     if (CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
   275 		TFSMailBoxStatus onlineStatus = plugin->GetMailBoxStatus(GetMailBoxId());
   234         {
   276 		if(onlineStatus == EFSMailBoxOnline)
   235         TFSMailBoxStatus onlineStatus = plugin->GetMailBoxStatus(GetMailBoxId());
   277 			{
   236         if (onlineStatus == EFSMailBoxOnline)
   278 			for(TInt i=0;i<iMoveOnlineBlocked.Count();i++)
   237             {
   279 				{
   238             for(TInt i(0); i < iMoveOnlineBlocked.Count(); i++)
   280 				if(iMoveOnlineBlocked[i] == aFolderType)
       
   281 					{
       
   282 					return EFalse;
       
   283 					}			
       
   284 				}
       
   285 			}
       
   286 		else if(onlineStatus == EFSMailBoxOffline)
       
   287 			{
       
   288 			for(TInt i=0;i<iMoveOfflineBlocked.Count();i++)
       
   289 				{
       
   290 				if(iMoveOfflineBlocked[i] == aFolderType)
       
   291 					{
       
   292 					return EFalse;
       
   293 					}
       
   294 				}
       
   295 			}
       
   296 		}
       
   297 		return ETrue;
       
   298 	
       
   299 	}
       
   300 // -----------------------------------------------------------------------------
       
   301 // CFSMailFolder::RemoveDownLoadedAttachmentsL
       
   302 // -----------------------------------------------------------------------------
       
   303 EXPORT_C void CFSMailFolder::RemoveDownLoadedAttachmentsL()
       
   304     {
       
   305     NM_FUNCTION;
       
   306     
       
   307     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId());
       
   308     if(plugin != NULL)
       
   309         {
       
   310         MFSMailIterator* iterator = NULL;
       
   311 
       
   312         // select message details to be listed
       
   313         TFSMailDetails details(EFSMsgDataEnvelope);
       
   314         
       
   315         // sorting is free, give empty array
       
   316         RArray<TFSMailSortCriteria> sorting;
       
   317         sorting.Reset();
       
   318         iterator = plugin->ListMessagesL( GetMailBoxId(),
       
   319                                           GetFolderId(),
       
   320                                           details,
       
   321                                           sorting );
       
   322         if(iterator)
       
   323             {
       
   324             TFSMailMsgId nullId;
       
   325             RPointerArray<CFSMailMessage> messages;
       
   326             messages.Reset();
       
   327             iterator->NextL(nullId,GetMessageCount(),messages);
       
   328             for(TInt i=0;i<messages.Count();i++)
       
   329                 {
   239                 {
   330                 if(messages[i]->IsFlagSet(EFSMsgFlag_Attachments))
   240                 if (iMoveOnlineBlocked[i] == aFolderType)
   331                     {
   241                     {
   332                 messages[i]->RemoveDownLoadedAttachmentsL();
   242                     ret = EFalse;
       
   243                     }     
   333                 }
   244                 }
       
   245             }
       
   246         else if (onlineStatus == EFSMailBoxOffline)
       
   247             {
       
   248             for (TInt i(0); i < iMoveOfflineBlocked.Count(); i++)
       
   249                 {
       
   250                 if(iMoveOfflineBlocked[i] == aFolderType)
       
   251                     {
       
   252                     ret = EFalse;
       
   253                     }
   334                 }
   254                 }
   335             messages.ResetAndDestroy();
   255             }
   336             delete iterator;
       
   337             }
       
   338         }
       
   339     }
   256     }
       
   257     return ret;
       
   258 }
   340 
   259 
   341 // -----------------------------------------------------------------------------
   260 // -----------------------------------------------------------------------------
   342 // CFSMailFolder::ReleaseExtension
   261 // CFSMailFolder::ReleaseExtension
   343 // -----------------------------------------------------------------------------
   262 // -----------------------------------------------------------------------------
   344 EXPORT_C void CFSMailFolder::ReleaseExtension( CEmailExtension* aExtension )
   263 EXPORT_C void CFSMailFolder::ReleaseExtension( CEmailExtension* aExtension )
   345     {
   264 {
   346     NM_FUNCTION;
   265     NM_FUNCTION;
   347     
   266     
   348     // no specialized behaviour, call base class
   267     // no specialized behaviour, call base class
   349     CExtendableEmail::ReleaseExtension( aExtension );
   268     CExtendableEmail::ReleaseExtension( aExtension );
   350     }
   269 }
   351     
   270     
   352 // -----------------------------------------------------------------------------
   271 // -----------------------------------------------------------------------------
   353 // CFSMailFolder::ExtensionL
   272 // CFSMailFolder::ExtensionL
   354 // -----------------------------------------------------------------------------
   273 // -----------------------------------------------------------------------------
   355 EXPORT_C CEmailExtension* CFSMailFolder::ExtensionL( const TUid& aInterfaceUid )
   274 EXPORT_C CEmailExtension* CFSMailFolder::ExtensionL( const TUid& aInterfaceUid )
   356     {
   275 {
   357     NM_FUNCTION;
   276     NM_FUNCTION;
   358     
   277     
   359     return CExtendableEmail::ExtensionL( aInterfaceUid );
   278     return CExtendableEmail::ExtensionL( aInterfaceUid );
   360     }
   279 }
   361 
   280