locationdataharvester/mylocationsengine/src/mylocationsengine.cpp
branchRCL_3
changeset 18 870918037e16
parent 17 1fc85118c3ae
--- a/locationdataharvester/mylocationsengine/src/mylocationsengine.cpp	Tue Aug 31 15:09:25 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1829 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Mylocation engine source implementation for location picker
-*              and maptile service.
-*
-*/
-
-// INCLUDE FILES
-#include <QFile>
-#include <f32file.h>
-#include <calchangecallback.h> 
-#include <cntitem.h>
-#include <cntfldst.h>
-#include <EPos_CPosLmDatabaseManager.h>
-#include <lbsposition.h>
-#include <bautils.h>
-#include <f32file.h>
-#include <locationservicedefines.h>
-#include <e32property.h>
-#include "contactsubscriber.h"
-#include "calendarsubscriber.h"
-#include "mylocationsengine.h"
-#include "geocodeupdate.h" //header for GeocodeUpdate class
-//handle for CMyLocationsHistoryDbObserver class
-#include "mylocationlogger.h"
-#if ( defined __WINSCW__ ) || ( defined __WINS__ )
-_LIT ( KImageStorageDrive, "C:\\MapTile\\");
-#endif
-_LIT(KFolderName,":\\MapTile\\");
-const TInt KImagePathSize=36;
-const TInt KDefaultFilePathSize = 20;
-const TUid KMaptileStatusPublish={0x2002680A};
-enum TMaptileStatusKeys {EMaptileStatusInteger=0x1};
-
-//Protocol : [appid-addresstype-maptilestatus]
-_LIT8( KMaptileStatusFormat, "%d-%d-%d" );
-const TInt KProtocolBufferSize = 16;
-
-const QString KSpace(" ");
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-CMyLocationsEngine* CMyLocationsEngine::NewL()
-{
-    CMyLocationsEngine* self = new (ELeave) CMyLocationsEngine();
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::ConstructL()
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::ConstructL()
-{
-    __TRACE_CALLSTACK;
-    CActiveScheduler::Add(this);
-
-    //Connection to Landmark DB
-    iLandmarkDb = CPosLandmarkDatabase::OpenL();
-    ExecuteAndDeleteLD(iLandmarkDb->InitializeL());
-
-    MYLOCLOGSTRING("Connection to Landmark DB.");
-    // create CMyLocationsDatabaseManager instance
-    iMyLocationsDatabaseManager = new (ELeave) CMyLocationsDatabaseManager;
-    iMyLocationsDatabaseManager->ConstructL();
-    
-    MYLOCLOGSTRING("create CMyLocationsDatabaseManager instance");
-
-    TRAPD( error , iMapTileInterface = CMapTileInterface::NewL());
-    if( error == KErrNone )
-    {
-        iMaptileGeocoderPluginAvailable = ETrue;	
-    }
-    
-    MYLOCLOGSTRING("iMapTileInterface = CMapTileInterface::NewL()");
-    //Maptile Db instance
-    iMaptileDatabase = CLookupMapTileDatabase::NewL(KMapTileLookupDatabaseName);
-
-    MYLOCLOGSTRING("Maptile Db instance created ");
-	
-    iGeocodeUpdate = new GeocodeUpdate();
-    iMyLocationThreeAMTimer = CLocationGeoTagTimerAO::NewL(*this);
-  
-    iMyLocationThreeAMTimer->StartTimer();
-    
-    MYLOCLOGSTRING(" iMyLocationThreeAMTimer = CLocationGeoTagTimerAO::NewL(this)");
-  
-    //Create instance of contact manager 
-    iContactManager = new QContactManager();
-
-    MYLOCLOGSTRING(" start contact db observation ");
-    StartContactsChangeNotifierL();
-
-    //set the folder path to store maptile
-    imageFilePath.Zero();
-    SetFolderPathL();
-
-    TInt status = KErrNone;
-    iCalSession = CCalSession::NewL();
-    NotifyChangeL(status);
-
-    // Start listening to landmarks db changes
-    StartLandmarksChangeNotifier();   
-    iContactSubscriber = CContactSubscriber::NewL(this);
-    iCalendarSubscriber = CCalendarSubscriber::NewL(this);
-    TInt ret = RProperty::Define( KMaptileStatusPublish, EMaptileStatusInteger, RProperty::EByteArray  );
-
-}
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::SetFolderPath()
-// set folder path structure
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::SetFolderPathL()
-{
-    __TRACE_CALLSTACK;
-    RFs session;
-    User::LeaveIfError(session.Connect());
-   
-    if ( imageFilePath.Length() > 0 && BaflUtils::FolderExists(session, imageFilePath))
-    {
-        session.Close();
-        MYLOCLOGSTRING("Image folder path exists");
-        return;
-    }
-    const TUint EMediaMemoryCard = 0x000014;
-    imageFilePath.Zero();
-#if ( defined __WINSCW__ ) || ( defined __WINS__ )
-    imageFilePath.Copy(KImageStorageDrive);
-    MYLOCLOGSTRING("using in  debug mode");
-#else        
-    TVolumeInfo vol;
-    TInt driveNumber = EDriveE;
-    TChar driveLetter;
-    TDriveInfo driveInfo;
-    TInt error( KErrNone );
-    error=session.Volume(vol, driveNumber);
-    MYLOCLOGSTRING1("E drive volume info status -%d",error);
-    if (error == KErrNone)
-    {
-        error = session.Drive(driveInfo, driveNumber);
-        MYLOCLOGSTRING1("E driveinfo status -%d",error);
-        switch(driveInfo.iType)
-        {
-            case EMediaFlash:
-            case EMediaHardDisk:
-            case EMediaNANDFlash:
-            case EMediaMemoryCard:
-            case EMediaCdRom:
-            {
-                MYLOCLOGSTRING(" E drive match case");
-                session.DriveToChar( driveNumber , driveLetter );
-                imageFilePath.Append(driveLetter);
-                imageFilePath.Append(KFolderName);
-                break;
-            }
-            default:
-            break;
-
-        };
-    }
-
-    if (!imageFilePath.Length() > 0)
-    {
-        driveNumber = EDriveF;
-        error = session.Volume(vol, driveNumber);
-        MYLOCLOGSTRING1("F drive volume info status -%d",error);
-
-        if (error == KErrNone)
-        {
-            error = session.Drive(driveInfo, driveNumber);
-            MYLOCLOGSTRING1("F drive info status-%d", error);
-
-            switch (driveInfo.iMediaAtt)
-            {
-                /** Solid-state media. */
-                case EMediaFlash:
-                case EMediaHardDisk:
-                case EMediaNANDFlash:
-                case EMediaMemoryCard:
-                {
-                    MYLOCLOGSTRING("F drive exist as this type");
-                    session.DriveToChar(driveNumber, driveLetter);
-                    imageFilePath.Append(driveLetter);
-                    imageFilePath.Append(KFolderName);
-                    break;
-                }
-
-                default:
-                break;
-
-            };
-        }
-    }
-#endif
-    if (imageFilePath.Length()>0 && !BaflUtils::FolderExists(session, imageFilePath))
-    {
-        session.MkDirAll(imageFilePath);
-        MYLOCLOGSTRING("folder path does not exist , created ");
-    }
-    session.Close();
-}
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::CMyLocationsEngine()
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CMyLocationsEngine::CMyLocationsEngine() :
-            CActive(EPriorityStandard), 
-            iCalSession(NULL),
-            iCalView(NULL), 
-	        iContactsDb(NULL), 
-	        iContactChangeNotifier(NULL), 
-			iLandmarkDb(NULL),
-            iMapTileInterface(NULL),
-            iMyLocationsDatabaseManager(NULL),
-            iMaptileDatabase(NULL),
-            iMyLocationThreeAMTimer(NULL),
-            iMaptileGeocoderPluginAvailable(EFalse),
-            iCalenderNotification(NULL),
-            iContactManager(NULL),
-            iContactSubscriber(NULL),
-            iCalendarSubscriber(NULL),
-            iGeocodeUpdate(NULL),
-            iLastContactId( -1 ) ,
-            iLastCalendarId( 0 )
-{
-
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::~CMyLocationsEngine()
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CMyLocationsEngine::~CMyLocationsEngine()
-{
-    __TRACE_CALLSTACK;// delete the member variables.
-   
-    Cancel();
-    
-    delete iContactChangeNotifier;
-
-    delete iMyLocationsDatabaseManager;
-
-    delete iLandmarkDb;
-
-    delete iContactsDb;
-   
-    delete iCalView;
-	
-    delete iCalSession;
-	 
-	delete iMapTileInterface;
-
-    delete iMaptileDatabase;
-       
-    delete iCalenderNotification;
-    
-	delete iMyLocationThreeAMTimer;
-		
-    delete iContactManager;
-    
-    delete iContactSubscriber;
-
-    delete iCalendarSubscriber;
-    
-    delete iGeocodeUpdate;
-    
-    for( TInt index = 0; index < iAddressInfo.Count(); index++ )
-    {
-        delete iAddressInfo[index];
-        iAddressInfo.Remove(index);
-        iAddressInfo.Compress();
-    }
-    
-    iAddressInfo.Reset();
-    
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::NotifyChangeL()
-// Starts calender db create notification to get callbacks. 
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::NotifyChangeL(TInt &aStatus)
-{
-    __TRACE_CALLSTACK;
-    
-    TBufC<KDefaultFilePathSize> defaultFile = iCalSession->DefaultFileNameL();
-    TChar drive = defaultFile[0];    
-    TRAP(aStatus, iCalSession->OpenL( defaultFile ));
-    MYLOCLOGSTRING1("iCalSession->OpenL() status-%d",aStatus);
-    if ( KErrNone == aStatus )
-    {
-        // create a calendar entry view with the opened session
-        iCalView = CCalEntryView::NewL(*iCalSession);
-        StartCalenderChangeNotifierL();
-    }
-    else
-    {
-        if( !iCalenderNotification )
-        {
-            iCalenderNotification = CCalenderNotification::NewL( this );
-        }
-        
-        
-        iCalenderNotification->CheckCalenderDbFileStructure( drive );
-    }
-}
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::GetChangeNoficationL()
-// To get callbacks through publisher from contact context
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::GetChangeNotificationL( TInt &aId, TInt& addressType, TInt& addressCount  )
-{
-    __TRACE_CALLSTACK;
-   
-    iLastContactId = aId;
-    
-    //If the requested id is already in queue, just return
-    for( TInt index = 0 ; index < iMapTileRequestQueue.Count(); index++ )
-    {
-        if( iLastContactId == iMapTileRequestQueue[index]->iUId )
-        {           
-            MYLOCLOGSTRING("contact id is in queue");
-            return;
-        }
-    }
-    
-    TAppAddressInfo* addressInfo = new (ELeave) TAppAddressInfo;
-    addressInfo->iUid = aId;
-    addressInfo->iAddressType =  addressType;
-    //Memory will be freed when the queue is deleted
-    if( iAddressInfo.Append(addressInfo) != KErrNone )
-    {
-        delete addressInfo;
-    }
-    
-    //Get all 3 adress
-    if( addressCount > 1 && iAddressInfo.Count() < addressCount )
-        return;  
-    
-    
-    for( TInt index = 0; index < iAddressInfo.Count(); index++ )
-    {
-        TUidSourceType type = static_cast<TUidSourceType>(iAddressInfo[index]->iAddressType );
-    
-        //if type is contact
-        if( type == ESourceContactsPref || type == ESourceContactsWork || 
-                      type == ESourceContactsHome )
-        {
-            QContact contactInfo = iContactManager->contact( iAddressInfo[index]->iUid );
-            
-            CPosLandmark *contactAddressLm = NULL;
-          
-            TInt itemCount = 0;
-            
-            foreach ( QContactAddress address, contactInfo.details<QContactAddress>() )
-            {
-                QStringList context = address.contexts();
-                if ( context.isEmpty()  && type ==  ESourceContactsPref ) // no context
-                {
-                    contactAddressLm = GetContactAddressDetailsLC( address );
-                    itemCount++;
-                    break;
-                }
-                else if ( !context.isEmpty() && context.first() == QContactAddress::ContextHome &&
-                                    type == ESourceContactsHome )
-                {
-                    contactAddressLm = GetContactAddressDetailsLC( address );
-                    itemCount++;
-                    break;
-                }
-                else if ( !context.isEmpty() && context.first() == QContactAddress::ContextWork  && 
-                                type == ESourceContactsWork )
-                {
-                    contactAddressLm = GetContactAddressDetailsLC( address );
-                    itemCount++;
-                    break;
-                }
-            }
-
-            //Update the entry with inprogress status
-            TLookupItem lookupItem;
-            lookupItem.iUid = iAddressInfo[index]->iUid;
-            lookupItem.iSource = type;
-            lookupItem.iFilePath.Zero();
-            lookupItem.iFetchingStatus = EMapTileFetchingInProgress;
-            iMaptileDatabase->UpdateEntryL( lookupItem );
-            
-            //Request for maptile fetching
-            if( contactAddressLm )
-            {
-                RequestMapTileImageL( *contactAddressLm, type, 
-                         iAddressInfo[index]->iUid, EContactDbObserverEventContactChanged );
-            }
-            
-            CleanupStack::PopAndDestroy( itemCount );
-        }
-    }
-    for( TInt index = 0; index < iAddressInfo.Count(); index++ )
-    {
-	    //free the allocated memory
-        delete iAddressInfo[index];
-		iAddressInfo.Remove(index);
-        iAddressInfo.Compress();
-	}
-    
-    iAddressInfo.Reset();
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::SubscribeFromCalendarL()
-// To get callbacks through publisher from calendar context
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::SubscribeFromCalendarL(TInt aId)
-{
-    __TRACE_CALLSTACK;
-    iLastCalendarId = aId;
-    for ( int index =0;iMapTileRequestQueue.Count()>index ;index++)
-    {
-        if( iLastCalendarId == iMapTileRequestQueue[index]->iUId )
-        {            
-            return;
-        }
-    }
-    
-    CCalEntry* calEntry = NULL;
-    calEntry = iCalView->FetchL(aId);
-    CleanupStack::PushL(calEntry);
-    TPtrC address(calEntry->LocationL());
-    if( address.Length()>0 )
-    {
-        TLookupItem lookupItem;
-        lookupItem.iUid = aId;
-        lookupItem.iSource = ESourceCalendar;
-        lookupItem.iFilePath.Zero();
-        lookupItem.iFetchingStatus = EMapTileFetchingInProgress;
-        iMaptileDatabase->UpdateEntryL( lookupItem );
-        RequestMapTileImageL( address, ESourceCalendar, aId , EChangeModify );
-    }
-    CleanupStack::PopAndDestroy(calEntry);
-}
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::StartCalenderChangeNotifierL()
-// Starts calender change notification method to get callbacks when entries are 
-// added/modified/deleted in contacts
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::StartCalenderChangeNotifierL()
-{
-    __TRACE_CALLSTACK;// Get the current time and set Calendar filter to consider entries whose start time
-    // fall under the timeframe one year past and one year ahead of the current time.
-    if (iCalSession)
-    {
-        MYLOCLOGSTRING("iCalSession is not null");
-        TTime currentTime;
-        currentTime.HomeTime();
-
-        TTime startTime = currentTime - TTimeIntervalYears(1);
-        TTime endTime = currentTime + TTimeIntervalYears(1);
-
-        TCalTime calStartTime;
-        calStartTime.SetTimeLocalL(startTime);
-        
-        MYLOCLOGSTRING("SetTimeLocalL(startTime)");
-
-        TCalTime calEndTime;
-        calEndTime.SetTimeLocalL(endTime);
-        
-        MYLOCLOGSTRING("SetTimeLocalL(endTime)");
-
-        // set the filter for modification tracking
-        CCalChangeNotificationFilter *filter =
-                CCalChangeNotificationFilter::NewL(
-                        MCalChangeCallBack2::EChangeEntryAll, ETrue,
-                        CalCommon::TCalTimeRange(calStartTime, calEndTime));
-        MYLOCLOGSTRING(" CCalChangeNotificationFilter::NewL()");
-        // 'this' object implements MCalChangeCallBack
-        iCalSession->StartChangeNotification(*this, *filter);
-    }
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::StartContactsChangeNotifierL()
-// Starts contacts change notification method to get callbacks when entries are 
-// added/modified/deleted in contacts
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::StartContactsChangeNotifierL()
-{
-    __TRACE_CALLSTACK;
-   
-    iGeocodeUpdate->createContactdb();
-    iContactsDb = CContactDatabase::OpenL();
-    // Create CContactChangeNotifier object with 'this' object. 
-    iContactChangeNotifier = CContactChangeNotifier::NewL(*iContactsDb,this);
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::StartLandmarksChangeNotifier()
-// Starts landmarks change notification method to get callbacks when entries are added/modified/deleted in landmarks
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::StartLandmarksChangeNotifier()
-{
-    __TRACE_CALLSTACK;// Resume event listening
-    iLandmarkDb->NotifyDatabaseEvent(iLmEvent, iStatus);
-    SetActive();
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::CalChangeNotification()
-// Callback when there is a change in the calendar database.
-// -----------------------------------------------------------------------------
-//
-
-void CMyLocationsEngine::CalChangeNotification(
-        RArray<TCalChangeEntry>& aChangeItems)
-{
-    __TRACE_CALLSTACK;
-       
-    if(iCalenderNotification)
-    {
-        delete iCalenderNotification;
-        iCalenderNotification = NULL;
-    }
-    
-    // get entries associated with this UID
-    for (int i = 0; i < aChangeItems.Count(); i++)
-    {
-
-        // Check if this is some undefined change in calendar db. 
-        if( aChangeItems[0].iChangeType == EChangeUndefined && aChangeItems[0].iEntryType == EChangeEntryAll )
-        {
-            // Refresh the calendar related entries in the location and maptiledb.
-            RefreshCalendarEntryListL();
-            break;
-        }
-        TCalChangeEntry calChangeEntry = aChangeItems[i];
-        iEventType = calChangeEntry.iChangeType;
-        switch (calChangeEntry.iChangeType)
-        {
-        case EChangeAdd:
-        {
-            
-            TRAP_IGNORE(CalenderEntryAddedL(calChangeEntry));
-            break;
-        }
-
-        case EChangeModify:
-        {
-            if (iMapTileRequestQueue.Count() > 0)
-            {
-                if (calChangeEntry.iEntryId == iMapTileRequestQueue[0]->iUId)
-                {
-                    return;
-                }
-            }
-            TRAP_IGNORE( CalenderEntryModifyL(calChangeEntry) ) ;
-            break;
-        }
-        case EChangeDelete:
-        {
-            TLookupItem lookupItem;
-            lookupItem.iSource = ESourceCalendar;
-            lookupItem.iUid = calChangeEntry.iEntryId;
-            TRAP_IGNORE(ManipulateMapTileDataBaseL(lookupItem));           
-            TRAP_IGNORE( UpdateDatabaseL( NULL, 
-                              calChangeEntry.iEntryId, ESourceCalendar, EEntryDeleted ) );
-            break;
-        }
-        };
-
-    }
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::RefreshCalendarEntryListL()
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::RefreshCalendarEntryListL()
-{
-    //Get all the calendar ids and check its validity. 
-    //Delete if they are no more valid.
-    RArray<TUint32> ids;
-    iMaptileDatabase->GetAllCalendarIdsL( ids );
-    for( TInt i = 0; i < ids.Count(); i++ )
-    {
-        if( !IsCalendarEntryValidL( ids[i] ) )
-        {
-            TLookupItem lookupItem;
-            lookupItem.iSource = ESourceCalendar;
-            lookupItem.iUid = ids[i];
-            TRAP_IGNORE( ManipulateMapTileDataBaseL( lookupItem ) );           
-            TRAP_IGNORE( UpdateDatabaseL( NULL, 
-                    ids[i], ESourceCalendar, EEntryDeleted ) );
-        
-        }        
-    }
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::IsCalendarEntryValidL()
-// -----------------------------------------------------------------------------
-//
-TBool CMyLocationsEngine::IsCalendarEntryValidL( TUint32 aId )
-{
-    return ( ( iCalView->FetchL( aId ) == NULL ) ? EFalse:ETrue );
-}
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::CalenderEntryAddedL()
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::CalenderEntryAddedL(TCalChangeEntry aCalChangeEntry)
-{
-    __TRACE_CALLSTACK;
-    
-    TUint32 entryId=0;
-    entryId=aCalChangeEntry.iEntryId;
-    //create entry in the data base and maintain a fetching state.
-    TLookupItem lookupItem;
-    lookupItem.iUid = entryId ;
-    lookupItem.iSource = ESourceCalendar;
-    lookupItem.iFilePath.Zero();
-    lookupItem.iFetchingStatus = EMapTileFetchingInProgress;     
-    TRAP_IGNORE( iMaptileDatabase->CreateEntryL(lookupItem) );
-    CCalEntry* calEntry = NULL;
-    calEntry = iCalView->FetchL( entryId );
-    CleanupStack::PushL(calEntry);
-    TPtrC address(calEntry->LocationL());     
-    if (address.Length() > 0)
-    {
-        RequestMapTileImageL( address, ESourceCalendar, entryId , EChangeAdd );
-    }  
-    CleanupStack::PopAndDestroy(calEntry);
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::CalenderEntryModifyL()
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::CalenderEntryModifyL(TCalChangeEntry aCalChangeEntry)
-{
-    __TRACE_CALLSTACK;
-    TUint32 entryId = 0;
-    entryId = aCalChangeEntry.iEntryId;
-    TLookupItem lookupItem;
-    lookupItem.iSource = ESourceCalendar;
-    lookupItem.iUid = entryId;
-    CCalEntry* calEntry = NULL;
-    calEntry = iCalView->FetchL(entryId);
-    CleanupStack::PushL(calEntry);
-    if(iGeocodeUpdate->isGeocodeNotAvailable(entryId))
-    {        
-        TPtrC address(calEntry->LocationL());
-        if (iMyLocationsDatabaseManager->CheckIfAddressChanged(address, entryId,
-                ESourceCalendar))
-        {
-            lookupItem.iFilePath.Zero();
-            lookupItem.iFetchingStatus = EMapTileFetchingInProgress;
-            TRAP_IGNORE( iMaptileDatabase->ReSetEntryL(lookupItem) );
-            if (address.Length() > 0)
-            {
-                RequestMapTileImageL(address, ESourceCalendar, entryId , EChangeModify);
-            }
-            else
-            {
-                UpdateDatabaseL(NULL, entryId, ESourceCalendar, EEntryDeleted);
-            }
-            if ( lookupItem.iFilePath.Length() > 0 )
-            {
-                iMaptileDatabase->DeleteMapTileL(lookupItem);
-            }
-    
-        }        
-    }   
-    CleanupStack::PopAndDestroy(calEntry);
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::HandleDatabaseEventL()
-// Callback that provides information about the contact database change event.
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::HandleDatabaseEventL(TContactDbObserverEvent aEvent)
-{
-    __TRACE_CALLSTACK;
-    
-    //Forward the event for maptile fetching only if maptile plugin available
-    if( iMaptileGeocoderPluginAvailable )
-    {
-        TriggerMaptileRequestL(aEvent);
-    }
-}
-
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::TriggerMaptileRequestL()
-// Process the contact address information for fetching maptile.
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::TriggerMaptileRequestL(TContactDbObserverEvent& aEvent)
-{
-    __TRACE_CALLSTACK;
-    TLookupItem lookupItem;      
-    lookupItem.iUid = aEvent.iContactId;
-    // If contact is deleted delete from mylocations db
-    if ( aEvent.iType == EContactDbObserverEventContactDeleted || aEvent.iType == EContactDbObserverEventOwnCardDeleted )
-    {        
-        //Delete the entries from maptile database
-        lookupItem.iSource = ESourceContactsPref;
-        TRAP_IGNORE( ManipulateMapTileDataBaseL(lookupItem));
-
-        lookupItem.iSource = ESourceContactsWork;
-        TRAP_IGNORE( ManipulateMapTileDataBaseL(lookupItem));
-        
-        lookupItem.iSource = ESourceContactsHome;
-        TRAP_IGNORE( ManipulateMapTileDataBaseL(lookupItem));
-              
-        // Delete entries from  mylocation database
-        TRAP_IGNORE( UpdateDatabaseL( NULL, aEvent.iContactId,
-                     ESourceContactsPref, EEntryDeleted ));
-       
-        TRAP_IGNORE( UpdateDatabaseL( NULL, aEvent.iContactId,
-               ESourceContactsHome, EEntryDeleted ));
-
-        TRAP_IGNORE( UpdateDatabaseL( NULL, aEvent.iContactId,
-                               ESourceContactsWork, EEntryDeleted ) );  
-        
-        MYLOCLOGSTRING("EContactDbObserverEventContactDeleted ");
-        return;
-    }
-
-    //Get the contact item
-    iEventType = aEvent.iType;
-    QContact contactInfo = iContactManager->contact( aEvent.iContactId );            
-    CPosLandmark *preferedAddressLm = NULL;
-    CPosLandmark *workAddressLm = NULL;
-    CPosLandmark *homeAddressLm = NULL;
-    
-    TInt itemCount = 0;
-    
-    foreach ( QContactAddress address, contactInfo.details<QContactAddress>() )
-    {
-        QStringList context = address.contexts();
-        if ( context.isEmpty() ) // no context
-        {
-            preferedAddressLm = GetContactAddressDetailsLC( address );
-            itemCount++;
-        }
-        else if ( context.first() == QContactAddress::ContextHome  )
-        {
-            homeAddressLm = GetContactAddressDetailsLC( address );
-            itemCount++;
-        }
-        else if ( context.first() == QContactAddress::ContextWork )
-        {
-            workAddressLm = GetContactAddressDetailsLC( address );
-            itemCount++;
-        }
-    }
-   
-    switch (aEvent.iType)
-    {
-        case EContactDbObserverEventContactChanged:
-        case EContactDbObserverEventOwnCardChanged:
-        {
-            MYLOCLOGSTRING("EContactDbObserverEventContactChanged" );
-            MYLOCLOGSTRING1("iMapTileRequestQueue.Count()-%d",iMapTileRequestQueue.Count() );
-
-            if (iMapTileRequestQueue.Count() > 0)
-            {
-                if (iMapTileRequestQueue[0]->iUId == aEvent.iContactId)
-                {
-                    CleanupStack::PopAndDestroy( itemCount );
-                    MYLOCLOGSTRING("retrun from geolocation callback" );
-                    return;
-                }
-            }
-
-            TBuf<KBufSize> landmarkName;
-            GetContactName(aEvent.iContactId,landmarkName);
-
-            // if default address available, update Mylocations. 
-            lookupItem.iSource = ESourceContactsPref;
-            if (preferedAddressLm)
-            {
-                iMyLocationsDatabaseManager->UpdateEntryName( aEvent.iContactId, ESourceContactsPref, 
-                                     landmarkName );
-                MYLOCLOGSTRING("preferedAddressLm address changed" );
-
-                if ( iMyLocationsDatabaseManager->CheckIfAddressChanged(*preferedAddressLm,
-                    aEvent.iContactId, ESourceContactsPref) )
-
-                {
-                    lookupItem.iFilePath.Zero();
-                    lookupItem.iFetchingStatus = EMapTileFetchingInProgress;
-                    TRAP_IGNORE( iMaptileDatabase->ReSetEntryL(lookupItem) );
-                    
-                    RequestMapTileImageL(*preferedAddressLm, ESourceContactsPref,
-                            aEvent.iContactId, iEventType );
-
-                    if ( lookupItem.iFilePath.Length() > 0 )
-                    {
-                        iMaptileDatabase->DeleteMapTileL(lookupItem);
-                    }
-                    
-                }
-            }
-            else
-            {
-            	TRAP_IGNORE( UpdateDatabaseL( NULL, aEvent.iContactId,
-                     ESourceContactsPref, EEntryDeleted ));
-                TRAP_IGNORE( ManipulateMapTileDataBaseL(lookupItem));
-                
-            }
-            
-            // if home address available, update Mylocations.
-            lookupItem.iSource = ESourceContactsHome;
-            if (homeAddressLm)
-            {
-                iMyLocationsDatabaseManager->UpdateEntryName( aEvent.iContactId, ESourceContactsHome, 
-                                     landmarkName );
-                MYLOCLOGSTRING("homeAddressLm address changed" );
-                if ( iMyLocationsDatabaseManager->CheckIfAddressChanged(*homeAddressLm,
-                        aEvent.iContactId, ESourceContactsHome) )
-                {
-                    lookupItem.iFilePath.Zero();
-                    lookupItem.iFetchingStatus = EMapTileFetchingInProgress;
-                    TRAP_IGNORE( iMaptileDatabase->ReSetEntryL(lookupItem) )
-                    //remove entry from databse                    
-                    RequestMapTileImageL(*homeAddressLm, ESourceContactsHome, aEvent.iContactId,
-                        iEventType);
-                    if (lookupItem.iFilePath.Length() > 0) 
-                    {
-                        iMaptileDatabase->DeleteMapTileL(lookupItem);
-                    }                 
-                }
-            }
-            else
-            {
-                TRAP_IGNORE( UpdateDatabaseL( NULL, aEvent.iContactId,
-                     ESourceContactsHome, EEntryDeleted ));            
-                TRAP_IGNORE( ManipulateMapTileDataBaseL(lookupItem));
-                
-            }
- 
-
-            // if work address available, update Mylocations.
-            lookupItem.iSource = ESourceContactsWork;
-            if (workAddressLm)
-            {
-            	  iMyLocationsDatabaseManager->UpdateEntryName( aEvent.iContactId, ESourceContactsWork, 
-                                     landmarkName );
-
-                MYLOCLOGSTRING("workAddressLm address changed" );
-                if ( iMyLocationsDatabaseManager->CheckIfAddressChanged(*workAddressLm,
-                        aEvent.iContactId, ESourceContactsWork) )
-                {
-                    lookupItem.iFilePath.Zero();
-                    lookupItem.iFetchingStatus = EMapTileFetchingInProgress;
-                    TRAP_IGNORE( iMaptileDatabase->ReSetEntryL(lookupItem) )
-
-                    RequestMapTileImageL(*workAddressLm, ESourceContactsWork,
-                            aEvent.iContactId, iEventType);
-                    if (lookupItem.iFilePath.Length() > 0) 
-                    {
-                        iMaptileDatabase->DeleteMapTileL(lookupItem);
-                    }
-                } 
-            }
-            else
-            {
-                TRAP_IGNORE( UpdateDatabaseL( NULL, aEvent.iContactId,
-                     ESourceContactsWork, EEntryDeleted ));            
-                TRAP_IGNORE( ManipulateMapTileDataBaseL(lookupItem));
-               
-            }
-            break;
-        }    
-        case EContactDbObserverEventContactAdded:
-        {
-            TLookupItem lookupItem;
-            lookupItem.iUid = aEvent.iContactId;
-            lookupItem.iFilePath.Zero();
-            lookupItem.iFetchingStatus = EMapTileFetchingInProgress;
-            
-            MYLOCLOGSTRING("EContactDbObserverEventContactAdded" );
-            if (preferedAddressLm)
-            {
-                //create entry in the data base and maintain a fetching state.
-                lookupItem.iSource = ESourceContactsPref;
-                iMaptileDatabase->CreateEntryL(lookupItem);
-                RequestMapTileImageL(*preferedAddressLm, ESourceContactsPref,
-                        aEvent.iContactId, iEventType);
-            }
-            if (homeAddressLm)
-            {
-                lookupItem.iSource = ESourceContactsHome;
-                iMaptileDatabase->CreateEntryL(lookupItem);
-                RequestMapTileImageL(*homeAddressLm, ESourceContactsHome,
-                        aEvent.iContactId, iEventType);
-            }
-            if (workAddressLm)
-            {
-                lookupItem.iSource = ESourceContactsWork;
-                iMaptileDatabase->CreateEntryL(lookupItem);
-                RequestMapTileImageL(*workAddressLm, ESourceContactsWork,
-                        aEvent.iContactId, iEventType);
-            }
-            break;
-        }
-
-    }
- 
-    CleanupStack::PopAndDestroy( itemCount );
-
-}
-
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::RequestMapTileImageL()
-// Request to get maptiel
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::RequestMapTileImageL(const TDesC& aAddressDetails,
-        const TUidSourceType aAddressType, const TInt32 aUId ,const TInt aEventType)
-{
-    __TRACE_CALLSTACK;
-    SetFolderPathL();
-    TBuf<KImagePathSize> mImagePath;
-    mImagePath.Copy(imageFilePath);
- 
-
-    CMapTileRequest* mapTileRequest = new (ELeave) CMapTileRequest;
-
-    mapTileRequest->iAddressDetails = aAddressDetails.AllocL();
-    mapTileRequest->iUId = aUId;
-    mapTileRequest->iAddressType = aAddressType;
-    mapTileRequest->iEventType = aEventType;
-    mapTileRequest->iImagePath.Zero();
-    mapTileRequest->iImagePath.Copy(mImagePath);
-    
-    TInt error = KErrNone;
-    
-    if (iMapTileRequestQueue.Count() <= 0)
-    {
-        error = iMapTileRequestQueue.Append(mapTileRequest);
-        if ( KErrNone == error )
-        {
-            error = RequestExecute(mapTileRequest);    
-        }
-    }
-    else
-    {
-        MYLOCLOGSTRING("Added one more request to request queue" );
-        error = iMapTileRequestQueue.Append(mapTileRequest);
-    }
-    
-    //If any error , free the allocated memory
-    if( error != KErrNone )
-    {
-        delete mapTileRequest;
-    }
-    
-}
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::RequestMapTileImageL()
-// Request to get maptiel
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::RequestMapTileImageL(CPosLandmark& aLandmark,
-                    const TUidSourceType aAddressType, const TInt32 aUId,
-                    const TInt aEventType )
-{
-    __TRACE_CALLSTACK;
-
-    MYLOCLOGSTRING("check folder path existance!");
-    SetFolderPathL();
- 
-
-    CMapTileRequest* mapTileRequest = new (ELeave) CMapTileRequest;
-
-    mapTileRequest->iLandmarkInfo = CPosLandmark::NewL(aLandmark);
-    mapTileRequest->iUId = aUId;
-    mapTileRequest->iAddressType = aAddressType;
-    mapTileRequest->iEventType = aEventType;
-    mapTileRequest->iImagePath.Zero();
-    mapTileRequest->iImagePath.Copy(imageFilePath);
-    MYLOCLOGSTRING1("RequestMapTileImageL() Queue count -%d",iMapTileRequestQueue.Count());
-
-    TInt error = KErrNone;
-    
-    if (iMapTileRequestQueue.Count() <= 0)
-       {
-           error = iMapTileRequestQueue.Append(mapTileRequest);
-           //error = RequestExecute(mapTileRequest);
-           if( KErrNone == error  )
-           {
-               //error = iMapTileRequestQueue.Append(mapTileRequest);
-               error = RequestExecute(mapTileRequest);
-           }
-  
-       }
-       else
-       {
-           MYLOCLOGSTRING("Added one more request to request queue" );
-           error = iMapTileRequestQueue.Append(mapTileRequest);
-       }
-    
-       //If any error, free the memory allocated
-       if( error != KErrNone )
-       {
-           delete mapTileRequest;
-       }
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::RequestExecute()
-// Executes the maptile image processing request
-// -----------------------------------------------------------------------------
-//
-TInt CMyLocationsEngine::RequestExecute( CMapTileRequest* aMapTileRequest)
-{
-    __TRACE_CALLSTACK;
-    TInt errorCode = KErrNone;
-    MYLOCLOGSTRING1("Request address type - %d ",aMapTileRequest->iAddressType);
-    switch (aMapTileRequest->iAddressType)
-    {
-        case ESourceCalendar:
-        {
-            TRAP(errorCode,iMapTileInterface->GetGeoCodeFromAddressL(*(aMapTileRequest->iAddressDetails),
-                            aMapTileRequest->iImagePath, this ));        
-            break;
-        }
-        case ESourceContactsPref:
-        case ESourceContactsWork:
-        case ESourceContactsHome:
-        {
-            TRAP(errorCode, iMapTileInterface->GetGeoCodeFromAddressL(aMapTileRequest->iLandmarkInfo,
-                            aMapTileRequest->iImagePath, this));            
-            break;
-        }
-        default:
-            break;
-    };  
-
-    return errorCode;
-}
- 
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::GetContactAddressDetailsLC()
-// get locatin details
-// -----------------------------------------------------------------------------
-//
-CPosLandmark* CMyLocationsEngine::GetContactAddressDetailsLC( 
-                                   QContactAddress& aContactAddress )
-{
-    __TRACE_CALLSTACK;
-    CPosLandmark *landmark = NULL;
-    
-    QString country = aContactAddress.country();
-    QString locality = aContactAddress.locality();
-    QString street = aContactAddress.street();
-    QString region = aContactAddress.region();
-    QString postalcode = aContactAddress.postcode();
-    
-    landmark = CPosLandmark::NewL();
-    CleanupStack::PushL(landmark);
-    
-    if ( !country.isEmpty() )
-    {
-        TPtrC16 tempText(reinterpret_cast<const TUint16*>(country.utf16()));
-        landmark->SetPositionFieldL( EPositionFieldCountry, tempText );
-    }
-    if ( !locality.isEmpty() )
-    {
-        TPtrC16 tempText(reinterpret_cast<const TUint16*>(locality.utf16())); 
-        landmark->SetPositionFieldL(EPositionFieldCity, tempText);
-    }
-    if ( !street.isEmpty() )
-    { 
-        TPtrC16 tempText(reinterpret_cast<const TUint16*>(street.utf16()));
-        landmark->SetPositionFieldL(EPositionFieldStreet, tempText);
-    }
-    if ( !postalcode.isEmpty() )
-    {
-        TPtrC16 tempText(reinterpret_cast<const TUint16*>(postalcode.utf16()));
-        landmark->SetPositionFieldL(EPositionFieldPostalCode, tempText);
-    }
-
-     return landmark;
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::MapsChangeType()
-// Maps the source's change type to Mylocations entry change type
-// -----------------------------------------------------------------------------
-//
-TEntryChangeType CMyLocationsEngine::MapChangeType(TUidSourceType aSrcType,
-        TUint32 aChangeType)
-{
-    __TRACE_CALLSTACK;// return value
-    TEntryChangeType retVal = EEntryUnknown;
-
-    switch (aSrcType)
-    {
-    // if source type is calendar
-    case ESourceCalendar:
-    {
-        switch( aChangeType )
-            {
-            case EChangeAdd:
-                retVal = EEntryAdded;
-                break;
-            case EChangeDelete:
-                retVal =  EEntryDeleted;
-                break;
-            case EChangeModify:
-                retVal =  EEntryModified;
-                break;
-            }
-        break;
-    }
-    // if source type is contacts
-    case ESourceContactsPref:
-    case ESourceContactsWork:
-    case ESourceContactsHome:
-    {
-        switch (aChangeType)
-        {
-        case EContactDbObserverEventContactAdded:
-            retVal = EEntryAdded;
-            break;
-        case EContactDbObserverEventContactDeleted:
-            retVal = EEntryDeleted;
-            break;
-        case EContactDbObserverEventContactChanged:
-            retVal = EEntryModified;
-            break;
-        }
-        break;
-    }
-
-        // if source type is landmarks or maps history
-    case ESourceLandmarks:
-    {
-        switch (aChangeType)
-        {
-        case EPosLmEventLandmarkCreated:
-            retVal = EEntryAdded;
-            break;
-        case EPosLmEventLandmarkDeleted:
-            retVal = EEntryDeleted;
-            break;
-        case EPosLmEventLandmarkUpdated:
-            retVal = EEntryModified;
-            break;
-        }
-        break;
-    }
-    case ESourceLandmarksCategory:
-    {
-        switch (aChangeType)
-        {
-        case EPosLmEventCategoryCreated:
-            retVal = EEntryAdded;
-            break;
-        }
-    }
-        break;
-    }
-    return retVal;
-}
-
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::IsGeoCoordinateAvailable()
-// Checks whether geocoordinate available in the contact detail.
-// -----------------------------------------------------------------------------
-//
-TBool CMyLocationsEngine::IsGeoCoordinateAvailable( QContact& aContact, 
-        QString aAddressType, double& aLatitude , double& aLongitude )
-
-{
-      TBool geoFieldAvailable = EFalse;
-      QContactGeoLocation geoLocation;
-      
-      foreach( geoLocation, aContact.details<QContactGeoLocation>() )
-      {
-          if( !geoLocation.isEmpty())
-          {
-              QStringList context = geoLocation.contexts();
-              if ( context.isEmpty() )
-              {
-                  if ( aAddressType.isEmpty() )
-                  {
-                      geoFieldAvailable = ETrue;
-                      break;
-                  }
-              }
-              else if( context.first() == aAddressType )
-              {
-                  geoFieldAvailable = ETrue;
-                  break;
-              }
-              
-          }
-          
-      }
-      if( geoFieldAvailable )
-      {
-          aLatitude = geoLocation.latitude();
-          aLongitude = geoLocation.longitude();
-      }
-      return geoFieldAvailable;
-}
-
-
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::RunL()
-// Handles active object's request completion event.
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::RunL()
-{
-    __TRACE_CALLSTACK;
-    switch (iLmEvent.iEventType)
-    {
-        case EPosLmEventLandmarkCreated:
-        case EPosLmEventLandmarkUpdated:
-        {
-            CPosLandmark* readLandmark = iLandmarkDb->ReadLandmarkLC(
-                    iLmEvent.iLandmarkItemId);
-    
-                // update the entry in database.
-                UpdateDatabaseL( readLandmark,
-                        iLmEvent.iLandmarkItemId, ESourceLandmarks, MapChangeType(
-                                ESourceLandmarks, iLmEvent.iEventType ) );
-    
-                CleanupStack::PopAndDestroy(readLandmark);
-        }
-        break;
-        case EPosLmEventLandmarkDeleted:
-        {
-            // delete the corresponding entries in mylocations database.
-            UpdateDatabaseL(NULL,
-                    iLmEvent.iLandmarkItemId, ESourceLandmarks, EEntryDeleted);
-        }
-        break;
-
-    }
-
-    // start the change notifier again;
-    StartLandmarksChangeNotifier();
-
-}
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::DoCancel()
-// Implements cancellation of an outstanding request.
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::DoCancel()
-{
-    __TRACE_CALLSTACK;
-    iLandmarkDb->CancelNotifyDatabaseEvent();
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::GeoCodefetchingCompleted()
-// Handles the maptile fetching completion event and updates the maptile lookup db.
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::GeoCodefetchingCompleted( TInt aErrCode, const TReal& aLatitude,
-            const TReal& aLongitude, const TDesC& aMapTilePath )
-{
-    __TRACE_CALLSTACK;
-    MYLOCLOGSTRING1("GeoCodefetchingCompleted aErrCode - %d ",aErrCode);
-    MYLOCLOGSTRING1("iMapTileRequestQueue.Count - %d",iMapTileRequestQueue.Count());
-
-    TBuf8<KProtocolBufferSize> buffer;
-    
-    if (iMapTileRequestQueue.Count() > 0)
-    {
-        MYLOCLOGSTRING1("No.of RequestQueue - %d",iMapTileRequestQueue.Count());
-       
-	    TLookupItem lookupItem;
-        lookupItem.iSource = iMapTileRequestQueue[0]->iAddressType;
-        lookupItem.iUid = iMapTileRequestQueue[0]->iUId;
-
-        if (aErrCode == KErrNone)
-        {
-            UpdateGeoCodeToAppDataBase( aLatitude, aLongitude );
-            
-            TBool flag = EFalse;
-            TRAP_IGNORE( flag = iMaptileDatabase->FindEntryByFilePathL(aMapTilePath) );
-            if ( flag )
-            {  
-                MYLOCLOGSTRING1("%S - found in the DB",&aMapTilePath);
-            
-             				
-                lookupItem.iFilePath.Copy(aMapTilePath);
-                lookupItem.iFetchingStatus = EMapTileFectchingCompleted;
-                TRAP_IGNORE( UpdateMaptileDatabaseL(iMapTileRequestQueue[0]->iEventType, lookupItem ) );              
-                //Publish the maptile status
-                if( iLastContactId == iMapTileRequestQueue[0]->iUId )
-                {
-                    buffer.Zero();
-                    buffer.Format( KMaptileStatusFormat, iLastContactId, lookupItem.iSource, lookupItem.iFetchingStatus );
-                    RProperty::Set( KMaptileStatusPublish, EMaptileStatusInteger, buffer );
-                }
-                //Publish the maptile status ,if it was from calendar
-                if( iLastCalendarId == iMapTileRequestQueue[0]->iUId )
-                {
-                    buffer.Zero();
-                    buffer.Format( KMaptileStatusFormat, iLastCalendarId, lookupItem.iSource, lookupItem.iFetchingStatus );
-                    RProperty::Set( KMaptileStatusPublish, EMaptileStatusInteger, buffer );
-                }
-                MYLOCLOGSTRING("UpdateMaptileDatabaseL handled");
-
-                //Process the pending maptile requests
-                ProcessNextMaptileRequest();
-                
-            }
-            else
-            {
-                TRAPD( error, iMapTileInterface->GetMapTileL( aLatitude, aLongitude ) );
-                if ( error != KErrNone )
-                {
-                    //Log error message
-                     MYLOCLOGSTRING1("iMapTileInterface->GetMapTileL() status-%d",error);
-                     MapTilefetchingCompleted(error, KNullDesC);
-                }            
-            }            
-        }
-        else
-        {
-		   if ( aErrCode == KErrCouldNotConnect )
-		   {
-		       lookupItem.iFetchingStatus = EMapTileFetchingNetworkError;
-               iMyLocationThreeAMTimer->StartTimer();
-              
-		   }
-		   else
-		   {
-		       lookupItem.iFetchingStatus = EMapTileFetchingUnknownError;
-		   }
-           TRAP_IGNORE( UpdateMaptileDatabaseL(iMapTileRequestQueue[0]->iEventType,lookupItem ) );
-           
-           //Publish the maptile status
-		   if( iLastContactId == iMapTileRequestQueue[0]->iUId )
-		   {
-		      buffer.Zero();
-		      buffer.Format( KMaptileStatusFormat, iLastContactId, lookupItem.iSource, lookupItem.iFetchingStatus );
-		      RProperty::Set( KMaptileStatusPublish, EMaptileStatusInteger, buffer );
-		   }
-            //Publish the maptile status ,if it was from calendar
-		   if( iLastCalendarId == iMapTileRequestQueue[0]->iUId )
-            {
-		      buffer.Zero();
-              buffer.Format( KMaptileStatusFormat, iLastCalendarId, lookupItem.iSource, lookupItem.iFetchingStatus );
-              RProperty::Set( KMaptileStatusPublish, EMaptileStatusInteger, buffer );
-            }
-		   
-		   ProcessNextMaptileRequest();
-        }
-    }    
-}
-
-
-
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::MyLocationThreeAMTimerExpiredL()
-// Triggers the maptile fetching at 3.00 for the network failure cases.
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::MyLocationThreeAMTimerExpiredL()
-{
-    //Forward the event for maptile fetching only if maptile plugin available
-    if( iMaptileGeocoderPluginAvailable )
-    {
-        RArray<TLookupItem> iLookupItems;
-        iMaptileDatabase->FindEntriesByMapTileFetchingStateL((TUint32)EMapTileFetchingNetworkError,
-                                            iLookupItems);
-        for( TUint32 i = 0; i < iLookupItems.Count(); i++ )
-        {
-            TLookupItem iItem = iLookupItems[i];
-            switch( iItem.iSource )
-            {
-                // Get the home address details
-                case ESourceContactsHome:
-                case ESourceContactsWork:
-                case ESourceContactsPref:
-                     { 
-                        QContact contactInfo = iContactManager->contact( iItem.iUid );
-                        
-                        CPosLandmark *addressLm = NULL;
-    
-                        foreach ( QContactAddress address, contactInfo.details<QContactAddress>() )
-                        {
-                            QStringList context = address.contexts();
-                            if ( ( context.isEmpty() && iItem.iSource == ESourceContactsPref  ) 
-                                 ||
-                                 ( !context.isEmpty() && 
-                                    ( ( context.first() == QContactAddress::ContextHome  && iItem.iSource == ESourceContactsHome ) ||
-                                      ( context.first() == QContactAddress::ContextWork  && iItem.iSource == ESourceContactsWork ) ) ) )
-                            {
-                                // Get the default/prefered address details
-                                addressLm = GetContactAddressDetailsLC( address );
-                                if( addressLm ) 
-                                {
-                                    RequestMapTileImageL( *addressLm,
-                                           ( TUidSourceType )iItem.iSource, iItem.iUid, EContactDbObserverEventContactChanged );
-                                    CleanupStack::PopAndDestroy( addressLm );
-                                    break;
-                                }
-                            }
-                        }                    
-                     }
-                     break;
-                
-                case ESourceCalendar:
-                     {
-                        CCalEntry* calEntry = NULL;
-                        calEntry = iCalView->FetchL(iItem.iUid);
-                        if( calEntry )
-                        {
-                            CleanupStack::PushL(calEntry);
-                            TPtrC address(calEntry->LocationL());
-                            if(address.Length()>0)
-                            {        
-                                RequestMapTileImageL( address, ESourceCalendar, iItem.iUid , EChangeModify);
-                            }
-                            CleanupStack::PopAndDestroy(calEntry);
-                        }
-                        else
-                        {
-                            iMaptileDatabase->DeleteEntryL( iItem );
-                        }
-                     }
-                     break;
-                 
-                 default:
-                     break;
-              }
-         }// end for
-     }
-}
-
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::MapTilefetchingCompleted()
-// Handles the maptile fetching completion event and updates the maptile lookup db.
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::MapTilefetchingCompleted(TInt aErrCode,
-        const TDesC& aMapTilePath)
-{
-    __TRACE_CALLSTACK;
-    MYLOCLOGSTRING1("MapTilefetchingCompleted aErrCode - %d ",aErrCode);
-    MYLOCLOGSTRING1("iMapTileRequestQueue.Count - %d",iMapTileRequestQueue.Count());
-
-    if ( iMapTileRequestQueue.Count() > 0 )
-    {
-
-        MYLOCLOGSTRING1("No.of RequestQueue - %d",iMapTileRequestQueue.Count());
-
-        TLookupItem lookupItem;
-        lookupItem.iSource = iMapTileRequestQueue[0]->iAddressType;
-        lookupItem.iUid = iMapTileRequestQueue[0]->iUId;
-       
-        if ( aErrCode == KErrNone )
-        {           
-            CreateMultipleMaptiles( aMapTilePath );
-            lookupItem.iFilePath.Copy(aMapTilePath);
-            lookupItem.iFetchingStatus = EMapTileFectchingCompleted;
- 
-        }
-        else if ( aErrCode == KErrCouldNotConnect )
-		{
-		    lookupItem.iFetchingStatus = EMapTileFetchingNetworkError;
-            iMyLocationThreeAMTimer->StartTimer();
-              
-		}
-		else
-		{
-		    lookupItem.iFetchingStatus = EMapTileFetchingUnknownError;
-		}
-		
-        TRAP_IGNORE( UpdateMaptileDatabaseL( iMapTileRequestQueue[0]->iEventType,lookupItem ) );
-
-        // if the source type is contacts, update the contact name into the locationdatalookupdb. 
-        // This has to be done, because there is a possibility  that the user might change the 
-        // contact name between geocodefetchingcomplete and maptilefetchingcomplete.
-        if( iMapTileRequestQueue[0]->iAddressType == ESourceContactsPref ||
-            iMapTileRequestQueue[0]->iAddressType == ESourceContactsHome ||
-            iMapTileRequestQueue[0]->iAddressType == ESourceContactsWork )
-        {
-            TBuf<KBufSize> landmarkName;
-            GetContactName( iMapTileRequestQueue[0]->iUId, landmarkName );
-            
-            iMyLocationsDatabaseManager->UpdateEntryName( 
-                    iMapTileRequestQueue[0]->iUId, ESourceContactsPref, landmarkName );
-            iMyLocationsDatabaseManager->UpdateEntryName( 
-                    iMapTileRequestQueue[0]->iUId, ESourceContactsHome, landmarkName );
-            iMyLocationsDatabaseManager->UpdateEntryName( 
-                    iMapTileRequestQueue[0]->iUId, ESourceContactsWork, landmarkName );
-        }
-
-        //Publish the maptile status , if it was from contact
-        if( iLastContactId == iMapTileRequestQueue[0]->iUId )
-        {
-             TBuf8<KProtocolBufferSize> buffer;
-             buffer.Format( KMaptileStatusFormat, iLastContactId, lookupItem.iSource, lookupItem.iFetchingStatus );
-             RProperty::Set( KMaptileStatusPublish, EMaptileStatusInteger, buffer );
-        }
-        //Publish the maptile status ,if it was from calendar
-        if( iLastCalendarId == iMapTileRequestQueue[0]->iUId )
-        {
-            TBuf8<KProtocolBufferSize> buffer;
-            buffer.Format( KMaptileStatusFormat, iLastCalendarId, lookupItem.iSource, lookupItem.iFetchingStatus );
-            RProperty::Set( KMaptileStatusPublish, EMaptileStatusInteger, buffer );
-        }
-    }
-    
-    ProcessNextMaptileRequest();
-}
-
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::ProcessNextMaptileRequest()
-// Process the next maptile request if any pending.
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::ProcessNextMaptileRequest()
-{
-    //Process the next request if it is pending
-    if ( iMapTileRequestQueue.Count() > 0)
-    {
-        //Remove the current top request 
-        delete iMapTileRequestQueue[0];
-        iMapTileRequestQueue.Remove(0);
-        iMapTileRequestQueue.Compress();
-    
-        //Process the next request in queue
-        MYLOCLOGSTRING1("MapTile fetch completed request-%d",iMapTileRequestQueue.Count());
-        for (TInt cnt = 0; cnt < iMapTileRequestQueue.Count(); cnt++)
-        {          
-            if ( KErrNone == RequestExecute( iMapTileRequestQueue[0]) )
-            {
-                   break;
-            }
-            else
-            {
-               //Process the next request in queue
-               ProcessNextMaptileRequest();
-
-            }
-        }
-    }
-    else
-    {
-       MYLOCLOGSTRING("MapTile fetch completed no request in queue");
-           iMapTileRequestQueue.Reset();
-    }    
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::HandleMaptileDatabaseL()
-// Handle maptile database(find/create/update/delete).
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::UpdateMaptileDatabaseL(
-        TInt aEventType, TLookupItem& aLookupItem)
-{
-    __TRACE_CALLSTACK;
-    if (aEventType == EContactDbObserverEventContactChanged || aEventType
-            == EChangeModify || aEventType == EContactDbObserverEventContactAdded ||
-            aEventType == EChangeAdd )
-    {
-        
-        if (iMaptileDatabase->FindEntryL(aLookupItem))
-        {
-            iMaptileDatabase->UpdateEntryL(aLookupItem);
-        }
-        else
-        {
-            iMaptileDatabase->CreateEntryL(aLookupItem);
-        }
-    }
-    if (aLookupItem.iFetchingStatus == EMapTileFetchingUnknownError
-            || aLookupItem.iFetchingStatus == EMapTileFetchingNetworkError)
-    {
-        TRAP_IGNORE( UpdateDatabaseL( NULL,
-                        aLookupItem.iUid, aLookupItem.iSource, EEntryDeleted ) );
-
-    }
-    else
-    {      
-        TPtrC8 ptr(reinterpret_cast<const TUint8*>(MAPTILE_IMAGE_HURRIGANES));   
-        HBufC* buffer = NULL;
-        buffer=HBufC::NewLC(ptr.Length());
-        buffer->Des().Copy(ptr);
-        if(buffer)
-        {
-            aLookupItem.iFilePath.Append(*buffer);
-        }
-        CleanupStack::PopAndDestroy(buffer);
-        iMyLocationsDatabaseManager->UpdateMapTilePath(aLookupItem.iUid,
-                aLookupItem.iSource, aLookupItem.iFilePath);
-    }
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::RestGeoCodeCompleted()
-// observed when rest geo codeing completed.
-// started lat and lon field updation into contact db.
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::UpdateGeoCodeToAppDataBase( TReal aLatitude, TReal aLongitude )
-{
-    __TRACE_CALLSTACK;
-
-    MYLOCLOGSTRING1("No. of iMapTileRequestQueue - %d",iMapTileRequestQueue.Count());
-    if (iMapTileRequestQueue.Count() > 0)
-    {
-        switch (iMapTileRequestQueue[0]->iAddressType)
-        {
-        //TODO:
-        case ESourceCalendar:
-        {           
-            iGeocodeUpdate->updateGeocodeToCalenderDB(iMapTileRequestQueue[0]->iUId,
-                    aLatitude,aLongitude);                    
-            CPosLandmark *landmark = NULL;
-            landmark = iMapTileInterface->GetLandMarkDetails();
-            if (NULL != landmark)
-            {
-                TRAP_IGNORE( landmark->SetPositionFieldL(EPositionFieldComment,
-                        iMapTileRequestQueue[0]->iAddressDetails->Des() ) );
-                TRAP_IGNORE( UpdateDatabaseL( landmark, iMapTileRequestQueue[0]->iUId,
-                                ESourceCalendar,
-                                MapChangeType( ESourceCalendar, iMapTileRequestQueue[0]->iEventType ) ) );
-            }
-            MYLOCLOGSTRING("Geo-codinate updated to calender db");
-            break;
-        }
-        case ESourceContactsPref:
-        case ESourceContactsWork:
-        case ESourceContactsHome:
-        {
-            iGeocodeUpdate->updateGeocodeToContactDB(
-                    iMapTileRequestQueue[0]->iUId,
-                    iMapTileRequestQueue[0]->iAddressType, aLatitude,
-                    aLongitude);
-            TBuf<KBufSize> landmarkName;
-            GetContactName(iMapTileRequestQueue[0]->iUId,landmarkName);
-            //Update mylocation database 
-            iMapTileRequestQueue[0]->iLandmarkInfo->SetLandmarkNameL( landmarkName );
-            TRAP_IGNORE( UpdateDatabaseL( 
-                    iMapTileRequestQueue[0]->iLandmarkInfo, 
-                    iMapTileRequestQueue[0]->iUId,
-                    iMapTileRequestQueue[0]->iAddressType,
-                    MapChangeType( 
-                        static_cast<TUidSourceType>( iMapTileRequestQueue[0]->iAddressType ), 
-                                                  iMapTileRequestQueue[0]->iEventType )));
-            
-            MYLOCLOGSTRING("Geo-codinate updated to contact db");
-            break;
-        }
-        };
-    }
-
-}
-
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::GetContactName()
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::GetContactName( TInt32 aUId,TDes& aName)
-{
-	QContact contactInfo = iContactManager->contact( aUId );
-	QContactName name = contactInfo.detail( QContactName::DefinitionName );
-	QString firstName = name.firstName();
-	QString lastName = name.lastName();
-	QString fullName("");
-	
-	if( lastName.isEmpty() )
-    {
-	    fullName = firstName;
-    }
-	else
-    {
-        if( !firstName.isEmpty() )
-        {
-            fullName = firstName + KSpace;
-        }
-        fullName = fullName + lastName; 
-    }
-	
-	aName.Copy( reinterpret_cast<const TUint16*>(fullName.utf16()) );
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::UpdateDatabaseL()
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::UpdateDatabaseL( CPosLandmark* aLandmark, const TUint32 aUid, 
-        const TUint32 aSourceType, const TEntryChangeType aChangeType )
-{
-    __TRACE_CALLSTACK;
-    if(IsActive())
-    {
-        Cancel();
-    }
-    iMyLocationsDatabaseManager->UpdateDatabaseL( aLandmark, aUid, 
-        aSourceType, aChangeType );
-    if( aSourceType != ESourceLandmarks )
-    {
-        StartLandmarksChangeNotifier();
-    }
-    
-}
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::ManipulateMapTileDataBaseL()
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::ManipulateMapTileDataBaseL(TLookupItem& aLookupItem)
-{
-    __TRACE_CALLSTACK;
-    TBool entryAvailable=EFalse;
-    entryAvailable = iMaptileDatabase->FindEntryL(aLookupItem);
-    iMaptileDatabase->DeleteEntryL(aLookupItem);
-    if (entryAvailable)
-    {
-        iMaptileDatabase->DeleteMapTileL(aLookupItem);
-    }            
-}
-
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::CreateMultipleMaptiles()
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::CreateMultipleMaptiles( const TDesC& aMaptilePath )
-{
-    __TRACE_CALLSTACK;
-    QString filePath =  QString::fromUtf16( aMaptilePath.Ptr(), aMaptilePath.Length() );
-    
-    //Portrait image , common for contacts/calendar/context menu
-    CropAndSaveImage( filePath, 
-                      MaptilePortraitWidth, 
-                      MaptilePortraitHeight, 
-                      QString(),
-                      QString( MAPTILE_IMAGE_PORTRAIT ) );
-    
-    //Landscape image for contacts
-    CropAndSaveImage( filePath, 
-                      MaptileContactLandscapeWidth, 
-                      MaptileContactLandscapeHeight,
-                      QString( MAPTILE_IMAGE_CONTACT ),
-                      QString( MAPTILE_IMAGE_LANDSCAPE ) );
-    
-    //Ladscape image for calendar
-    CropAndSaveImage( filePath, 
-                      MaptileCalendarLandscapeWidth, 
-                      MaptileCalendarLandscapeHeight,
-                      QString( MAPTILE_IMAGE_CALENDAR ),
-                      QString( MAPTILE_IMAGE_LANDSCAPE ) );
-    
-    //Image for hurriganes
-    CropAndSaveImage( filePath, 
-                      MaptileHurriganesWidth, 
-                      MaptileHurriganesHeight,
-                      QString( MAPTILE_IMAGE_HURRIGANES ),
-                      QString() );
-    QFile file(filePath);
-    file.remove();   
-}
-
-
-// -----------------------------------------------------------------------------
-// CMyLocationsEngine::CropAndSaveImage()
-// -----------------------------------------------------------------------------
-//
-void CMyLocationsEngine::CropAndSaveImage( QString filePath, int width, 
-                                   int height, QString appType, QString orientationType )
-{    
-     __TRACE_CALLSTACK;
-     QImage SourcePNG( filePath );
-     QImage sourcePixmap( SourcePNG.convertToFormat(QImage::Format_Indexed8));     
-     QImage targetPixmap( sourcePixmap.copy( 
-                               ( MapTileWidth - width )/2, 
-                               ( MapTileHeight - height )/2 , 
-                               width, 
-                               height ) );
-         
-     QString targetImage;
-     targetImage.append( filePath );
-     targetImage.append( appType );
-     targetImage.append( orientationType );
-     targetPixmap.save( targetImage, MAPTILE_IMAGE_TYPE  );
-             
-}
-
-//End of file
-