--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationdataharvester/maptileservice/src/maptileservice.cpp Tue Aug 31 15:09:25 2010 +0300
@@ -0,0 +1,394 @@
+/*
+* 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:
+* Maptile service implementation
+*
+*/
+
+
+#include <centralrepository.h>
+#include <locationservicedefines.h>
+#include <qvaluespacepublisher.h>
+#include <qvaluespacesubscriber.h>
+#include <qfile.h>
+#include "mylocationlogger.h"
+
+#include "maptileservice.h"
+#include "maptiledblookuptable.h"
+#include <QVariant>
+// CONSTANTS
+// Maptile interface uid
+const TUid KUidMapTileInterface = { 0x2002E6E8 };
+
+// Central Repository Key IDs
+const TInt KEnableLocationFeature = 0x1;
+
+const char *MAPTILE_STATUS_RECEIVER = "/maptilestatuspublisher/name";
+const char *MAPTILE_STATUS_PUBLISHER = "/maptilecontactpublisher";
+const char *MAPTILE_STATUS_CALENDAR_PUBLISHER = "/maptilecalpublisher";
+
+
+// -----------------------------------------------------------------------------
+// MapTileService::MapTileService()
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+MapTileService::MapTileService():mCalPublisher(0)
+{
+ /* Constructs a QValueSpacePublisher that publishes values under path /mypublisher*/
+ mPublisher = NULL;
+ mSubscriber = new QValueSpaceSubscriber( MAPTILE_STATUS_RECEIVER );
+ //Connect for maptile status change key
+ QObject::connect(mSubscriber, SIGNAL(contentsChanged()), this, SLOT(setMaptileStatus()));
+
+}
+
+// -----------------------------------------------------------------------------
+// MapTileService::~MapTileService()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+MapTileService::~MapTileService()
+{
+ if( mSubscriber )
+ {
+ delete mSubscriber;
+ mSubscriber = NULL;
+ }
+
+ if( mPublisher )
+ {
+ delete mPublisher;
+ mPublisher = NULL;
+ }
+ if( mCalPublisher )
+ {
+ delete mCalPublisher;
+ mCalPublisher = NULL;
+ }
+}
+// -----------------------------------------------------------------------------
+// MapTileService::isLocationFeatureEnabled()
+// Checks whether location feature is enabled or disabled
+// -----------------------------------------------------------------------------
+//
+bool MapTileService::isLocationFeatureEnabled(AppType appType)
+{
+ //Create the centrep with uid 0x2002C3A8
+ bool enableLocationFeature = false;
+
+ CRepository* centralRepository = NULL;
+
+ TRAPD( err, centralRepository = CRepository::NewL( KUidMapTileInterface ) );
+ if ( KErrNone == err )
+ {
+ TInt repValue;
+
+ //Get the Location feature flag
+ int ret=0;
+ if ( appType == AppTypeContacts )
+ {
+ ret = centralRepository->Get( KEnableLocationFeature , repValue );
+ }
+ else if ( appType == AppTypeCalendar )
+ {
+ ret = centralRepository->Get( KEnableLocationFeature , repValue );
+ }
+
+ if ( ret == KErrNone && repValue == 1 )
+ {
+ enableLocationFeature = true;
+ }
+
+ delete centralRepository;
+ }
+
+ return enableLocationFeature;
+
+}
+
+
+// -----------------------------------------------------------------------------
+// MapTileService::getMapTileImage()
+// Gets the maptile image path associated with a contact.
+// -----------------------------------------------------------------------------
+//
+int MapTileService::getMapTileImage( int id, AddressType sourceType,
+ QString& imagePath, Qt::Orientations orientation )
+{
+ __TRACE_CALLSTACK;
+
+ TLookupItem lookupItem;
+
+ int addressCount = 0;
+ int maptileStatus = MapTileFetchingUnknownError;
+
+ int error = readEntryFromMaptileDataBase( id, sourceType, lookupItem, addressCount );
+
+ //if entry available returns the file path otherwise NULL.
+ if ( KErrNone == error )
+ {
+
+ maptileStatus = lookupItem.iFetchingStatus;
+ MYLOCLOGSTRING1("getMapTileImage maptileStatus - %d ", maptileStatus );
+
+ if( maptileStatus == MapTileFetchingCompleted )
+ {
+ //Get the image path
+ QString imageFile((QChar*)lookupItem.iFilePath.Ptr(),
+ lookupItem.iFilePath.Length());
+ imagePath = imageFile;
+
+ if( orientation == Qt::Vertical )
+ {
+ imagePath.append( MAPTILE_IMAGE_PORTRAIT );
+ }
+ else
+ {
+ if( sourceType == AddressPlain )
+ {
+ imagePath.append( MAPTILE_IMAGE_CALENDAR );
+ }
+ else if ( sourceType == AddressHome ||
+ sourceType == AddressPreference || sourceType == AddressWork )
+ {
+ imagePath.append( MAPTILE_IMAGE_CONTACT );
+ }
+ imagePath.append( MAPTILE_IMAGE_LANDSCAPE );
+ }
+
+ //Check if file exist
+ if( !QFile::exists( imagePath ) )
+ {
+ imagePath.clear();
+ maptileStatus = MapTileFetchingUnknownError;
+ }
+ }
+ else if( maptileStatus == MapTileFetchingNetworkError ||
+ maptileStatus == MapTileFetchingInProgress )
+ {
+ switch(sourceType)
+ {
+ case AddressHome:
+ case AddressPreference:
+ case AddressWork:
+ {
+ publishValue( id, sourceType, addressCount );
+ break;
+ }
+
+ case AddressPlain:
+ {
+ publishCalEntry( id );
+ break;
+ }
+ default:
+ break;
+ };
+
+ }
+
+
+ }
+ else if ( KErrNotFound == error )
+ {
+ MYLOCLOGSTRING("getMapTileImage entry not found, return MapTileFetchingInProgress" );
+ //If entry is not found , it will be a newly added entry.
+ switch (sourceType) {
+ case AddressHome:
+ case AddressPreference:
+ case AddressWork:
+ {
+ publishValue(id, sourceType, addressCount);
+ break;
+ }
+
+ case AddressPlain:
+ {
+ publishCalEntry(id);
+ break;
+ }
+ default:
+ break;
+ };
+ maptileStatus = MapTileFetchingInProgress;
+ }
+
+ //Return the maptile status
+ MYLOCLOGSTRING("getMapTileImage returns MapTileFetchingUnknownError" );
+ return maptileStatus;
+
+}
+
+// -----------------------------------------------------------------------------
+// MapTileService::setMaptileStatus()
+// Gets call back from location engine , after maptile fetching done ,
+// to set status and emit signal .
+// -----------------------------------------------------------------------------
+//
+void MapTileService::setMaptileStatus()
+{
+ __TRACE_CALLSTACK;
+ QString imagePath;
+ AddressType addressType = AddressUnknown;
+ QStringList subPath = mSubscriber->subPaths();
+ QVariant value = mSubscriber->value(subPath.at(0));
+
+ //Subscriber Protocol : [appid-addresstype-maptilestatus]
+ QStringList text = value.toString().split("-");
+
+ int id = text.at(0).toInt();
+ int status = text.at(2).toInt();
+
+ switch( text.at(1).toInt() )
+ {
+ case ESourceContactsPref:
+ addressType = AddressPreference;
+ break;
+ case ESourceContactsWork:
+ addressType = AddressWork;
+ break;
+ case ESourceContactsHome:
+ addressType = AddressHome;
+ break;
+ case ESourceCalendar:
+ addressType = AddressPlain;
+ break;
+ default:
+ break;
+ }
+
+ //Emit the maptile status signal
+ int type = addressType;
+ MYLOCLOGSTRING1("setMaptileStatus() status - %d ", addressType );
+ if( mLastViewedEntryId == id )
+ {
+ emit maptileFetchingStatusUpdate( mLastViewedEntryId, type , status );
+ }
+
+}
+
+// -----------------------------------------------------------------------------
+// MapTileService::publishValue()
+// publish the contact entry
+// -----------------------------------------------------------------------------
+//
+void MapTileService::publishValue( int id, AddressType sourceType, int addressCount )
+{
+ __TRACE_CALLSTACK;
+ mLastViewedEntryId = id;
+
+ int addressType = ESourceInvalid;
+ switch( sourceType )
+ {
+ case AddressPreference:
+ addressType = ESourceContactsPref;
+ break;
+ case AddressWork:
+ addressType = ESourceContactsWork;
+ break;
+ case AddressHome:
+ addressType = ESourceContactsHome;
+ break;
+ }
+
+ if ( !mPublisher )
+ {
+ /* Constructs a QValueSpacePublisher that publishes values under path /mypublisher*/
+ mPublisher = new QValueSpacePublisher( MAPTILE_STATUS_PUBLISHER, this);
+ }
+
+
+ /* Publisher protocol [appid-addresstype-count] */
+ QString addressId;
+ addressId.append( QVariant(id).toString());
+ addressId.append( QChar('-') );
+ addressId.append( QVariant(addressType).toString());
+ addressId.append( QChar('-') );
+ addressId.append( QVariant(addressCount).toString() );
+ mPublisher->setValue("name", addressId.toAscii() );
+ mPublisher->sync();
+
+}
+
+// -----------------------------------------------------------------------------
+// MapTileService::publishValue()
+// publish the calendar entry
+// -----------------------------------------------------------------------------
+//
+void MapTileService::publishCalEntry( int id)
+{
+ __TRACE_CALLSTACK;
+ mLastViewedEntryId = id;
+ if ( NULL ==mCalPublisher )
+ {
+ /* Constructs a QValueSpacePublisher that publishes values under path /mypublisher*/
+ mCalPublisher = new QValueSpacePublisher( MAPTILE_STATUS_CALENDAR_PUBLISHER, this);
+ }
+ mCalPublisher->setValue("name", id);
+ mCalPublisher->sync();
+}
+
+// -----------------------------------------------------------------------------
+// MapTileService::readEntryFromMaptileDataBase()
+// Read all entries from database
+// -----------------------------------------------------------------------------
+//
+int MapTileService::readEntryFromMaptileDataBase(
+ int id, AddressType sourceType, TLookupItem& aLookupItem, int& aNoOfAddress )
+{
+
+ //Maptile database instance
+ CLookupMapTileDatabase* mapTileDatabase = NULL;
+
+ TRAPD( err, mapTileDatabase = CLookupMapTileDatabase::NewL(
+ KMapTileLookupDatabaseName ) );
+
+ if ( KErrNone == err )
+ {
+ TRAP( err,aNoOfAddress = mapTileDatabase->FindNumberOfAddressL(id) );
+ MYLOCLOGSTRING1("no of address FindNumberOfAddressL returns - %d ", err );
+ if ( KErrNone == err )
+ {
+ aLookupItem.iUid = id;
+ switch (sourceType)
+ {
+ case AddressPlain:
+ aLookupItem.iSource = ESourceCalendar;
+ break;
+ case AddressPreference:
+ aLookupItem.iSource = ESourceContactsPref;
+ break;
+ case AddressWork:
+ aLookupItem.iSource = ESourceContactsWork;
+ break;
+ case AddressHome:
+ aLookupItem.iSource = ESourceContactsHome;
+ break;
+ default:
+ break;
+ }
+
+ TRAP( err , mapTileDatabase->FindEntryL( aLookupItem ) );
+
+ MYLOCLOGSTRING1("getMapTileImage FindEntryL returns - %d ", err );
+ }
+ //delet the database instance
+ delete mapTileDatabase;
+
+ }
+
+ return err;
+}
+// End of file