--- a/locationmanager/locationtrail/src/clocationrecord.cpp Wed Sep 15 12:40:59 2010 +0300
+++ b/locationmanager/locationtrail/src/clocationrecord.cpp Wed Oct 13 15:02:02 2010 +0300
@@ -18,12 +18,6 @@
#include <e32cmn.h>
#include <lbserrors.h>
#include <lbssatellite.h>
-#include <ecom.h>
-#include <centralrepository.h>
-#include <hwrmpowerstatesdkpskeys.h>
-#ifdef LOC_GEOTAGGING_CELLID
-#include <lbslocationinfo.h>
-#endif //LOC_GEOTAGGING_CELLID
#include "rlocationtrail.h"
#include "clocationrecord.h"
@@ -32,47 +26,30 @@
#include "locationtraildefs.h"
#include "locationtrailpskeys.h"
#include "mdeconstants.h"
-
+#include <centralrepository.h>
+#include <hwrmpowerstatesdkpskeys.h>
using namespace MdeConstants;
-const TUint KNetQueryBit = 1; // 1 bit
-const TUint KDownloadMediaFile = 2; // 2 bit
-const TUint KSnapMediaFile = 4; // 3 bit
-const TUint KLocationQueryInProgress = 1; // 1 bit
-#ifdef LOC_REVERSEGEOCODE
-const TUint KReverseGeoCodingInProgress = 2; // 2 bit
-_LIT ( KCountry, "country:"); // country:india
-_LIT ( KCity, "city:"); // city:bangalore|country:india
-#endif
-const TUint KSnapGeoConvertInProgress = 4; // 3 bit
-#ifdef LOC_GEOTAGGING_CELLID
-const TUint KSnapGeoConvertInPendingState = 8; // 4 bit
-#endif
-
-
-
// --------------------------------------------------------------------------
// CLocationRecord::NewL
// --------------------------------------------------------------------------
//
-EXPORT_C CLocationRecord* CLocationRecord::NewL(MGeoTaggerObserver& aGeoTaggerObserver,
- RMobilePhone& aPhone)
+EXPORT_C CLocationRecord* CLocationRecord::NewL()
{
- CLocationRecord* self = new (ELeave) CLocationRecord(aGeoTaggerObserver, aPhone);
+ CLocationRecord* self = new (ELeave) CLocationRecord();
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop( self );
return self;
}
-
+
// --------------------------------------------------------------------------
// CLocationRecord::CLocationRecord
// --------------------------------------------------------------------------
//
-CLocationRecord::CLocationRecord(MGeoTaggerObserver& aGeoTaggerObserver,
- RMobilePhone& aPhone)
+CLocationRecord::CLocationRecord()
: iNetworkInfoTimer( NULL ),
iState( RLocationTrail::ETrailStopped ),
iTrailCaptureSetting( RLocationTrail::ECaptureAll ),
@@ -80,30 +57,7 @@
iRequestCurrentLoc( EFalse ),
iTrailStarted( EFalse ),
iLastGPSFixState( EFalse ),
- iLocationQuery(NULL),
- iNetLocationQuery(NULL),
- iRemapState( ERemapProgressNone),
- iNamespaceDef(NULL),
- iLocationObjectDef(NULL),
- iLatitudeDef(NULL),
- iLongitudeDef(NULL),
- iAltitudeDef(NULL),
- iMediaHandlingFlag(0),
- iPhone(aPhone),
- iGpsDataAvailableFlag(EFalse),
- iGeoTaggerObserver(aGeoTaggerObserver)
-#ifdef LOC_GEOTAGGING_CELLID
- ,iGeoConverter(NULL)
- , iConvertRetry(ETrue)
-#endif
-#ifdef LOC_REVERSEGEOCODE
- ,iConnectionOption(ESilent)
- ,iImageQuery(NULL)
- ,iTagQuery(NULL)
- ,iTagCreator( NULL )
- ,iLastReverseGeocodeFails(EFalse)
- ,iRevGeocoderPlugin( NULL )
-#endif
+ iLastLocationId( 0 )
{
iMaxTrailSize = KMaxTrailLength / KUpdateInterval;
}
@@ -114,7 +68,6 @@
//
void CLocationRecord::ConstructL()
{
- LOG( "CLocationRecord::ConstructL(), begin" );
const TInt KMillion = 1000000;
TInt err = iProperty.Define( KPSUidLocationTrail, KLocationTrailState, RProperty::EInt );
if ( err != KErrNone && err != KErrAlreadyExists )
@@ -124,32 +77,18 @@
User::LeaveIfError( iProperty.Set( KPSUidLocationTrail,
KLocationTrailState, (TInt) RLocationTrail::ETrailStopped ) );
-
- iNetworkInfoChangeListener = CNetworkInfo::NewL( this );
+ iNetworkInfo = CNetworkInfo::NewL( this );
iPositionInfo = CPositionInfo::NewL( this );
iRemapper = CLocationRemappingAO::NewL();
iNetworkInfoTimer = CPeriodic::NewL( CActive::EPriorityStandard );
-
-#ifdef LOC_REVERSEGEOCODE
- iTagCreator = CTagCreator::NewL();
-
- TInt pluginerr = KErrNone;
- TRAP(pluginerr,iRevGeocoderPlugin = CReverseGeoCoderPlugin::NewL());
-
- if(pluginerr == KErrNone)
- {
- iRevGeocoderPlugin->AddObserverL(*this);
- }
- #endif
-
-
+
TInt interval( 0 );
TRAP(err, ReadCenRepValueL(KIntervalKey, interval));
- LOG1("Cenrep interval value:%d", interval);
+ LOG1("CLocationManagerServer::ConstructL, cenrep interval value:%d", interval);
if (interval == 0 || err != KErrNone )
{
- LOG1("Cenrep interval err:%d", err);
+ LOG1("CLocationManagerServer::ConstructL, cenrep interval err:%d", err);
iInterval = KUpdateInterval;
}
else
@@ -158,25 +97,14 @@
}
TRAP(err, ReadCenRepValueL(KLocationDeltaKey, iLocationDelta));
- LOG1("Location delta value:%d", iLocationDelta);
+ LOG1("CLocationManagerServer::ConstructL, location delta value:%d", iLocationDelta);
if (iLocationDelta == 0)
{
- LOG1("Location delta err:%d", err);
+ LOG1("CLocationManagerServer::ConstructL, location delta err:%d", err);
iLocationDelta = KLocationDelta;
}
- iLastMediaItem.iFlag = 0;
- iLastMediaItem.iLocationId = 0;
-#ifdef LOC_REVERSEGEOCODE
- iLastMediaItem.iCityTagId= 0;
- iLastMediaItem.iCountryTagId = 0;
- iLastLocationItem.iFlag = 0;
- iLastLocationItem.iCityTagId= 0;
- iLastLocationItem.iCountryTagId = 0;
- iLastLocationItem.iLocationId = 0;
-#endif
- LOG( "CLocationRecord::ConstructL(), end" );
}
// --------------------------------------------------------------------------
@@ -185,75 +113,19 @@
//
EXPORT_C CLocationRecord::~CLocationRecord()
{
- LOG( "CLocationRecord::~CLocationRecord(), begin" );
Stop();
iProperty.Delete( KPSUidLocationTrail, KLocationTrailState );
iProperty.Close();
- iTrail.ResetAndDestroy();
iTrail.Close();
- iMediaItems.ResetAndDestroy();
- iMediaItems.Close();
-#ifdef LOC_REVERSEGEOCODE
- iLocationItems.ResetAndDestroy();
- iLocationItems.Close();
-#endif
- delete iNetworkInfoChangeListener;
- iNetworkInfoChangeListener = NULL;
+
+ delete iNetworkInfo;
delete iPositionInfo;
- iPositionInfo = NULL;
delete iNetworkInfoTimer;
- iNetworkInfoTimer = NULL;
-#ifdef LOC_GEOTAGGING_CELLID
- if(iGeoConverter)
- {
- delete iGeoConverter;
- iGeoConverter = NULL;
- }
-#endif
- if (iRemapper)
+ if (iRemapper)
{
iRemapper->StopRemapping();
delete iRemapper;
- iRemapper = NULL;
}
- if(iLocationQuery)
- {
- iLocationQuery->RemoveObserver(*this);
- iLocationQuery->Cancel();
- delete iLocationQuery;
- iLocationQuery = NULL;
- }
-
-if(iNetLocationQuery)
- {
- iNetLocationQuery->RemoveObserver(*this);
- iNetLocationQuery->Cancel();
- delete iNetLocationQuery;
- iNetLocationQuery = NULL;
- }
-
-
-#ifdef LOC_REVERSEGEOCODE
- if(iImageQuery)
- {
- iImageQuery->RemoveObserver(*this);
- iImageQuery->Cancel();
- delete iImageQuery;
- iImageQuery = NULL;
- }
- if(iTagQuery)
- {
- iTagQuery->RemoveObserver(*this);
- iTagQuery->Cancel();
- delete iTagQuery;
- iTagQuery = NULL;
- }
- delete iTagCreator;
- // set the pointer to NULL, ECOM will destroy object.
- delete iRevGeocoderPlugin;
- iRevGeocoderPlugin = NULL;
-#endif
- LOG( "CLocationRecord::~CLocationRecord(), end" );
}
// --------------------------------------------------------------------------
@@ -273,17 +145,12 @@
{
LOG( "CLocationRecord::StartL(), begin" );
iTrailCaptureSetting = aCaptureSetting;
- iGpsDataAvailableFlag = EFalse;
if ( aCaptureSetting == RLocationTrail::ECaptureAll && !iPositionInfo->IsActive() )
{
if( iState == RLocationTrail::ETrailStopped )
{
- iTrail.ResetAndDestroy();
+ iTrail.Reset();
}
- // Capture at least one location with n/w info else we wouldn't be able to tag the immediate taken photograph
- // incase LBS didn't provide any valid position data. Without this there may be a leave from GetLocationByTimeL
- // method while calling this from LocationSnapshotL method
- UpdateNetworkInfo( this );
iPositionInfo->StartL( aCaptureSetting, iInterval );
}
else if ( aCaptureSetting == RLocationTrail::ECaptureNetworkInfo )
@@ -300,9 +167,11 @@
StartTimerL();
}
- iTrailStarted = ETrue;
+ iLastLocationId = 0;
+
SetCurrentState( RLocationTrail::ETrailStarting );
+ iTrailStarted = ETrue;
LOG( "CLocationRecord::StartL(), end" );
}
@@ -314,8 +183,8 @@
{
LOG( "CLocationRecord::StopL(), begin" );
iPositionInfo->Stop();
- iGpsDataAvailableFlag = EFalse;
iTrailStarted = EFalse;
+
if ( iNetworkInfoTimer && iNetworkInfoTimer->IsActive() )
{
iNetworkInfoTimer->Cancel();
@@ -362,14 +231,14 @@
TTimeIntervalSeconds nextInterval;
for ( TInt i(iTrail.Count()-1) ; i >= 0 && !posFound ; i-- )
{
- TInt err = iTrail[i]->iTimeStamp.SecondsFrom( aTime, interval );
+ TInt err = iTrail[i].iTimeStamp.SecondsFrom( aTime, interval );
TInt timeDiff = Abs( interval.Int() );
#ifdef _DEBUG
- LOG1( "CLocationRecord::GetLocationByTimeL - Trail timestamp: %Ld", iTrail[i]->iTimeStamp.Int64() );
+ LOG1( "CLocationRecord::GetLocationByTimeL - Trail timestamp: %Ld", iTrail[i].iTimeStamp.Int64() );
TBuf<DateTimeStrMaxLength> str;
- iTrail[i]->iTimeStamp.FormatL( str, KDateTimeFormat );
+ iTrail[i].iTimeStamp.FormatL( str, KDateTimeFormat );
LOG1( "CLocationRecord::GetLocationByTimeL - Trail timestamp: %S", &str );
LOG1( "CLocationRecord::GetLocationByTimeL - timeDiff: %d", timeDiff );
#endif
@@ -379,25 +248,25 @@
// The nearest time is in iTrail[i] or in iTrail[i-1].
if ( i > 0 )
{
- iTrail[i-1]->iTimeStamp.SecondsFrom( aTime, nextInterval );
+ iTrail[i-1].iTimeStamp.SecondsFrom( aTime, nextInterval );
TInt nextDiff = Abs( nextInterval.Int() );
if ( nextDiff < timeDiff )
{
- aLocationData = iTrail[i-1]->iLocationData;
- aState = iTrail[i-1]->iTrailState;
+ aLocationData = iTrail[i-1].iLocationData;
+ aState = iTrail[i-1].iTrailState;
}
else
{
- aLocationData = iTrail[i]->iLocationData;
- aState = iTrail[i]->iTrailState;
+ aLocationData = iTrail[i].iLocationData;
+ aState = iTrail[i].iTrailState;
}
}
else
{
- aLocationData = iTrail[i]->iLocationData;
- aState = iTrail[i]->iTrailState;
+ aLocationData = iTrail[i].iLocationData;
+ aState = iTrail[i].iTrailState;
}
posFound = ETrue;
}
@@ -415,15 +284,11 @@
//
EXPORT_C void CLocationRecord::RequestLocationL()
{
- LOG( "CLocationRecord::RequestLocationL(), begin" );
iRequestCurrentLoc = ETrue;
if ( iTrailCaptureSetting != RLocationTrail::ECaptureNetworkInfo &&
!iPositionInfo->IsActive() )
{
iPositionInfo->StartL( iTrailCaptureSetting, iInterval );
- SetCurrentState( RLocationTrail::ETrailStarting );
-
- iTrailStarted = ETrue;
}
else if ( iTrailCaptureSetting == RLocationTrail::ECaptureNetworkInfo )
{
@@ -433,7 +298,6 @@
iObserver->CurrentLocation( posInfo, network, KErrNone );
iRequestCurrentLoc = EFalse;
}
- LOG( "CLocationRecord::RequestLocationL(), end" );
}
// --------------------------------------------------------------------------
@@ -442,14 +306,11 @@
//
EXPORT_C void CLocationRecord::CancelLocationRequest()
{
- LOG( "CLocationRecord::CancelLocationRequest(), begin" );
iRequestCurrentLoc = EFalse;
if ( !iTrailStarted )
{
- iGpsDataAvailableFlag = EFalse;
iPositionInfo->Stop();
}
- LOG( "CLocationRecord::CancelLocationRequest(), end" );
}
@@ -490,7 +351,6 @@
void CLocationRecord::Position( const TPositionInfo& aPositionInfo,
const TInt aError )
{
- LOG( "CLocationRecord::Position(), begin" );
const TPositionSatelliteInfo& positionSatelliteInfo =
static_cast<const TPositionSatelliteInfo&>(aPositionInfo);
@@ -498,59 +358,56 @@
{
HandleLocationRequest( positionSatelliteInfo, aError );
}
-
- iGpsDataAvailableFlag = EFalse;
+ if( iState == RLocationTrail::ETrailStopped )
+ {
+ LOG("CLocationRecord::Position - trail stopped");
+ return;
+ }
- if ( !iTrailStarted || iState == RLocationTrail::ETrailStopped)
+ if ( !iTrailStarted )
{
- LOG("CLocationRecord::Position(), trail not started/stopped");
- iPositionInfo->Stop();
+ iPositionInfo->NextPosition();
return;
}
- // all cases store the location..
- StoreLocation( positionSatelliteInfo );
-
- if ( RemappingNeeded() )
- {
- //either network or gps signal is available
- if ( ( iNetwork.iCellId != 0 &&
- iNetwork.iCountryCode.Length() != 0 &&
- iNetwork.iNetworkId.Length() != 0 ) || ( aError == KErrNone ) )
- {
- //no error means gps info available
- TRAP_IGNORE( RemapObjectsL( aError == KErrNone ) );
- }
- }
switch ( aError )
{
case KPositionPartialUpdate: // fall through
case KPositionQualityLoss:
{
// Location is stored, even if it may not be valid.
- LOG("CLocationRecord::Position(), Partial update");
+ StoreLocation( positionSatelliteInfo );
+ LOG("CLocationRecord::Position - partial update");
if ( iState != RLocationTrail::EWaitingGPSData &&
iState != RLocationTrail::ETrailStopping )
{
SetCurrentState( RLocationTrail::EWaitingGPSData );
- LOG("CLocationRecord::Position(), Trail waiting for gps");
+ LOG("CLocationRecord::Position trail waiting for gps");
}
break;
}
case KErrNone:
{
- LOG("CLocationRecord::Position(), Good GPS coordinates");
- iGpsDataAvailableFlag = ETrue;
+ StoreLocation( positionSatelliteInfo );
+ LOG("CLocationRecord::Position - good GPS coordinates");
if ( iState != RLocationTrail::ETrailStarted )
{
if ( iRemapper )
{
- LOG("CLocationRecord::Position(), Start remapping");
+ LOG("CLocationRecord::Position start remapping");
+ iLastLocationId = 0;
+ TBool createLocation = iRemapper->CheckQueue();
+ if( createLocation )
+ {
+ TRAP_IGNORE(
+ TItemId locationId = DoCreateLocationL( iNewItem.iLocationData );
+ iRemapper->UpdateRelationsL( locationId );
+ )
+ }
iRemapper->StartRemappingObjects( iNewItem.iLocationData );
if( iObserver->WaitForPositioningStopTimeout() && !RemappingNeeded() )
{
iObserver->RemapedCompleted();
- iPositionInfo->HandleRemapComplete();
return;
}
@@ -558,135 +415,47 @@
if ( iState != RLocationTrail::ETrailStopping )
{
SetCurrentState( RLocationTrail::ETrailStarted );
- LOG("Trail started");
+ LOG("CLocationRecord::Position trail started");
}
}
break;
}
default:
{
- LOG1("CLocationRecord::Position(), Searching GPS, aError %d", aError );
+ StoreLocation( positionSatelliteInfo );
+ LOG1("CLocationRecord::Position - searching GPS, aError %d", aError );
if ( iState != RLocationTrail::ESearchingGPS &&
iState != RLocationTrail::ETrailStopping )
{
SetCurrentState( RLocationTrail::ESearchingGPS );
- LOG("Trail searching gps");
+ LOG("CLocationRecord::Position trail searching gps");
}
break;
}
}
TBool fixState = CheckGPSFix( positionSatelliteInfo );
- LOG1( "CLocationRecord::Position(), fixState %d", fixState );
- LOG1( "CLocationRecord::Position(), iLastGPSFixState %d", iLastGPSFixState );
+ LOG1( "CLocationRecord::Position fixState %d", fixState );
+ LOG1( "CLocationRecord::Position iLastGPSFixState %d", iLastGPSFixState );
if ( iObserver && iLastGPSFixState != fixState )
{
- LOG("CLocationRecord::Position(), Quality changed");
+ LOG("CLocationRecord::Position quality changed");
iObserver->GPSSignalQualityChanged( positionSatelliteInfo );
}
iLastGPSFixState = fixState;
- LOG( "CLocationRecord::Position(), end" );
- }
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::RemapObjectsL
-// Remaps the location objects when GPS is available
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::RemapObjectsL( TBool aGPSInfoAvailable )
- {
- LOG( "CLocationRecord::RemapObjectsL(), begin" );
- TBool createLocation = EFalse;
-
- if (iRemapper)
- {
- createLocation = iRemapper->CheckQueue();
- }
-
- if ( !createLocation || iRemapper == NULL)
- {
- return;
- }
-
-
- if ( aGPSInfoAvailable )
- {
- TItemId locationId = DoCreateLocationL( iNewItem.iLocationData );
- iRemapper->UpdateRelationsL( locationId );
-#ifdef LOC_REVERSEGEOCODE
- if(!(iMediaHandlingFlag & KReverseGeoCodingInProgress))
- {
- iRemapState = ERemapRevGeoCodeInProgress;
- //Find the address by coordinate, results a call to ReverseGeocodeComplete()
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
-
- if(iRevGeocoderPlugin)
- {
- iRevGeocoderPlugin->GetAddressByCoordinateL( iNewItem.iLocationData.iPosition, iConnectionOption );
- }
- }
- else
- {
- // make this as pending state so that on rev geo code complete
- // it will take the priority over the next item within the location
- // item in location queue.
- iRemapState = ERemapRevGeoCodePending;
- }
-#endif //LOC_REVERSEGEOCODE
- }
- else
- {
- //call location m/w API to convert cell ID to lat, long
-#ifdef LOC_GEOTAGGING_CELLID
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0)
- {
- iRemapState = ERemapNwGeoConverterPending;
- }
- else
- {
- // go for cell id based geo coding.
- iRemapState = ERemapNwGeoConverterInProgress;
- if(iGeoConverter == NULL)
- {
- iGeoConverter = CGeoConverter::NewL(*this);
- }
- iGeoConverter->ConvertL(iNewItem.iLocationData.iNetworkInfo);
- iMediaHandlingFlag |= KSnapGeoConvertInProgress;
- }
-#endif
- }
-#ifdef LOC_REVERSEGEOCODE
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0 ||
- (iMediaHandlingFlag & KReverseGeoCodingInProgress) > 0)
-#else
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0 )
-#endif //LOC_REVERSEGEOCODE
- {
- // stop n/w info change listener, since device may connect to n/w
- // and local trail will receive so many call backs on current n/w info change.
- iNetworkInfoChangeListener->StopNwInfoChangeNotifier();
- }
- else
- {
- iNetworkInfoChangeListener->StartNwInfoChangeNotifier();
- }
- LOG( "CLocationRecord::RemapObjectsL(), end" );
-
+ iPositionInfo->NextPosition();
}
TBool CLocationRecord::CheckGPSFix( const TPositionSatelliteInfo& aSatelliteInfo )
{
- LOG("CLocationRecord::CheckGPSFix, begin");
TPosition position;
aSatelliteInfo.GetPosition( position );
- LOG1( "latitude %f", position.Latitude() );
- LOG1( "longitude %f", position.Longitude() );
+ LOG1( "CLocationRecord::CheckGPSFix latitude %f", position.Latitude() );
+ LOG1( "CLocationRecord::CheckGPSFix longitude %f", position.Longitude() );
TBool ret = ( Math::IsNaN(position.Latitude()) || Math::IsNaN(position.Longitude()) )
? EFalse : ETrue;
- LOG1("CLocationRecord::CheckGPSFix, end. Ret - %d", ret);
return ret;
}
@@ -698,7 +467,7 @@
void CLocationRecord::NetworkInfo( const CTelephony::TNetworkInfoV1 &aNetworkInfo,
const TInt aError )
{
- LOG("CLocationRecord::NetworkInfo, begin");
+ LOG("CLocationRecord::NetworkInfo");
if ( aError == KErrNone )
{
LOG("CLocationRecord::NetworkInfo - KErrNone");
@@ -707,12 +476,10 @@
{
iNetwork.iLocationAreaCode = 0;
}
-#ifdef LOC_GEOTAGGING_CELLID
if ( iState == RLocationTrail::ETrailStarting && iTrailStarted )
{
SetCurrentState( RLocationTrail::ETrailStarted );
}
-#endif
}
else
{
@@ -725,17 +492,6 @@
iNetwork.iCountryCode.Zero();
iNetwork.iNetworkId.Zero();
}
- LOG( "CLocationRecord::NetworkInfo(), end" );
- }
-
-// --------------------------------------------------------------------------
-// CLocationRecord::GetMobilePhone4NwInfo
-// --------------------------------------------------------------------------
-//
-RMobilePhone& CLocationRecord::GetMobilePhone4NwInfo()
- {
- LOG( "CLocationRecord::GetMobilePhone4NwInfo()" );
- return iPhone;
}
// --------------------------------------------------------------------------
@@ -744,7 +500,6 @@
//
void CLocationRecord::StoreLocation( const TPositionSatelliteInfo& aSatelliteInfo )
{
- LOG( "CLocationRecord::StoreLocation(), begin" );
aSatelliteInfo.GetPosition( iNewItem.iLocationData.iPosition );
aSatelliteInfo.GetCourse( iNewItem.iLocationData.iCourse );
iNewItem.iLocationData.iSatellites = aSatelliteInfo.NumSatellitesUsed();
@@ -756,13 +511,7 @@
iNewItem.iTimeStamp.UniversalTime();
iNewItem.iTrailState = iState;
- TLocationTrailItem *item = new TLocationTrailItem();
- TInt error = KErrNone;
- if(item != NULL)
- {
- *item = iNewItem;
- error = iTrail.Append( item );
- }
+ TInt error = iTrail.Append( iNewItem );
// If appending an item to the trail fails because of OOM, remove oldest trail items
// until the new item fits or there's only one item left in the trail.
@@ -770,22 +519,18 @@
{
LOG("CLocationRecord::StoreLocation - Out of memory! Shortening trail!");
iTrail.Remove( 0 );
- error = iTrail.Append( item );
+ error = iTrail.Append( iNewItem );
}
if ( iTrail.Count() > iMaxTrailSize )
{
- item = iTrail[0];
iTrail.Remove( 0 );
- iTrail.Compress();
- delete item;
}
if( iAddObserver )
{
iAddObserver->LocationAdded( iNewItem, aSatelliteInfo );
}
- LOG( "CLocationRecord::StoreLocation(), end" );
}
// --------------------------------------------------------------------------
@@ -796,36 +541,7 @@
{
LOG1( "CLocationRecord::SetCurrentState(), begin, state:%d", aState );
iState = aState;
- if( iTrailStarted )
- {
- // Set the property only when trail is started to avoid icon flickering and wrong icon update in UI
- if( iGpsDataAvailableFlag
-#ifdef LOC_GEOTAGGING_CELLID
- || ( iNetwork.iCellId > 0 &&
- ((iNetwork.iLocationAreaCode == 0 && iNetwork.iAccess == CTelephony::ENetworkAccessUtran) || // 3G
- (iNetwork.iLocationAreaCode > 0 && (iNetwork.iAccess == CTelephony::ENetworkAccessGsm || // 2G
- iNetwork.iAccess == CTelephony::ENetworkAccessGsmCompact))) &&
- iNetwork.iCountryCode.Length() > 0 &&
- iNetwork.iNetworkId.Length() > 0 )
-#endif // LOC_GEOTAGGING_CELLID
- )
- {
- // set the value 3 to have Geo tag available icon else not available.
- iProperty.Set( KPSUidLocationTrail, KLocationTrailState,
- (TInt) RLocationTrail::ETrailStarted );
- }
- else
- {
- iProperty.Set( KPSUidLocationTrail, KLocationTrailState,
- (TInt) RLocationTrail::ETrailStopped );
- }
- }
- else
- {
- iProperty.Set( KPSUidLocationTrail, KLocationTrailState,
- (TInt) RLocationTrail::ETrailStopped );
- }
-
+ iProperty.Set( KPSUidLocationTrail, KLocationTrailState, (TInt) aState );
if ( iObserver )
{
iObserver->LocationTrailStateChange();
@@ -840,7 +556,6 @@
void CLocationRecord::HandleLocationRequest( const TPositionSatelliteInfo& aSatelliteInfo,
const TInt aError )
{
- LOG( "CLocationRecord::HandleLocationRequest(), begin" );
CTelephony::TNetworkInfoV1 network = CTelephony::TNetworkInfoV1();
if ( aError == KErrNone )
{
@@ -849,7 +564,6 @@
iRequestCurrentLoc = EFalse;
if ( !iTrailStarted )
{
- iGpsDataAvailableFlag = EFalse;
iPositionInfo->Stop();
}
}
@@ -863,19 +577,12 @@
iLocationCounter = 0;
if ( !iTrailStarted )
{
- iGpsDataAvailableFlag = EFalse;
iPositionInfo->Stop();
}
}
- }
- LOG( "CLocationRecord::HandleLocationRequest(), end" );
+ }
}
-
-// --------------------------------------------------------------------------
-// CLocationRecord::UpdateNetworkInfo
-// --------------------------------------------------------------------------
-//
TInt CLocationRecord::UpdateNetworkInfo( TAny* aAny )
{
TPositionSatelliteInfo nullPositionInfo;
@@ -888,185 +595,124 @@
EXPORT_C void CLocationRecord::CreateLocationObjectL( const TLocationData& aLocationData,
const TUint& aObjectId )
{
- LOG( "CLocationRecord::CreateLocationObjectL(), begin" );
- TLocationSnapshotItem* newItem = new (ELeave) TLocationSnapshotItem;
- newItem->iObjectId = aObjectId;
- newItem->iLocationData = aLocationData;
-
- // for downloaded files, network informations are not valid.
- // Do location handling only based on lat/lon
- // all all n/w information to invalid value.
- newItem->iLocationData.iNetworkInfo.iCellId = 0;
- newItem->iLocationData.iNetworkInfo.iAccess = CTelephony::ENetworkAccessUnknown;
- newItem->iLocationData.iNetworkInfo.iLocationAreaCode = 0;
- newItem->iLocationData.iNetworkInfo.iCountryCode.Zero();
- newItem->iLocationData.iNetworkInfo.iNetworkId.Zero();
- newItem->iFlag = KDownloadMediaFile;
-
- iMediaItems.Append( newItem );
- FindLocationFromDBL();
- GeoTaggingCompleted();
- LOG( "CLocationRecord::CreateLocationObjectL(), end" );
-
+ TItemId locationId = DoCreateLocationL( aLocationData );
+ CreateRelationL( aObjectId, locationId );
}
-// --------------------------------------------------------------------------
-// CLocationRecord::LocationSnapshotL
-// --------------------------------------------------------------------------
-//
+
EXPORT_C void CLocationRecord::LocationSnapshotL( const TUint& aObjectId )
{
- LOG( "CLocationRecord::LocationSnapshotL(), begin" );
+ LOG("CLocationRecord::LocationSnapshotL");
+
TBool previousMatch = EFalse;
+ CMdENamespaceDef& namespaceDef = iMdeSession->GetDefaultNamespaceDefL();
// get locationdata from trail with object time
TTime timestamp = GetMdeObjectTimeL( aObjectId );
TLocationData locationData;
TLocTrailState state;
- TRAPD(err, GetLocationByTimeL( timestamp, locationData, state ));
- if(err != KErrNone && iTrailStarted)
- {
- // Execution shouldn't come over here.
- // Handling error case in worst sceenario..
- StartL(iTrailCaptureSetting);
- // this case may apprear, when cache data is not within the delta limit because someone call stop trail.
- // sceenario, take photograph, then stop taking for sometime, again take photograph.
- // during this time, if there is no change in position (because someone stop trail) and n/w, then cache has old value.
- // go with the n/w based.
- LOG( "Old trail cache. go for n/w based." );
- UpdateNetworkInfo( this );
- // again read the location.
- GetLocationByTimeL( timestamp, locationData, state );
- }
- TLocationSnapshotItem* newItem = new (ELeave) TLocationSnapshotItem;
- newItem->iObjectId = aObjectId;
- newItem->iLocationData = locationData;
- newItem->iFlag = KSnapMediaFile;
-
- iMediaItems.Append( newItem );
+ GetLocationByTimeL( timestamp, locationData, state );
+
+ iObjectId = aObjectId;
+ iLocationData = locationData;
- TItemId lastLocationId = 0;
- if ( (iLastMediaItem.iFlag & KSnapMediaFile) > 0)
- {
- lastLocationId = iLastMediaItem.iLocationId;
- }
-
- CTelephony::TNetworkInfoV1* net = &locationData.iNetworkInfo;
// capture only network data
if ( iTrailCaptureSetting == RLocationTrail::ECaptureNetworkInfo )
{
- if ( net->iCellId == 0 &&
- net->iLocationAreaCode == 0 &&
- net->iCountryCode.Length() == 0 &&
- net->iNetworkId.Length() == 0 )
- {
- // no n/w info... put it into remap.
- // remove the last appended element.
- LOG("CLocationRecord::LocationSnapshotL(), No network info (offline mode + no GPS fix), keep for remapping");
- TRemapItem remapItem;
- remapItem.iObjectId = aObjectId;
- remapItem.iTime = timestamp;
- iRemapper->Append( remapItem );
+ CTelephony::TNetworkInfoV1* net = &locationData.iNetworkInfo;
- TLocationSnapshotItem* firstPtr = iMediaItems[iMediaItems.Count() - 1];
- iMediaItems.Remove(iMediaItems.Count() - 1);
- iMediaItems.Compress();
- if( firstPtr == newItem)
- {
- newItem = NULL;
- }
- delete firstPtr;
- firstPtr = NULL;
- }
- else
- {
- // n/w info available
- NetworkInfoSnapshotL();
- }
- }
- else if ( Math::IsNaN( locationData.iPosition.Latitude() ) &&
- Math::IsNaN( locationData.iPosition.Longitude() ))
- {
- LOG("CLocationRecord::LocationSnapshotL(), coordinates empty with or without cellular info")
- // coordinates empty, with or without cellular info
-
if ( net->iCellId == 0 &&
net->iLocationAreaCode == 0 &&
net->iCountryCode.Length() == 0 &&
net->iNetworkId.Length() == 0 )
{
- LOG("CLocationRecord::LocationSnapshotL(), No network info (offline mode + no GPS fix), keep for remapping");
- TRemapItem remapItem;
- remapItem.iObjectId = aObjectId;
- remapItem.iTime = timestamp;
- iRemapper->Append( remapItem );
+ // nothing to do
+ LOG("CLocationRecord::LocationSnapshotL - no network info available");
+ }
+ else if ( iLastLocationId != 0 )
+ {
+ CTelephony::TNetworkInfoV1* lastnet = &iLastLocation.iNetworkInfo;
+
+ // compare to previous network info
+ TItemId locationId = iLastLocationId;
+ if ( lastnet->iCellId != net->iCellId ||
+ lastnet->iLocationAreaCode != net->iLocationAreaCode ||
+ lastnet->iCountryCode != net->iCountryCode ||
+ lastnet->iNetworkId != net->iNetworkId )
+ {
+ LOG("CLocationRecord::LocationSnapshotL - network info changed");
+ locationId = DoCreateLocationL( locationData );
+ }
+ CreateRelationL( aObjectId, locationId );
+ }
+ else
+ {
+ // new location
+ TItemId locationId = DoCreateLocationL( locationData );
+ CreateRelationL( aObjectId, locationId );
+ }
+ return;
+ }
+
+ // coordinates empty (will be remapped)
+ if ( Math::IsNaN( locationData.iPosition.Latitude() ) &&
+ Math::IsNaN( locationData.iPosition.Longitude() ))
+ {
+ TRemapItem remapItem;
+ remapItem.iObjectId = aObjectId;
+ remapItem.iTime = timestamp;
- TLocationSnapshotItem* firstPtr = iMediaItems[iMediaItems.Count() - 1];
- iMediaItems.Remove(iMediaItems.Count() - 1);
- iMediaItems.Compress();
- if( firstPtr == newItem)
- {
- newItem = NULL;
- }
- delete firstPtr;
- firstPtr = NULL;
+ CTelephony::TNetworkInfoV1* net = &locationData.iNetworkInfo;
+
+ // no network info (offline mode + no GPS fix)
+ if ( net->iCellId == 0 &&
+ net->iLocationAreaCode == 0 &&
+ net->iCountryCode.Length() == 0 &&
+ net->iNetworkId.Length() == 0 )
+ {
+ LOG("CLocationRecord::LocationSnapshotL - empty remap item created");
}
// check match for last created locationobject
-#ifdef LOC_REVERSEGEOCODE
- else if ( (iLastMediaItem.iFlag & KSnapMediaFile) > 0 &&
- iLastMediaItem.iCountryTagId > 0)
-#else
- else if ( (iLastMediaItem.iFlag & KSnapMediaFile) > 0)
-#endif //LOC_REVERSEGEOCODE
+ else if ( iLastLocationId != 0 )
{
- LOG("CLocationRecord::LocationSnapshotL(), last created locationobject match" );
- TLocationData lastLocationData = iLastMediaItem.iLocationData;
- CTelephony::TNetworkInfoV1* lastnet = &lastLocationData.iNetworkInfo;
+ TItemId locationId;
+ CTelephony::TNetworkInfoV1* lastnet = &iLastLocation.iNetworkInfo;
// networkinfo changed from last location
- if ( lastnet->iCellId == net->iCellId &&
- lastnet->iLocationAreaCode == net->iLocationAreaCode &&
- lastnet->iCountryCode == net->iCountryCode &&
- lastnet->iNetworkId == net->iNetworkId )
+ if ( lastnet->iCellId != net->iCellId ||
+ lastnet->iLocationAreaCode != net->iLocationAreaCode ||
+ lastnet->iCountryCode != net->iCountryCode ||
+ lastnet->iNetworkId != net->iNetworkId )
+ {
+ LOG("CLocationRecord::LocationSnapshotL - remap with new network info");
+ locationId = DoCreateLocationL( locationData );
+ }
+ else
{
- // same network.
- previousMatch = ETrue;
- CreateRelationL( aObjectId, lastLocationId );
- // attach same tags associated to last location
-#ifdef LOC_REVERSEGEOCODE
- if ( iLastMediaItem.iCountryTagId ) //found from DB last time
- {
- iTagCreator->AttachTagsL( aObjectId,
- iLastMediaItem.iCountryTagId, iLastMediaItem.iCityTagId );
- }
-#endif //LOC_REVERSEGEOCODE
- // remove the current item.
- TLocationSnapshotItem* firstPtr = iMediaItems[iMediaItems.Count() - 1];
- iMediaItems.Remove(iMediaItems.Count() - 1);
- iMediaItems.Compress();
- if( firstPtr == newItem)
- {
- newItem = NULL;
- }
- delete firstPtr;
- firstPtr = NULL;
+ LOG("CLocationRecord::LocationSnapshotL - remap with previous network info");
+ locationId = iLastLocationId;
}
+ TItemId relationId = CreateRelationL( aObjectId, locationId );
+ remapItem.iLocationId = locationId;
+ remapItem.iRelationId = relationId;
}
-
- if ( newItem && !previousMatch )
- {
- // go for n/w based
- newItem->iFlag |= KNetQueryBit;
- }
+ else
+ {
+ // new location with only network data
+ TItemId locationId = DoCreateLocationL( locationData );
+ TItemId relationId = CreateRelationL( aObjectId, locationId );
+ remapItem.iLocationId = locationId;
+ remapItem.iRelationId = relationId;
+ }
+ iRemapper->Append( remapItem );
+ return;
}
-
+
// valid coordinates found
- else if ( lastLocationId != 0 &&
- ((iLastMediaItem.iFlag & KSnapMediaFile) > 0))
+ if ( iLastLocationId != 0 )
{
- LOG("CLocationRecord::LocationSnapshotL(), valid coordinates found");
- TLocationData lastLocationData = iLastMediaItem.iLocationData;
- CTelephony::TNetworkInfoV1* lastnet = &lastLocationData.iNetworkInfo;
+ CTelephony::TNetworkInfoV1* net = &locationData.iNetworkInfo;
+ CTelephony::TNetworkInfoV1* lastnet = &iLastLocation.iNetworkInfo;
// first check if networkinfo matches last created location
if ( lastnet->iCellId == net->iCellId &&
@@ -1074,75 +720,23 @@
lastnet->iCountryCode == net->iCountryCode &&
lastnet->iNetworkId == net->iNetworkId )
{
+ LOG("CLocationRecord::LocationSnapshotL - network info matches");
// if both locations have valid coordinates, calculate distance between points
- if (
-#ifdef LOC_REVERSEGEOCODE
- !iLastReverseGeocodeFails &&
-#endif //LOC_REVERSEGEOCODE
- !Math::IsNaN( lastLocationData.iPosition.Latitude() ) &&
- !Math::IsNaN( lastLocationData.iPosition.Longitude() ) &&
+ if ( !Math::IsNaN( iLastLocation.iPosition.Latitude() ) &&
+ !Math::IsNaN( iLastLocation.iPosition.Longitude() ) &&
!Math::IsNaN( locationData.iPosition.Latitude() ) &&
!Math::IsNaN( locationData.iPosition.Longitude() ))
{
TReal32 distance;
- TInt err = locationData.iPosition.Distance(lastLocationData.iPosition, distance);
+ TInt err = locationData.iPosition.Distance(iLastLocation.iPosition, distance);
if ( distance < iLocationDelta )
{
- LOG("CLocationRecord::LocationSnapshotL(), location close to the previous one");
+ LOG("CLocationRecord::LocationSnapshotL - location close to the previous one");
previousMatch = ETrue;
- CreateRelationL( aObjectId, lastLocationId );
-
-#ifdef LOC_REVERSEGEOCODE
- // attach same tags associated to last location
- if ( iLastMediaItem.iCountryTagId )
- {
- iTagCreator->AttachTagsL(
- aObjectId, iLastMediaItem.iCountryTagId, iLastMediaItem.iCityTagId );
- TLocationSnapshotItem* firstPtr = iMediaItems[iMediaItems.Count() - 1];
- iMediaItems.Remove(iMediaItems.Count() - 1);
- iMediaItems.Compress();
- if( firstPtr == newItem)
- {
- newItem = NULL;
- }
- delete firstPtr;
- firstPtr = NULL;
- }
- //check newItem for validity
- else if (newItem)
- {
- // country tag not found.. go for reverse geocoding..
- newItem->iLocationId = lastLocationId;
- iLocationItems.Append( newItem );
- iMediaItems.Remove(iMediaItems.Count() - 1);
- iMediaItems.Compress();
-
- if(!(iMediaHandlingFlag & KReverseGeoCodingInProgress))
- {
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
- if(iRevGeocoderPlugin)
- {
- iRevGeocoderPlugin->GetAddressByCoordinateL
- ( iLocationItems[0]->iLocationData.iPosition,
- iConnectionOption);
- }
- }
- }
-#else
- // remove from the queue
- TLocationSnapshotItem* firstPtr = iMediaItems[iMediaItems.Count() - 1];
- iMediaItems.Remove(iMediaItems.Count() - 1);
- iMediaItems.Compress();
- if( firstPtr == newItem)
- {
- newItem = NULL;
- }
- delete firstPtr;
- firstPtr = NULL;
-
-#endif //LOC_REVERSEGEOCODE
+ CreateRelationL( aObjectId, iLastLocationId );
+ LOG("CLocationRecord::CreateLocationObjectL - last location matched");
}
}
}
@@ -1151,192 +745,109 @@
// last location did not match, find existing one from DB
if( !previousMatch )
{
- FindLocationFromDBL();
+ LOG("CLocationRecord::LocationSnapshotL - query location");
+ const TReal64 KMeterInDegrees = 0.000009;
+ const TReal64 KPi = 3.14159265358979;
+ const TReal32 K180Degrees = 180.0;
+
+ TReal64 latitude = locationData.iPosition.Latitude();
+ TReal64 longitude = locationData.iPosition.Longitude();
+ // calculate distance in degrees
+ TReal64 cosine;
+ Math::Cos(cosine, locationData.iPosition.Latitude() * KPi / K180Degrees );
+ TReal64 latDelta = iLocationDelta * KMeterInDegrees;
+ TReal64 lonDelta = latDelta * cosine;
+
+ CMdEObjectDef& locationObjectDef = namespaceDef.GetObjectDefL( Location::KLocationObject );
+
+ CMdEPropertyDef& latitudeDef = locationObjectDef.GetPropertyDefL(
+ Location::KLatitudeProperty );
+ CMdEPropertyDef& longitudeDef = locationObjectDef.GetPropertyDefL(
+ Location::KLongitudeProperty );
+ CMdEPropertyDef& cellIdDef = locationObjectDef.GetPropertyDefL(
+ Location::KCellIdProperty );
+ CMdEPropertyDef& locationCodeDef = locationObjectDef.GetPropertyDefL(
+ Location::KLocationAreaCodeProperty );
+ CMdEPropertyDef& countryCodeDef = locationObjectDef.GetPropertyDefL(
+ Location::KCountryCodeProperty );
+ CMdEPropertyDef& networkCodeDef = locationObjectDef.GetPropertyDefL(
+ Location::KNetworkCodeProperty );
+
+ iLocationQuery = iMdeSession->NewObjectQueryL( namespaceDef, locationObjectDef, this );
+ CMdELogicCondition& cond = iLocationQuery->Conditions();
+ cond.SetOperator( ELogicConditionOperatorAnd );
+
+ LOG1( "CLocationRecord::LocationSnapshotL latitude: %f", latitude);
+ LOG1( "CLocationRecord::LocationSnapshotL latdelta: %f", latDelta);
+ LOG1( "CLocationRecord::LocationSnapshotL longitude: %f", longitude);
+ LOG1( "CLocationRecord::LocationSnapshotL londelta: %f", lonDelta);
+
+ cond.AddPropertyConditionL( latitudeDef,
+ TMdERealBetween( latitude - latDelta, latitude + latDelta ));
+ cond.AddPropertyConditionL( longitudeDef,
+ TMdERealBetween( longitude - lonDelta, longitude + lonDelta ));
+ cond.AddPropertyConditionL( cellIdDef,
+ TMdEUintEqual( locationData.iNetworkInfo.iCellId) );
+ cond.AddPropertyConditionL( locationCodeDef,
+ TMdEUintEqual( locationData.iNetworkInfo.iLocationAreaCode) );
+ cond.AddPropertyConditionL( countryCodeDef, ETextPropertyConditionCompareEquals,
+ locationData.iNetworkInfo.iCountryCode );
+ cond.AddPropertyConditionL( networkCodeDef, ETextPropertyConditionCompareEquals,
+ locationData.iNetworkInfo.iNetworkId );
+
+ iLocationQuery->FindL();
}
- LOG( "CLocationRecord::LocationSnapshotL(), end" );
}
-
-// --------------------------------------------------------------------------
-// CLocationRecord::NetworkInfoSnapshotL
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::NetworkInfoSnapshotL()
- {
- LOG( "CLocationRecord::NetworkInfoSnapshotL(), begin" );
- // n/w info available.. always act on last element within the queue
- TInt lastItemIndex = iMediaItems.Count() - 1;
- if ( lastItemIndex >= 0 &&
- (iMediaItems[lastItemIndex]->iFlag & KSnapMediaFile) > 0 )
- {
- CTelephony::TNetworkInfoV1* net = &iMediaItems[lastItemIndex]->iLocationData.iNetworkInfo;
- //only for snap item.
- if ( (iLastMediaItem.iFlag & KSnapMediaFile) > 0 )
- {
- CTelephony::TNetworkInfoV1* lastnet = &iLastMediaItem.iLocationData.iNetworkInfo;
-
- // compare to previous network info
- TItemId locationId = iLastMediaItem.iLocationId;
- if ( lastnet->iCellId != net->iCellId ||
- lastnet->iLocationAreaCode != net->iLocationAreaCode ||
- lastnet->iCountryCode != net->iCountryCode ||
- lastnet->iNetworkId != net->iNetworkId )
- {
- // last one is not matching.
- // let's check the database of any existing etry.
- iMediaItems[lastItemIndex]->iFlag |= KNetQueryBit;
- }
- else
- {
- // matching with the last entry. Just create a relation.
- CreateRelationL( iMediaItems[lastItemIndex]->iObjectId, locationId );
- TLocationSnapshotItem* firstPtr = iMediaItems[lastItemIndex];
- iMediaItems.Remove(lastItemIndex);
- delete firstPtr;
- }
- }
- else
- {
- // let's check the database of any existing etry.
- iMediaItems[lastItemIndex]->iFlag |= KNetQueryBit;
- }
- }
- LOG( "CLocationRecord::NetworkInfoSnapshotL(), end" );
- }
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::FindLocationFromDBL
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::FindLocationFromDBL()
- {
- LOG( "CLocationRecord::FindLocationFromDBL(), begin" );
- if(((iMediaHandlingFlag & KLocationQueryInProgress)> 0)
- || (iMediaItems.Count() <= 0))
- {
- // query is in progress or queue is empty
- LOG1( "CLocationRecord::FindLocationFromDBL(), Count - %d", iMediaItems.Count() );
- return;
- }
- if ( (iMediaItems[0]->iFlag & KNetQueryBit) > 0 )
- {
- // n/w based.
- FindLocationWithSameNetInfoL();
- return;
- }
-
- const TReal64 KMeterInDegrees = 0.000009;
- const TReal64 KPi = 3.14159265358979;
- const TReal32 K180Degrees = 180.0;
-
- TReal64 latitude = iMediaItems[0]->iLocationData.iPosition.Latitude();
- TReal64 longitude = iMediaItems[0]->iLocationData.iPosition.Longitude();
- // calculate distance in degrees
- TReal64 cosine;
- Math::Cos(cosine, latitude * KPi / K180Degrees );
- TReal64 latDelta = iLocationDelta * KMeterInDegrees;
- TReal64 lonDelta = latDelta * cosine;
-
- //get network related defs
- CMdEPropertyDef& cellIdDef = iLocationObjectDef->GetPropertyDefL(
- Location::KCellIdProperty );
- CMdEPropertyDef& locationCodeDef = iLocationObjectDef->GetPropertyDefL(
- Location::KLocationAreaCodeProperty );
- CMdEPropertyDef& countryCodeDef = iLocationObjectDef->GetPropertyDefL(
- Location::KCountryCodeProperty );
- CMdEPropertyDef& networkCodeDef = iLocationObjectDef->GetPropertyDefL(
- Location::KNetworkCodeProperty );
- if(iLocationQuery)
- {
- iLocationQuery->RemoveObserver(*this);
- iLocationQuery->Cancel();
- delete iLocationQuery;
- iLocationQuery = NULL;
- }
- iLocationQuery = iMdeSession->NewObjectQueryL( *iNamespaceDef, *iLocationObjectDef, this );
-
- CMdELogicCondition& cond = iLocationQuery->Conditions();
- cond.SetOperator( ELogicConditionOperatorAnd );
-
- LOG1( "CLocationRecord::FindLocationFromDBL(), latitude: %f", latitude);
- LOG1( "CLocationRecord::FindLocationFromDBL(), latdelta: %f", latDelta);
- LOG1( "CLocationRecord::FindLocationFromDBL(), longitude: %f", longitude);
- LOG1( "CLocationRecord::FindLocationFromDBL(), londelta: %f", lonDelta);
-
- cond.AddPropertyConditionL( *iLatitudeDef,
- TMdERealBetween( latitude - latDelta, latitude + latDelta ));
- cond.AddPropertyConditionL( *iLongitudeDef,
- TMdERealBetween( longitude - lonDelta, longitude + lonDelta ));
-
- if ( iMediaItems[0]->iLocationData.iNetworkInfo.iCellId > 0 )
- {
- cond.AddPropertyConditionL( cellIdDef,
- TMdEUintEqual( iMediaItems[0]->iLocationData.iNetworkInfo.iCellId) );
- }
- if ( iMediaItems[0]->iLocationData.iNetworkInfo.iLocationAreaCode > 0 )
- {
- cond.AddPropertyConditionL( locationCodeDef,
- TMdEUintEqual( iMediaItems[0]->iLocationData.iNetworkInfo.iLocationAreaCode) );
- }
- if ( iMediaItems[0]->iLocationData.iNetworkInfo.iCountryCode.Length() > 0 )
- {
- cond.AddPropertyConditionL( countryCodeDef, ETextPropertyConditionCompareEquals,
- iMediaItems[0]->iLocationData.iNetworkInfo.iCountryCode );
- }
- if ( iMediaItems[0]->iLocationData.iNetworkInfo.iNetworkId.Length() > 0 )
- {
- cond.AddPropertyConditionL( networkCodeDef, ETextPropertyConditionCompareEquals,
- iMediaItems[0]->iLocationData.iNetworkInfo.iNetworkId );
- }
- iMediaHandlingFlag |= KLocationQueryInProgress;
- iLocationQuery->FindL();
-
- LOG( "CLocationRecord::FindLocationFromDBL(), end" );
- }
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::DoCreateLocationL
-// --------------------------------------------------------------------------
-//
-TItemId CLocationRecord::DoCreateLocationL( const TLocationData& aLocationData )
+
+TItemId CLocationRecord::DoCreateLocationL( const TLocationData& aLocationData )
{
- LOG( "CLocationRecord::DoCreateLocationL(), begin" );
+ LOG("CLocationRecord::DoCreateLocationL - start");
TItemId locationObjectId;
+ CMdENamespaceDef& namespaceDef = iMdeSession->GetDefaultNamespaceDefL();
+
+ CMdEObjectDef& locationObjectDef = namespaceDef.GetObjectDefL( Location::KLocationObject );
+
// required object properties
- CMdEPropertyDef& creationDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& creationDef = locationObjectDef.GetPropertyDefL(
Object::KCreationDateProperty );
- CMdEPropertyDef& modifiedDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& modifiedDef = locationObjectDef.GetPropertyDefL(
Object::KLastModifiedDateProperty );
- CMdEPropertyDef& sizeDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& sizeDef = locationObjectDef.GetPropertyDefL(
Object::KSizeProperty );
- CMdEPropertyDef& itemTypeDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& itemTypeDef = locationObjectDef.GetPropertyDefL(
Object::KItemTypeProperty );
- CMdEPropertyDef& offSetDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& offSetDef = locationObjectDef.GetPropertyDefL(
Object::KTimeOffsetProperty );
// location related properties
- CMdEPropertyDef& cellIdDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& cellIdDef = locationObjectDef.GetPropertyDefL(
Location::KCellIdProperty );
- CMdEPropertyDef& directionDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& latitudeDef = locationObjectDef.GetPropertyDefL(
+ Location::KLatitudeProperty );
+ CMdEPropertyDef& longitudeDef = locationObjectDef.GetPropertyDefL(
+ Location::KLongitudeProperty );
+ CMdEPropertyDef& altitudeDef = locationObjectDef.GetPropertyDefL(
+ Location::KAltitudeProperty );
+
+ CMdEPropertyDef& directionDef = locationObjectDef.GetPropertyDefL(
Location::KDirectionProperty );
- CMdEPropertyDef& speedDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& speedDef = locationObjectDef.GetPropertyDefL(
Location::KSpeedProperty );
- CMdEPropertyDef& locationCodeDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& locationCodeDef = locationObjectDef.GetPropertyDefL(
Location::KLocationAreaCodeProperty );
- CMdEPropertyDef& countryCodeDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& countryCodeDef = locationObjectDef.GetPropertyDefL(
Location::KCountryCodeProperty );
- CMdEPropertyDef& networkCodeDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& networkCodeDef = locationObjectDef.GetPropertyDefL(
Location::KNetworkCodeProperty );
- CMdEPropertyDef& qualityDef = iLocationObjectDef->GetPropertyDefL(
+ CMdEPropertyDef& qualityDef = locationObjectDef.GetPropertyDefL(
Location::KQualityProperty );
// location object
CMdEObject* locationObject = NULL;
- locationObject = iMdeSession->NewObjectL( *iLocationObjectDef, Object::KAutomaticUri );
+ locationObject = iMdeSession->NewObjectL( locationObjectDef, Object::KAutomaticUri );
CleanupStack::PushL( locationObject );
TTime timestamp( 0 );
@@ -1352,21 +863,18 @@
locationObject->AddTextPropertyL( itemTypeDef, Location::KLocationItemType );
locationObject->AddInt16PropertyL( offSetDef, timeOffset.Int() / 60 );
- LOG1( "CLocationRecord::DoCreateLocationL(), Location created with stamp: %Ld", timestamp.Int64() );
+ LOG1( "CLocationRecord::DoCreateLocationL - location created with stamp: %Ld", timestamp.Int64() );
// location related properties
if ( !Math::IsNaN( aLocationData.iPosition.Latitude() ) &&
!Math::IsNaN( aLocationData.iPosition.Longitude() ))
{
- LOG1("CLocationRecord::DoCreateLocationL(), Lan - %f", aLocationData.iPosition.Latitude());
- LOG1("CLocationRecord::DoCreateLocationL(), Lon - %f", aLocationData.iPosition.Longitude());
- locationObject->AddReal64PropertyL( *iLatitudeDef, aLocationData.iPosition.Latitude() );
- locationObject->AddReal64PropertyL( *iLongitudeDef, aLocationData.iPosition.Longitude() );
-
+ locationObject->AddReal64PropertyL( latitudeDef, aLocationData.iPosition.Latitude() );
+ locationObject->AddReal64PropertyL( longitudeDef, aLocationData.iPosition.Longitude() );
}
if ( !Math::IsNaN( aLocationData.iPosition.Altitude() ) )
{
- locationObject->AddReal64PropertyL( *iAltitudeDef, aLocationData.iPosition.Altitude() );
+ locationObject->AddReal64PropertyL( altitudeDef, aLocationData.iPosition.Altitude() );
}
if ( !Math::IsNaN( aLocationData.iCourse.Course() ) )
{
@@ -1382,71 +890,47 @@
}
// network related properties
- if ( aLocationData.iNetworkInfo.iAccess != CTelephony::ENetworkAccessUnknown )
- {
- LOG1("CLocationRecord::DoCreateLocationL(), Cell id - %d", aLocationData.iNetworkInfo.iCellId);
- locationObject->AddUint32PropertyL( cellIdDef, aLocationData.iNetworkInfo.iCellId );
- }
- if ( aLocationData.iNetworkInfo.iAreaKnown &&
- aLocationData.iNetworkInfo.iLocationAreaCode != 0 &&
- aLocationData.iNetworkInfo.iAccess != CTelephony::ENetworkAccessUnknown )
+ if ( aLocationData.iNetworkInfo.iAreaKnown )
{
- LOG1("CLocationRecord::DoCreateLocationL(), Areacode - %d", aLocationData.iNetworkInfo.iLocationAreaCode);
- locationObject->AddUint32PropertyL( locationCodeDef,
- aLocationData.iNetworkInfo.iLocationAreaCode );
- }
-#ifdef _DEBUG
-
- if ( aLocationData.iNetworkInfo.iCountryCode.Length() > 0 )
- {
- TLex lexer( aLocationData.iNetworkInfo.iCountryCode );
- TUint countryCode = 0;
- TRAP_IGNORE(lexer.Val( countryCode, EDecimal));
- LOG1("CLocationRecord::DoCreateLocationL(), Country code - %d", countryCode);
- }
- else
- {
- LOG("CLocationRecord::DoCreateLocationL(), No Country code");
- }
-
- //Set mobile network code
- if ( aLocationData.iNetworkInfo.iNetworkId.Length() > 0 )
- {
- TLex lexer = aLocationData.iNetworkInfo.iNetworkId;
- TUint networkCode = 0;
- TRAP_IGNORE(lexer.Val( networkCode, EDecimal));
- LOG1("CLocationRecord::DoCreateLocationL(), Network id - %d", networkCode);
- }
- else
- {
- LOG("CLocationRecord::DoCreateLocationL(), No network code");
- }
-
-#endif
- if ( aLocationData.iNetworkInfo.iCountryCode.Length() > 0 )
- {
- locationObject->AddTextPropertyL( countryCodeDef,
- aLocationData.iNetworkInfo.iCountryCode );
+ if ( aLocationData.iNetworkInfo.iAccess != CTelephony::ENetworkAccessUnknown )
+ {
+ locationObject->AddUint32PropertyL( cellIdDef, aLocationData.iNetworkInfo.iCellId );
+
+ }
+ if ( aLocationData.iNetworkInfo.iLocationAreaCode != 0 &&
+ aLocationData.iNetworkInfo.iAccess != CTelephony::ENetworkAccessUnknown )
+ {
+ locationObject->AddUint32PropertyL( locationCodeDef,
+ aLocationData.iNetworkInfo.iLocationAreaCode );
+
+ }
+ if ( aLocationData.iNetworkInfo.iCountryCode.Length() > 0 )
+ {
+ locationObject->AddTextPropertyL( countryCodeDef,
+ aLocationData.iNetworkInfo.iCountryCode );
+
+ }
+ if ( aLocationData.iNetworkInfo.iNetworkId.Length() > 0 )
+ {
+ locationObject->AddTextPropertyL(networkCodeDef, aLocationData.iNetworkInfo.iNetworkId);
+
+ }
}
- if ( aLocationData.iNetworkInfo.iNetworkId.Length() > 0 )
- {
- locationObject->AddTextPropertyL(networkCodeDef, aLocationData.iNetworkInfo.iNetworkId);
- }
-
// Add the location object to the database.
locationObjectId = iMdeSession->AddObjectL( *locationObject );
- LOG1("CLocationRecord::DoCreateLocationL(), Location id - %d", locationObjectId);
+
+ iLastLocationId = locationObjectId;
+ iLastLocation = aLocationData;
+
CleanupStack::PopAndDestroy( locationObject );
- LOG( "CLocationRecord::DoCreateLocationL(), end" );
-
+
+ LOG("CLocationRecord::DoCreateLocationL - end");
+
return locationObjectId;
}
-// --------------------------------------------------------------------------
-// CLocationRecord::CreateRelationL
-// --------------------------------------------------------------------------
-//
+
TItemId CLocationRecord::CreateRelationL( const TUint& aObjectId, const TUint& aLocationId )
{
LOG("CLocationRecord::CreateRelationL - start");
@@ -1484,749 +968,131 @@
LOG( "CLocationRecord::::ReadCenRepValueL(), end" );
}
-
-// --------------------------------------------------------------------------
-// CLocationRecord::HandleQueryNewResults
-// --------------------------------------------------------------------------
-//
void CLocationRecord::HandleQueryNewResults(CMdEQuery& /*aQuery*/, TInt /*aFirstNewItemIndex*/,
TInt /*aNewItemCount*/)
{
}
-
-// --------------------------------------------------------------------------
-// CLocationRecord::HandleQueryCompleted
-// --------------------------------------------------------------------------
-//
void CLocationRecord::HandleQueryCompleted(CMdEQuery& aQuery, TInt aError)
{
LOG("CLocationRecord::HandleQueryCompleted - start");
const TInt count = aQuery.Count();
LOG1("CLocationRecord::HandleQueryCompleted count: %d", count);
-
- if ( aError != KErrNone )
- {
- HandleQueryFailure();
- }
-
- else if ( &aQuery == iLocationQuery )
- {
-
- TRAPD(err,HandleLocationQueryL( aQuery ));
- if(err != KErrNone)
- {
- // unable to process the first node..
- // remove this and process the next.
+
+ CMdENamespaceDef* namespaceDef = NULL;
- // reset the flag
- HandleQueryFailure();
- }
-
- }
- else if ( &aQuery == iNetLocationQuery )
+ TRAP_IGNORE( namespaceDef = &iMdeSession->GetDefaultNamespaceDefL() );
+ if ( namespaceDef )
{
- TRAPD(err,HandleNetLocationQueryL( aQuery ));
- if(err != KErrNone)
- {
- // unable to process the first node..
- // remove this and process the next.
- HandleQueryFailure();
- }
-
- }
+ CMdEObjectDef* locationObjectDef = NULL;
+
+ TRAP_IGNORE( locationObjectDef = &namespaceDef->GetObjectDefL( Location::KLocationObject ) );
+ if ( locationObjectDef )
+ {
+ CMdEPropertyDef* latitudeDef = NULL;
+ CMdEPropertyDef* longitudeDef = NULL;
+ CMdEPropertyDef* altitudeDef = NULL;
+
+ TRAP_IGNORE(
+ latitudeDef = &locationObjectDef->GetPropertyDefL(
+ Location::KLatitudeProperty );
+ longitudeDef = &locationObjectDef->GetPropertyDefL(
+ Location::KLongitudeProperty );
+ altitudeDef = &locationObjectDef->GetPropertyDefL(
+ Location::KAltitudeProperty );
+ );
-#ifdef LOC_REVERSEGEOCODE
- else if ( &aQuery == iImageQuery )
- {
- if(aQuery.Count() > 0)
- {
-
- CMdERelation& relation = static_cast<CMdERelation&>( aQuery.ResultItem( 0 ) );
-
- TItemId imageId = relation.LeftObjectId();
-
- TRAPD(err, GetTagsL( imageId ) );
- if(err != KErrNone)
- {
- // unable to process the first node..
- // remove this and process the next.
-
- // reset the flag
- HandleQueryFailure();
- }
- }
- else
- {
- HandleQueryFailure();
+ if( latitudeDef && longitudeDef && altitudeDef )
+ {
+ TBool created = EFalse;
+ for ( TInt i = 0; i < count; i++ )
+ {
+ LOG1("CLocationRecord::HandleQueryCompleted check item: %d", i);
+ CMdEItem& item = aQuery.ResultItem(i);
+ CMdEObject& locationObject = static_cast<CMdEObject&>(item);
+
+ CMdEProperty* latProp = NULL;
+ CMdEProperty* lonProp = NULL;
+ CMdEProperty* altProp = NULL;
+
+ locationObject.Property( *latitudeDef, latProp, 0 );
+ locationObject.Property( *longitudeDef, lonProp, 0 );
+ locationObject.Property( *altitudeDef, altProp, 0 );
+
+ if ( latProp && lonProp )
+ {
+ TReal32 distance;
+ TCoordinate newCoords;
+ if ( altProp )
+ {
+ TRAP_IGNORE( newCoords = TCoordinate( latProp->Real64ValueL(), lonProp->Real64ValueL(), (TReal32)altProp->Real64ValueL() ) );
+ }
+ else
+ {
+ TRAP_IGNORE( newCoords = TCoordinate( latProp->Real64ValueL(), lonProp->Real64ValueL() ) );
+ }
+
+ const TInt err = iLocationData.iPosition.Distance(newCoords, distance);
+
+ if ( distance < iLocationDelta )
+ {
+ LOG("CLocationRecord::HandleQueryCompleted - match found in db");
+ TRAPD( err, CreateRelationL( iObjectId, locationObject.Id() ) );
+ if( err == KErrNone)
+ {
+ created = ETrue;
+ i = count;
+ }
+ else
+ {
+ aError = err;
+ }
+ }
+ }
+ }
+
+ if ( !created && aError == KErrNone )
+ {
+ LOG("CLocationRecord::HandleQueryCompleted - no match found in db, create new");
+ TInt locationId( 0 );
+ TRAPD( err, locationId = DoCreateLocationL( iLocationData ) );
+ LOG1("CLocationRecord::HandleQueryCompleted - DoCreateLocationL err: %d", err);
+ if( err == KErrNone )
+ {
+ TRAP( err, CreateRelationL( iObjectId, locationId ));
+ LOG1("CLocationRecord::HandleQueryCompleted - CreateRelationL err: %d", err);
+ }
+ }
+ }
}
}
-
- else if ( &aQuery == iTagQuery )
- {
- TRAPD(err, HandleTagQueryL( aQuery ) );
-
- GeoTaggingCompleted();
- if(err != KErrNone)
- {
- // unable to process the first node..
- // remove this and process the next.
- // reset the flag
- HandleQueryFailure();
- }
- }
-#endif //LOC_REVERSEGEOCODE
- else
- {
- // execution should not come over here...still take recovery action.
- HandleQueryFailure();
- }
- GeoTaggingCompleted();
- LOG( "CLocationRecord::HandleQueryCompleted(), end" );
- }
-
-// --------------------------------------------------------------------------
-// CLocationRecord::HandleQueryFailure()
-// handle MDS query sceenario
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::HandleQueryFailure()
- {
- LOG( "CLocationRecord::HandleQueryFailure(), begin" );
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
- if ( iMediaItems.Count() > 0 )
- {
- TLocationSnapshotItem* firstPtr = iMediaItems[0];
- iMediaItems.Remove(0);
- delete firstPtr;
- iMediaItems.Compress();
- HandleFindLocationFromDB();
- }
- LOG( "CLocationRecord::HandleQueryFailure(), end" );
- }
-
-// --------------------------------------------------------------------------
-// CLocationRecord::HandleFindLocationFromDB()
-// handle find location from DB within the non leaving method
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::HandleFindLocationFromDB()
- {
- LOG( "CLocationRecord::HandleFindLocationFromDB(), begin" );
- if ( iMediaItems.Count() > 0 )
- {
- TInt trapErr = KErrNone;
- TRAP(trapErr,FindLocationFromDBL());
- // no memory, don't proceed further
- // other error sceenario, we can move the node to the end and process the next
- if(trapErr != KErrNoMemory && trapErr != KErrNone)
- {
- // other than no memory
- TInt numberOfNodes = iMediaItems.Count();
- LOG1("media count - %d\n", numberOfNodes);
- while(--numberOfNodes >= 0 &&
- trapErr != KErrNoMemory &&
- trapErr != KErrNone)
- {
- // first remove the node
- TLocationSnapshotItem* firstPtr = iMediaItems[0];
- iMediaItems.Remove(0);
- // move this to last
- iMediaItems.Append(firstPtr);
- iMediaItems.Compress();
- trapErr = KErrNone;
- // process for the next till we reached the last node.
- TRAP(trapErr,FindLocationFromDBL());
- }
- }
- }
- LOG( "CLocationRecord::HandleFindLocationFromDB(), end" );
- }
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::HandleLocationQuery()
-// handle if only gps info available
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::HandleLocationQueryL( CMdEQuery& aQuery )
- {
- LOG( "CLocationRecord::HandleLocationQueryL(), begin" );
- TInt error = KErrNone;
- TUint locationId( 0 );
- if ( iMediaItems.Count() <= 0 )
- {
- LOG("CLocationRecord::HandleLocationQueryL. No media items to process");
- return;
- }
-
- TLocationData locationData = iMediaItems[0]->iLocationData;
-
- const TInt count = aQuery.Count();
- //find any location matches
- for ( TInt i = 0; i < count; i++ )
- {
- LOG1("CLocationRecord::HandleLocationQueryL check item: %d", i);
- CMdEItem& item = aQuery.ResultItem(i);
- CMdEObject& locationObject = static_cast<CMdEObject&>(item);
-
- CMdEProperty* latProp = NULL;
- CMdEProperty* lonProp = NULL;
- CMdEProperty* altProp = NULL;
-
- locationObject.Property( *iLatitudeDef, latProp, 0 );
- locationObject.Property( *iLongitudeDef, lonProp, 0 );
- locationObject.Property( *iAltitudeDef, altProp, 0 );
-
- if ( latProp && lonProp )
- {
- TReal32 distance;
- TCoordinate newCoords;
-
- TReal64 lat = latProp->Real64ValueL();
- TReal64 lon = lonProp->Real64ValueL();
- if ( altProp )
- {
- TReal32 alt = (TReal32)altProp->Real64ValueL();
- newCoords = TCoordinate( lat, lon, alt );
- }
- else
- {
- newCoords = TCoordinate( lat, lon );
- }
-
- locationData.iPosition.Distance(newCoords, distance);
-
- if ( distance < iLocationDelta )
- {
- i = count;
- locationId = locationObject.Id();
- iMediaItems[0]->iLocationId = locationId;
- break;
- }
- }
- }
-
-
- if ( locationId )
- {
- TRAP( error, CreateRelationL( iMediaItems[0]->iObjectId, locationId ) );
-
-#ifdef LOC_REVERSEGEOCODE
- if( error == KErrNone)
- {
- //find out if image for this location is tagged already
- GetRelatedImageL( locationId );
- }
-#else
- TLocationSnapshotItem* firstPtr = iMediaItems[0];
- iMediaItems.Remove(0);
- delete firstPtr;
- iMediaItems.Compress();
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
- if ( iMediaItems.Count() > 0 )
- {
- FindLocationFromDBL();
- }
-#endif //LOC_REVERSEGEOCODE
- }
- else
- {
-
- if((iMediaItems[0]->iFlag & KDownloadMediaFile) > 0)
- {
- locationData.iNetworkInfo.iCellId = 0;
- locationData.iNetworkInfo.iAccess = CTelephony::ENetworkAccessUnknown;
- locationData.iNetworkInfo.iLocationAreaCode = 0;
- locationData.iNetworkInfo.iCountryCode.Zero();
- locationData.iNetworkInfo.iNetworkId.Zero();
- }
- TRAP( error, locationId = DoCreateLocationL( locationData ) );
-
- if ( error == KErrNone )
- {
- iMediaItems[0]->iLocationId = locationId;
- TRAP( error, CreateRelationL( iMediaItems[0]->iObjectId, locationId ));
- }
-
- TLocationSnapshotItem* item = iMediaItems[0];
- if((iMediaItems[0]->iFlag & KSnapMediaFile) > 0)
- {
- iLastMediaItem = *(iMediaItems[0]);
- }
- iMediaItems.Remove(0);
- iMediaItems.Compress();
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
- if ( error == KErrNone )
- {
- //Find the address by coordinate, results a call to ReverseGeocodeComplete()
-#ifdef LOC_REVERSEGEOCODE
- iLocationItems.Append( item );
- if(!(iMediaHandlingFlag & KReverseGeoCodingInProgress))
- {
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
-
- if(iRevGeocoderPlugin)
- {
- iRevGeocoderPlugin->GetAddressByCoordinateL
- ( iLocationItems[0]->iLocationData.iPosition,
- iConnectionOption);
- }
- }
-#else
- // free resources
- delete item;
-#endif //LOC_REVERSEGEOCODE
- }
- else
- {
- // free resources
- delete item;
- }
-
- if ( iMediaItems.Count() > 0 )
- {
- FindLocationFromDBL();
- }
- }
- LOG( "CLocationRecord::HandleLocationQueryL(), end" );
-
+ LOG("CLocationRecord::HandleQueryCompleted - end");
}
-// --------------------------------------------------------------------------
-// CLocationRecord::HandleNetLocationQuery()
-// handle if only network info available
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::HandleNetLocationQueryL( CMdEQuery& aQuery )
- {
- LOG( "CLocationRecord::HandleNetLocationQueryL(), begin" );
- TInt error = KErrNone;
- TUint locationId( 0 );
- if ( iMediaItems.Count() <= 0 )
- {
- LOG("CLocationRecord::HandleNetLocationQueryL(), End. No media items to process\n");
- return;
- }
- if( aQuery.Count() )
- {
- CMdEItem& item = aQuery.ResultItem(0);
- CMdEObject& locationObject = static_cast<CMdEObject&>(item);
- locationId = locationObject.Id();
-
- iMediaItems[0]->iLocationId = locationId;
- TRAP( error, CreateRelationL( iMediaItems[0]->iObjectId, locationId ) );
-#ifdef LOC_REVERSEGEOCODE
- //check if found location object has lat, long
- CMdEProperty* latProp = NULL;
- CMdEProperty* lonProp = NULL;
- CMdEProperty* cellIdProp = NULL;
- CMdEProperty* areadCodeProp = NULL;
- CMdEProperty* countryProp = NULL;
- CMdEProperty* networkCodeProp = NULL;
- if ( error == KErrNone )
- {
-
- CMdEPropertyDef& cellIdDef = iLocationObjectDef->GetPropertyDefL(
- Location::KCellIdProperty );
- CMdEPropertyDef& locationAreadCodeDef = iLocationObjectDef->GetPropertyDefL(
- Location::KLocationAreaCodeProperty );
- CMdEPropertyDef& countryCodeDef = iLocationObjectDef->GetPropertyDefL(
- Location::KCountryCodeProperty );
- CMdEPropertyDef& networkCodeDef = iLocationObjectDef->GetPropertyDefL(
- Location::KNetworkCodeProperty );
-
- locationObject.Property( *iLatitudeDef, latProp, 0 );
- locationObject.Property( *iLongitudeDef, lonProp, 0 );
-
- locationObject.Property( cellIdDef, cellIdProp, 0 );
- locationObject.Property( locationAreadCodeDef, areadCodeProp, 0 );
- locationObject.Property( countryCodeDef, countryProp, 0 );
- locationObject.Property( networkCodeDef, networkCodeProp, 0 );
- }
-
- if( (latProp && lonProp)
- || (cellIdProp && areadCodeProp && countryProp && networkCodeProp) )
- {
- //find out if image for this location is tagged already
- GetRelatedImageL( locationId );
- }
- else
-#endif //LOC_REVERSEGEOCODE
- {
- // no geo info.. remove the item and proceed for the next.
- TLocationSnapshotItem* firstPtr = iMediaItems[0];
- iMediaItems.Remove(0);
- delete firstPtr;
- iMediaItems.Compress();
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
- if ( iMediaItems.Count() > 0 )
- {
- FindLocationFromDBL();
- }
- }
- }
- else
- {
-#ifdef LOC_GEOTAGGING_CELLID
- LOG1("Media handling flag = %d", iMediaHandlingFlag);
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0)
- {
- iMediaHandlingFlag |= KSnapGeoConvertInPendingState;
- }
- else
- {
- // go for cell id based geo coding.
- if(iGeoConverter == NULL)
- {
- iGeoConverter = CGeoConverter::NewL(*this);
- }
- iGeoConverter->ConvertL(iMediaItems[0]->iLocationData.iNetworkInfo);
- iMediaHandlingFlag |= KSnapGeoConvertInProgress;
- iMediaHandlingFlag &= ~KSnapGeoConvertInPendingState;
- }
-#else
- // cell id based geo tagging is not supported.. go for remapping.
- locationId = DoCreateLocationL( iMediaItems[0]->iLocationData );
- iMediaItems[0]->iLocationId = locationId;
- TItemId relationId = CreateRelationL( iMediaItems[0]->iObjectId, locationId );
- TLocationSnapshotItem* firstPtr = iMediaItems[0];
-
- // Go for remapping.. get locationdata from trail with object time
- TTime timestamp = GetMdeObjectTimeL( iMediaItems[0]->iObjectId );
- TRemapItem remapItem;
- remapItem.iObjectId = iMediaItems[0]->iObjectId;
- remapItem.iTime = timestamp;
- remapItem.iLocationId = locationId;
- remapItem.iRelationId = relationId;
- iRemapper->Append( remapItem );
-
- iMediaItems.Remove(0);
- delete firstPtr;
- iMediaItems.Compress();
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
- if ( iMediaItems.Count() > 0 )
- {
- FindLocationFromDBL();
- }
-#endif
- }
-#ifdef LOC_REVERSEGEOCODE
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0 ||
- (iMediaHandlingFlag & KReverseGeoCodingInProgress) > 0)
-#else
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0)
-#endif //LOC_REVERSEGEOCODE
- {
- // stop n/w info change listener, since device may connect to n/w
- // and local trail will receive so many call backs on current n/w info change.
- iNetworkInfoChangeListener->StopNwInfoChangeNotifier();
- }
- else
- {
- iNetworkInfoChangeListener->StartNwInfoChangeNotifier();
- }
- LOG( "CLocationRecord::HandleNetLocationQueryL(), end" );
-
- }
-
-
-#ifdef LOC_GEOTAGGING_CELLID
-// --------------------------------------------------------------------------
-// CLocationRecord::ConversionCompletedL()
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::ConversionCompletedL( const TInt aError, TLocality& aPosition )
- {
-
- LOG1("CLocationRecord::ConversionCompletedL, begin. Error - %d", aError);
- // reset the flag first
- iMediaHandlingFlag &= ~KSnapGeoConvertInProgress;
- LOG1("iRemapState - %d", iRemapState);
- if(aError == KErrNone)
- {
- iConvertRetry = ETrue;
- LOG("Conversion completed successfully");
- if(iRemapState == ERemapNwGeoConverterInProgress)
- {
- iNewItem.iLocationData.iPosition.SetCoordinate
- ( aPosition.Latitude(), aPosition.Longitude(), aPosition.Altitude());
- iNewItem.iLocationData.iQuality = aPosition.HorizontalAccuracy();
- TItemId locationId = DoCreateLocationL( iNewItem.iLocationData );
- iRemapper->UpdateRelationsL( locationId );
-#ifdef LOC_REVERSEGEOCODE
- if(!(iMediaHandlingFlag & KReverseGeoCodingInProgress))
- {
- iRemapState = ERemapRevGeoCodeInProgress;
- //Find the address by coordinate, results a call to ReverseGeocodeComplete()
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
-
- if(iRevGeocoderPlugin)
- {
- iRevGeocoderPlugin->GetAddressByCoordinateL
- ( iNewItem.iLocationData.iPosition, iConnectionOption );
- }
- }
- else
- {
- // remap in reverse geocoding pending state.
- iRemapState = ERemapRevGeoCodePending;
- }
-#endif //LOC_REVERSEGEOCODE
- }
- else if ( iMediaItems.Count() > 0 )
- {
-
- iMediaItems[0]->iLocationData.iPosition.SetCoordinate
- ( aPosition.Latitude(), aPosition.Longitude(), aPosition.Altitude());
- iMediaItems[0]->iLocationData.iQuality = aPosition.HorizontalAccuracy();
- TLocationSnapshotItem* item = iMediaItems[0];
- TItemId locationId = DoCreateLocationL( iMediaItems[0]->iLocationData );
- iMediaItems[0]->iLocationId = locationId;
- TItemId relationId = CreateRelationL( iMediaItems[0]->iObjectId, locationId );
-
- // Go for remapping.. get locationdata from trail with object time
- TTime timestamp = GetMdeObjectTimeL( iMediaItems[0]->iObjectId );
- TRemapItem remapItem;
- remapItem.iObjectId = iMediaItems[0]->iObjectId;
- remapItem.iTime = timestamp;
- remapItem.iLocationId = locationId;
- remapItem.iRelationId = relationId;
- iRemapper->Append( remapItem );
-
- if((iMediaItems[0]->iFlag & KSnapMediaFile) > 0)
- {
- iLastMediaItem = *(iMediaItems[0]);
- }
- iMediaItems.Remove(0);
- iMediaItems.Compress();
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
-#ifdef LOC_REVERSEGEOCODE
- iLocationItems.Append( item );
-#else
- // free resource
- delete item;
-#endif
- }
- }
- else
- {
- LOG1("Conversion error - %d", aError);
- if(iConvertRetry)
- {
- LOG("Retry once");
- iConvertRetry = EFalse;
- if(iRemapState == ERemapNwGeoConverterInProgress)
- {
- iRemapState = ERemapNwGeoConverterPending;
- }
- else if ( iMediaItems.Count() > 0 )
- {
- iMediaHandlingFlag |= KSnapGeoConvertInPendingState;
- }
- }
- else
- {
- if(iRemapState == ERemapNwGeoConverterInProgress)
- {
- iRemapState = ERemapProgressNone;
- }
- else if ( iMediaItems.Count() > 0 )
- {
- TLocationSnapshotItem* item = iMediaItems[0];
- // Fails may be becuase of n/w reason..create location + relation so that we can handle at 3:00 AM.
- TItemId locationId = DoCreateLocationL( iMediaItems[0]->iLocationData );
- iMediaItems[0]->iLocationId = locationId;
- TItemId relationId = CreateRelationL( iMediaItems[0]->iObjectId, locationId );
-
- // Go for remapping.. get locationdata from trail with object time
- TTime timestamp = GetMdeObjectTimeL( iMediaItems[0]->iObjectId );
- TRemapItem remapItem;
- remapItem.iObjectId = iMediaItems[0]->iObjectId;
- remapItem.iTime = timestamp;
- remapItem.iLocationId = locationId;
- remapItem.iRelationId = relationId;
- iRemapper->Append( remapItem );
-
- iMediaItems.Remove(0);
- iMediaItems.Compress();
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
- delete item;
- }
- }
-
- }
-
- // check the remap item first.
- if(iRemapState == ERemapNwGeoConverterPending)
- {
- // go for cell id based geo coding.
- iRemapState = ERemapNwGeoConverterInProgress;
- iGeoConverter->ConvertL(iNewItem.iLocationData.iNetworkInfo);
- iMediaHandlingFlag |= KSnapGeoConvertInProgress;
- }
- //check for media queue pending request.
- else if((iMediaHandlingFlag & KSnapGeoConvertInPendingState) > 0)
- {
- // previous media queue geo convert is in pending state.
- // go for cell id based geo coding.
- iGeoConverter->ConvertL(iMediaItems[0]->iLocationData.iNetworkInfo);
- iMediaHandlingFlag |= KSnapGeoConvertInProgress;
- iMediaHandlingFlag &= ~KSnapGeoConvertInPendingState;
- }
- // let's not use multiple access point.
-#ifdef LOC_REVERSEGEOCODE
- else if(!(iMediaHandlingFlag & KReverseGeoCodingInProgress) &&
- iLocationItems.Count() > 0)
- {
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
-
- if(iRevGeocoderPlugin)
- {
- iRevGeocoderPlugin->GetAddressByCoordinateL
- ( iLocationItems[0]->iLocationData.iPosition,
- iConnectionOption);
- }
- }
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0 ||
- (iMediaHandlingFlag & KReverseGeoCodingInProgress) > 0)
-#else
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0)
-#endif //LOC_REVERSEGEOCODE
- {
- // stop n/w info change listener, since device may connect to n/w
- // and local trail will receive so many call backs on current n/w info change.
- iNetworkInfoChangeListener->StopNwInfoChangeNotifier();
- }
- else
- {
- iNetworkInfoChangeListener->StartNwInfoChangeNotifier();
- }
- FindLocationFromDBL();
- GeoTaggingCompleted();
- LOG("CLocationRecord::ConversionCompletedL, end");
- }
-
-
-//------------------------------------------------------------------------
-// CLocationRecord::HandleConversionError
-//------------------------------------------------------------------------
-//
-void CLocationRecord::HandleConversionError(TInt aError)
- {
- LOG( "CLocationRecord::HandleConversionError(), begin" );
- ARG_USED(aError);
- if(iRemapState == ERemapNwGeoConverterInProgress)
- {
- iRemapState = ERemapProgressNone;
- }
- else if ( iMediaItems.Count() > 0 )
- {
- TLocationSnapshotItem* item = iMediaItems[0];
- iMediaItems.Remove(0);
- iMediaItems.Compress();
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
- delete item;
- }
- // let's not use multiple access point.
-#ifdef LOC_REVERSEGEOCODE
- if(!(iMediaHandlingFlag & KReverseGeoCodingInProgress) &&
- iLocationItems.Count() > 0)
- {
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
-
- if(iRevGeocoderPlugin)
- {
- TRAP_IGNORE(iRevGeocoderPlugin->GetAddressByCoordinateL
- ( iLocationItems[0]->iLocationData.iPosition,
- iConnectionOption));
- }
- }
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0 ||
- (iMediaHandlingFlag & KReverseGeoCodingInProgress) > 0)
-#else
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0)
-#endif //LOC_REVERSEGEOCODE
- {
- // stop n/w info change listener, since device may connect to n/w
- // and local trail will receive so many call backs on current n/w info change.
- iNetworkInfoChangeListener->StopNwInfoChangeNotifier();
- }
- else
- {
- iNetworkInfoChangeListener->StartNwInfoChangeNotifier();
- }
- TRAP_IGNORE(FindLocationFromDBL());
- GeoTaggingCompleted();
- LOG( "CLocationRecord::HandleConversionError(), end" );
- }
-
-#endif // LOC_GEOTAGGING_CELLID
-
-// --------------------------------------------------------------------------
-// CLocationRecord::SetMdeSession
-// --------------------------------------------------------------------------
-//
EXPORT_C void CLocationRecord::SetMdeSession( CMdESession* aSession )
{
- LOG( "CLocationRecord::SetMdeSession(), begin" );
iMdeSession = aSession;
-#ifdef LOC_REVERSEGEOCODE
- iTagCreator->SetSession( aSession );
-#endif
TRAPD(err, iRemapper->InitialiseL( aSession ));
if( err != KErrNone )
{
delete iRemapper;
iRemapper = NULL;
}
- TRAP(err, InitialiseL() );
- LOG( "CLocationRecord::SetMdeSession(), end" );
}
-// --------------------------------------------------------------------------
-// CLocationRecord::InitialiseL
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::InitialiseL()
- {
- LOG( "CLocationRecord::InitialiseL(), begin" );
- // namespace defaults
- iNamespaceDef = &iMdeSession->GetDefaultNamespaceDefL();
-
- // location object definitions
- iLocationObjectDef = &iNamespaceDef->GetObjectDefL( Location::KLocationObject );
- iLatitudeDef = &iLocationObjectDef->GetPropertyDefL( Location::KLatitudeProperty );
- iLongitudeDef = &iLocationObjectDef->GetPropertyDefL( Location::KLongitudeProperty );
- iAltitudeDef = &iLocationObjectDef->GetPropertyDefL( Location::KAltitudeProperty );
- LOG( "CLocationRecord::InitialiseL(), end" );
- }
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::StartTimerL
-// --------------------------------------------------------------------------
-//
void CLocationRecord::StartTimerL()
{
- LOG("CLocationRecord::StartTimerL,begin");
+ LOG("CLocationRecord::StartTimerL");
if( !iNetworkInfoTimer->IsActive() )
{
iNetworkInfoTimer->Start( iInterval, iInterval, TCallBack( UpdateNetworkInfo, this ) );
}
- LOG( "CLocationRecord::StartL(), end" );
}
-
-// --------------------------------------------------------------------------
-// CLocationRecord::GetMdeObjectTimeL
-// --------------------------------------------------------------------------
-//
TTime CLocationRecord::GetMdeObjectTimeL( TItemId aObjectId )
{
- LOG( "CLocationRecord::GetMdeObjectTimeL(), begin" );
CMdENamespaceDef& namespaceDef = iMdeSession->GetDefaultNamespaceDefL();
CMdEObjectDef& objectDef = namespaceDef.GetObjectDefL( Object::KBaseObject );
@@ -2236,11 +1102,6 @@
CMdEProperty* property = NULL;
object = iMdeSession->GetObjectL( aObjectId );
- if( !object )
- {
- User::Leave( KErrNotFound );
- }
-
CleanupStack::PushL( object );
object->Property( timeDef, property, 0 );
if ( !property )
@@ -2250,84 +1111,14 @@
const TTime timeValue( property->TimeValueL() );
CleanupStack::PopAndDestroy( object );
-
- LOG( "CLocationRecord::GetMdeObjectTimeL(), end" );
return timeValue;
-
}
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::RemappingNeeded
-// --------------------------------------------------------------------------
-//
EXPORT_C TBool CLocationRecord::RemappingNeeded()
{
- return ( iRemapper->ItemsInQueue()
- && (iRemapState == ERemapProgressNone));
+ return iRemapper->ItemsInQueue();
}
-
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::FindLocationWithSameNetInfoL()
-// check any location object already exists with same network info
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::FindLocationWithSameNetInfoL()
- {
- LOG( "CLocationRecord::FindLocationWithSameNetInfoL(), begin" );
- if(iMediaItems[0]->iLocationData.iNetworkInfo.iCellId > 0 &&
- iMediaItems[0]->iLocationData.iNetworkInfo.iCountryCode.Length() > 0 &&
- iMediaItems[0]->iLocationData.iNetworkInfo.iNetworkId.Length() > 0)
- {
- CMdEPropertyDef& cellIdDef = iLocationObjectDef->GetPropertyDefL(
- Location::KCellIdProperty );
- CMdEPropertyDef& locationCodeDef = iLocationObjectDef->GetPropertyDefL(
- Location::KLocationAreaCodeProperty );
- CMdEPropertyDef& countryCodeDef = iLocationObjectDef->GetPropertyDefL(
- Location::KCountryCodeProperty );
- CMdEPropertyDef& networkCodeDef = iLocationObjectDef->GetPropertyDefL(
- Location::KNetworkCodeProperty );
-
- if(iNetLocationQuery)
- {
- iNetLocationQuery->RemoveObserver(*this);
- iNetLocationQuery->Cancel();
- delete iNetLocationQuery;
- iNetLocationQuery = NULL;
- }
- iNetLocationQuery = iMdeSession->NewObjectQueryL( *iNamespaceDef, *iLocationObjectDef, this );
- CMdELogicCondition& cond = iNetLocationQuery->Conditions();
- cond.SetOperator( ELogicConditionOperatorAnd );
-
- cond.AddPropertyConditionL( cellIdDef,
- TMdEUintEqual( iMediaItems[0]->iLocationData.iNetworkInfo.iCellId) );
- cond.AddPropertyConditionL( locationCodeDef,
- TMdEUintEqual( iMediaItems[0]->iLocationData.iNetworkInfo.iLocationAreaCode) );
- cond.AddPropertyConditionL( countryCodeDef, ETextPropertyConditionCompareEquals,
- iMediaItems[0]->iLocationData.iNetworkInfo.iCountryCode );
- cond.AddPropertyConditionL( networkCodeDef, ETextPropertyConditionCompareEquals,
- iMediaItems[0]->iLocationData.iNetworkInfo.iNetworkId );
-
- iNetLocationQuery->FindL(1, 1);
- iMediaHandlingFlag |= KLocationQueryInProgress;
- }
- else
- {
- TLocationSnapshotItem* firstPtr = iMediaItems[0];
- iMediaItems.Remove(0);
- delete firstPtr;
- iMediaItems.Compress();
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
- FindLocationFromDBL();
- }
- LOG( "CLocationRecord::FindLocationWithSameNetInfoL(), end" );
-
- }
-
EXPORT_C TBool CLocationRecord::IsLowBattery()
{
LOG("CLocationRecord::IsLowBattery()");
@@ -2344,527 +1135,7 @@
{
return ETrue;
}
- }
-
-// --------------------------------------------------------------------------
-// CLocationRecord::GeoTaggingCompleted
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::GeoTaggingCompleted()
- {
- LOG( "CLocationRecord::GeoTaggingCompleted(), begin" );
- if((iMediaItems.Count() == 0)
-#ifdef LOC_REVERSEGEOCODE
- && (iLocationItems.Count() == 0)
-#endif //LOC_REVERSEGEOCODE
- )
- {
- LOG("Geo tagging completed");
- iGeoTaggerObserver.GeoTaggingCompleted(KErrNone);
- // fallback to silent
-#ifdef LOC_REVERSEGEOCODE
- iConnectionOption = ESilent;
-#endif //LOC_REVERSEGEOCODE
- }
- LOG( "CLocationRecord::GeoTaggingCompleted(), end" );
- }
-
-
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::TaggingInProgress
-// --------------------------------------------------------------------------
-//
-EXPORT_C TBool CLocationRecord::TaggingInProgress()
- {
- LOG( "CLocationRecord::TaggingInProgress(), begin" );
- TBool retVal = EFalse;
-#ifdef LOC_REVERSEGEOCODE
- if( ((iMediaItems.Count() > 0) || (iLocationItems.Count() > 0) )
- && (iRevGeocoderPlugin && iRevGeocoderPlugin->SilentConnectionAllowed()))
-#else
- if( iMediaItems.Count() > 0 )
-
-#endif //LOC_REVERSEGEOCODE
- {
-#ifdef LOC_REVERSEGEOCODE
- if(!(iMediaHandlingFlag & KReverseGeoCodingInProgress))
- {
- // start geocoding
-
- if (iLocationItems.Count() > 0 )
- {
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
-
- TRAP_IGNORE( iRevGeocoderPlugin->GetAddressByCoordinateL(
- iLocationItems[0]->iLocationData.iPosition,
- iConnectionOption) );
-
- retVal = ETrue;
- }
- }
- else
- {
- retVal = ETrue;
- }
-#endif //LOC_REVERSEGEOCODE
- if(!(iMediaHandlingFlag & KLocationQueryInProgress))
- {
- if(iMediaItems.Count() > 0)
- {
- HandleFindLocationFromDB();
- retVal = ETrue;
- }
- }
- else
- {
- retVal = ETrue;
- }
- }
- else
- {
- // Flash the array to avoid double tagging by photos & localrail.
- }
- LOG( "CLocationRecord::TaggingInProgress(), end" );
- return retVal;
- }
-
-
-// ----------------------------------------------------------------------------
-// CLocationRecord::GetCurrentRegisteredNw()
-// ----------------------------------------------------------------------------
-EXPORT_C RMobilePhone::TMobilePhoneNetworkInfoV2& CLocationRecord::GetCurrentRegisteredNw()
- {
- LOG( "CLocationRecord::GetCurrentRegisteredNw ,begin" );
- return iNetworkInfoChangeListener->GetCurrentRegisterNw();
- }
-
-// --------------------------------------------------------------------------
-// CLocationRecord::StartGeoTagging
-// --------------------------------------------------------------------------
-//
-EXPORT_C TBool CLocationRecord::StartGeoTagging(const TConnectionOption aConnectionOption)
- {
- LOG( "CLocationRecord::StartGeoTagging(), begin" );
- TBool retVal = EFalse;
- ARG_USED(aConnectionOption);
- if((iMediaItems.Count() > 0)
-#ifdef LOC_REVERSEGEOCODE
- || (iLocationItems.Count() > 0)
-#endif //LOC_REVERSEGEOCODE
- )
- {
-#ifdef LOC_REVERSEGEOCODE
- iConnectionOption = aConnectionOption;
- if(!(iMediaHandlingFlag & KReverseGeoCodingInProgress))
- {
- // start geocoding
- if (iLocationItems.Count() > 0 )
- {
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
- if(iRevGeocoderPlugin)
- {
- TRAP_IGNORE( iRevGeocoderPlugin->GetAddressByCoordinateL(
- iLocationItems[0]->iLocationData.iPosition,
- iConnectionOption) );
- }
- retVal = ETrue;
- }
- }
- else
- {
- retVal = ETrue;
- }
-#endif //LOC_REVERSEGEOCODE
- if(!(iMediaHandlingFlag & KLocationQueryInProgress))
- {
- if(iMediaItems.Count() > 0)
- {
- HandleFindLocationFromDB();
- retVal = ETrue;
- }
- }
- else
- {
- retVal = ETrue;
- }
- }
- LOG( "CLocationRecord::StartGeoTagging(), end" );
- return retVal;
- }
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::CancelGeoTagging
-// --------------------------------------------------------------------------
-//
-EXPORT_C void CLocationRecord::CancelGeoTagging()
- {
-#ifdef LOC_REVERSEGEOCODE
- LOG1( "CLocationRecord::CancelGeoTagging(), Connetion opt - %d",
- iConnectionOption );
- // set this to default connection.
- iConnectionOption = ESilent;
-#endif //LOC_REVERSEGEOCODE
- }
-
-
-#ifdef LOC_REVERSEGEOCODE
-
-// --------------------------------------------------------------------------
-// CLocationManagerServer::GetRelatedImages()
-// Find any image, already related to this location object
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::GetRelatedImageL(TItemId aLocID)
- {
- LOG( "CLocationRecord::GetRelatedImageL(), begin" );
- CMdEObjectDef& imageObjDef = iNamespaceDef->GetObjectDefL( Image::KImageObject );
- if(iImageQuery)
- {
- iImageQuery->RemoveObserver(*this);
- iImageQuery->Cancel();
- delete iImageQuery;
- iImageQuery = NULL;
- }
-
- iImageQuery = iMdeSession->NewRelationQueryL( *iNamespaceDef, this );
- User::LeaveIfNull( iImageQuery );
-
- iImageQuery->SetResultMode( EQueryResultModeItem );
-
- // both left and right condition must match
- CMdERelationCondition& filterCond = iImageQuery->Conditions().
- AddRelationConditionL( ERelationConditionSideRight );
-
- // left one must be any image object.
- filterCond.LeftL().AddObjectConditionL( imageObjDef );
-
- // right one must be this location object
- filterCond.RightL().AddObjectConditionL( aLocID );
-
- iImageQuery->FindL(1, 1); // results to a call to HandleQueryCompleted()
- LOG( "CLocationRecord::GetRelatedImageL(), end" );
}
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::ReverseGeocodeComplete()
-// Get address details like country, city..
-// Create country and city tags and attach to the current image/video object
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::ReverseGeocodeComplete( TInt& aErrorcode, MAddressInfo& aAddressInfo )
- {
- LOG( "CLocationRecord::ReverseGeocodeComplete(), begin" );
- TItemId countryTagId(0);
- TItemId cityTagId(0);
-
- iMediaHandlingFlag &= (~KReverseGeoCodingInProgress);
- TLocationSnapshotItem* snapshotItem = NULL;
- LOG1("Error - %d", aErrorcode);
- if( aErrorcode == KErrNone )
- {
- iLastReverseGeocodeFails = EFalse;
- TPtrC countryPtr( aAddressInfo.GetCountryName() );
- TPtrC cityPtr( aAddressInfo.GetCity() );
- TRAP_IGNORE( iTagCreator->CreateLocationTagsL( countryPtr, countryTagId,
- cityPtr, cityTagId ) );
- if ( iRemapState == ERemapRevGeoCodeInProgress)
- {
- TRAP_IGNORE( iRemapper->AttachGeoTagsL( iTagCreator, countryTagId, cityTagId ) );
- iRemapState = ERemapProgressNone;
- }
- else
- {
- if(iLocationItems.Count() > 0)
- {
- iLocationItems[0]->iCountryTagId = countryTagId;
- iLocationItems[0]->iCityTagId = cityTagId;
- iLastLocationItem = (*iLocationItems[0]);
-
- TRAP_IGNORE( iTagCreator->AttachTagsL(
- iLocationItems[0]->iObjectId, countryTagId, cityTagId ) );
- if ( (iLastMediaItem.iFlag & KSnapMediaFile) > 0
- && iLastMediaItem.iLocationId == iLastLocationItem.iLocationId )
- {
- LOG("Updating country/city\n");
- iLastMediaItem.iCountryTagId = countryTagId;
- iLastMediaItem.iCityTagId = cityTagId;
- }
-
- }
- }
- //check other items in the array has same location
- for ( TInt index = iLocationItems.Count() - 1; index > 0; index--)
- {
- if ( iLocationItems[index]->iLocationId == iLastLocationItem.iLocationId )
- {
- LOG1("Attached tags in for - %d\n", index);
- TRAP_IGNORE( iTagCreator->AttachTagsL(
- iLocationItems[index]->iObjectId, countryTagId, cityTagId ) );
- snapshotItem = iLocationItems[index];
- iLocationItems.Remove(index);
- delete snapshotItem;
- }
- }
- }
- else
- {
- //handle error
- LOG("Reverse geo coding fails");
- iLastReverseGeocodeFails = ETrue;
- }
-
- //irrespective of error or not, remove current(first) item to proceed further
- if ( iLocationItems.Count() > 0 )
- {
- snapshotItem = iLocationItems[0];
- iLocationItems.Remove(0);
- delete snapshotItem;
- iLocationItems.Compress();
- }
- if (aErrorcode == KErrNone)
- {
- if(iRemapState == ERemapRevGeoCodePending)
- {
- if(iRevGeocoderPlugin)
- {
- TRAPD(err, iRevGeocoderPlugin->GetAddressByCoordinateL( iNewItem.iLocationData.iPosition, iConnectionOption );)
- if(err == KErrNone)
- {
- // Remap geo coding in pending state
- iRemapState = ERemapRevGeoCodeInProgress;
- //Find the address by coordinate, results a call to ReverseGeocodeComplete()
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
- }
- }
- }
- else if(iLocationItems.Count() > 0)
- {
- if(iRevGeocoderPlugin)
- {
- TRAPD(err, iRevGeocoderPlugin->GetAddressByCoordinateL(
- iLocationItems[0]->iLocationData.iPosition,
- iConnectionOption) );
- if(err == KErrNone)
- {
- // queue is not empty process the next.
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
- }
- }
- }
- }
-
- GeoTaggingCompleted();
- if((iMediaHandlingFlag & KSnapGeoConvertInProgress) > 0 ||
- (iMediaHandlingFlag & KReverseGeoCodingInProgress) > 0)
- {
- // stop n/w info change listener, since device may connect to n/w
- // and local trail will receive so many call backs on current n/w info change.
- iNetworkInfoChangeListener->StopNwInfoChangeNotifier();
- }
- else
- {
- iNetworkInfoChangeListener->StartNwInfoChangeNotifier();
- }
- LOG( "CLocationRecord::ReverseGeocodeComplete(), end" );
- }
-
-
-// ----------------------------------------------------------------------------
-// CLocationRecord::IsRegisteredAtHomeNetwork()
-// ----------------------------------------------------------------------------
-TBool CLocationRecord::IsRegisteredAtHomeNetwork()
- {
- LOG( "CLocationRecord::IsRegisteredAtHomeNetwork" );
- return iGeoTaggerObserver.IsRegisteredAtHomeNetwork();
- }
-
-// ----------------------------------------------------------------------------
-// CLocationRecord::GetHomeNetworkInfo()
-// ----------------------------------------------------------------------------
-const RMobilePhone::TMobilePhoneNetworkInfoV1&
- CLocationRecord::GetHomeNetworkInfo(TBool& aHomeNwInfoAvailableFlag)
- {
- LOG( "CLocationRecord::GetHomeNetworkInfo" );
- return iGeoTaggerObserver.GetHomeNetworkInfo(aHomeNwInfoAvailableFlag);
- }
-
-// ----------------------------------------------------------------------------
-// CLocationRecord::GetCurrentRegisterNw()
-// ----------------------------------------------------------------------------
-RMobilePhone::TMobilePhoneNetworkInfoV2& CLocationRecord::GetCurrentRegisterNw()
- {
- LOG( "CLocationRecord::GetCurrentRegisterNw ,begin" );
- return GetCurrentRegisteredNw();
- }
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::HandleTagQuery()
-// handle if only gps info available
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::HandleTagQueryL( CMdEQuery& aQuery )
- {
- LOG( "CLocationRecord::HandleTagQueryL(), begin" );
- TItemId countryTagId = 0;
- TItemId cityTagId = 0;
- TRAPD( error, FindCountryAndCityTagL( aQuery, countryTagId, cityTagId ) );
- if ( error == KErrNone )
- {
- LOG1("Media count - %d\n", iMediaItems.Count());
- if ( !countryTagId && !cityTagId )
- {
- if ( iMediaItems.Count() > 0 )
- {
- iLocationItems.Append( iMediaItems[0] );
- if((iMediaItems[0]->iFlag & KSnapMediaFile) > 0)
- {
- iLastMediaItem = *(iMediaItems[0]);
- }
- iMediaItems.Remove(0);
- iMediaItems.Compress();
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
- }
-
-#ifdef LOC_REVERSEGEOCODE
- if(!(iMediaHandlingFlag & KReverseGeoCodingInProgress) &&
- iLocationItems.Count() > 0)
- {
- iMediaHandlingFlag |= KReverseGeoCodingInProgress;
- if(iRevGeocoderPlugin)
- {
- iRevGeocoderPlugin->GetAddressByCoordinateL
- ( iLocationItems[0]->iLocationData.iPosition,
- iConnectionOption);
- }
- }
-#endif //LOC_REVERSEGEOCODE
- }
- else
- {
-
- iTagCreator->AttachTagsL( iMediaItems[0]->iObjectId, countryTagId, cityTagId );
- if ( iMediaItems.Count() > 0 )
- {
- iMediaItems[0]->iCountryTagId = countryTagId;
- iMediaItems[0]->iCityTagId = cityTagId;
- TLocationSnapshotItem* item = iMediaItems[0];
- if((iMediaItems[0]->iFlag & KSnapMediaFile) > 0)
- {
- iLastMediaItem = *item;
- }
- iMediaItems.Remove(0);
- iMediaItems.Compress();
- iMediaHandlingFlag &= ~KLocationQueryInProgress;
- delete item;
- }
- }
-
- }
- if ( iMediaItems.Count() > 0 )
- {
- FindLocationFromDBL();
- }
- LOG( "CLocationRecord::HandleTagQueryL(), end" );
- }
-
-
-// --------------------------------------------------------------------------
-// CLocationRecord::FindCountryAndCityTagL()
-// Go through all attached tags to get location tags only
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::FindCountryAndCityTagL( CMdEQuery& aQuery,
- TItemId& aCountryTagId, TItemId& aCityTagId )
- {
- LOG( "CLocationRecord::FindCountryAndCityTagL(), begin" );
- TItemId tagId = 0;
- CMdEObject* object = NULL;
- TInt error = KErrNone;
-
- const TInt count = aQuery.Count();
-
- for ( TInt i = 0; i < count; i++ )
- {
- CMdERelation& relation = static_cast<CMdERelation&>( aQuery.ResultItem( i ) );
-
- tagId = relation.RightObjectId();
- TRAP_IGNORE( object = iMdeSession->GetObjectL( tagId ) );
-
- if ( !aCountryTagId )
- {
- error = object->Uri().Find( KCountry );
- //just make sure 'country' appears first in the tag uri
- if ( error == KErrNone )
- {
- aCountryTagId = tagId;
- continue;
- }
- }
-
- if ( !aCityTagId )
- {
- error = object->Uri().Find( KCity );
- if ( error == KErrNone )
- {
- aCityTagId = tagId;
- }
- }
-
- if ( aCountryTagId && aCityTagId )
- {
- i = count;
- }
- }
- LOG( "CLocationRecord::FindCountryAndCityTagL(), end" );
-
- }
-
-// --------------------------------------------------------------------------
-// CLocationRecord::GetTagsL()
-// --------------------------------------------------------------------------
-//
-void CLocationRecord::GetTagsL( TItemId aImageID )
- {
- LOG( "CLocationRecord::GetTagsL(), begin" );
- CMdEObjectDef& tagObjectDef = iNamespaceDef->GetObjectDefL( Tag::KTagObject );
-
- if(iTagQuery)
- {
- iTagQuery->RemoveObserver(*this);
- iTagQuery->Cancel();
- delete iTagQuery;
- iTagQuery = NULL;
- }
-
- iTagQuery = iMdeSession->NewRelationQueryL( *iNamespaceDef, this );
- User::LeaveIfNull( iTagQuery );
-
- iTagQuery->SetResultMode( EQueryResultModeItem );
-
- // both left and right condition must match
- CMdERelationCondition& filterCond = iTagQuery->Conditions().
- AddRelationConditionL( ERelationConditionSideRight );
-
- // left one must be this image object.
- filterCond.LeftL().AddObjectConditionL( aImageID );
-
- // right one must be tag object
- filterCond.RightL().AddObjectConditionL( tagObjectDef );
-
- iTagQuery->FindL(); // results to a call to HandleQueryCompleted()
- LOG( "CLocationRecord::GetTagsL(), end" );
- }
-
-
-#endif //LOC_REVERSEGEOCODE
-
// End of file
-
-