author | Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> |
Thu, 27 May 2010 13:18:43 +0300 | |
changeset 28 | c461c7fa72c2 |
parent 25 | 8e4539ab1889 |
child 31 | 81125601ee77 |
--- a/harvester/client/bwincw/harvesterclientwinscw.def Fri May 14 16:17:23 2010 +0300 +++ b/harvester/client/bwincw/harvesterclientwinscw.def Thu May 27 13:18:43 2010 +0300 @@ -12,4 +12,6 @@ ?Stop@RHarvesterClient@@QAEXXZ @ 11 NONAME ABSENT ; void RHarvesterClient::Stop(void) ?HarvestFile@RHarvesterClient@@QAEXABVTDesC16@@AAV?$RArray@K@@H@Z @ 12 NONAME ; void RHarvesterClient::HarvestFile(class TDesC16 const &, class RArray<unsigned long> &, int) ?HarvestFileWithUID@RHarvesterClient@@QAEXABVTDesC16@@AAV?$RArray@K@@HVTUid@@@Z @ 13 NONAME ; void RHarvesterClient::HarvestFileWithUID(class TDesC16 const &, class RArray<unsigned long> &, int, class TUid) + ?AddSessionObserverL@RHarvesterClient@@QAEXAAVMHarvesterSessionObserver@@@Z @ 14 NONAME ; void RHarvesterClient::AddSessionObserverL(class MHarvesterSessionObserver &) + ?RemoveSessionObserver@RHarvesterClient@@QAEXXZ @ 15 NONAME ; void RHarvesterClient::RemoveSessionObserver(void)
--- a/harvester/client/eabi/harvesterclientarm.def Fri May 14 16:17:23 2010 +0300 +++ b/harvester/client/eabi/harvesterclientarm.def Thu May 27 13:18:43 2010 +0300 @@ -18,4 +18,6 @@ _ZN16RHarvesterClient18HarvestFileWithUIDERK7TDesC16R6RArrayImEi4TUid @ 17 NONAME _ZTI22CHarvesterRequestQueue @ 18 NONAME ; #<TI># _ZTV22CHarvesterRequestQueue @ 19 NONAME ; #<VT># + _ZN16RHarvesterClient19AddSessionObserverLER25MHarvesterSessionObserver @ 20 NONAME + _ZN16RHarvesterClient21RemoveSessionObserverEv @ 21 NONAME
--- a/harvester/client/group/harvesterclient.mmp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/client/group/harvesterclient.mmp Thu May 27 13:18:43 2010 +0300 @@ -41,6 +41,7 @@ SOURCEPATH ../src SOURCE harvesterclient.cpp SOURCE harvesterclientao.cpp +SOURCE harvestersessionwatcher.cpp SOURCE harvestereventobserverao.cpp SOURCE harvesterrequestactive.cpp SOURCE harvesterrequestqueue.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/harvester/client/inc/harvestersessionwatcher.h Thu May 27 13:18:43 2010 +0300 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +*/ + +#ifndef HARVESTERSESSIONWATCHER_H +#define HARVESTERSESSIONWATCHER_H + +#include <e32base.h> +#include <harvesterclient.h> + +NONSHARABLE_CLASS( CHarvesterSessionWatcher ) : public CActive + { +public: + + enum THarvesterWatcherState + { + EIdle, + ERunning, + ESCancelled + }; + + // Cancel and destroy + ~CHarvesterSessionWatcher(); + + // Two-phased constructor. + static CHarvesterSessionWatcher* NewL( MHarvesterSessionObserver& aObserver ); + +public: + + // from base class CActive + void RunL(); + TInt RunError( TInt aError ); + void DoCancel(); + +private: + + CHarvesterSessionWatcher( MHarvesterSessionObserver& aObserver ); + + void ConstructL(); + + void Start(); + +private: + + RProcess iProcess; + + THarvesterWatcherState iState; + + MHarvesterSessionObserver* iObserver; + }; + +#endif // HARVESTERSESSIONWATCHER_H
--- a/harvester/client/src/harvesterclient.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/client/src/harvesterclient.cpp Thu May 27 13:18:43 2010 +0300 @@ -22,6 +22,7 @@ #include "harvestereventobserverao.h" #include "harvesterlog.h" #include "harvesterclientao.h" +#include "harvestersessionwatcher.h" #include "mdsutils.h" #include "harvesterrequestactive.h" #include "mdscommoninternal.h" @@ -125,6 +126,8 @@ iHEO = NULL; + iSessionWatcher = NULL; + return err; } @@ -164,6 +167,9 @@ { WRITELOG( "RHarvesterClient::Close()" ); + delete iSessionWatcher; + iSessionWatcher = NULL; + // cancels Harvest Complete request if it exist at server UnregisterHarvestComplete(); @@ -199,8 +205,8 @@ if ( iHarvesterClientAO ) { - iHarvesterClientAO->SetObserver( aObserver ); - } + iHarvesterClientAO->SetObserver( aObserver ); + } iObserver = aObserver; } @@ -408,6 +414,33 @@ } // ---------------------------------------------------------------------------------------- +// AddSessionObserver +// ---------------------------------------------------------------------------------------- +// +EXPORT_C void RHarvesterClient::AddSessionObserverL( MHarvesterSessionObserver& aObserver ) + { + if( iSessionWatcher ) + { + delete iSessionWatcher; + iSessionWatcher = NULL; + } + iSessionWatcher = CHarvesterSessionWatcher::NewL( aObserver ); + } + +// ---------------------------------------------------------------------------------------- +// RemoveSessionObserver +// ---------------------------------------------------------------------------------------- +// +EXPORT_C void RHarvesterClient::RemoveSessionObserver() + { + if( iSessionWatcher ) + { + delete iSessionWatcher; + iSessionWatcher = NULL; + } + } + +// ---------------------------------------------------------------------------------------- // RegisterHarvestComplete // ---------------------------------------------------------------------------------------- //
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/harvester/client/src/harvestersessionwatcher.cpp Thu May 27 13:18:43 2010 +0300 @@ -0,0 +1,125 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Harvester session watcher +* +*/ + +#include "harvestersessionwatcher.h" + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CHarvesterSessionWatcher* CHarvesterSessionWatcher::NewL( MHarvesterSessionObserver& aObserver ) + { + CHarvesterSessionWatcher* self = new ( ELeave ) CHarvesterSessionWatcher( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- +// ~CHarvesterSessionWatcher +// --------------------------------------------------------------------------- +// +CHarvesterSessionWatcher::~CHarvesterSessionWatcher() // destruct + { + Cancel(); + } + +// --------------------------------------------------------------------------- +// CHarvesterSessionWatcher +// First-phase C++ constructor +// --------------------------------------------------------------------------- +// +CHarvesterSessionWatcher::CHarvesterSessionWatcher( MHarvesterSessionObserver& aObserver ) + : CActive( CActive::EPriorityStandard ), iState( EIdle ), iObserver( &aObserver ) + { + // Add to active scheduler. + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CHarvesterSessionWatcher::ConstructL() // second-phase constructor + { + _LIT( KHarvesterServerProcess, "HarvesterServer*" ); + TFullName name; + + // find Harvester Server + TFindProcess findProcess( KHarvesterServerProcess ); + if ( findProcess.Next(name) == KErrNone ) + { + User::LeaveIfError( iProcess.Open(name) ); + iState = ERunning; + // logon to get termination signal + iProcess.Logon( iStatus ); + SetActive(); + } + else + { + User::Leave( KErrCommsBreak ); + } + } + +// --------------------------------------------------------------------------- +// DoCancel +// --------------------------------------------------------------------------- +// +void CHarvesterSessionWatcher::DoCancel() + { + iState = ESCancelled; + iProcess.LogonCancel( iStatus ); + iProcess.Close(); + } + +// --------------------------------------------------------------------------- +// RunL +// --------------------------------------------------------------------------- +// +void CHarvesterSessionWatcher::RunL() + { + switch (iState) + { + case EIdle: + case ESCancelled: + { + break; + } + + case ERunning: + { + // server terminated, notify clients + iObserver->HarvesterServerTerminated(); + break; + } + + default: + break; + } + } + +// --------------------------------------------------------------------------- +// RunError +// --------------------------------------------------------------------------- +// +TInt CHarvesterSessionWatcher::RunError( TInt /*aError*/ ) + { + return KErrNone; + } +
--- a/harvester/common/inc/harvestercommon.h Fri May 14 16:17:23 2010 +0300 +++ b/harvester/common/inc/harvestercommon.h Thu May 27 13:18:43 2010 +0300 @@ -93,6 +93,9 @@ const TInt KHarvesterGetRootDirFlags = EDirsFirst; const TInt KHarvesterGetDirFlags = ESortByDate | EAscending | EDirsFirst; +_LIT( KExludedThumbPath, "_PAlbTN"); +_LIT( KExludedMediaArtPath, ".mediaartlocal"); + const TInt KOriginIgnored = 255; const TInt KOriginFastHarvest = 254;
--- a/harvester/harvesterplugins/AudioPlugin/group/harvesteraudioplugin.mmp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/AudioPlugin/group/harvesteraudioplugin.mmp Thu May 27 13:18:43 2010 +0300 @@ -60,6 +60,7 @@ LIBRARY centralrepository.lib LIBRARY caf.lib LIBRARY cafutils.lib +LIBRARY platformenv.lib PAGED BYTEPAIRCOMPRESSTARGET
--- a/harvester/harvesterplugins/AudioPlugin/inc/harvesteraudioplugin.h Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/AudioPlugin/inc/harvesteraudioplugin.h Thu May 27 13:18:43 2010 +0300 @@ -55,6 +55,7 @@ CMdEPropertyDef* iThumbnailPropertyDef; CMdEPropertyDef* iDatePropertyDef; CMdEPropertyDef* iDrmPropertyDef; + CMdEPropertyDef* iDefaultFolderPropertyDef; // Audio property definitions CMdEPropertyDef* iAlbumPropertyDef; @@ -145,7 +146,7 @@ * Get song name, artist, album, genre and composer from normal music * file (eg. mp3). */ - void GetMusicPropertiesL( CHarvesterData* aHD, TBool aIsAdd ); + void GetMusicPropertiesL( CHarvesterData* aHD, TBool aIsAdd, TPtrC aMimeType ); private: CAudioMDParser* iAudioParser; @@ -156,6 +157,9 @@ TBool iHarvestAlbumArt; TInt iMaxTextLength; + + HBufC* iPhoneSoundsPath; + HBufC* iMmcSoundsPath; };
--- a/harvester/harvesterplugins/AudioPlugin/inc/harvesteraudiopluginutils.h Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/AudioPlugin/inc/harvesteraudiopluginutils.h Thu May 27 13:18:43 2010 +0300 @@ -24,6 +24,10 @@ #include "mimetypemapping.h" +// Wma extension and mime type are shared with actual audio plugin +_LIT( KExtensionWma, "wma" ); +_LIT( KMimeTypeWma, "audio/x-ms-wma"); + enum TAudioMetadataHandling { EMetaDataUtilityHandling,
--- a/harvester/harvesterplugins/AudioPlugin/src/harvesteraudioplugin.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/AudioPlugin/src/harvesteraudioplugin.cpp Thu May 27 13:18:43 2010 +0300 @@ -23,6 +23,7 @@ #include <mdeobject.h> #include <centralrepository.h> #include <caf/caf.h> +#include <pathinfo.h> #include "harvesteraudioplugin.h" #include "harvesteraudiopluginutils.h" @@ -35,8 +36,6 @@ const TUid KHarvesterRepoUid = { 0x200009FE }; const TUint32 KEnableAlbumArtHarvest = 0x00090001; -_LIT( KExtensionWma, "wma" ); - CHarvesterAudioPluginPropertyDefs::CHarvesterAudioPluginPropertyDefs() : CBase() { } @@ -53,6 +52,7 @@ iItemTypePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty ); iTitlePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty ); iTimeOffsetPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KTimeOffsetProperty ); + iDefaultFolderPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KInDefaultFolder ); // Media property definitions CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MdeConstants::MediaObject::KMediaObject ); @@ -120,6 +120,9 @@ delete iAudioParser; delete iPropDefs; delete iTNM; + + delete iPhoneSoundsPath; + delete iMmcSoundsPath; } // --------------------------------------------------------------------------- @@ -141,6 +144,17 @@ { TRAP_IGNORE( iTNM = CThumbnailManager::NewL( *this ) ); } + + + TFileName sounds = PathInfo::SoundsPath(); + + TFileName phonePath = PathInfo::PhoneMemoryRootPath(); + phonePath.Append( sounds ); + iPhoneSoundsPath = phonePath.AllocL(); + + TFileName mmcPath = PathInfo::MemoryCardRootPath(); + mmcPath.Append( sounds ); + iMmcSoundsPath = mmcPath.Right( mmcPath.Length() - 1 ).AllocL(); } // --------------------------------------------------------------------------- @@ -245,7 +259,7 @@ // get properties for file types supported by CMetaDataUtility. if( mapping->iHandler == EMetaDataUtilityHandling ) { - GetMusicPropertiesL( aHD, aIsAdd ); + GetMusicPropertiesL( aHD, aIsAdd, mapping->iMimeType ); } } } @@ -328,7 +342,7 @@ // --------------------------------------------------------------------------- // void CHarvesterAudioPlugin::GetMusicPropertiesL( CHarvesterData* aHD, - TBool aIsAdd ) + TBool aIsAdd, TPtrC aMimeType ) { #ifdef _DEBUG TTime dStart, dStop; @@ -347,12 +361,17 @@ // Prefetch max text lengt for validity checking iMaxTextLength = iPropDefs->iCopyrightPropertyDef->MaxTextLengthL(); } - - TPtrC ext; - MdsUtils::GetExt( uri, ext ); - - // Check for possibly protected content - if( ext.CompareF( KExtensionWma ) == 0 ) + + TBool possiblyProtectedContent( EFalse ); + if( aMimeType.Length() > 0 ) + { + if( aMimeType == KMimeTypeWma ) + { + possiblyProtectedContent = ETrue; + } + } + + if( possiblyProtectedContent ) { ContentAccess::CContent* content = ContentAccess::CContent::NewLC( uri ); ContentAccess::CData* data = content->OpenContentLC( ContentAccess::EPeek ); @@ -366,7 +385,7 @@ } CleanupStack::PopAndDestroy( 2 ); // content, data } - + TBool parsed( EFalse ); TRAPD( parseError, parsed = iAudioParser->ParseL( uri ) ); @@ -395,7 +414,22 @@ TTimeIntervalSeconds timeOffsetSeconds = User::UTCOffset(); TInt16 timeOffsetMinutes = timeOffsetSeconds.Int() / 60; CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iTimeOffsetPropertyDef, &timeOffsetMinutes, aIsAdd ); - + + if( !mdeObject.Placeholder() ) + { + if( uri.FindF( iMmcSoundsPath->Des()) != KErrNotFound || + uri.FindF( iPhoneSoundsPath->Des()) != KErrNotFound ) + { + TBool inDefaultFolder( ETrue ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + else + { + TBool inDefaultFolder( EFalse ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + } + if ( song.Length() > 0 && song.Length() < KMaxTitleFieldLength ) {
--- a/harvester/harvesterplugins/AudioPlugin/src/harvesteraudiopluginutils.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/AudioPlugin/src/harvesteraudiopluginutils.cpp Thu May 27 13:18:43 2010 +0300 @@ -34,7 +34,6 @@ _LIT( KMimeTypeMxmf, "audio/vnd.nokia.mobile-xmf" ); _LIT( KMimeTypeWav, "audio/wav" ); _LIT( KMimeTypeAu, "audio/au" ); -_LIT( KMimeTypeWma, "audio/x-ms-wma"); _LIT( KMimeTypeAudioMatroska, "audio/x-matroska"); _LIT( KExtensionMp3, "mp3" ); @@ -48,7 +47,6 @@ _LIT( KExtensionMxmf, "mxmf" ); _LIT( KExtensionWav, "wav" ); _LIT( KExtensionAu, "au" ); -_LIT( KExtensionWma, "wma" ); _LIT( KExtensionNrt, "nrt" ); _LIT( KExtensionMka, "mka" );
--- a/harvester/harvesterplugins/ImagePlugin/group/harvesterimageplugin.mmp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/ImagePlugin/group/harvesterimageplugin.mmp Thu May 27 13:18:43 2010 +0300 @@ -48,12 +48,13 @@ LIBRARY efsrv.lib LIBRARY imageconversion.lib LIBRARY fbscli.lib -LIBRARY lbs.lib -LIBRARY etel3rdparty.lib +LIBRARY lbs.lib +LIBRARY etel3rdparty.lib LIBRARY harvesterplugininterface.lib LIBRARY mdeclient.lib -LIBRARY harvesterdata.lib -LIBRARY harvestercommon.lib +LIBRARY harvesterdata.lib +LIBRARY harvestercommon.lib +LIBRARY platformenv.lib PAGED BYTEPAIRCOMPRESSTARGET
--- a/harvester/harvesterplugins/ImagePlugin/inc/harvesterimageplugin.h Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/ImagePlugin/inc/harvesterimageplugin.h Thu May 27 13:18:43 2010 +0300 @@ -56,6 +56,7 @@ CMdEPropertyDef* iCaptureDatePropertyDef; CMdEPropertyDef* iResolutionUnitPropertyDef; CMdEPropertyDef* iArtistPropertyDef; + CMdEPropertyDef* iDefaultFolderPropertyDef; // Image property definitions CMdEPropertyDef* iPixelYDimensionPropertyDef; @@ -199,6 +200,9 @@ CHarvesterImagePluginPropertyDefs* iPropDefs; TInt iMaxTextLength; + + HBufC* iPhoneImagesPath; + HBufC* iMmcImagesPath; }; #endif
--- a/harvester/harvesterplugins/ImagePlugin/src/harvesterimageplugin.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/ImagePlugin/src/harvesterimageplugin.cpp Thu May 27 13:18:43 2010 +0300 @@ -20,12 +20,14 @@ #include <e32math.h> #include <locationdatatype.h> #include <harvesterdata.h> +#include <pathinfo.h> #include "harvesterlog.h" #include "mdsutils.h" #include "harvesterexifutil.h" #include "harvesterimageplugin.h" #include "mdeobjectwrapper.h" +#include "mdscommoninternal.h" using namespace MdeConstants; @@ -82,6 +84,7 @@ iSizePropertyDef = &objectDef.GetPropertyDefL( Object::KSizeProperty ); iTimeOffsetPropertyDef = &objectDef.GetPropertyDefL( Object::KTimeOffsetProperty ); iItemTypePropertyDef = &objectDef.GetPropertyDefL( Object::KItemTypeProperty ); + iDefaultFolderPropertyDef = &objectDef.GetPropertyDefL( Object::KInDefaultFolder ); // Media property definitions CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MediaObject::KMediaObject ); @@ -191,6 +194,9 @@ delete iPropDefs; + delete iPhoneImagesPath; + delete iMmcImagesPath; + iMimeTypeMappings.Close(); iFbs.Disconnect(); } @@ -255,7 +261,16 @@ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TImageMetadataHandling>( KExtOtb(), KOtbMime(), EOtherHandling ), cmp ) ); + + TFileName images = PathInfo::ImagesPath(); + TFileName phonePath = PathInfo::PhoneMemoryRootPath(); + phonePath.Append( images ); + iPhoneImagesPath = phonePath.AllocL(); + + TFileName mmcPath = PathInfo::MemoryCardRootPath(); + mmcPath.Append( images ); + iMmcImagesPath = mmcPath.Right( mmcPath.Length() - 1 ).AllocL(); } void CHarvesterImagePlugin::HarvestL( CHarvesterData* aHD ) @@ -711,8 +726,22 @@ // Item Type CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iItemTypePropertyDef, &aFileData.iMime16, aIsAdd ); + + const TDesC& uri = mdeObject.Uri(); + if( uri.FindF( iMmcImagesPath->Des()) != KErrNotFound || + uri.FindF( iPhoneImagesPath->Des()) != KErrNotFound || + uri.FindF( KDCIMFolder ) != KErrNotFound ) + { + TBool inDefaultFolder( ETrue ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + else + { + TBool inDefaultFolder( EFalse ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } } - + if( aFileData.iJpeg ) { // Time offset
--- a/harvester/harvesterplugins/OMADRMPlugin/group/harvesteromadrmplugin.mmp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/OMADRMPlugin/group/harvesteromadrmplugin.mmp Thu May 27 13:18:43 2010 +0300 @@ -53,6 +53,7 @@ LIBRARY mdeclient.lib LIBRARY harvesterdata.lib LIBRARY harvestercommon.lib +LIBRARY platformenv.lib PAGED BYTEPAIRCOMPRESSTARGET
--- a/harvester/harvesterplugins/OMADRMPlugin/inc/harvesteromadrmplugin.h Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/OMADRMPlugin/inc/harvesteromadrmplugin.h Thu May 27 13:18:43 2010 +0300 @@ -83,6 +83,7 @@ CMdEPropertyDef* iDescriptionPropertyDef; CMdEPropertyDef* iAuthorPropertyDef; CMdEPropertyDef* iGenrePropertyDef; + CMdEPropertyDef* iDefaultFolderPropertyDef; private: CHarvesterOmaDrmPluginPropertyDefs(); @@ -157,6 +158,15 @@ CHarvesterOmaDrmPluginPropertyDefs* iPropDefs; TInt iMaxTextLength; + + HBufC* iPhoneImagesPath; + HBufC* iMmcImagesPath; + + HBufC* iPhoneVideosPath; + HBufC* iMmcVideosPath; + + HBufC* iPhoneSoundsPath; + HBufC* iMmcSoundsPath; }; #endif // __CHarvesterOMADRMPlugin_H__
--- a/harvester/harvesterplugins/OMADRMPlugin/src/harvesteromadrmplugin.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/OMADRMPlugin/src/harvesteromadrmplugin.cpp Thu May 27 13:18:43 2010 +0300 @@ -17,10 +17,12 @@ #include <e32base.h> #include <caf/caf.h> +#include <pathinfo.h> #include "mdsutils.h" #include "harvesteromadrmplugin.h" #include "harvesterlog.h" +#include "harvestercommon.h" #include "mdeobjectwrapper.h" #include "mdscommoninternal.h" #include <harvesterdata.h> @@ -38,6 +40,7 @@ _LIT(KRmMimetype, "realmedia"); _LIT( KSvgMime, "image/svg+xml" ); +_LIT( KRingingToneMime, "application/vnd.nokia.ringing-tone" ); _LIT(KInUse, "InUse"); @@ -56,6 +59,7 @@ iSizePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KSizeProperty ); iItemTypePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty ); iTitlePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty ); + iDefaultFolderPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KInDefaultFolder ); CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MdeConstants::MediaObject::KMediaObject ); iDrmPropertyDef = &mediaDef.GetPropertyDefL( MdeConstants::MediaObject::KDRMProperty ); @@ -104,6 +108,15 @@ { WRITELOG("CHarvesterOMADRMPlugin::~CHarvesterOMADRMPlugin()"); + delete iPhoneImagesPath; + delete iMmcImagesPath; + + delete iPhoneVideosPath; + delete iMmcVideosPath; + + delete iPhoneSoundsPath; + delete iMmcSoundsPath; + delete iPropDefs; } @@ -113,6 +126,39 @@ void CHarvesterOMADRMPlugin::ConstructL() { WRITELOG( "CHarvesterOMADRMPlugin::ConstructL()" ); + + TFileName phoneRoot = PathInfo::PhoneMemoryRootPath(); + TFileName mmcRoot = PathInfo::MemoryCardRootPath(); + + TFileName images = PathInfo::ImagesPath(); + + TFileName phoneImagePath( phoneRoot ); + phoneImagePath.Append( images ); + iPhoneImagesPath = phoneImagePath.AllocL(); + + TFileName mmcImagePath( mmcRoot ); + mmcImagePath.Append( images ); + iMmcImagesPath = mmcImagePath.Right( mmcImagePath.Length() - 1 ).AllocL(); + + TFileName videos = PathInfo::VideosPath(); + + TFileName phoneVideoPath( phoneRoot ); + phoneVideoPath.Append( videos ); + iPhoneVideosPath = phoneVideoPath.AllocL(); + + TFileName mmcVideoPath( mmcRoot ); + mmcVideoPath.Append( videos ); + iMmcVideosPath = mmcVideoPath.Right( mmcVideoPath.Length() - 1 ).AllocL(); + + TFileName sounds = PathInfo::SoundsPath(); + + TFileName phoneSoundPath( phoneRoot ); + phoneSoundPath.Append( sounds ); + iPhoneSoundsPath = phoneSoundPath.AllocL(); + + TFileName mmcSoundPath( mmcRoot ); + mmcSoundPath.Append( sounds ); + iMmcSoundsPath = mmcSoundPath.Right( mmcSoundPath.Length() - 1 ).AllocL(); } void CHarvesterOMADRMPlugin::HarvestL( CHarvesterData* aHD ) @@ -250,7 +296,7 @@ } // --------------------------------------------------------------------------- -// HandleNewObjectL +// HandleObjectPropertiesL // --------------------------------------------------------------------------- // void CHarvesterOMADRMPlugin::HandleObjectPropertiesL( @@ -283,8 +329,57 @@ // File size CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iSizePropertyDef, &aVHD.iFileSize, aIsAdd ); + + TPtrC objectDefName( mdeObject.Def().Name() ); + if( objectDefName == MdeConstants::Image::KImageObject ) + { + const TDesC& uri = mdeObject.Uri(); + if( uri.FindF( iMmcImagesPath->Des()) != KErrNotFound || + uri.FindF( iPhoneImagesPath->Des()) != KErrNotFound || + uri.FindF( KDCIMFolder ) != KErrNotFound ) + { + TBool inDefaultFolder( ETrue ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + else + { + TBool inDefaultFolder( EFalse ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + } + else if( objectDefName == MdeConstants::Video::KVideoObject ) + { + const TDesC& uri = mdeObject.Uri(); + if( uri.FindF( iMmcVideosPath->Des()) != KErrNotFound || + uri.FindF( iPhoneVideosPath->Des()) != KErrNotFound || + uri.FindF( KDCIMFolder ) != KErrNotFound ) + { + TBool inDefaultFolder( ETrue ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + else + { + TBool inDefaultFolder( EFalse ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + } + else if( objectDefName == MdeConstants::Audio::KAudioObject ) + { + const TDesC& uri = mdeObject.Uri(); + if( uri.FindF( iMmcSoundsPath->Des()) != KErrNotFound || + uri.FindF( iPhoneSoundsPath->Des()) != KErrNotFound ) + { + TBool inDefaultFolder( ETrue ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + else + { + TBool inDefaultFolder( EFalse ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + } } - + // Item Type if(aVHD.iMimetype.Length() > 0) { @@ -344,6 +439,50 @@ err = content->GetStringAttribute( ContentAccess::EMimeType, mime ); delete content; } + +#ifdef _DEBUG + if( err == KErrInUse || err == KErrLocked ) + { + TPtrC fileName( aUri.Mid(2) ); + WRITELOG1( "CHarvesterOMADRMPlugin :: Checking open file handles to %S", &fileName ); + + CFileList* fileList = 0; + TOpenFileScan fileScan( iFs ); + + TRAP_IGNORE( fileScan.NextL( fileList ) ); + + while ( fileList ) + { + const TInt count( fileList->Count() ); + for (TInt i = 0; i < count; i++ ) + { + if ( (*fileList)[i].iName == aUri.Mid(2) ) + { + TFullName processName; + TFindThread find(_L("*")); + while( find.Next( processName ) == KErrNone ) + { + RThread thread; + TInt error = thread.Open( processName ); + + if ( error == KErrNone ) + { + if ( thread.Id().Id() == fileScan.ThreadId() ) + { + processName = thread.Name(); + thread.Close(); + WRITELOG1( "CHarvesterOMADRMPlugin :: %S has a file handle open", &processName ); + break; + } + thread.Close(); + } + } + } + } + TRAP_IGNORE( fileScan.NextL( fileList ) ); + } + } +#endif if( err == KErrInUse || err == KErrLocked ) { @@ -391,6 +530,13 @@ aObjectType.Copy( KVideo ); return; } + + if( mime == KRingingToneMime ) + { + WRITELOG1( "CHarvesterOMADRMPlugin::GetObjectType - mimetype %S. Object type changed to Audio", &mime ); + aObjectType.Copy( KAudio ); + return; + } } WRITELOG1( "CHarvesterOMADRMPlugin::GetObjectType - ERROR: mimetype %S. No object type found", &mime );
--- a/harvester/harvesterplugins/RTPPlugin/inc/harvesterrtpplugin.h Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/RTPPlugin/inc/harvesterrtpplugin.h Thu May 27 13:18:43 2010 +0300 @@ -43,6 +43,7 @@ CMdEPropertyDef* iSizePropertyDef; CMdEPropertyDef* iItemTypePropertyDef; CMdEPropertyDef* iTitlePropertyDef; + CMdEPropertyDef* iDefaultFolderPropertyDef; // Media property definitions CMdEPropertyDef* iCaptureDatePropertyDef;
--- a/harvester/harvesterplugins/RTPPlugin/src/harvesterrtpplugin.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/RTPPlugin/src/harvesterrtpplugin.cpp Thu May 27 13:18:43 2010 +0300 @@ -50,6 +50,7 @@ iSizePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KSizeProperty ); iItemTypePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty ); iTitlePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty ); + iDefaultFolderPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KInDefaultFolder ); CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MdeConstants::MediaObject::KMediaObject ); iCaptureDatePropertyDef =& mediaDef.GetPropertyDefL( MdeConstants::MediaObject::KCaptureDateProperty ); @@ -285,6 +286,10 @@ // Mime Type CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iItemTypePropertyDef, &aClipDetails.iMimeType, aIsAdd ); + // Default folder + TBool inDefaultFolder( ETrue ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, + *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); } // Title (is set from URI by default)
--- a/harvester/harvesterplugins/VideoPlugin/group/harvestervideoplugin.mmp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/VideoPlugin/group/harvestervideoplugin.mmp Thu May 27 13:18:43 2010 +0300 @@ -54,6 +54,7 @@ LIBRARY harvestercommon.lib LIBRARY caf.lib LIBRARY cafutils.lib +LIBRARY platformenv.lib STATICLIBRARY hxmetadatautil.lib
--- a/harvester/harvesterplugins/VideoPlugin/inc/harvestervideoplugin.h Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/VideoPlugin/inc/harvestervideoplugin.h Thu May 27 13:18:43 2010 +0300 @@ -139,6 +139,7 @@ CMdEPropertyDef* iArtistPropertyDef; CMdEPropertyDef* iDescriptionPropertyDef; CMdEPropertyDef* iDrmPropertyDef; + CMdEPropertyDef* iDefaultFolderPropertyDef; CMdEPropertyDef* iAudioFourCCDef; @@ -234,6 +235,9 @@ // not own CHarvesterMediaIdUtil* iMediaIdUtil; + + HBufC* iPhoneVideosPath; + HBufC* iMmcVideosPath; }; #endif // __CHARVESTERVIDEOPLUGIN_H__
--- a/harvester/harvesterplugins/VideoPlugin/src/harvestervideoplugin.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/VideoPlugin/src/harvestervideoplugin.cpp Thu May 27 13:18:43 2010 +0300 @@ -21,6 +21,7 @@ #include <hxmetadatautil.h> #include <hxmetadatakeys.h> #include <caf/caf.h> +#include <pathinfo.h> #include "mdsutils.h" #include "harvestervideoplugin.h" @@ -98,6 +99,7 @@ iTimeOffsetPropertyDef = &objectDef.GetPropertyDefL( Object::KTimeOffsetProperty ); iItemTypePropertyDef = &objectDef.GetPropertyDefL( Object::KItemTypeProperty ); iTitlePropertyDef = &objectDef.GetPropertyDefL( Object::KTitleProperty ); + iDefaultFolderPropertyDef = &objectDef.GetPropertyDefL( Object::KInDefaultFolder ); CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MediaObject::KMediaObject ); iReleaseDatePropertyDef = &mediaDef.GetPropertyDefL( MediaObject::KReleaseDateProperty ); @@ -164,6 +166,9 @@ iMimeTypeMappings.Close(); RMediaIdUtil::ReleaseInstance(); + delete iPhoneVideosPath; + delete iMmcVideosPath; + WRITELOG("CHarvesterVideoPlugin::CHarvesterVideoPlugin()"); } @@ -269,6 +274,16 @@ TVideoMetadataHandling( TVideoMetadataHandling::EHexilMetadataHandling, KVideo(), KMimeTypeWmv(), KMimeTypeWmv() ) ), cmp ) ); + + TFileName videos = PathInfo::VideosPath(); + + TFileName phonePath = PathInfo::PhoneMemoryRootPath(); + phonePath.Append( videos ); + iPhoneVideosPath = phonePath.AllocL(); + + TFileName mmcPath = PathInfo::MemoryCardRootPath(); + mmcPath.Append( videos ); + iMmcVideosPath = mmcPath.Right( mmcPath.Length() - 1 ).AllocL(); iMediaIdUtil = &RMediaIdUtil::GetInstanceL(); } @@ -399,7 +414,7 @@ } else { - WRITELOG1( "CHarvesterVideoPlugin::HarvestSingleFileL() - TRAP error: %d", error ); + WRITELOG1( "CHarvesterVideoPlugin::HarvestL() - TRAP error: %d", error ); TInt convertedError = KErrNone; MdsUtils::ConvertTrapError( error, convertedError ); aHD->SetErrorCode( convertedError ); @@ -434,6 +449,12 @@ void CHarvesterVideoPlugin::GatherDataL( CMdEObject& aMetadataObject, CVideoHarvestData& aVHD ) { +#ifdef _DEBUG + TTime dStart, dStop; + dStart.UniversalTime(); + dStop.UniversalTime(); + WRITELOG1( "CHarvesterVideoPlugin::GatherDataL start %d us", (TInt)dStop.MicroSecondsFrom(dStart).Int64() ); +#endif const TDesC& uri = aMetadataObject.Uri(); WRITELOG1( "CHarvesterVideoPlugin - Gather data from file %S", &uri ); @@ -759,7 +780,6 @@ aVHD.iMimeBuf = mime.Alloc(); } - helixMetadata->ResetL(); CleanupStack::PopAndDestroy( helixMetadata ); // don't destory mime type pointers just clean array @@ -933,6 +953,11 @@ WRITELOG( "CHarvesterVideoPlugin - Closing file" ); CleanupStack::PopAndDestroy( &file ); +#ifdef _DEBUG + dStop.UniversalTime(); + WRITELOG1( "CHarvesterVideoPlugin::GatherDataL start %d us", (TInt)dStop.MicroSecondsFrom(dStart).Int64() ); +#endif + WRITELOG( "CHarvesterVideoPlugin - Start adding data to object" ); } @@ -970,6 +995,21 @@ // File size CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iSizePropertyDef, &aVHD.iFileSize, aIsAdd ); + + // Default folder + const TDesC& uri = mdeObject.Uri(); + if( uri.FindF( iMmcVideosPath->Des()) != KErrNotFound || + uri.FindF( iPhoneVideosPath->Des()) != KErrNotFound || + uri.FindF( KDCIMFolder ) != KErrNotFound ) + { + TBool inDefaultFolder( ETrue ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + else + { + TBool inDefaultFolder( EFalse ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } } // Item Type
--- a/harvester/harvesterplugins/WMVPlugin/group/harvesterwmvplugin.mmp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/WMVPlugin/group/harvesterwmvplugin.mmp Thu May 27 13:18:43 2010 +0300 @@ -52,6 +52,7 @@ LIBRARY harvesterplugininterface.lib LIBRARY mdeclient.lib LIBRARY harvesterdata.lib +LIBRARY platformenv.lib PAGED BYTEPAIRCOMPRESSTARGET
--- a/harvester/harvesterplugins/WMVPlugin/inc/harvesterwmvplugin.h Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/WMVPlugin/inc/harvesterwmvplugin.h Thu May 27 13:18:43 2010 +0300 @@ -47,6 +47,7 @@ CMdEPropertyDef* iDescriptionPropertyDef; CMdEPropertyDef* iAuthorPropertyDef; CMdEPropertyDef* iGenrePropertyDef; + CMdEPropertyDef* iDefaultFolderPropertyDef; private: CHarvesterWmvPluginPropertyDefs(); @@ -184,6 +185,9 @@ CHarvesterWmvPluginPropertyDefs* iPropDefs; TInt iMaxTextLength; + + HBufC* iPhoneVideosPath; + HBufC* iMmcVideosPath; }; #endif // C_HARVESTERWMVPLUGIN_H
--- a/harvester/harvesterplugins/WMVPlugin/src/harvesterwmvplugin.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/harvesterplugins/WMVPlugin/src/harvesterwmvplugin.cpp Thu May 27 13:18:43 2010 +0300 @@ -17,6 +17,7 @@ #include <e32std.h> #include <caf/caf.h> +#include <pathinfo.h> #include "mdsutils.h" #include "harvesterdata.h" @@ -45,6 +46,7 @@ iSizePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KSizeProperty ); iItemTypePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty ); iTitlePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty ); + iDefaultFolderPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KInDefaultFolder ); CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MdeConstants::MediaObject::KMediaObject ); iDrmPropertyDef = &mediaDef.GetPropertyDefL( MdeConstants::MediaObject::KDRMProperty ); @@ -87,6 +89,9 @@ { WRITELOG( "CHarvesterWMVPlugin::~CHarvesterWMVPlugin()" ); delete iPropDefs; + + delete iPhoneVideosPath; + delete iMmcVideosPath; } // --------------------------------------------------------------------------- @@ -164,6 +169,17 @@ void CHarvesterWMVPlugin::ConstructL() { WRITELOG( "CHarvesterWMVPlugin::ConstructL()" ); + + TFileName videos = PathInfo::VideosPath(); + + TFileName phonePath = PathInfo::PhoneMemoryRootPath(); + phonePath.Append( videos ); + iPhoneVideosPath = phonePath.AllocL(); + + TFileName mmcPath = PathInfo::MemoryCardRootPath(); + mmcPath.Append( videos ); + iMmcVideosPath = mmcPath.Right( mmcPath.Length() - 1 ).AllocL(); + SetPriority( KHarvesterPriorityHarvestingPlugin - 1 ); } @@ -302,6 +318,20 @@ // Mime Type CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iItemTypePropertyDef, &aClipDetails.iMimeType, aIsAdd ); + + const TDesC& uri = mdeObject.Uri(); + if( uri.FindF( iMmcVideosPath->Des()) != KErrNotFound || + uri.FindF( iPhoneVideosPath->Des()) != KErrNotFound || + uri.FindF( KDCIMFolder ) != KErrNotFound ) + { + TBool inDefaultFolder( ETrue ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } + else + { + TBool inDefaultFolder( EFalse ); + CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iDefaultFolderPropertyDef, &inDefaultFolder, aIsAdd ); + } } // DRM protection
--- a/harvester/monitorplugins/mdsfileserverplugin/inc/mdsfileserverplugin.h Fri May 14 16:17:23 2010 +0300 +++ b/harvester/monitorplugins/mdsfileserverplugin/inc/mdsfileserverplugin.h Thu May 27 13:18:43 2010 +0300 @@ -111,10 +111,15 @@ * * @param aFilename Filename to check. * @param aIsDirectory ETrue if filename points to directory. + * @param aFsPlugin Reference to Fileserver Plugin. + * @param aDelete Indicates if file deletion is in question. * * @return EFalse, if path or file has a hidden or system attribute set. */ - TBool CheckAttribs( const TDesC& aFilename, TBool& aIsDirectory ) const; + TBool CheckAttribs( const TDesC& aFilename, + TBool& aIsDirectory, + RFsPlugin& aFsPlugin, + TBool aDelete) const; /** * Check if directory is named correctly and ends with backslash. @@ -127,6 +132,19 @@ * Check if harvester (main observer) is alive */ TBool CheckHarvesterStatus(); + + /** + * Checks file entry path and attributes for validity + * + * @param aFilename Filename to check. + * @param aIsDirectory ETrue if filename points to directory. + * @param aRequest Reference to request from file server. + * @param aDelete Indicates if file deletion is in question. + * + * @return EFalse if file is not to be handled + */ + TBool CheckIfValidFile( const TDesC& aFilename, + TBool& aIsDirectory, TFsPluginRequest& aRequest, TBool aDelete ); #ifdef _DEBUG_EVENTS void RegisterDebugEventsL(); @@ -151,12 +169,7 @@ RPointerArray<CMdsFSPQueueItem> iQueue; RPointerArray<TDesC> iIgnorePaths; - - /** - * File system client session. - */ - RFs iFsSession; - + RPointerArray<TDesC> iCreatedFiles; RPointerArray<TDesC> iModifiedFiles;
--- a/harvester/monitorplugins/mdsfileserverplugin/src/mdsfileserverplugin.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/monitorplugins/mdsfileserverplugin/src/mdsfileserverplugin.cpp Thu May 27 13:18:43 2010 +0300 @@ -21,6 +21,8 @@ #include "mdsutils.h" _LIT( KMdsFileServerPlugin, "MdsFileServerPlugin" ); +_LIT( KExludedThumbPath, "\\_PAlbTN\\"); +_LIT( KExludedMediaArtPath, "\\.mediaartlocal\\"); /* Server name */ _LIT( KHarvesterServerName, "HarvesterServer" ); @@ -45,8 +47,13 @@ { WRITELOG( "CMdsFileServerPlugin::~CMdsFileServerPlugin()" ); - TRAP_IGNORE( DisableL() ); - iFsSession.Close(); +#ifdef _DEBUG + TRAPD( error, DisableL() ); + _LIT( KPanicCategory,"CMdsFileServerPlugin" ); + __ASSERT_DEBUG( error == KErrNone, User::Panic( KPanicCategory, error ) ); +#else + TRAP_IGNORE( DisableL() ); +#endif iCreatedFiles.ResetAndDestroy(); iCreatedFiles.Close(); @@ -81,7 +88,6 @@ void CMdsFileServerPlugin::InitialiseL() { WRITELOG( "CMdsFileServerPlugin::InitializeL()" ); - User::LeaveIfError( iFsSession.Connect() ); } //----------------------------------------------------------------------------- @@ -174,7 +180,7 @@ // TInt CMdsFileServerPlugin::DoRequestL( TFsPluginRequest& aRequest ) { - // ignore event if there is no any client listening + // ignore event if there are not any clients listening if( iConnectionCount <= 0 ) { WRITELOG( "CMdsFileServerPlugin::DoRequestL() - no clients -> ignore event" ); @@ -183,9 +189,6 @@ TInt function = aRequest.Function(); - iFileName.Zero(); - iNewFileName.Zero(); - #ifdef _DEBUG_EVENTS PrintDebugEvents( function ); #endif @@ -201,7 +204,7 @@ return KErrNone; } - const TBool formatFunction = function == EFsFormatOpen || function == EFsFormatSubClose; + const TBool formatFunction( function == EFsFormatOpen || function == EFsFormatSubClose ); WRITELOG1( "----- CMdsFileServerPlugin::DoRequestL() - plugin function: %d -----", function ); @@ -218,9 +221,7 @@ } // get process id - TUid processId = { 0 }; - - processId = aRequest.Message().SecureId(); + TUid processId = aRequest.Message().SecureId(); TBool isDirectory = EFalse; @@ -235,6 +236,7 @@ return KErrNone; } WRITELOG2( "CMdsFileServerPlugin::DoRequestL() - newFileName: '%S' %d", &iNewFileName, newNameErr ); + TBool setToBeDeleted( EFalse ); if ( newNameErr == KErrNone ) { if ( !CheckPath(iNewFileName) ) @@ -248,47 +250,43 @@ } // file moved to ignored path, delete from db function = EFsDelete; + setToBeDeleted = ETrue; } - if ( !CheckAttribs( iNewFileName, isDirectory ) ) + if( !setToBeDeleted ) { - WRITELOG( "CMdsFileServerPlugin::DoRequestL() - new path attribute check failed" ); - if( !CheckAttribs(iFileName, isDirectory) ) + RFsPlugin fsPlugin( aRequest ); + const TInt rfsPluginErr = fsPlugin.Connect(); + + if ( ( rfsPluginErr == KErrNone ) && !CheckAttribs( iNewFileName, isDirectory, fsPlugin, EFalse ) ) { - WRITELOG( "CMdsFileServerPlugin::DoRequestL() - old path attribute check failed" ); - WRITELOG( "CMdsFileServerPlugin::DoRequestL() - ignore file" ); - return KErrNone; + WRITELOG( "CMdsFileServerPlugin::DoRequestL() - new path attribute check failed" ); + if( !CheckAttribs(iFileName, isDirectory, fsPlugin, EFalse) ) + { + WRITELOG( "CMdsFileServerPlugin::DoRequestL() - old path attribute check failed" ); + WRITELOG( "CMdsFileServerPlugin::DoRequestL() - ignore file" ); + fsPlugin.Close(); + return KErrNone; + } + // file set to hidden, delete from db + function = EFsDelete; } - // file set to hidden, delete from db - function = EFsDelete; + fsPlugin.Close(); } } else { - if ( !CheckPath(iFileName) ) + if( !CheckIfValidFile(iFileName, isDirectory, aRequest, EFalse) ) { - WRITELOG( "CMdsFileServerPlugin::DoRequestL() - path not supported" ); - return KErrNone; - } - - if ( !CheckAttribs(iFileName, isDirectory) ) - { - WRITELOG( "CMdsFileServerPlugin::DoRequestL() - attribute check failed" ); return KErrNone; } } } else if ( !formatFunction ) { - if ( !CheckPath(iFileName) ) + const TBool deleteFunction( function == EFsDelete ); + if( !CheckIfValidFile(iFileName, isDirectory, aRequest, deleteFunction) ) { - WRITELOG( "CMdsFileServerPlugin::DoRequestL() - path not supported" ); - return KErrNone; - } - - if ( !CheckAttribs( iFileName, isDirectory ) ) - { - WRITELOG( "CMdsFileServerPlugin::DoRequestL() - attribute check failed" ); return KErrNone; } } @@ -306,14 +304,23 @@ case EFsFileCreate: { #ifdef _DEBUG - if (function == EFsFileCreate) + if (function == EFsFileCreate) + { WRITELOG( "CMdsFileServerPlugin::DoRequestL() - EFsFileCreate" ); - if (function == EFsFileReplace) - WRITELOG( "CMdsFileServerPlugin::DoRequestL() - EFsFileReplace" ); + } #endif - iCreatedFiles.Append( iFileName.AllocL() ); - User::LeaveIfError( UnregisterIntercept(EFsFileSetModified, EPostIntercept) ); + HBufC* createdFileName = iFileName.Alloc(); + if( createdFileName ) + { + // Ownership transferred if succeeded + const TInt appendError( iCreatedFiles.Append( createdFileName ) ); + if( appendError != KErrNone ) + { + delete createdFileName; + createdFileName = NULL; + } + } return KErrNone; } @@ -331,13 +338,18 @@ delete iCreatedFiles[i]; iCreatedFiles.Remove( i ); - //Have to check whether file has been hidden - if ( CheckAttribs( iFileName, isDirectory ) ) - { - found = ETrue; - } - - User::LeaveIfError( RegisterIntercept(EFsFileSetModified, EPostIntercept) ); + //Have to check whether file has been hidden + RFsPlugin fsPlugin( aRequest ); + const TInt rfsPluginError( fsPlugin.Connect() ); + if( (rfsPluginError == KErrNone) && CheckAttribs( iFileName, isDirectory, fsPlugin, EFalse ) ) + { + found = ETrue; + } + else if( rfsPluginError != KErrNone ) + { + found = ETrue; + } + fsPlugin.Close(); } } @@ -377,10 +389,34 @@ break; case EFsFileSetModified: - + { WRITELOG( "CMdsFileServerPlugin::DoRequestL() - EFsFileSetModified" ); - iModifiedFiles.Append( iFileName.AllocL() ); + + for ( TInt i = iCreatedFiles.Count(); --i >= 0; ) + { + // If file has been created but not closed, do not handle modified events + // for that file before the application that has created the file is done with writing + // it to the disk. + if ( MdsUtils::Compare( iFileName, *(iCreatedFiles[i]) ) == 0 ) + { + return KErrNone; + } + } + + HBufC* modifiedFileName = iFileName.Alloc(); + if( modifiedFileName ) + { + // Ownership transferred if succeeded + const TInt appendError( iModifiedFiles.Append( modifiedFileName ) ); + if( appendError != KErrNone ) + { + delete modifiedFileName; + modifiedFileName = NULL; + } + } + fileEventType = EMdsFileModified; + } break; case EFsSetEntry: @@ -428,17 +464,13 @@ { WRITELOG( "CMdsFileServerPlugin::DoRequestL() - EFsFormatOpen" ); // get the drive letter - RFsPlugin fsplugin( aRequest ); - const TInt rfsPluginError( fsplugin.Connect() ); - if( rfsPluginError == KErrNone ) + RFsPlugin fsPlugin( aRequest ); + err = fsPlugin.Connect(); + if( err == KErrNone ) { - err = fsplugin.Volume( volInfo, drvNumber ); + err = fsPlugin.Volume( volInfo, drvNumber ); } - else - { - err = iFsSession.Volume( volInfo, drvNumber ); - } - fsplugin.Close(); + fsPlugin.Close(); if( KErrNone == err ) { @@ -525,6 +557,9 @@ } } + iFileName.Zero(); + iNewFileName.Zero(); + WRITELOG( "CMdsFileServerPlugin::DoRequestL() - return" ); return err; } @@ -780,7 +815,12 @@ HBufC* fn = status.iFileName.Alloc(); if ( fn ) { - iPaths.InsertInOrder(fn, TLinearOrder<TDesC>(CMdsFileServerPlugin::Compare)); + const TInt insertError( iPaths.InsertInOrder(fn, TLinearOrder<TDesC>(CMdsFileServerPlugin::Compare))); + if( insertError != KErrNone ) + { + delete fn; + fn = NULL; + } } else { @@ -870,7 +910,12 @@ HBufC* fn = status.iFileName.Alloc(); if ( fn ) { - iIgnorePaths.InsertInOrder(fn, TLinearOrder<TDesC>(CMdsFileServerPlugin::Compare)); + const TInt insertError( iIgnorePaths.InsertInOrder(fn, TLinearOrder<TDesC>(CMdsFileServerPlugin::Compare))); + if( insertError != KErrNone ) + { + delete fn; + fn = NULL; + } } else { @@ -947,6 +992,14 @@ { return EFalse; } + else if( MdsUtils::Find( aFilename, KExludedThumbPath ) != KErrNotFound ) + { + return EFalse; + } + else if( MdsUtils::Find( aFilename, KExludedMediaArtPath ) != KErrNotFound ) + { + return EFalse; + } } // check if notification path @@ -981,7 +1034,7 @@ //----------------------------------------------------------------------------- // TBool CMdsFileServerPlugin::CheckAttribs( const TDesC& aFilename, - TBool& aIsDirectory ) const + TBool& aIsDirectory, RFsPlugin& aFsPlugin, TBool aDelete ) const { // find last backslash from filename and // take drive and path from filename including last backslash @@ -993,29 +1046,31 @@ } TPtrC path( aFilename.Left( pos + 1 ) ); - TUint att = 0; + TEntry entry; - // check if path is hidden or system path - TInt err = iFsSession.Att( path, att ); + // check if path is hidden + TInt err = aFsPlugin.Entry( path, entry ); if ( err == KErrNone ) - { - if ( att & KEntryAttHidden || att & KEntryAttSystem ) + { + if ( entry.iAtt & KEntryAttHidden ) { return EFalse; } } - // or is the file hidden or system file - att = 0; - err = iFsSession.Att( aFilename, att ); - if ( err == KErrNone ) + if( !aDelete ) { - if ( att & KEntryAttHidden || att & KEntryAttSystem ) + // check if the file hidden or system file + err = aFsPlugin.Entry( aFilename, entry ); + if ( err == KErrNone ) { - return EFalse; - } + if ( entry.iAtt & KEntryAttHidden || entry.iAtt & KEntryAttSystem ) + { + return EFalse; + } - aIsDirectory = att & KEntryAttDir ? ETrue : EFalse; + aIsDirectory = entry.iAtt & KEntryAttDir ? ETrue : EFalse; + } } return ETrue; @@ -1074,6 +1129,35 @@ } //----------------------------------------------------------------------------- +// CheckIfValidFile +//----------------------------------------------------------------------------- +// +TBool CMdsFileServerPlugin::CheckIfValidFile( const TDesC& aFilename, + TBool& aIsDirectory, TFsPluginRequest& aRequest, TBool aDelete ) + { + if ( !CheckPath(aFilename) ) + { + WRITELOG( "CMdsFileServerPlugin::CheckIfValidFile() - path not supported" ); + return EFalse; + } + + RFsPlugin fsPlugin( aRequest ); + const TInt rfsPluginErr = fsPlugin.Connect(); + + if( rfsPluginErr == KErrNone ) + { + if ( !CheckAttribs(aFilename, aIsDirectory, fsPlugin, aDelete) ) + { + WRITELOG( "CMdsFileServerPlugin::CheckIfValidFile() - attribute check failed" ); + return EFalse; + } + } + fsPlugin.Close(); + + return ETrue; + } + +//----------------------------------------------------------------------------- // CMdsFileServerPluginFactory implementation //----------------------------------------------------------------------------- //
--- a/harvester/monitorplugins/mmcplugin/src/mmcfilelist.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/monitorplugins/mmcplugin/src/mmcfilelist.cpp Thu May 27 13:18:43 2010 +0300 @@ -27,6 +27,7 @@ #include "fsutil.h" #include "harvestercenreputil.h" #include "harvestereventmanager.h" +#include "harvestercommon.h" #include <placeholderdata.h> #include <harvesterdata.h> #include "harvesterpluginfactory.h" @@ -135,7 +136,16 @@ } else { - name.Append( entry.iName ); + // If thumbnail folder is detected, skip it + if( entry.iName.Compare( KExludedThumbPath ) != 0 && + entry.iName.Compare( KExludedMediaArtPath ) != 0 ) + { + name.Append( entry.iName ); + } + else + { + continue; + } } if ( entry.IsDir() ) @@ -157,33 +167,11 @@ { continue; } - - // check if folder is hidden or system folder - TUint att = 0; - TInt attErr = aFs.Att( name, att ); - if ( attErr == KErrNone ) - { - if ( att & KEntryAttHidden || att & KEntryAttSystem ) - { - continue; - } - } path->AppendL( name ); } else - { - // check if file is hidden or system file - TUint att = 0; - TInt attErr = aFs.Att( name, att ); - if ( attErr == KErrNone ) - { - if ( att & KEntryAttHidden || att & KEntryAttSystem ) - { - continue; - } - } - + { CPlaceholderData* phData = CPlaceholderData::NewL(); CleanupStack::PushL( phData ); phData->SetUri( name );
--- a/harvester/monitorplugins/mmcplugin/src/mmcmonitorplugin.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/monitorplugins/mmcplugin/src/mmcmonitorplugin.cpp Thu May 27 13:18:43 2010 +0300 @@ -113,8 +113,7 @@ TUint32 hdMediaId( 0 ); hdMediaId = iMountTask->GetInternalDriveMediaId(); - const TInt count( medias.Count() ); - for ( TInt i = 0; i < count; i++ ) + for( TInt i = medias.Count() - 1; i >=0; i-- ) { TRAP_IGNORE( iMdEClient->GetMediaL( medias[i].iMediaId, driveLetter, presentState ) ); @@ -349,9 +348,11 @@ } iFs.Drive( driveInfo, i ); - if ( ((driveInfo.iDriveAtt & KDriveAttRemovable) || (driveInfo.iDriveAtt & KDriveAttLogicallyRemovable) || - (driveInfo.iType == EMediaHardDisk && driveStatus & DriveInfo::EDriveInternal) ) && - (driveInfo.iType != EMediaNotPresent) ) + if( ( (driveStatus & DriveInfo::EDriveRemovable) || + (driveInfo.iType == EMediaHardDisk && driveStatus & DriveInfo::EDriveInternal) || + (driveInfo.iDriveAtt & KDriveAttLogicallyRemovable) || + (driveInfo.iDriveAtt & KDriveAttRemovable) ) && + (driveInfo.iType != EMediaNotPresent) ) { count++; // DEBUG INFO
--- a/harvester/server/inc/harvesterao.h Fri May 14 16:17:23 2010 +0300 +++ b/harvester/server/inc/harvesterao.h Thu May 27 13:18:43 2010 +0300 @@ -63,6 +63,7 @@ CMdEPropertyDef* iOriginPropertyDef; CMdEPropertyDef* iItemTypePropertyDef; CMdEPropertyDef* iTitlePropertyDef; + CMdEPropertyDef* iDefaultFolderPropertyDef; // Media property definitions CMdEPropertyDef* iPreinstalledPropertyDef; @@ -306,6 +307,8 @@ TBool CheckForCameraItem( CHarvesterData* aHd, TDes& aObjectDef ); + void AddDefaultFolderDataL( CMdEObject* aObject ); + private: struct THarvestFileRequest @@ -568,6 +571,15 @@ TBool iFastHarvestNeeded; TBool iHarvestingPlaceholders; + + HBufC* iPhoneImagesPath; + HBufC* iMmcImagesPath; + + HBufC* iPhoneVideosPath; + HBufC* iMmcVideosPath; + + HBufC* iPhoneSoundsPath; + HBufC* iMmcSoundsPath; }; #endif //__CHARVESTERAO_H__
--- a/harvester/server/src/harvesterao.cpp Fri May 14 16:17:23 2010 +0300 +++ b/harvester/server/src/harvesterao.cpp Thu May 27 13:18:43 2010 +0300 @@ -22,6 +22,7 @@ #include <rlocationobjectmanipulator.h> #include <placeholderdata.h> #include <harvesterclientdata.h> +#include <pathinfo.h> using namespace ContentAccess; @@ -34,6 +35,7 @@ #include "harvesterdata.h" #include "ondemandao.h" #include "harvestercommon.h" +#include "mdscommoninternal.h" #include "processoriginmapperinterface.h" #include "mdeobjecthandler.h" #include "harvestereventmanager.h" @@ -79,6 +81,7 @@ iOriginPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KOriginProperty ); iItemTypePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty ); iTitlePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty ); + iDefaultFolderPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KInDefaultFolder ); CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MdeConstants::MediaObject::KMediaObject ); iPreinstalledPropertyDef = &mediaDef.GetPropertyDefL( MdeConstants::MediaObject::KPreinstalledProperty ); @@ -216,6 +219,15 @@ delete iPropDefs; delete iCameraExtensionArray; + delete iPhoneImagesPath; + delete iMmcImagesPath; + + delete iPhoneVideosPath; + delete iMmcVideosPath; + + delete iPhoneSoundsPath; + delete iMmcSoundsPath; + RMediaIdUtil::ReleaseInstance(); REComSession::FinalClose(); @@ -272,7 +284,40 @@ iCameraExtensionArray->InsertIsqL( KExtension3gp ); iCameraExtensionArray->InsertIsqL( KExtension3gpp ); iCameraExtensionArray->InsertIsqL( KExtension3g2 ); - + + TFileName phoneRoot = PathInfo::PhoneMemoryRootPath(); + TFileName mmcRoot = PathInfo::MemoryCardRootPath(); + + TFileName images = PathInfo::ImagesPath(); + + TFileName phoneImagePath( phoneRoot ); + phoneImagePath.Append( images ); + iPhoneImagesPath = phoneImagePath.AllocL(); + + TFileName mmcImagePath( mmcRoot ); + mmcImagePath.Append( images ); + iMmcImagesPath = mmcImagePath.Right( mmcImagePath.Length() - 1 ).AllocL(); + + TFileName videos = PathInfo::VideosPath(); + + TFileName phoneVideoPath( phoneRoot ); + phoneVideoPath.Append( videos ); + iPhoneVideosPath = phoneVideoPath.AllocL(); + + TFileName mmcVideoPath( mmcRoot ); + mmcVideoPath.Append( videos ); + iMmcVideosPath = mmcVideoPath.Right( mmcVideoPath.Length() - 1 ).AllocL(); + + TFileName sounds = PathInfo::SoundsPath(); + + TFileName phoneSoundPath( phoneRoot ); + phoneSoundPath.Append( sounds ); + iPhoneSoundsPath = phoneSoundPath.AllocL(); + + TFileName mmcSoundPath( mmcRoot ); + mmcSoundPath.Append( sounds ); + iMmcSoundsPath = mmcSoundPath.Right( mmcSoundPath.Length() - 1 ).AllocL(); + WRITELOG( "CHarvesterAO::ConstructL() - end" ); } @@ -912,6 +957,16 @@ mdeObject->AddTextPropertyL( *iPropDefs->iItemTypePropertyDef, KUndefinedMime ); } + if( hd->Origin() == MdeConstants::Object::ECamera ) + { + TBool inDefaultFolder( ETrue ); + mdeObject->AddBoolPropertyL( *iPropDefs->iDefaultFolderPropertyDef, inDefaultFolder ); + } + else + { + AddDefaultFolderDataL( mdeObject ); + } + TPtrC name; TBool nameFound = MdsUtils::GetName( hd->Uri(), name ); @@ -2414,6 +2469,10 @@ WRITELOG("CHarvesterAO::HarvestingCompleted() NOT COMPLETING AS msg->iMessage->IsNull returns ETrue"); } iHarvestFileMessages.Remove( i ); + if( iHarvestFileMessages.Count() == 0 ) + { + iHarvestFileMessages.Compress(); + } } } } @@ -2832,3 +2891,60 @@ } } +void CHarvesterAO::AddDefaultFolderDataL( CMdEObject* aObject ) + { + TPtrC objectDefName( aObject->Def().Name() ); + if( objectDefName == MdeConstants::Image::KImageObject ) + { + const TDesC& uri = aObject->Uri(); + if( uri.FindF( iMmcImagesPath->Des()) != KErrNotFound || + uri.FindF( iPhoneImagesPath->Des()) != KErrNotFound || + uri.FindF( KDCIMFolder ) != KErrNotFound ) + { + TBool inDefaultFolder( ETrue ); + aObject->AddBoolPropertyL( *iPropDefs->iDefaultFolderPropertyDef, inDefaultFolder ); + } + else + { + TBool inDefaultFolder( EFalse ); + aObject->AddBoolPropertyL( *iPropDefs->iDefaultFolderPropertyDef, inDefaultFolder ); + } + } + else if( objectDefName == MdeConstants::Video::KVideoObject ) + { + const TDesC& uri = aObject->Uri(); + if( uri.FindF( iMmcVideosPath->Des()) != KErrNotFound || + uri.FindF( iPhoneVideosPath->Des()) != KErrNotFound || + uri.FindF( KDCIMFolder ) != KErrNotFound ) + { + TBool inDefaultFolder( ETrue ); + aObject->AddBoolPropertyL( *iPropDefs->iDefaultFolderPropertyDef, inDefaultFolder ); + } + else + { + TBool inDefaultFolder( EFalse ); + aObject->AddBoolPropertyL( *iPropDefs->iDefaultFolderPropertyDef, inDefaultFolder ); + } + } + else if( objectDefName == MdeConstants::Audio::KAudioObject ) + { + const TDesC& uri = aObject->Uri(); + if( uri.FindF( iMmcSoundsPath->Des()) != KErrNotFound || + uri.FindF( iPhoneSoundsPath->Des()) != KErrNotFound ) + { + TBool inDefaultFolder( ETrue ); + aObject->AddBoolPropertyL( *iPropDefs->iDefaultFolderPropertyDef, inDefaultFolder ); + } + else + { + TBool inDefaultFolder( EFalse ); + aObject->AddBoolPropertyL( *iPropDefs->iDefaultFolderPropertyDef, inDefaultFolder ); + } + } + else + { + // Other objects are set to be in default location by default + TBool inDefaultFolder( ETrue ); + aObject->AddBoolPropertyL( *iPropDefs->iDefaultFolderPropertyDef, inDefaultFolder ); + } + }
--- a/iadstoprestart/group/iadstop.mmp Fri May 14 16:17:23 2010 +0300 +++ b/iadstoprestart/group/iadstop.mmp Thu May 27 13:18:43 2010 +0300 @@ -24,8 +24,7 @@ UID 0x100039ce 0x20022E94 VENDORID VID_DEFAULT -//CAPABILITY ALL -TCB -CAPABILITY CAP_GENERAL_DLL +CAPABILITY ALL -TCB SOURCEPATH ../src SOURCE iadstop.cpp
--- a/inc/mdcserializationtype.h Fri May 14 16:17:23 2010 +0300 +++ b/inc/mdcserializationtype.h Thu May 27 13:18:43 2010 +0300 @@ -15,13 +15,12 @@ * */ +#ifndef __MDCSERIALIZATIONTYPE_H__ +#define __MDCSERIALIZATIONTYPE_H__ + #include "mdscommoninternal.h" #include "mdcserializationbuffer.h" - -#ifndef __MDCSERIALIZATIONTYPE_H__ -#define __MDCSERIALIZATIONTYPE_H__ - NONSHARABLE_CLASS(TMdCSerializationType) { protected:
--- a/inc/mdscommoninternal.h Fri May 14 16:17:23 2010 +0300 +++ b/inc/mdscommoninternal.h Thu May 27 13:18:43 2010 +0300 @@ -31,6 +31,9 @@ _LIT( KMdsDefaultImportFile, "C:\\private\\200009f3\\defaultimportfile.mde" ); _LIT( KMdsDefaultRomImportFile, "Z:\\private\\200009f3\\defaultimportfile.mde" ); +// Universal image folder +_LIT( KDCIMFolder, ":\\DCIM"); + // schema file version const TInt KSchemaFileMajorVersion = 2; const TInt KSchemaFileMinorVersion = 0; @@ -48,6 +51,8 @@ const TInt KMaxTitleFieldLength = 255; +const TInt KTriggerDbMaintenanceTreasholdValue( 2500 ); + _LIT( KMdSServerName,"!MdSServer" ); // Server name _LIT( KMdSServerProcessString,"!MdSServer*" ); _LIT( KSchemaChunkName, "MdSSchema" );
--- a/inc/mdssqliteconnection.h Fri May 14 16:17:23 2010 +0300 +++ b/inc/mdssqliteconnection.h Thu May 27 13:18:43 2010 +0300 @@ -175,6 +175,8 @@ void EnableTransaction( TBool aEnable, RMdsStatement& aQuery ); + void DoAnalyzeL(); + protected: // Personal methods /**
--- a/mds_plat/content_listing_framework_collection_manager_api/tsrc/src/CollectionManagerTestBlocks.cpp Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/content_listing_framework_collection_manager_api/tsrc/src/CollectionManagerTestBlocks.cpp Thu May 27 13:18:43 2010 +0300 @@ -471,6 +471,7 @@ const TInt itemCount( 500 ); CDesCArray* removeItemArray = new (ELeave) CDesCArrayFlat( itemCount ); + CleanupStack::PushL( removeItemArray ); for( TInt i = 0 ; i < itemCount ; ++i ) { @@ -484,12 +485,12 @@ TRAP( error, iCollectionManager->RemoveFromAllCollectionsL( *removeItemArray ) ); if( error != KErrNotSupported && error != KErrNone ) { - delete removeItemArray; + CleanupStack::PopAndDestroy( removeItemArray ); removeItemArray = NULL; return error; } - delete removeItemArray; + CleanupStack::PopAndDestroy( removeItemArray ); removeItemArray = NULL; _LIT( KMsg2, "Exit RemoveFromAllCollectionsL" );
--- a/mds_plat/harvester_framework_api/inc/harvesterclient.h Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/harvester_framework_api/inc/harvesterclient.h Thu May 27 13:18:43 2010 +0300 @@ -32,6 +32,8 @@ class MHarvesterEventObserver; class CHarvesterRequestActive; class CHarvesterRequestQueue; +class MHarvesterSessionObserver; +class CHarvesterSessionWatcher; // default event interval for MHarvesterEventObserver const TInt KHarvesterEventInterval = 20; @@ -171,6 +173,20 @@ TInt aItemsLeft ) = 0; }; +class MHarvesterSessionObserver + { +public: + + /** + * Called to notify the observer that harvester server has been terminated, + * thus harvester server sessions created are now invalid and new connection + * needs to be established + * NOTE! Cliens still have to call Close() on the session to release client side + * resources. + */ + virtual void HarvesterServerTerminated() = 0; + }; + /** * Harvester client session class which provides also means to: * - Pause/resume the Harvesting framework @@ -284,7 +300,20 @@ RArray<TItemId> &aAlbumIds, TBool aAddLocation, TUid aUid ); - + + /** + * Public method to set observer for notifications about harvester server termination. + * Only one observer at a time is currently supported. + * + * @param aObserver Pointer to the observer + */ + IMPORT_C void AddSessionObserverL( MHarvesterSessionObserver& aObserver ); + + /** + * Public method to remove harvester session observer + */ + IMPORT_C void RemoveSessionObserver(); + /** * Requests a harvest complete event from harvester server. * On return, aURI is the URI of the harvested file. @@ -346,6 +375,11 @@ * Request queue processor. */ CHarvesterRequestQueue* iRequestQueue; + + /** + * Harvester session observer AO. + */ + CHarvesterSessionWatcher* iSessionWatcher; }; #endif // __HARVESTER_CLIENT_H__
--- a/mds_plat/harvester_framework_api/inc/monitorplugin.h Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/harvester_framework_api/inc/monitorplugin.h Thu May 27 13:18:43 2010 +0300 @@ -114,8 +114,8 @@ * { * // Our CMyActiveObjectNotifier notifies us about new file and we notify the Harvester server about it. * // Before this CMyActiveObjectNotifier has filled the need data to aHarvesterData like: - * // aHarvesterData->SetEventType( EHarvesterAdd ); - * // aHarvesterData->SetOrigin( aOrigin ); + * aHarvesterData->SetEventType( EHarvesterAdd ); + * aHarvesterData->SetOrigin( aOrigin ); * iObserver->MonitorEvent( aHarvesterData ); * } */
--- a/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/conf/HarvesterClientTestScripter.cfg Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/conf/HarvesterClientTestScripter.cfg Thu May 27 13:18:43 2010 +0300 @@ -410,3 +410,15 @@ delete test [Endtest] +[Test] +title Harvester Blacklist Test +timeout 180000 +create HarvesterClientTestScripter test +test SetUpBlacklist +test AddFileToBlacklist e:\testing\data\corrupt.jpg +test CheckBlacklist e:\testing\data\corrupt.jpg +test RemoveFileFromBlacklist e:\testing\data\corrupt.jpg +test TearDownBlacklist +delete test +[Endtest] +
--- a/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/group/HarvesterClientTestScripter.mmp Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/group/HarvesterClientTestScripter.mmp Thu May 27 13:18:43 2010 +0300 @@ -34,6 +34,8 @@ USERINCLUDE ../inc USERINCLUDE ../../../../../inc +USERINCLUDE ../../../../../harvester/common/inc/ +USERINCLUDE ../../../../../harvester/blacklistclient/inc/ MW_LAYER_SYSTEMINCLUDE @@ -42,4 +44,7 @@ LIBRARY mdeclient.lib LIBRARY stiftestinterface.lib LIBRARY stiftestengine.lib +LIBRARY harvestercommon.lib +LIBRARY blacklistclient.lib +LIBRARY efsrv.lib
--- a/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/group/HarvesterClientTestScripter.pkg Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/group/HarvesterClientTestScripter.pkg Thu May 27 13:18:43 2010 +0300 @@ -53,4 +53,5 @@ "..\..\data\mmc\HarvesterTest\MPEG4.3gp" -"E:\testing\data\MPEG4.3gp" "..\..\data\mmc\HarvesterTest\MPEG4.mp4" -"E:\testing\data\MPEG4.mp4" "..\..\data\mmc\HarvesterTest\00001.mp3" -"E:\testing\data\00001.mp3" +"..\..\data\mmc\HarvesterTest\corrupt.jpg" -"E:\testing\data\corrupt.jpg"
--- a/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/group/bld.inf Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/group/bld.inf Thu May 27 13:18:43 2010 +0300 @@ -51,3 +51,4 @@ ../../data/mmc/HarvesterTest/Temp2.jpg /epoc32/WINSCW/C/Data/Temp2.jpg ../../data/mmc/HarvesterTest/Temp3.jpg /epoc32/WINSCW/C/Data/Temp3.jpg ../../data/mmc/HarvesterTest/00001.mp3 /epoc32/WINSCW/C/Data/00001.mp3 +../../data/mmc/HarvesterTest/corrupt.jpg /epoc32/WINSCW/C/Data/corrupt.jpg
--- a/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/inc/HarvesterClientTestScripter.h Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/inc/HarvesterClientTestScripter.h Thu May 27 13:18:43 2010 +0300 @@ -27,6 +27,8 @@ #include "mdccommon.h" #include "mdesession.h" #include "mdequery.h" +#include "harvestermediaidutil.h" +#include "blacklistclient.h" // CONSTANTS @@ -142,6 +144,11 @@ virtual TInt Results( CStifItemParser& aItem ); virtual TInt AddHarvesterEventObserverL( CStifItemParser& aItem ); virtual TInt RemoveHarvesterEventObserverL( CStifItemParser& aItem ); + virtual TInt SetUpBlacklistL( CStifItemParser& aItem ); + virtual TInt TearDownBlacklistL( CStifItemParser& aItem ); + virtual TInt AddFileToBlacklistL( CStifItemParser& aItem ); + virtual TInt CheckBlacklistL( CStifItemParser& aItem ); + virtual TInt RemoveFileFromBlacklistL( CStifItemParser& aItem ); private: // Data // Status booleans @@ -162,6 +169,10 @@ RArray<TItemId> iObjectIdArray; TFileName iUri; + + RBlacklistClient iBlacklistClient; + CHarvesterMediaIdUtil* iMediaIdUtil; + RFs iFs; }; #endif // HARVESTERCLIENTTESTSCRIPTER_H
--- a/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/src/HarvesterClientTestScripterBlocks.cpp Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/harvester_framework_api/tsrc/HarvesterClientTest/src/HarvesterClientTestScripterBlocks.cpp Thu May 27 13:18:43 2010 +0300 @@ -77,6 +77,11 @@ ENTRY( "Results", CHarvesterClientTestScripter::Results ), ENTRY( "AddHarvesterEventObserver", CHarvesterClientTestScripter::AddHarvesterEventObserverL ), ENTRY( "RemoveHarvesterEventObserver", CHarvesterClientTestScripter::RemoveHarvesterEventObserverL ), + ENTRY( "SetUpBlacklist", CHarvesterClientTestScripter::SetUpBlacklistL ), + ENTRY( "TearDownBlacklist", CHarvesterClientTestScripter::TearDownBlacklistL ), + ENTRY( "AddFileToBlacklist", CHarvesterClientTestScripter::AddFileToBlacklistL ), + ENTRY( "CheckBlacklist", CHarvesterClientTestScripter::CheckBlacklistL ), + ENTRY( "RemoveFileFromBlacklist", CHarvesterClientTestScripter::RemoveFileFromBlacklistL ), }; const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo ); @@ -489,6 +494,139 @@ } // ----------------------------------------------------------------------------- +// CHarvesterClientTest::SetUpBlacklistL +// ----------------------------------------------------------------------------- +// +TInt CHarvesterClientTestScripter::SetUpBlacklistL( CStifItemParser& /*aItem*/ ) + { + _LIT( KMsg1, "Enter SetUpBlacklistL" ); + iLog->Log( KMsg1 ); + RDebug::Print( KMsg1 ); + + User::LeaveIfError( iBlacklistClient.Connect() ); + iBlacklistClient.LoadBlacklistL(); + iMediaIdUtil = &RMediaIdUtil::GetInstanceL(); + User::LeaveIfError( iFs.Connect() ); + + _LIT( KMsg2, "Exit SetUpBlacklistL" ); + iLog->Log( KMsg2 ); + RDebug::Print( KMsg2 ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CHarvesterClientTest::TearDownBlacklistL +// ----------------------------------------------------------------------------- +// +TInt CHarvesterClientTestScripter::TearDownBlacklistL( CStifItemParser& /*aItem*/ ) + { + _LIT( KMsg1, "Enter TearDownBlacklistL" ); + iLog->Log( KMsg1 ); + RDebug::Print( KMsg1 ); + + iBlacklistClient.CloseDBL(); + iBlacklistClient.Close(); + RMediaIdUtil::ReleaseInstance(); + iMediaIdUtil = NULL; + iFs.Close(); + + _LIT( KMsg2, "Exit TearDownBlacklistL" ); + iLog->Log( KMsg2 ); + RDebug::Print( KMsg2 ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CHarvesterClientTest::AddFileToBlacklistL +// ----------------------------------------------------------------------------- +// +TInt CHarvesterClientTestScripter::AddFileToBlacklistL( CStifItemParser& aItem ) + { + _LIT( KMsg1, "Enter AddFileToBlacklistL" ); + iLog->Log( KMsg1 ); + RDebug::Print( KMsg1 ); + + TPtrC inputFile; + User::LeaveIfError( aItem.GetNextString( inputFile )); + + TUint32 mediaId( 0 ); + TTime modified ( 0 ); + + TRAPD( err, iBlacklistClient.AddL( inputFile, mediaId, modified ) ); + if( err != KErrNone ) + { + return err; + } + + _LIT( KMsg2, "Exit AddFileToBlacklistL" ); + iLog->Log( KMsg2 ); + RDebug::Print( KMsg2 ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CHarvesterClientTest::CheckBlacklistL +// ----------------------------------------------------------------------------- +// +TInt CHarvesterClientTestScripter::CheckBlacklistL( CStifItemParser& aItem ) + { + _LIT( KMsg1, "Enter CheckBlacklistL" ); + iLog->Log( KMsg1 ); + RDebug::Print( KMsg1 ); + + TPtrC inputFile; + User::LeaveIfError( aItem.GetNextString( inputFile )); + + TUint32 mediaId( 0 ); + TTime modified ( 0 ); + + TBool isBlacklisted( EFalse ); + TRAP_IGNORE( isBlacklisted = iBlacklistClient.IsBlacklistedL( inputFile, mediaId, modified ) ); + if( !isBlacklisted ) + { + return KErrNotFound; + } + + _LIT( KMsg2, "Exit CheckBlacklistL" ); + iLog->Log( KMsg2 ); + RDebug::Print( KMsg2 ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CHarvesterClientTest::RemoveFileFromBlacklistL +// ----------------------------------------------------------------------------- +// +TInt CHarvesterClientTestScripter::RemoveFileFromBlacklistL( CStifItemParser& aItem ) + { + _LIT( KMsg1, "Enter CheckBlacklistL" ); + iLog->Log( KMsg1 ); + RDebug::Print( KMsg1 ); + + TPtrC inputFile; + User::LeaveIfError( aItem.GetNextString( inputFile )); + + TUint32 mediaId( 0 ); + TTime modified ( 0 ); + + TRAPD( err, iBlacklistClient.RemoveL( inputFile, mediaId ) ); + if( err != KErrNone ) + { + return err; + } + + _LIT( KMsg2, "Exit CheckBlacklistL" ); + iLog->Log( KMsg2 ); + RDebug::Print( KMsg2 ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- // CHarvesterClientTest::HarvestingUpdated // ----------------------------------------------------------------------------- //
--- a/mds_plat/harvester_framework_api/tsrc/MonitorPluginTest/conf/MonitorPluginTest.cfg Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/harvester_framework_api/tsrc/MonitorPluginTest/conf/MonitorPluginTest.cfg Thu May 27 13:18:43 2010 +0300 @@ -53,6 +53,8 @@ test StartMonitoring request Monitor test CreateEvents +wait Monitor +request Monitor test CreateEventsDelete wait Monitor test StopMonitoring
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mds_plat/harvester_framework_api/tsrc/data/mmc/HarvesterTest/corrupt.jpg Thu May 27 13:18:43 2010 +0300 @@ -0,0 +1,94 @@ +ZZZZ$Z$$$ZZ$$$$$77$777777777777777777777I77II7I?III?IIII???????+++????????++++++=++++++++++++++++++=++======+======+++++ +ZZZZZZZZ$$ZZ$77777777777III777777I7777IIIIIIIII??IIIIII???????++++???????++++++++++++?????++++++++++========+===~+=+++++ +ZZZZZZ$$$$$$77777$$77I77777777III77IIIIII7IIIII????II????I7$ZZZ$$7I???????++?+++++++++++++++++++++++==+=============++++ +$ZZ77$7$$$$$777777777777I7777IIII77I777III?III??????IDNNMNNNNNDDDNNNDDO7????+++++=++=++++++++=++++====+========~~===++++ +ZZ$$$7777$$$$$777777777777IIIIIIII7IIIIIIIIII?I??+IZNND8NNNMMMMNNNDDDNND8?+??+?++++++++++++++==+=+===++=======~~~====+++ +$$$$$$$$Z$$$$7777777777I7I?II??IIIIII?III???????$DMNN8O8NNNNNNNNMMMMND8DNMD$+++?++==++++++++=======~===========~~======+ +$$$$Z$$$$$$$7777I777IIIIII?IIIIIIIII?????+????ZNND8DDZZDDDDDDDNNNNNNMMMMNNNNNZ?++=====+++++++=====~~==~===~==~=~=~====== +$$$7$$$7$777III777IIIIIIIIIII??III??III???++?$MNNDDD8$O88DDDNMNNNNNNMMMMMMDNMMN7+=====+++++==========~~~~~~~~~~=~======+ +77777777777777IIIII7IIIII????????II?????++++$DN8Z7?+++=++???I$ODNNNMMMMMNNNNNMMM+=+===~==========~==~~~~~~~~~~~~=~====== +$$77777777777I77IIIIIIII????II?III?????++++I8N$I?+======++???I$O8DDNNNMMNNNMNMNMZ+=+==~===~~====~==~~~~~~~~~~~~~~~====== +$$77777777III77IIIIIIII??????I?I????+++++?I8NOI?=~~~~~~~~~==+?I7$ZDNNNNMMMMNNNMNMO+===~~===~~~~~~~~~~~~~~~~~~::~~======= +$$$$$$77II77IIIIIIIIIII?????????????+++++7NM87+=~:~~:~~~~~~==++I7$8DNNNMNMMMMMNMNMO=~=======~~~~~~~:~~~~~~:::::::~~===== +77777$$7IIII?II??II??????????++++??++===$NMNZI+=~~~~~~~~~~~==+?I7$OO8DNMNNNMNNMMNMM$==+++===~===~~~~~~~~:::::::::~~~==== +7II?I7I77III???+????++???????++????+==~+$DMD$I+=======~=====+???I7$ZO8DDNNMMNNMMMMMD???+++++++==~=~~~~=~~~~~:::::~~~==+= +777I777$7II???????++++??????+++???++==+IONM8$I+============+++??II7$ZZODNNNMMMMMMMMM7?I??????+=====~~~~~~~~~~::::~~~===+ +$7777$$ZZ7I7I??++?I?++?++???+++++++===7$DNNO7I++===~~=======++++++?I7$Z8NNNNNMNMNMMM8I7IIII7I+=====~+=~~::::~~~::~~~===+ +ZZZOOZ8OO$7III?II77I?+++++++++=====+=?78DMMZI?=+===~=~=~==++=+++???II7Z8NMMMMMMMNMNMD7$$$I77I????+++?=~~~~~~~::::::~==++ +O8888ZZZ88Z$$$$7777$7?I7?++=+=++====+7$8NMMOI?????+=+===?7$7IIIII77$ZZODNNMMMMMMNNMNN$OZ$7IIII?I??++?+?+=~~:~~:::::===++ +O8DD8OOOOOOOZ$$$$$Z$$$Z$7I++++++====?$Z8MMM87?I77$I++++?$ZOZZZZOZ$OOOOO8NNMMMMMMNNNMMOZ$ZZ$$777I??+??+?+=~~:~~~::::~==== +DDDD88OOOZZZZOOOZZOOOOZ$ZZ7+?+=++=++IOO8DNMDDDI777$ZI+?ZDDZ7$OOO8DMNO$ZODMMMNNNNMMMNMDOZZZZZ$III?I7$7I??=~~~~~~~:~==++++ +888888888OOOO8OZO8OOOZO$7$Z+?+=+++??IZDNNMMOZDIZNDO7I=I8O$I?IOZZZZ???I7O8MMNNMMMMMMMMNOOZZZZZ7$$$77$77I++~:::::~:~====+? +DD8D8O8OOO888OOOZ8D8O88ZZ8+???IZO$???ONNMMMZIIII$Z7?+=7ZZ7??I77$7I++?I7ODMMMMMMMMNNNMMO8OOOZ$7$$$77$777I?=~~~~~~~===+++? +8D88OO88OOO8888OODD888OOO8OZ7$OO$8Z7ZO8NMMN7?+=====+?+I77I?=~~~~~=??I7Z8DMMMMNMMMMMNNMZZZZZ$$777$$$Z$$$7I+==~==~=====++? +8DDDO88888888DDD8DD88DD8O888OZOZ$DO$OO8NMMM$?+====++++?II?+==~~~==?I7$Z8NMMMMNMMMMNNNMZZZZZZ$$Z$$$$ZZZ$7I?==========++?? +DD888D8OO8DDD8ODNDD88DDD8D8D8O8OODOO88DNNMM8I+=~==+++=?II?++====++I7$ZODNMMMNMMNMMNNNM77777I??I???????????++++++???????I +NMMNNNNNDDDND8D88DD8DDDDDD8DD8D8D8DNNNNNNMMD7+++==++++II7I?++==++?7$ZO8NNMMMNNNMMMMMNN88OOOOO$$$$$$$7I??I???++??III7$$7I +NMMNDDNNNDDDD88O88888D8DN8DDDDDDNNNMMNNNMMMMZ7++??I?=?777ZI++=+??I$ZOODNNMMMMMMMMMMMMNDD8O8OOOZZZZZZZ$ZZ$7I7777I7I7$$ZZZ +NNNNNDDNNDDDNDNDD888DD88DDDDDDDDDNNNNNMMMMMMD$II?++?$8NMND7++??II7ZO88DNMMMMMMMMMMMMMMNDDD888OOOOOO8OZ$Z$$$ZZZ$$$$$$$$ZZ +MMNMNDDNNNDDNDDDNDD8DD888D88DDDDNNNMNNNMMMMMNZ7II?==?NNN8ZI??III7$$ZO8DNMMMMMMMMMMMMMMN8OOOOOOOOZOOOZOZZZZOZZZZ$$$$$$ZZ$ +NNNMMNNDDNDDNDDDNND8DDDDDD88DDDDDNDNMMMMNMMMMO7I77?++I7$$77Z7IIII7ZZO8DNNMMMMMMMMMMMMNND888ZOOOZZZOOOOZZZZ$$77777$$ZZOO8 +MNNMNDDDNNNNNDDDDDD8DDNDDDDDDNNDNDDDNMMMNNMMMN7II7I?77$ZOOZ7I??II7ZO8DNNNMMMNNMMMMMMMNNN8OOZOZZZZZZZZZZZZ$$$$$$$$$$ZOOOO +NMMNDNNNNNDDDDDDDNNNNNMNDDDNDNNDD88DNNNNMMMMMMO7I?++IZZZZZ$77II7$$O8DDNNMMMMMMMMMMMMMNND8OOOOZZZOOZZZZZZZZZZZZZOOOZZZZZO +NMMNDNNNNNNDNDDDDNDNNNNNNNNDDDDDD88DNNMMMMMMMMNO$II??$$Z$77$777$ZZ8DDDNNMMMMMMMMMMMMMMDD8ZOO8OZZZ$ZZOOOOZZZZOOOOOOZOOZ$Z +NMMNNNNNNNNNNNNNDNNDDDDDD8D88D8D88O8NDDNMMMMMMMMNO7?+===?I777$ZO88DDDNMMMMMMMMMMMMMMMMND8O$ZZZ$$$$$ZOZOOZZZ$$$Z$$ZZ$ZOZZ +MNNMNNMNNNNNNNNNNNNNNNDDD888888888O8NNNMNNNMMNMMMMNOI++?I77$O88DDDDNNMMMMMMMMMMMMMMMMNNNDOZZZZ$$$$$$ZZZZOZ$$ZZOOO$$ZOZZO +NNMMMNMMMDDNNNNNNNNNDNNDDDDD88O8OOZ$8NNNMMMMMMMMMMMMNZZOO88DDDDDDNMMMNNNMMMNMMMMMMMMNMNNDZOZO8ZOOZZZOOZO8O8OOOOO8OZZZZ$$ +MMMNNNMMNNNDNDNNNNNNNDNNDDDDDD88OZZ$OMNMMMMMMMMMMMMMMMMMMMNNNMMMMMNNNNNNNNNMMMMMMMMMMNNNND88O8OOOOOZOOOO8OZO888888OZZZO8 +NMNNNMNMMMNDNNNNNNNND88DOO8OOZOOZZZ$ZDNMMMMMMMMMMMMMMMMNNMMMMMMNNNNNNDNDDNNMMMNMMMMMMNMMND88OOZZZZZ$OOO88OO8888O8O888OOO +MMMMMMMNMNNNNDDDDDDD8888D8OZZZZZZOZZO8NMMMMMMMMMMMMMMMN$ZO88DNNNDDD88OOO8DNNMMNMMMMNNNNNN8O8O8OOOO8OOOO8OZZZO88OOZOZZZO8 +MMMMMMMMMMNDNNNDD888OOO8OZ8OOOZOZZZZOOONMMNNMMMMMMMMMMMZI7$$OOO888OOZZZZZ8DNMNNNMMMMNNNMMDD8Z$77II7$77$$$$$$$77$7I??7$ZZ +NNMMMMMMMNDDND88D888O8OO8O88OOOOOOOO888NMMMNMMMMMMMMMMMD7II77$ZZZZZZ$$77$Z8NNDNMNNMNDNNMMMN8DD8O8O8OZZ7I77Z$77777$$ZOZ7$ +NNNNNNNNNNNND88DNNDDNNNNNOOOOOOOZOZONDDMMMMMMMMMMMMMMMN8$7III777$$777I7I7$Z8NNNNNNNN88MMMMMNMND888DNZOO8DNZ77II777ZZ$7$O +NNNNNNDNDDD88888D8DNNNNNMDD8O8DD8DNDNNMMMMMMMMMMMMMMMDOZ$7II?I7777IIIII?7$$ODNDDDDDN88MNNMMNNND8OO8NODD8DN8O7II77$Z$$7$O +NNNNNNNNDDDDD888D8NDDDO8NMNMNNNMNNMMNNNMMMMMMMMMMMNDO7I?I????????I?++????I7Z8DDNN88N8DMNMNNMNDDNNNND88ZZOOZZ7II?IZ$ZZ7$$ +NNNNNNNNNDDDD8DDNNDDDND8NMMMMMMNMNNMMMMMMMMNMMMNNZ$$7???++?+????+++++++++?I$O8NDDZ8D8DNNNNMMNDD8OZZZ7III???III7ZZ$ZOZZZ8 +MMNDDNMMNNND8DNDNNNDD8DDNMNDNMMMMNMMMMMMMMMMMM8$7I???=++=++++++++==+==+++I7ZDDDDOZ8D8NNNNNNNNMND8888O7+?I?7$$77$$$$ZOOOO +NMMNNNNMNNNDDDNDDDD8888NMMNDNMMMMMMMMMMMMMMMMMZIII++++++==+=+++++==+++????7Z888DOZ8DDNNNNNNNNMNND88D8$?IIII777$$Z$$$Z$$$ +NNNNNNMNNDDDNDDD8O8O8DDNMNNNNMMMMNNNMMMMMMMNNN7I?+++========++========++??I$8OO88O8DNMNNNNMDDNNMNDDDOO$I$7I??II??I777777 +NNNMNNNND8DDD8DDO8D8DNDNDDNNDDNMNNNMMMMMMMNNNOI+++++=~~=====+====~=====+?I$$8DO88O8NNMNNNDD88DDDNNNN8OO8Z$77Z7?7O777$O$$ +NDNNNDNNND8888O8OO8O8DDDNNDDDNNDNNMMMMMMNDDDO$?+==============~====+++++?I$8O888888MMMNN8ZZZ88DDNMMNND8Z$$IIIIII?IIII??? +NNNMNDMMNM8Z8$ZOOO8OODDDDD888DNNMMMMMMMM8OZZO7++======~~~=======~~==++?+?I$ZOO8D88DND888OZOZ7ZZZO8DNMMMND88888Z77777I?I? +NNNNNDMMNMDDN$ZOZZOOZO88DN888DMMMMMMMMMMOZZ$$?=+===========~=====~===+++?I$ZOO8DDD8OOZ$$$7$$$8DDDDNMNNMMMD8O88OZ$$$OO77$ +NNNNNNMMNNNDNMN8OZZO88O8D88DNMMMMMMMMMMNZ7II?+==========~======~=~===++??7ZOO888O$7$$$$I?IIII$O8DNMMMMMMMMNDD8ODD88888DO +DDNNDDNDDNNNNNNDNDOOOOOOO88MMMMMMMMMMMN8$III+===~=========~~=~~~==~==++?I$$ZZZZOOOZ7I?7$O888DNNNNNNMMMMMMMMNNDD88DNNDO$I +NNNNDDDNNNDNNNNNN88DDD8OZ$MMMMMMMMMMMMND7?++=======+===~~~~~~~~=~~~~~=+??7$$ZOO$7$ZO8DDNNNMMMMMMMMMMMMMMMMMMMD88DDD8888D +DNNNNNNNDDDDDNDDDDD888OZ$8MMMMMMMMMMMNDD87?++=~~=++++=~~~~~~~:~~~~~~===+?7ZZ$ZZODNNMNNDDNNNNMMMMMMMMMMMMMMMMMNMD8888DND8 +DNNNNNNNNND88D8888OZ$ZZZ8NMMMMMMMMMMNNDDDO$I?+===+?++==~~~~~~~~~~~~====?7$ZOO8DDNNNNDDMMMMMMMMMMMMMMMMMMMMMNNNMN888888D8 +NNDDND888OOO888OOOOO88DMMMMMMMMMMMMMNDD8DOOOD87I?I?+=~~~~~~=~~~~~===+I$ZOO8DNNMNNNNMMMMMMMMNMMMMMMMMMMMMMMMNMNMNDOOZOZO8 +NDND888O8888DO888DDDDMMMMMMMMMMMMMMNND88D8DD8888DDD8O7III?++=+==++I$$Z88ODMMNNNMMMMNNMNDNNNNMMMMMMMMMNMMMMMMMNNMMOOOZZ88 +NDDD8D8O8DDDD88888D8MMMMMMMMMMMMMMNDDDDDNNNDD8D8888OOOOOOOOO8OO8OZO8OODMD8NMMMMMMMMNNN8NNNNNMMMMMMMMMMMMMMMMMMMNMDDNDNDD +NNDDDDDD8888OOZOOZZZMMMMMMMMMMMMMNDNDNNDMMD8DD8O8OO8D888888D888888ODMMNDNMNMMMMMMNNNN8NMNNNNMMMMMMMMMMMMMMMMMMMMNNDDDDD8 +MMNDDD888888O8OOOZ$$MMMMMMMMMMMMMNDDNNNDMMDDDNDD8OOO88888D8DDD8DD8DNNNNMMMMMMMMMNNNMD8NMDNNNMMNNDNNNMMMMMMMMMMMMNM8O88D8 +MMMNNNDDD8888888DDDDMMMMMMMMMMMMMNNNMNDNMNNMNMD8D88DDD88DND8NNNDDNDNMMMMMMMMMMMMNNNNDNNDDNN8OODNDDNDNNMMNMMMMNNNMMNOOO88 +MMMNNNNNNDNDDDDDD8DDMMMMMMMMMMMMMNNMMNMMMNMMMNDDDD8DD88NNMNMD8NNDNMMMMMMMMMMMMNNNMNNNMNND88O888NNNNNDNNMMMMMMMNMNNMDOZZZ +MMMMMNNNNNNNNDDDDDDDMMMMMMMMMMMMMMMMMMMMNMMMMMNNNNNMNNNNMMMNNMNNMMMMMMMMMMMMMMMMMMMMMMDNND8O8D8N88DNNMMMMMMMNNNMMMMMNNND +MMMMNNNDDNDNNDDDNNNMMMMMMMMMMMMMMMMMMMMMNMMMMNNNMNNMNNNNMNNNNNMNNMMMMMMMMMMMMMMMMMMMMNNNDDO888O888DNMMMMMMMMNNNNNMNMMMNN +MMMNDD8D8888OOOO8DNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMNMMMMMNNNMNNNMMMMNMMMMMMMMMMMMMMMMNDND888888DNDNMMMNMMMMMMMNNNNNNMMD88 +MMD8888OOOO88OO88DNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNMMMMMMMMMMMMMMMMMMMMMMNDDDDD8ODDDNMMMMMMMMMMMMMNNNDNMMMMN88 +MD8D888888OOOOOO8NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNMMMMMMMMMMMMMMMMMMMMMMNNNDNND888DMMMNMMMMMMMMMMMMNNNNNNNNMDO +88DDD88888OOO888MMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMNNMMMMMMMMMMMMMMMMMMMMNMNNNNDDNNDNNNMMNMMMMMMMMMMMMMMNNNNNMNNMN8 +DDDDDDDDDD888DDNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMMMMMMMMMMMNNNNDNNNNNMMMMMMMMMMMMMMMMMMMNNNNNNNMMNN +NMMMMMMNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMNMMMMMMMMMMMMNNNNMMMNNNN +MMMNNMNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNMMNMMMMMMMMMMMMMMMMMMMMMMMNNNMMMMMMN +NMMMMMNNNNMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMNNMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNMMMN +NMMMNNMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMNNNMNNNMMMNNNM +NNMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMNMMMMMMMMMMMMMMMNNMMNNMMMNNNN +NMMMMMMMMMMMMMMMMMMMMMMMNNNMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMNMMMMMMNNN +NMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMNMMNMMMMNN +NMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNMMMMMMMMMMMMMMMNNMNN +NMMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMMMMMNN +NMMMMMMMMMMMMMMNNMMMNDDDNMMMMMMMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMNMNNMNM +MMMMMMMMMMMMMNNND88NMMMMNDDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNMMMMNN +NMMMMMMMMMMNNNNNDDMMDDDNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMNMMNNNMNNNNNNNNN +MMMMMMMMMMMMMMNNNMNODNND88NODD8DMNMND8OODDNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNMNNN +NMMMMMMMMMMMMMDDNDOOMMND8N8DDODMN8O$III77$Z8DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNMNNNNNNMM +NMMMMMMMMMMMMN8NDNNNNDONMNNO8MDZ8IIIIIII77$$$7ZODNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMNNMNNN +MMMMMMMMMMMMMNMDDMNMODMM8DNMMNOD$777IIII777777$$$$77$DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNMMNNMNN +NMMMMMMMMMMMMNDNMNN8MMMNMNMNMD88$$777777777777777$$77$$8NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNMMMNNNNN +NMMMMMMMMMMMMMMMMMDNNMMNMDMNMNNDZ$$$$$$$$7777777777$$$$$ZZZZNMMMMMMNNMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMMMMNNNMNNNNNNN +NMMMMMMMMMMMMMMMMNNNMMNNNDMMNNM8ZZZZZ$$Z$$777777$$77$$$$77$$Z8NMMMMMNMMMMMMMMMMMMMMMMMMMMMMNMMNMMMMMMMMNMMMMNNNNNNNNMMNN +NNNMMMMMMMMMMMMMMMMMMMNMMMMMNNMND8888OOZZ$$$$$$7777777777777$$ZO88MNMNMMMMMMMMNNNDD8O8NNMMNNNMMMNMMMMMMNNMNNMNNNNNNNNNNN +NMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMDDNDD88ZZZ$$$$$7$$$$77$ZZ$7III$8NDNNMN8ZO8O88NMND888NNND8O88NNMMMMMMMMNMMNNNNNNNNNNNNNN +NNNNMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMMNN8ZZZZZ$$$$Z$$$$$ZODD8777$7$D88D8OZZO8DD8O88DND88DNNNNNNNMMMMMMMMMMMNMMNMNNNMMMNNN +NMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD888OOZZZZZ$$ZZZZ$$ZZ8NNOZ$$$$DDDDDNDOODDDDDDDDDDD8DNNDNNNNNMMMMMMMMMMMMMNNNNNNNMMNN \ No newline at end of file
--- a/mds_plat/location_manager_api/tsrc/conf/LocationManagerTestScripter.cfg Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/location_manager_api/tsrc/conf/LocationManagerTestScripter.cfg Thu May 27 13:18:43 2010 +0300 @@ -190,22 +190,8 @@ [Endtest] [Test] -title Tracklog Observer test -timeout 60000 -create LocationManagerTestScripter test -test SetupTrackLog -test AddObserver -test AddObserver -test AddObserver -test RemoveObserver -test RemoveObserver -test TearDownTrackLog -delete test -[Endtest] - -[Test] title Start Stop Tracklog Recording -timeout 60000 +timeout 80000 create LocationManagerTestScripter test test SetupTrackLog test AddObserver @@ -223,8 +209,22 @@ [Endtest] [Test] +title Tracklog Observer test +timeout 60000 +create LocationManagerTestScripter test +test SetupTrackLog +test AddObserver +test AddObserver +test AddObserver +test RemoveObserver +test RemoveObserver +test TearDownTrackLog +delete test +[Endtest] + +[Test] title Start Stop Tracklog Recording 2 -timeout 60000 +timeout 240000 create LocationManagerTestScripter test test SetupTrackLog test AddObserver
--- a/mds_plat/metadata_engine_api/inc/mdeconstants.h Fri May 14 16:17:23 2010 +0300 +++ b/mds_plat/metadata_engine_api/inc/mdeconstants.h Thu May 27 13:18:43 2010 +0300 @@ -35,6 +35,7 @@ _LIT( KItemTypeProperty, "ItemType" ); _LIT( KTitleProperty, "Title" ); _LIT( KTimeOffsetProperty, "TimeOffset" ); + _LIT( KInDefaultFolder, "InDefaultFolder" ); enum TOrigin {
--- a/metadataengine/client/src/mdeobject.cpp Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/client/src/mdeobject.cpp Thu May 27 13:18:43 2010 +0300 @@ -276,6 +276,7 @@ } iUri = HBufC::NewL( aUri.Length() ); + // Note: CopyLC doesn't push anything to cleanup stack iUri->Des().CopyLC( aUri ); iFlags |= EMdEObjectFlagModObject; }
--- a/metadataengine/client/src/mdesessionimpl.cpp Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/client/src/mdesessionimpl.cpp Thu May 27 13:18:43 2010 +0300 @@ -1338,6 +1338,7 @@ { const TDesC& uri = *((*aObjects)[i]); HBufC* lcUri = HBufC::NewLC( uri.Length() ); + // Note: CopyLC doesn't push anything to cleanup stack lcUri->Des().CopyLC( uri ); buffer->InsertL( *lcUri ); CleanupStack::PopAndDestroy( lcUri );
--- a/metadataengine/server/inc/mdslogger.h Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/inc/mdslogger.h Thu May 27 13:18:43 2010 +0300 @@ -57,6 +57,10 @@ _LIT(KFilename, "server.txt"); _LIT(KAltFilename, "server2.txt"); +#ifdef LOG_QUERY +#define MDE_FILE_LOGGING +#endif + // CLASS DECLARATION /** * CMdSLogger.
--- a/metadataengine/server/inc/mdsmanipulationengine.h Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/inc/mdsmanipulationengine.h Thu May 27 13:18:43 2010 +0300 @@ -32,7 +32,7 @@ class CMdSSqlObjectManipulate; // CONSTANT DECLARATION -const TInt KGarbageCollectionDelay = 60; // 1 minute +const TInt KGarbageCollectionDelay = 90; // 1,5 minutes // CLASS DECLARATION @@ -342,6 +342,10 @@ CMdSGarbageCollector* iGarbageCollector; CMdSObjectLockList& iLockList; + + //For DB maintenance + TInt iAddedObjectsCount; + TInt iModifiedObjectsCount; }; #endif //__MDSMANIPULATIONENGINE_H__
--- a/metadataengine/server/inc/mdsserversession.h Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/inc/mdsserversession.h Thu May 27 13:18:43 2010 +0300 @@ -394,6 +394,9 @@ CMdCSerializationBuffer* CombineBuffersL( CMdCSerializationBuffer& aLeftBuffer, CMdCSerializationBuffer& aRightBuffer ); + + CMdCSerializationBuffer* CombineUriNotificationsBuffersL( + CMdCSerializationBuffer& aLeftBuffer, CMdCSerializationBuffer& aRightBuffer ); CMdCSerializationBuffer* CombineItemBuffersL( CMdCSerializationBuffer& aLeftBuffer, CMdCSerializationBuffer& aRightBuffer );
--- a/metadataengine/server/inc/mdssqlobjectmanipulate.h Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/inc/mdssqlobjectmanipulate.h Thu May 27 13:18:43 2010 +0300 @@ -483,6 +483,11 @@ RArray<TItemId>& aObjectIds); void CheckMassStorageMediaIdL( const TUint32 aMediaId ); + + /** + * Analyze the database after enough items have been added or modified + */ + void AnalyzeL(); protected: // personal methods @@ -579,6 +584,8 @@ TBuf<256> iLastAddedObjName; + TBool iDictionaryToBeCleaned; + private: class RClauseBuffer {
--- a/metadataengine/server/src/mdsgarbagecollector.cpp Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/src/mdsgarbagecollector.cpp Thu May 27 13:18:43 2010 +0300 @@ -99,14 +99,12 @@ if ( startAgain ) { - iTimer.After( iStatus, iDelay ); // start timer - SetActive(); - } - else if ( iNewDelay.Int() > 0 ) - { - iDelay = iNewDelay; - iNewDelay = 0; - iTimer.After( iStatus, iDelay ); // start timer + if( iNewDelay.Int() > 0 ) + { + iDelay = iNewDelay; + iNewDelay = 0; + } + iTimer.After( iStatus, iDelay ); // start timer SetActive(); } }
--- a/metadataengine/server/src/mdsmanipulationengine.cpp Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/src/mdsmanipulationengine.cpp Thu May 27 13:18:43 2010 +0300 @@ -31,6 +31,7 @@ #include "mdcserializationbuffer.h" #include "mdeinternalerror.h" #include "mdeerror.h" +#include "mdscommoninternal.h" // for CleanupResetAndDestroyPushL #include <mmf/common/mmfcontrollerpluginresolver.h> @@ -168,6 +169,7 @@ if (err == KErrNone) { aResultBuffer.InsertL( id ); + iAddedObjectsCount++; } else { @@ -295,6 +297,28 @@ iManipulate->SetNamespace( NULL ); iNotifier.NotifyAddedL( aBuffer, aResultBuffer ); + + if( iAddedObjectsCount > KTriggerDbMaintenanceTreasholdValue ) + { + RMdSTransaction transaction( connection ); + CleanupClosePushL(transaction); + const TInt beginError( transaction.Error() ); + + if( beginError != KErrNone ) + { + CleanupStack::PopAndDestroy( &transaction ); + } + + iManipulate->AnalyzeL(); + + if( beginError == KErrNone ) + { + transaction.CommitL(); + CleanupStack::PopAndDestroy( &transaction ); + } + + iAddedObjectsCount = 0; + } } // --------------------------------------------------------------------------- @@ -605,6 +629,7 @@ if (err == KErrNone) { aResultBuffer.InsertL( id ); + iModifiedObjectsCount++; } else { @@ -689,6 +714,28 @@ resultIds.SerializeL( aResultBuffer ); iNotifier.NotifyModifiedL( aBuffer, aResultBuffer ); + + if( iModifiedObjectsCount > KTriggerDbMaintenanceTreasholdValue ) + { + RMdSTransaction transaction( connection ); + CleanupClosePushL(transaction); + const TInt beginError( transaction.Error() ); + + if( beginError != KErrNone ) + { + CleanupStack::PopAndDestroy( &transaction ); + } + + iManipulate->AnalyzeL(); + + if( beginError == KErrNone ) + { + transaction.CommitL(); + CleanupStack::PopAndDestroy( &transaction ); + } + + iModifiedObjectsCount = 0; + } } CMdCSerializationBuffer* CMdSManipulationEngine::CheckObjectL(
--- a/metadataengine/server/src/mdsschema.cpp Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/src/mdsschema.cpp Thu May 27 13:18:43 2010 +0300 @@ -100,6 +100,7 @@ iBaseObject->AddPropertyL( MdeConstants::Object::KLastModifiedDateProperty, EPropertyTime, KMinTInt64, KMaxTInt64, EFalse, ETrue, EFalse ); iBaseObject->AddPropertyL( MdeConstants::Object::KItemTypeProperty, EPropertyText, TInt32(0), TInt32(255), EFalse, EFalse, EFalse ); iBaseObject->AddPropertyL( MdeConstants::Object::KTitleProperty, EPropertyText, TInt32(0), TInt32(255), EFalse, EFalse, EFalse ); + iBaseObject->AddPropertyL( MdeConstants::Object::KInDefaultFolder, EPropertyBool, TInt32(0), TInt32(1), EFalse, EFalse, EFalse ); TInt propcount = iBaseObject->GetPropertiesCount(); iBaseObject->iCol2Prop.Reset(); @@ -203,7 +204,7 @@ void CMdsSchema::CreateObjectTablesL() { - _LIT( KBaseObjectDefinition, "CREATE TABLE IF NOT EXISTS %S%u(ObjectId INTEGER PRIMARY KEY AUTOINCREMENT,ObjectDefId INTEGER NOT NULL,Flags INTEGER,MediaId LARGEINT,UsageCount LARGEINT DEFAULT 0,GuidHigh LARGEINT,GuidLow LARGEINT,URI TEXT NOT NULL COLLATE NOCASE,Origin INTEGER,Size LARGEINT,TimeOffset INTEGER,CreationDate LARGEINT,LastModifiedDate LARGEINT,ItemType TEXT,Title TEXT,UNIQUE(GuidHigh,GuidLow),UNIQUE(URI,MediaId));" ); + _LIT( KBaseObjectDefinition, "CREATE TABLE IF NOT EXISTS %S%u(ObjectId INTEGER PRIMARY KEY AUTOINCREMENT,ObjectDefId INTEGER NOT NULL,Flags INTEGER,MediaId LARGEINT,UsageCount LARGEINT DEFAULT 0,GuidHigh LARGEINT,GuidLow LARGEINT,URI TEXT NOT NULL COLLATE NOCASE,Origin INTEGER,Size LARGEINT,TimeOffset INTEGER,CreationDate LARGEINT,LastModifiedDate LARGEINT,ItemType TEXT,Title TEXT,InDefaultFolder INTEGER,UNIQUE(GuidHigh,GuidLow),UNIQUE(URI,MediaId));" ); _LIT( KCreateRelationsTable, "CREATE TABLE IF NOT EXISTS Relations%u(RelationId INTEGER PRIMARY KEY AUTOINCREMENT,Flags INTEGER,RelationDefId INTEGER NOT NULL,LeftObjectId INTEGER NOT NULL,RightObjectId INTEGER NOT NULL,Parameter INTEGER,GuidHigh LARGEINT,GuidLow LARGEINT,LastModifiedDate LARGEINT);" ); _LIT( KCreateEventsTable, "CREATE TABLE IF NOT EXISTS Event%u(EventId INTEGER PRIMARY KEY AUTOINCREMENT,ObjectId INTEGER NOT NULL, EventDefId INTEGER NOT NULL, Timestamp INTEGER NOT NULL, Source TEXT, Participant TEXT);" ); _LIT( KCreateTxtSrchTable, "CREATE TABLE IF NOT EXISTS TextSearch%u(WordId INTEGER NOT NULL,ObjectId INTEGER NOT NULL,Position INTEGER);" );
--- a/metadataengine/server/src/mdsserver.cpp Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/src/mdsserver.cpp Thu May 27 13:18:43 2010 +0300 @@ -365,10 +365,10 @@ CMdSSqLiteConnection* conn = CMdSSqLiteConnection::NewLC(); iDefaultDBConnection = conn; MMdSDbConnectionPool::SetDefaultDB( conn ); - - CMdSMaintenanceEngine::InitConnectionL(); CleanupStack::Pop( conn ); + CMdSMaintenanceEngine::InitConnectionL(); + iNotifier = CMdSNotifier::NewL(); InitializeL();
--- a/metadataengine/server/src/mdsserversession.cpp Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/src/mdsserversession.cpp Thu May 27 13:18:43 2010 +0300 @@ -866,6 +866,7 @@ delete findEngine; iFindEngines.Remove( findEngineIndex ); + iFindEngines.Compress(); } } break; @@ -984,6 +985,7 @@ // The cache holds a new notification for this notifier, trigger it CNotificationCacheItem* item = iNotificationCache[mid]; iNotificationCache.Remove(mid); + iNotificationCache.Compress(); CleanupStack::PushL( item ); @@ -1023,6 +1025,7 @@ delete iNotificationCache[i]->iData; iNotificationCache[i]->iData = NULL; iNotificationCache.Remove(i); + iNotificationCache.Compress(); } } } @@ -1089,6 +1092,95 @@ return buffer; } +// --------------------------------------------------------------------------- +// CacheNotificationL caches a notifier event +// --------------------------------------------------------------------------- +// + +CMdCSerializationBuffer* CMdSServerSession::CombineUriNotificationsBuffersL(CMdCSerializationBuffer& aLeftBuffer, + CMdCSerializationBuffer& aRightBuffer ) + { + // IDs are always stored in object IDs, + // even if those are actually relation or event IDs + + aLeftBuffer.PositionL( KNoOffset ); + aRightBuffer.PositionL( KNoOffset ); + + const TMdCItemIds& leftItemIds = TMdCItemIds::GetFromBufferL( aLeftBuffer ); + const TMdCItemIds& rightItemIds = TMdCItemIds::GetFromBufferL( aRightBuffer ); + + // check that namespaces match + if ( leftItemIds.iNamespaceDefId != rightItemIds.iNamespaceDefId ) + { + return NULL; + } + + // create new buffer, which will contain combined results + const TInt leftBufferSize = aLeftBuffer.Size(); + const TInt rightBufferSize = aRightBuffer.Size(); + CMdCSerializationBuffer* buffer = CMdCSerializationBuffer::NewLC( + leftBufferSize + rightBufferSize ); + + TMdCItemIds combinedItemIds; + + // use left buffer's data as base line + Mem::Copy( &combinedItemIds, &leftItemIds, sizeof( TMdCItemIds ) ); + + // and add right buffer's count + combinedItemIds.iObjectIds.iPtr.iCount += rightItemIds.iObjectIds.iPtr.iCount; + + combinedItemIds.SerializeL( *buffer ); + + // move left and right buffer to begin of items + aLeftBuffer.PositionL( leftItemIds.iObjectIds.iPtr.iOffset ); + aRightBuffer.PositionL( rightItemIds.iObjectIds.iPtr.iOffset ); + + // copy IDs from left and right buffers to combined buffer + for (TInt i = 0; i < leftItemIds.iObjectIds.iPtr.iCount; ++i) + { + TItemId id; + aLeftBuffer.ReceiveL( id ); + buffer->InsertL( id ); + } + + for (TInt i = 0; i < rightItemIds.iObjectIds.iPtr.iCount; ++i) + { + TItemId id; + aRightBuffer.ReceiveL( id ); + buffer->InsertL( id ); + } + + //Add combined URI count + TUint32 leftUriCount ( 0 ); + aLeftBuffer.ReceiveL( leftUriCount ); + TUint32 rightUriCount ( 0 ); + aRightBuffer.ReceiveL( rightUriCount ); + buffer->InsertL( TUint32( leftUriCount + rightUriCount) ); + + //Add uris + HBufC* uri = NULL; + for( TInt i( 0 ); i < leftUriCount; i++ ) + { + //Get uri + uri = aLeftBuffer.ReceiveDes16L(); + CleanupStack::PushL( uri ); + buffer->InsertL( *uri ); + CleanupStack::Pop( uri ); + } + + for( TInt i( 0 ); i < rightUriCount; i++ ) + { + //Get uri + uri = aRightBuffer.ReceiveDes16L(); + CleanupStack::PushL( uri ); + buffer->InsertL( *uri ); + CleanupStack::Pop( uri ); + } + + CleanupStack::Pop( buffer ); + return buffer; + } + CMdCSerializationBuffer* CMdSServerSession::CombineItemBuffersL( CMdCSerializationBuffer& aLeftBuffer, CMdCSerializationBuffer& aRightBuffer ) { @@ -1176,7 +1268,13 @@ { CMdCSerializationBuffer* data = NULL; // combine buffers - if ( notificationItem.iCode != ERelationItemNotifyRemove ) + if( notificationItem.iCode == EObjectNotifyAddWithUri || + notificationItem.iCode == EObjectNotifyModifyWithUri || + notificationItem.iCode == EObjectNotifyRemoveWithUri ) + { + data = CombineUriNotificationsBuffersL( *notificationItem.iData, *aData ); + } + else if ( notificationItem.iCode != ERelationItemNotifyRemove ) { data = CombineBuffersL( *notificationItem.iData, *aData ); }
--- a/metadataengine/server/src/mdssqliteconnection.cpp Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/src/mdssqliteconnection.cpp Thu May 27 13:18:43 2010 +0300 @@ -75,8 +75,8 @@ void CMdSSqLiteConnection::OpenDbL( const TDesC& aDbFileName ) { - _LIT8( KMdsSqlDbaConfig, "cache_size=8000; page_size=2048; encoding=\"UTF-16\";"); - _LIT8( KBlacklistSqlDbaConfig, "cache_size=4000; page_size=1024; encoding=\"UTF-16\";"); + _LIT8( KMdsSqlDbaConfig, "cache_size=2000; page_size=2048; encoding=\"UTF-16\";"); + _LIT8( KBlacklistSqlDbaConfig, "cache_size=1500; page_size=1024; encoding=\"UTF-16\";"); delete iDbFileName; iDbFileName = NULL; // in case AllocL leaves @@ -639,6 +639,15 @@ } } +void CMdSSqLiteConnection::DoAnalyzeL() + { + _LIT( KAnalyze, "ANALYZE;"); + + RRowData emptyRow; + CleanupClosePushL( emptyRow ); + ExecuteL(KAnalyze, emptyRow); + CleanupStack::PopAndDestroy( &emptyRow ); + } TInt CMdSSqLiteConnection::DeleteAndReCreateDB( const HBufC* aDbFileName, const RSqlSecurityPolicy& asqlSecurityPolicy,
--- a/metadataengine/server/src/mdssqlobjectmanipulate.cpp Fri May 14 16:17:23 2010 +0300 +++ b/metadataengine/server/src/mdssqlobjectmanipulate.cpp Thu May 27 13:18:43 2010 +0300 @@ -3309,14 +3309,13 @@ TBool CMdSSqlObjectManipulate::DoGarbageCollectionL() { - _LIT( KDeleteObject, "DELETE FROM Object%u WHERE Flags&?;" ); + _LIT( KDeleteObject, "DELETE FROM Object%u WHERE ObjectId IN (SELECT ObjectId FROM Object%u WHERE Flags&? LIMIT 100);" ); _LIT( KUpdateDeleteObject, "UPDATE Object%u SET Flags=Flags|? WHERE Flags&?;" ); _LIT( KDeleteRelations, "DELETE FROM Relations%u WHERE Flags&?;" ); _LIT( KUpdateDeleteRelations, "UPDATE Relations%u SET Flags=Flags|? WHERE Flags&?;" ); _LIT( KUpdateDeleteContextObjects, "UPDATE Object%u SET Flags=Flags|? WHERE ObjectId IN ( SELECT ObjectId FROM Object%u AS O WHERE Flags&? AND UsageCount=0 AND ( SELECT count(*) FROM Relations%u WHERE NOT Flags&? AND ( LeftObjectId = O.ObjectId OR RightObjectId = O.ObjectId ) )= 0 );" ); _LIT( KDeleteWordFromTextSearchDict, "DELETE FROM TextSearchDictionary%u WHERE NOT EXISTS(SELECT WordId FROM TextSearch%u WHERE WordId = TextSearchDictionary%u.WordId);"); - RClauseBuffer commonClauseOne(*this, KUpdateDeleteContextObjects().Length() + 3 * KMaxUintValueLength); CleanupClosePushL( commonClauseOne ); CMdsClauseBuffer& buffer = commonClauseOne.BufferL(); @@ -3325,34 +3324,11 @@ CleanupClosePushL( rowDataDel ); rowDataDel.AppendL( TColumn( EMdEObjectFlagGarbage ) ); - RRowData rowDataUpd; - CleanupClosePushL( rowDataUpd ); - rowDataUpd.AppendL( TColumn( EMdEObjectFlagGarbage ) ); - rowDataUpd.AppendL( TColumn( EMdEObjectFlagRemoved ) ); - - RRowData rowDataDelRel; - CleanupClosePushL( rowDataDelRel ); - rowDataDelRel.AppendL( TColumn( EMdERelationFlagGarbageDeleted ) ); - - RRowData rowDataUpdRel; - CleanupClosePushL( rowDataUpdRel ); - rowDataUpdRel.AppendL( TColumn( EMdERelationFlagGarbageDeleted ) ); - rowDataUpdRel.AppendL( TColumn( EMdERelationFlagDeleted ) ); - - RRowData rowDataDelContext; - CleanupClosePushL( rowDataDelContext ); - rowDataDelContext.AppendL( TColumn( EMdEObjectFlagRemoved ) ); - rowDataDelContext.AppendL( TColumn( EMdEObjectFlagContext ) ); - rowDataDelContext.AppendL( TColumn( EMdERelationFlagDeleted ) ); - - RRowData emptyRow; - CleanupClosePushL( emptyRow ); - const RPointerArray<CMdsNamespaceDef>& namespaceDefs = iSchema.NamespaceDefs(); CMdSSqLiteConnection& connection = MMdSDbConnectionPool::GetDefaultDBL(); - TInt deleteObjectResult; + TInt deleteObjectResult = 0; TInt updateResult = 0; const TInt count = namespaceDefs.Count(); @@ -3362,14 +3338,43 @@ const TDefId nmspId = namespaceDefs[i]->GetId(); // deleting objects - buffer.BufferL().Format( KDeleteObject, nmspId ); + buffer.BufferL().Format( KDeleteObject, nmspId, nmspId ); User::LeaveIfError( deleteObjectResult = connection.ExecuteL( buffer.ConstBufferL(), rowDataDel ) ); - + + if( deleteObjectResult > 0 ) + { + // If objects were deleted, continue garbage collection + iDictionaryToBeCleaned = ETrue; + CleanupStack::PopAndDestroy( 2, &commonClauseOne ); + return ETrue; + } + + RRowData rowDataUpd; + CleanupClosePushL( rowDataUpd ); + rowDataUpd.AppendL( TColumn( EMdEObjectFlagGarbage ) ); + rowDataUpd.AppendL( TColumn( EMdEObjectFlagRemoved ) ); + buffer.BufferL().Format( KUpdateDeleteObject, nmspId ); User::LeaveIfError( updateResult += connection.ExecuteL( buffer.ConstBufferL(), rowDataUpd ) ); + if( updateResult > 0 ) + { + // If objects were modified, continue garbage collection + CleanupStack::PopAndDestroy( 3, &commonClauseOne ); + return ETrue; + } + + RRowData rowDataDelRel; + CleanupClosePushL( rowDataDelRel ); + rowDataDelRel.AppendL( TColumn( EMdERelationFlagGarbageDeleted ) ); + + RRowData rowDataUpdRel; + CleanupClosePushL( rowDataUpdRel ); + rowDataUpdRel.AppendL( TColumn( EMdERelationFlagGarbageDeleted ) ); + rowDataUpdRel.AppendL( TColumn( EMdERelationFlagDeleted ) ); + // deleting relations buffer.BufferL().Format( KDeleteRelations, nmspId ); User::LeaveIfError( connection.ExecuteL( @@ -3378,19 +3383,43 @@ buffer.BufferL().Format( KUpdateDeleteRelations, nmspId ); User::LeaveIfError( updateResult += connection.ExecuteL( buffer.ConstBufferL(), rowDataUpdRel ) ); - + + if( updateResult > 0 ) + { + // If objects were modified, continue garbage collection + CleanupStack::PopAndDestroy( 5, &commonClauseOne ); + return ETrue; + } + + RRowData rowDataDelContext; + CleanupClosePushL( rowDataDelContext ); + rowDataDelContext.AppendL( TColumn( EMdEObjectFlagRemoved ) ); + rowDataDelContext.AppendL( TColumn( EMdEObjectFlagContext ) ); + rowDataDelContext.AppendL( TColumn( EMdERelationFlagDeleted ) ); + // deleting context objects buffer.BufferL().Format( KUpdateDeleteContextObjects, nmspId, nmspId, nmspId ); User::LeaveIfError( updateResult += connection.ExecuteL( buffer.ConstBufferL(), rowDataDelContext ) ); - + + if( updateResult > 0 ) + { + // If objects were modified, continue garbage collection + CleanupStack::PopAndDestroy( 6, &commonClauseOne ); + return ETrue; + } + + RRowData emptyRow; + CleanupClosePushL( emptyRow ); + // deleting words from text search dictionary - if ( deleteObjectResult > 0 ) + if ( iDictionaryToBeCleaned ) { buffer.BufferL().Format( KDeleteWordFromTextSearchDict, nmspId, nmspId, nmspId ); User::LeaveIfError( connection.ExecuteL( buffer.ConstBufferL(), emptyRow ) ); + iDictionaryToBeCleaned = EFalse; } } @@ -3405,9 +3434,15 @@ } #endif - return updateResult != 0; + return EFalse; } +void CMdSSqlObjectManipulate::AnalyzeL() + { + CMdSSqLiteConnection& db = MMdSDbConnectionPool::GetDefaultDBL(); + db.DoAnalyzeL(); + } + #ifdef MDS_PLAYLIST_HARVESTING_ENABLED TInt CMdSSqlObjectManipulate::CleanPlaylistsL() {
--- a/watchdog/src/watchdog.cpp Fri May 14 16:17:23 2010 +0300 +++ b/watchdog/src/watchdog.cpp Thu May 27 13:18:43 2010 +0300 @@ -51,7 +51,7 @@ // --------------------------------------------------------------------------- // CWatchdog::CWatchdog() : - CActive( CActive::EPriorityLow ), iState(EIdle) + CActive( CActive::EPriorityStandard ), iState(EIdle) { // Add to active scheduler. CActiveScheduler::Add( this );