# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1266612510 -7200 # Node ID 13afc0e517bd81ba63e454407a1f0acc77239b76 # Parent 2a40e88564c81750ce64499d1311ed2063f9097d Revision: 201003 Kit: 201007 diff -r 2a40e88564c8 -r 13afc0e517bd inc/musicplayerbldvariant.hrh --- a/inc/musicplayerbldvariant.hrh Tue Feb 02 00:09:33 2010 +0200 +++ b/inc/musicplayerbldvariant.hrh Fri Feb 19 22:48:30 2010 +0200 @@ -21,7 +21,7 @@ #define MUSICPLAYERBLDVARIANT_HRH -#define IAD_INCLUDE_BACKSTEPPING +#undef IAD_INCLUDE_BACKSTEPPING #define IAD_INCLUDE_ENHANCED_HOMESCREEN #define IAD_INCLUDE_UPNP #define IAD_INCLUDE_SINGLE_CLICK diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/Conf/mpxmusicplayer.confml Binary file mpxmusicplayer/Conf/mpxmusicplayer.confml has changed diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/Conf/mpxmusicplayer_101FFCD0.crml Binary file mpxmusicplayer/Conf/mpxmusicplayer_101FFCD0.crml has changed diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/data/aiplayerplugin.rss --- a/mpxmusicplayer/activeidle/aiplayerplugin/data/aiplayerplugin.rss Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2007-2007 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: Resource definitions for project aiplayerplugin -* -*/ - - -#include -#include -#include "aiplayerpluginuids.hrh" - -// --------------------------------------------------------------------------- -// registry_info -// ECOM registry information -// --------------------------------------------------------------------------- -// -RESOURCE REGISTRY_INFO registry_info - { - resource_format_version = RESOURCE_FORMAT_VERSION_2; - dll_uid = AI_UID_ECOM_DLL_CONTENTPUBLISHER_PLAYERPLUGIN; - - // Interface info array - interfaces = - { - INTERFACE_INFO - { - // UID of the implemented interface - interface_uid = AI_UID_ECOM_INTERFACE_CONTENTPUBLISHER; - implementations = - { - IMPLEMENTATION_INFO - { - implementation_uid = AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_PLAYERPLUGIN; - version_no = 1; - display_name = "PlayerPlugin"; - default_data = ""; - opaque_data = " "; - rom_only = 1; - } - }; - } - }; - } diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/data/aiplayerpluginresource.rss --- a/mpxmusicplayer/activeidle/aiplayerplugin/data/aiplayerpluginresource.rss Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2007 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: Resource definitions for project aiplayerplugin -* -*/ - - -NAME MPAI - -#include -#include -#include - -RESOURCE RSS_SIGNATURE { } -RESOURCE TBUF { buf=""; } - -// --------------------------------------------------------------------------- -// ?resource_name -// ?description -// --------------------------------------------------------------------------- -// -RESOURCE TBUF r_mpx_qtn_aipp_unknown_artist - { - buf = qtn_aipp_unknown_artist; - } - diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/group/aiplayerplugin.mmp --- a/mpxmusicplayer/activeidle/aiplayerplugin/group/aiplayerplugin.mmp Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* -* Copyright (c) 2007-2007 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: Project definition file for project aiplayerplugin -* -*/ - - -#include -#include - -TARGET aiplayerplugin2.dll -TARGETTYPE PLUGIN -UID 0x10009D8D 0x10207B72 - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -VERSION 15.0 - -SOURCEPATH ../src -SOURCE aiplayerplugin.cpp -SOURCE aiplayerpluginengine.cpp - -SOURCEPATH ../data -START RESOURCE aiplayerplugin.rss -TARGET aiplayerplugin2.rsc -LANGUAGE_IDS -END - -SOURCEPATH ../data -START RESOURCE aiplayerpluginresource.rss -TARGETPATH APP_RESOURCE_DIR -HEADER -LANGUAGE_IDS -END - -USERINCLUDE ../inc - -APP_LAYER_SYSTEMINCLUDE - -LIBRARY euser.lib -LIBRARY ecom.lib -LIBRARY avkon.lib -LIBRARY ws32.lib -LIBRARY cone.lib -LIBRARY efsrv.lib // TParse -LIBRARY bafl.lib // BaflUtils -LIBRARY estor.lib // RWriteStream -LIBRARY aiutils.lib -LIBRARY commonengine.lib // stringloader -LIBRARY apgrfx.lib // TaskList -LIBRARY apparc.lib // StartApp -LIBRARY mpxcommon.lib // mpxparameter -LIBRARY mpxplaybackutility.lib diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/group/bld.inf --- a/mpxmusicplayer/activeidle/aiplayerplugin/group/bld.inf Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2007-2007 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: Build information file for project aiplayerplugin -* -*/ - -#include -#include - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -#ifdef RD_CUSTOMIZABLE_AI -../loc/aiplayerplugin.loc APP_LAYER_LOC_EXPORT_PATH(aiplayerplugin.loc) -#endif - -PRJ_MMPFILES -#ifdef RD_CUSTOMIZABLE_AI -aiplayerplugin.mmp -#endif - -PRJ_TESTMMPFILES - -PRJ_TESTEXPORTS - diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerplugin.h --- a/mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerplugin.h Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,142 +0,0 @@ -/* -* Copyright (c) 2006-2007 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: AI ecom plugin class. Main interface to XML AI framework. -* -*/ - - -#ifndef C_AIPLAYERPLUGIN_H -#define C_AIPLAYERPLUGIN_H - -// INCLUDES -#include -#include -#include -#include - -#include "aiplayerpluginengine.h" -#include "aiplayerpluginengineobserver.h" - -class MAiPluginSettings; -class MAiContentObserver; -class MAiContentItemIterator; -class CCoeEnv; - - -/** - * Music Player Player Plugin. - * This class implements AI ecom plugin. This is the main interface to - * the XML AI framework. - * - * @lib aiplayerplugin2.lib - * @since S60 5.0 - */ -NONSHARABLE_CLASS( CAiPlayerPlugin ) : public CAiContentPublisher, - public MAiPropertyExtension, - public MAiEventHandlerExtension, - public MAiPlayerPluginEngineObserver - { -public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CAiPlayerPlugin* NewL(); - - /** - * Destructor. - */ - virtual ~CAiPlayerPlugin(); - -public: - - /** - * From CAiContentPublisher - * See aicontentpublisher.h for detailed description. - * @since S60 5.0 - */ - void Resume( TAiTransitionReason aReason ); - void Suspend( TAiTransitionReason aReason ); - void Stop( TAiTransitionReason aReason ); - void SubscribeL( MAiContentObserver& aObserver ); - void ConfigureL( RAiSettingsItemArray& aSettings ); - TAny* Extension( TUid aUid ); - - /** - * From MAiPropertyExtension - * See aipropertyextension.h for detailed description. - * @since S60 5.0 - */ - TAny* GetPropertyL( TInt aProperty ); - void SetPropertyL( TInt aProperty, TAny* aValue ); - - /** - * From MAiEventHandlerExtension - * See aieventhandlerextension.h for detailed description. - * @since S60 5.0 - */ - void HandleEvent( TInt aEvent, const TDesC& aParam ); - - /** - * From MAiPlayerPluginEngineObserver - * See aiplayerpluginengine.h for detailed description. - * @since S60 5.0 - */ - void PlayerStateChanged( TMPlayerState aState ); - void TrackInfoChanged( const TDesC& aTitle, const TDesC& aArtist ); - void PlaybackPositionChanged( TInt aPosition ); - void VolumeChanged( TInt aVolume ); - -private: - - CAiPlayerPlugin(); - void ConstructL(); - - /** - * Helper class for HandleEvent received from MAiEventHandlerExtension - */ - void DoHandleEventL( TInt aEvent, const TDesC& aParam ); - - /** - * Callback function invoked through iCleanTimer upon timeout. - */ - static TInt ClearL( TAny* aPtr ); - -private: // Data - - RPointerArray iObservers; - TAiPublisherInfo iInfo; - MAiContentItemIterator* iContent; - MAiContentItemIterator* iResources; - MAiContentItemIterator* iEvents; - - CAiPlayerPluginEngine* iEngine; - TMPlayerState iState; - - TBuf<128> iDuration; - TBuf<128> iElapsedTime; - HBufC* iLongFormatString; - HBufC* iShortFormatString; - HBufC* iUnknownArtistText; - TInt iResourceOffset; - - CCoeEnv* iCoeEnv; // Not owned - TBool iPlayStarted; - CPeriodic* iCleanTimer; - TInt iLastSetVolume; - }; - -#endif // C_AIPLAYERPLUGIN_H - - diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerplugincontentmodel.h --- a/mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerplugincontentmodel.h Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/* -* Copyright (c) 2006-2007 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: SDK, AI Player Plugin Content Model API -* -*/ - - -#ifndef AIPLPLCONTENTMODEL_H -#define AIPLPLCONTENTMODEL_H - -#include -#include "aiplayerpluginuids.hrh" - -// Plug-in Implementation UID. -const TInt KImplUidMusicPlayerPlugin = AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_PLAYERPLUGIN; -const TUid KUidMusicPlayerPlugin = { KImplUidMusicPlayerPlugin }; - - -// ================================= CONTENT =================================== - -/** - * Content Ids - */ -enum TAiPlplContentIds - { - EAiPlplContentArtistCaption - ,EAiPlplContentTitleCaption - ,EAiPlplContentDurationCaption - ,EAiPlplContentVolume - ,EAiPlplContentStatus - ,EAiPlplContentElapsedTime - }; - -/** - * Content that the plugin will publish - */ -const TAiContentItem KAiPlplContent[] = - { - { EAiPlplContentArtistCaption, L"Artist", KAiContentTypeText } - ,{ EAiPlplContentTitleCaption, L"Title", KAiContentTypeText } - ,{ EAiPlplContentDurationCaption, L"Duration", KAiContentTypeText } - //Current volume level. Content needs to be re-published every time when volume is changed - //Always published as resource see KAiPlplResources \ VolumeLevel - ,{ EAiPlplContentVolume, L"Volume", KAiContentTypeText } - //Current player status. Content needs to be re-published every time when player status is changed. - //When player is stoped, the plug-in MUST publish empty item - //Always published as resource see KAiPlplResources \ Status - ,{ EAiPlplContentStatus, L"Status", KAiContentTypeBitmap } - ,{ EAiPlplContentElapsedTime, L"ElapsedTime",KAiContentTypeText } - }; - - -// ================================ RESOURCES ================================== - - -/** - * Resource Ids - */ -enum TAiPlplPluginResourceIds - { - EAiPlplResourceVol0 - ,EAiPlplResourceVol1 - ,EAiPlplResourceVol2 - ,EAiPlplResourceVol3 - ,EAiPlplResourceVol4 - ,EAiPlplResourceVol5 - ,EAiPlplResourceVol6 - ,EAiPlplResourceVol7 - ,EAiPlplResourceVol8 - ,EAiPlplResourceVol9 - ,EAiPlplResourceVol10 - ,EAiPlplResourcePlayIcon - ,EAiPlplResourcePauseIcon - }; - -/** - * Resources that the plugin will publish - */ -const TAiContentItem KAiPlplResources[] = - { - //UI resources that represents volume levels - { EAiPlplResourceVol0, L"Vol0", KAiContentTypeText } - ,{ EAiPlplResourceVol1, L"Vol1", KAiContentTypeText } - ,{ EAiPlplResourceVol2, L"Vol2", KAiContentTypeText } - ,{ EAiPlplResourceVol3, L"Vol3", KAiContentTypeText } - ,{ EAiPlplResourceVol4, L"Vol4", KAiContentTypeText } - ,{ EAiPlplResourceVol5, L"Vol5", KAiContentTypeText } - ,{ EAiPlplResourceVol6, L"Vol6", KAiContentTypeText } - ,{ EAiPlplResourceVol7, L"Vol7", KAiContentTypeText } - ,{ EAiPlplResourceVol8, L"Vol8", KAiContentTypeText } - ,{ EAiPlplResourceVol9, L"Vol9", KAiContentTypeText } - ,{ EAiPlplResourceVol10, L"Vol10", KAiContentTypeText } - - //UI resources that represents status - ,{ EAiPlplResourcePlayIcon, L"PlayIcon", KAiContentTypeBitmap } - ,{ EAiPlplResourcePauseIcon, L"PauseIcon", KAiContentTypeBitmap } - }; - -// ============================ SERVICES (Events) ============================== - -/** - * Event Ids. - */ -enum TAiPlplEventIds - { - EAiPlplEventVolInc - ,EAiPlplEventVolDec - ,EAiPlplEventLaunchLibrary - ,EAiPlplEventVolSet - ,EAiPlplEventVolMute - ,EAiPlplEventVolRestore - }; - -/** - * Services that the plugin can perform - */ -const TAiContentItem KAiPlplEvents[] = - { - { EAiPlplEventVolInc, L"VolInc", "" } - ,{ EAiPlplEventVolDec, L"VolDec", "" } - ,{ EAiPlplEventLaunchLibrary, L"Library", "" } - ,{ EAiPlplEventVolSet, L"VolSet", "" } - ,{ EAiPlplEventVolMute, L"Mute", "" } - ,{ EAiPlplEventVolRestore, L"Restore", "" } - }; - -#endif // AIPLPLCONTENTMODEL_H diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerpluginengine.h --- a/mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerpluginengine.h Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,209 +0,0 @@ -/* -* Copyright (c) 2007-2007 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: Engine which interfaces to MPX framework. -* -*/ - - -#ifndef C_AIPLAYERPLUGINENGINE_H -#define C_AIPLAYERPLUGINENGINE_H - -#include -#include - -#include "aiplayerpluginengineobserver.h" - -class MMPXPlaybackUtility; - - -/** - * Music Player Player Plugin Engine. - * This class provides interface to MPX framework. - * - * @lib aiplayerplugin2.lib - * @since S60 5.0 - */ -NONSHARABLE_CLASS( CAiPlayerPluginEngine ) : public CBase, - public MMPXPlaybackObserver, - public MMPXPlaybackCallback - { -public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CAiPlayerPluginEngine* NewL( MAiPlayerPluginEngineObserver& aObserver ); - - /** - * Destructor. - */ - virtual ~CAiPlayerPluginEngine(); - - /** - * From MMPXPlaybackObserver - * See mpxplaybackobserver.h for detailed description. - * @since S60 5.0 - */ - void HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError ); - - /** - * From MMPXPlaybackCallback - * See mpxplaybackobserver.h for detailed description. - * @since S60 5.0 - */ - void HandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError ); - void HandleSubPlayerNamesL( TUid aPlayer, const MDesCArray* aSubPlayers, TBool aComplete, TInt aError ); - void HandleMediaL( const CMPXMedia& aMedia, TInt aError ); - void HandlePlaybackCommandComplete( CMPXCommand* aCommandResult, TInt aError ); - -public: - - /** - * Get the current state of the active player. - * - * @return Active player state - * @see TMPlayerState - */ - TMPlayerState PlayerState(); - - /** - * Get the title of the currently playing song. - * - * @return Song title - */ - const TDesC& Title(); - - /** - * Get the artist of the currently playing song. - * - * @return Artist - */ - const TDesC& Artist(); - - /** - * Get the current position. - * - * @return Current position. - */ - TInt Position(); - - /** - * Get the duration of the currently playing song. - * - * @return Song duration. - */ - TInt Duration(); - - /** - * Get the current volume. - * - * @return Current volume. - */ - TInt Volume(); - - /** - * Set volume. - * - * @param aVolume Volume level - */ - void SetVolumeL( TInt aVolume ); - -private: - - /** - * C++ default constructor. - */ - CAiPlayerPluginEngine( MAiPlayerPluginEngineObserver& aObserver ); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - - /** - * Handle playback message - * - * @param aMessage playback message - */ - void DoHandlePlaybackMessageL( const CMPXMessage& aMessage ); - - /** - * Handle playback property - * - * @param aProperty the property - * @param aValue the value of the property - * @param aError error code - */ - void DoHandlePropertyL( TInt aProperty, TInt aValue, TInt aError ); - - /** - * Handle playback state changed. - * - * @param aState New Playback state - */ - void DoHandleStateChangedL( TMPXPlaybackState aState ); - - /** - * Displays error notes. - * - * @param aError Error ID to be handled. - */ - void HandleErrorL( TInt aError ); - - /** - * Map states from TMPXPlaybackState to TMPlayerState - * - * @param aState State in TMPXPlaybackState format - * @return State in TMPlayerState format, or KErrNotFound - * if the state can't be mapped - */ - TMPlayerState MapState( TMPXPlaybackState aState ); - - /** - * Map volume from MPX player to AI volume level. - * - * @param aVolume Volume level from MPX player - * @return Volume level for AI. - */ - TInt MapToAiVolume( TInt aVolume ); - - /** - * Map volume from AI to MPX player volume level. - * - * @param aVolume Volume level from AI - * @return Volume level for MPX player. - */ - TInt MapToMpxVolume( TInt aVolume ); - - /** - * Request media. - */ - void RequestMediaL(); - -private: // Data - - MAiPlayerPluginEngineObserver* iObserver; // Not owned - MMPXPlaybackUtility* iPlaybackUtility; // Owned - - HBufC* iTitle; - HBufC* iArtist; - TInt iMaxVolume; - TInt iVolume; - TInt iPosition; - TInt iDuration; - }; - -#endif // C_CAiPlayerPluginEngine_H - -// End of File diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerpluginengineobserver.h --- a/mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerpluginengineobserver.h Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/* -* Copyright (c) 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: Music Player stautus observer -* -*/ - - -#ifndef M_AIPLAYERPLUGINENGINEOBSERVER_H -#define M_AIPLAYERPLUGINENGINEOBSERVER_H - -#include - -/** - * Player state. - */ -enum TMPlayerState - { - EMPlayerStatePlaying, - EMPlayerStatePaused, - EMPlayerStateSeeking, - EMPlayerStateOther - }; - -/** - * Observer interface to be implemented by a client of AiPlayerPluginEngine. - * - * @lib aiplayerplugin2.lib - * @since S60 5.0 - */ -class MAiPlayerPluginEngineObserver - { -public: - - /** - * Called when active player instance's state changes - * - * @since S60 5.0 - * @param aState Active player state - * @see TMPlayerState - */ - virtual void PlayerStateChanged( TMPlayerState aState ) = 0; - - /** - * Called when track info changes (i.e. track changes or current track's - * info is updated) in the active player instance. - * - * @since S60 5.0 - * @param aTitle Current track's title. - * @param aArtist Current track's artist. - */ - virtual void TrackInfoChanged( const TDesC& aTitle, const TDesC& aArtist ) = 0; - - /** - * Called each second during playback. - * - * @since S60 5.0 - * @param aPosition Current playback position in seconds. - */ - virtual void PlaybackPositionChanged( TInt aPosition ) = 0; - - /** - * Called when the player volume is changed. - * - * @since S60 5.0 - * @param aVolume volume level. - */ - virtual void VolumeChanged( TInt aVolume ) = 0; - }; - - -#endif // ?M_AIPLAYERPLUGINENGINEOBSERVER_H diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerpluginuids.hrh --- a/mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerpluginuids.hrh Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* -* Copyright (c) 2007-2007 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: Resource headers for project aiplayerplugin -* -*/ - - -#ifndef AIPLAYERPLUGINUIDS_HRH -#define AIPLAYERPLUGINUIDS_HRH - -/** Ecom implementation uid for player plugin */ -#define AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_PLAYERPLUGIN 0x10207B73 - -/** Ecom dll uid for player plugin */ -#define AI_UID_ECOM_DLL_CONTENTPUBLISHER_PLAYERPLUGIN 0x10207B72 - -#endif // AIPLAYERPLUGINUIDS_HRH diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/loc/aiplayerplugin.loc --- a/mpxmusicplayer/activeidle/aiplayerplugin/loc/aiplayerplugin.loc Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2007 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: Localization strings for project aiplayerplugin -* -*/ - - -// LOCALISATION STRINGS - -// d:Text shown when artist is unknown -// l:list_double_large_graphic_pane_t1_cp2 -// w: -// r:5.0 -// -#define qtn_aipp_unknown_artist "Unknown artist" diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/src/aiplayerplugin.cpp --- a/mpxmusicplayer/activeidle/aiplayerplugin/src/aiplayerplugin.cpp Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,632 +0,0 @@ -/* -* Copyright (c) 2006-2007 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: Active Idle player plug-in -* -*/ - - -#include -#include - -#include -#include -#include -#include - -#include // KDC_APP_BITMAP_DIR -#include // RApaLsSession -#include // CApaCommandLine -#include - -#include -#include // KAppUidMusicPlayer -#include -#include -#include - -#include "aiplayerplugin.h" -#include "aiplayerpluginuids.hrh" -#include "aiplayerplugincontentmodel.h" - -_LIT(KMPXZeroDurationMark, "--"); -const TInt KMPXMinSecSeparatorIndex = 2; -const TInt KMPXOneSecInMicroSecs = 1000000; -const TInt KMPXOneHourInSeconds = 60*60; -const TInt KMPXTimeIndicatorLength = 16; -const TInt KPlayerMusicPlayerParameterGranularity = 50; -_LIT( KMPXAiPlayerRscPath, "z:aiplayerpluginresource.rsc" ); - -const TInt KMPlayerResumeWaitTime = 1000000; // 1.0s - -// ======== MEMBER FUNCTIONS ======== - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::ConstructL -// ---------------------------------------------------------------------------- -// -void CAiPlayerPlugin::ConstructL() - { - MPX_DEBUG1("CAiPlayerPlugin::ConstructL() - begin"); - - iInfo.iUid = KUidMusicPlayerPlugin; - iInfo.iName.Copy(_L8("PlayerPlugin")); - - iContent = AiUtility::CreateContentItemArrayIteratorL(KAiPlplContent); - iResources = AiUtility::CreateContentItemArrayIteratorL(KAiPlplResources); - iEvents = AiUtility::CreateContentItemArrayIteratorL(KAiPlplEvents); - - // Read time format strings from AVKON resource - iLongFormatString = StringLoader::LoadL(R_QTN_TIME_DURAT_LONG_WITH_ZERO); - iShortFormatString = StringLoader::LoadL(R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO); - - iCoeEnv = CCoeEnv::Static(); - - TParse parse; - parse.Set(KMPXAiPlayerRscPath, &KDC_APP_RESOURCE_DIR, NULL); - TFileName resourceFile; - resourceFile.Append(parse.FullName()); - BaflUtils::NearestLanguageFile(iCoeEnv->FsSession(), resourceFile); - iResourceOffset = iCoeEnv->AddResourceFileL(resourceFile); - iUnknownArtistText = StringLoader::LoadL(R_MPX_QTN_AIPP_UNKNOWN_ARTIST); - - iPlayStarted = EFalse; - iCleanTimer = CPeriodic::NewL(CActive::EPriorityStandard); - - MPX_DEBUG1("CAiPlayerPlugin::ConstructL() - end"); - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::NewL -// ---------------------------------------------------------------------------- -// -CAiPlayerPlugin* CAiPlayerPlugin::NewL() - { - CAiPlayerPlugin* self = new (ELeave) CAiPlayerPlugin; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::CAiPlayerPlugin -// ---------------------------------------------------------------------------- -// -CAiPlayerPlugin::CAiPlayerPlugin() - : iEngine(NULL) - { - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::~CAiPlayerPlugin() -// ---------------------------------------------------------------------------- -// -CAiPlayerPlugin::~CAiPlayerPlugin() - { - iObservers.Close(); - - Release( iContent ); - Release( iResources ); - Release( iEvents ); - - if ( iResourceOffset ) - { - iCoeEnv->DeleteResourceFile(iResourceOffset); - } - - delete iEngine; - - delete iLongFormatString; - delete iShortFormatString; - delete iUnknownArtistText; - - iCoeEnv = NULL; - iCleanTimer->Cancel(); - delete iCleanTimer; - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::Resume -// ---------------------------------------------------------------------------- -// -void CAiPlayerPlugin::Resume( TAiTransitionReason aReason ) - { - MPX_DEBUG1("CAiPlayerPlugin::ResumeL"); - if ( !iEngine ) - { - TRAPD(err, iEngine = CAiPlayerPluginEngine::NewL(*this)); - if ( err == KErrNone ) - { - iState = iEngine->PlayerState(); - PlayerStateChanged( iState ); - if (iState == EMPlayerStatePlaying || iState == EMPlayerStatePaused ) - { - TrackInfoChanged( iEngine->Title(), iEngine->Artist() ); - VolumeChanged( iEngine->Volume() ); - PlaybackPositionChanged( iEngine->Position() ); - } - } - } - else if ( aReason == EAiGeneralThemeChanged ) - { - PlayerStateChanged( iEngine->PlayerState() ); - } - - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::Suspend -// ---------------------------------------------------------------------------- -// -void CAiPlayerPlugin::Suspend( TAiTransitionReason /*aReason*/ ) - { - MPX_DEBUG1("CAiPlayerPlugin::Suspend"); - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::Stop -// ---------------------------------------------------------------------------- -// -void CAiPlayerPlugin::Stop( TAiTransitionReason /*aReason*/ ) - { - MPX_DEBUG1("CAiPlayerPlugin::Stop"); - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::SubscribeL -// ---------------------------------------------------------------------------- -// -void CAiPlayerPlugin::SubscribeL( MAiContentObserver& aObserver ) - { - MPX_DEBUG1("CAiPlayerPlugin::SubscribeL"); - return iObservers.AppendL(&aObserver); - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::ConfigureL -// ---------------------------------------------------------------------------- -// -void CAiPlayerPlugin::ConfigureL( RAiSettingsItemArray& /*aSettings*/ ) - { - MPX_DEBUG1("CAiPlayerPlugin::ConfigureL"); - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::Extension -// ---------------------------------------------------------------------------- -// -TAny* CAiPlayerPlugin::Extension( TUid aUid ) - { - if (aUid == KExtensionUidProperty) - { - return static_cast(this); - } - else if (aUid == KExtensionUidEventHandler) - { - return static_cast(this); - } - return NULL; // Requested extension not supported - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::GetPropertyL -// ---------------------------------------------------------------------------- -// -TAny* CAiPlayerPlugin::GetPropertyL( TInt aProperty ) - { - switch (aProperty) - { - case EAiPublisherInfo: - return &iInfo; - - case EAiPublisherContent: - return static_cast(iContent); - - case EAiPublisherResources: - return static_cast(iResources); - - case EAiPublisherEvents: - return static_cast(iEvents); - } - - User::Leave(KErrNotSupported); - return NULL; - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::SetPropertyL -// ---------------------------------------------------------------------------- -// -void CAiPlayerPlugin::SetPropertyL( TInt aProperty, TAny* aValue ) - { - if (aValue) - { - switch (aProperty) - { - case EAiPublisherInfo: - { - const TAiPublisherInfo* info = - static_cast(aValue); - - iInfo.iUid.iUid = info->iUid.iUid; - iInfo.iName.Copy( info->iName ); - } - break; - } - } - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::HandleEvent -// ---------------------------------------------------------------------------- -// -void CAiPlayerPlugin::HandleEvent( TInt aEvent, const TDesC& aParam ) - { - MPX_DEBUG1("CAiPlayerPlugin::HandleEvent"); - TRAPD(err, DoHandleEventL( aEvent, aParam ) ); - if ( err != KErrNone ) - { - MPX_DEBUG2("CAiPlayerPlugin::HandleEvent err[%d]", err); - } - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::DoHandleEventL -// ---------------------------------------------------------------------------- -// -void CAiPlayerPlugin::DoHandleEventL( TInt aEvent, const TDesC& aParam ) - { - MPX_DEBUG2("CAiPlayerPlugin::DoHandleEventL %d", aEvent); - - TInt volume = iEngine->Volume(); - switch (aEvent) - { - case EAiPlplEventVolInc: - { - iEngine->SetVolumeL(++volume); - iLastSetVolume = volume; - } - break; - case EAiPlplEventVolDec: - { - iEngine->SetVolumeL(--volume); - iLastSetVolume = volume; - } - break; - case EAiPlplEventVolSet: - { - TLex lex; - lex.Assign(aParam); - if( lex.Val(volume) == KErrNone ) - { - iEngine->SetVolumeL(volume); - } - iLastSetVolume = volume; - } - break; - case EAiPlplEventVolMute: - { - iLastSetVolume = volume; - iEngine->SetVolumeL(0); - } - break; - case EAiPlplEventVolRestore: - { - if( iLastSetVolume == 0 ) - { - // So that "muting muted" don't function funky way. - iLastSetVolume = 1; - } - iEngine->SetVolumeL(iLastSetVolume); - } - break; - case EAiPlplEventLaunchLibrary: - { - MPX_DEBUG1("CAiPlayerPlugin::DoHandleEventL() EAiPlplEventLaunchLibrary"); - //Launch player - TApaTaskList tasList(iEikonEnv->WsSession()); - TApaTask task = tasList.FindApp(KAppUidMusicPlayerX); - if (task.Exists()) - { - MPX_DEBUG1("CAiPlayerPlugin::DoHandleEventL() Music app is already launched. Go to Now Playing view."); - RWsSession& wsSession( iCoeEnv->WsSession() ); - CMPXParameter* param = new ( ELeave ) CMPXParameter(); - CleanupStack::PushL( param ); - param->iType.iUid = KMPXPluginTypePlaybackUid; - param->iCmdForward = EMPXCmdFwdNowPlaying; - - MPX_DEBUG1( "CAiPlayerPlugin::DoHandleEventL start Externalize" ); - CBufBase* buffer = CBufFlat::NewL( KPlayerMusicPlayerParameterGranularity ); - CleanupStack::PushL( buffer ); - RBufWriteStream writeStream( *buffer ); - CleanupClosePushL( writeStream ); - param->ExternalizeL( writeStream ); - writeStream.CommitL(); - buffer->Compress(); - CleanupStack::PopAndDestroy( &writeStream ); - - MPX_DEBUG2( "CAiPlayerPlugin::DoHandleEventL start Send message, message size = %d", buffer->Size() ); - wsSession.SendMessageToWindowGroup( task.WgId(), KAppUidMusicPlayerX, buffer->Ptr( 0 )); - MPX_DEBUG1( "CAiPlayerPlugin::DoHandleEventL Send message complete" ); - CleanupStack::PopAndDestroy( buffer ); - CleanupStack::PopAndDestroy( param ); - } - else - { - // Launch Music Player Application - MPX_DEBUG1("CAiPlayerPlugin::DoHandleEventL() Launch Music app for the first time"); - RProcess process; - TApaAppInfo appInfo; - RApaLsSession session; - TInt res = session.Connect(); // Ignore error - CleanupClosePushL( session ); - TInt err = session.GetAppInfo( appInfo, KAppUidMusicPlayerX ); - if ( !err ) - { - process.Create( appInfo.iFullName, KNullDesC );// Ignore error - TRAP( err, - { - CApaCommandLine* commandLine = CApaCommandLine::NewLC(); - commandLine->SetDocumentNameL( KNullDesC ); - commandLine->SetExecutableNameL( appInfo.iFullName ); - commandLine->SetProcessEnvironmentL( process ); - session.StartApp( *commandLine ); // Ignore error - CleanupStack::PopAndDestroy(); // commandLine - }); - process.Resume(); - process.Close(); - } - CleanupStack::PopAndDestroy(); // Close RApaLsSession session - } - } - break; - default: - break; - } - } - -// ---------------------------------------------------------------------------- -// CAiPlayerPlugin::ClearL -// ---------------------------------------------------------------------------- -// -TInt CAiPlayerPlugin::ClearL(TAny* aPtr) - { - MPX_DEBUG1("CAiPlayerPlugin::ClearL"); - CAiPlayerPlugin* plugin = reinterpret_cast (aPtr); - for (TInt i = 0; i < plugin->iObservers.Count(); i++) - { - MAiContentObserver* observer = plugin->iObservers[i]; - observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentArtistCaption, 1); - observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentTitleCaption, 1); - observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentDurationCaption, 1); - observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentElapsedTime,1); - observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentStatus, 1); - observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentVolume,1); - observer->Commit(0); - } - plugin->iCleanTimer->Cancel(); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CAiPlayerPlugin::PlayerStateChanged -// ----------------------------------------------------------------------------- -// -void CAiPlayerPlugin::PlayerStateChanged( TMPlayerState aState ) - { - MPX_DEBUG2("CAiPlayerPlugin::PlayerStateChanged [%d]", aState); - iState = aState; - for (TInt i = 0; i < iObservers.Count(); i++) - { - MAiContentObserver* observer = iObservers[i]; - observer->StartTransaction(reinterpret_cast(this)); - switch(iState) - { - case EMPlayerStatePlaying: - { - iPlayStarted = ETrue; - iCleanTimer->Cancel(); - observer->Publish(*this, - EAiPlplContentStatus, - EAiPlplResourcePlayIcon, - 1); - } - break; - case EMPlayerStatePaused: - { - iPlayStarted = ETrue; - iCleanTimer->Cancel(); - observer->Publish(*this, - EAiPlplContentStatus, - EAiPlplResourcePauseIcon, - 1); - PlaybackPositionChanged(iEngine->Position()); - } - break; - case EMPlayerStateSeeking: - PlaybackPositionChanged(iEngine->Position()); - break; - default: // EMPlayerStateOther - if ( iPlayStarted ) - { - iCleanTimer->Start(KMPlayerResumeWaitTime, - KMPlayerResumeWaitTime, - TCallBack(ClearL,this)); - } - iPlayStarted = EFalse; - break; - } - observer->Commit(reinterpret_cast(this)); - } - } - -// ----------------------------------------------------------------------------- -// CAiPlayerPlugin::TrackInfoChanged -// ----------------------------------------------------------------------------- -// -void CAiPlayerPlugin::TrackInfoChanged( const TDesC& aTitle, const TDesC& aArtist ) - { - MPX_DEBUG1("CAiPlayerPlugin::TrackInfoChanged"); - for (TInt i = 0; i < iObservers.Count(); i++) - { - MAiContentObserver* observer = iObservers[i]; - observer->StartTransaction(reinterpret_cast(this)); - - if ( &aTitle && aTitle.Length() ) //Check if hte reference exists add if is not empty - { - observer->Publish(*this, EAiPlplContentTitleCaption, aTitle, 1); - } - if ( &aArtist && aArtist.Length() ) //Check if hte reference exists add if is not empty - { - observer->Publish(*this, EAiPlplContentArtistCaption, aArtist, 1); - } - else - { - observer->Publish(*this, EAiPlplContentArtistCaption, *iUnknownArtistText, 1); - } - observer->Commit(reinterpret_cast(this)); - } - } - -// ----------------------------------------------------------------------------- -// CAiPlayerPlugin::PlaybackPositionChanged -// ----------------------------------------------------------------------------- -// -void CAiPlayerPlugin::PlaybackPositionChanged( TInt aPosition ) - { - MPX_DEBUG1("CAiPlayerPlugin::PlaybackPositionChanged"); - - TBuf elapsed; - TBuf total; - - TInt64 playbackPosInSeconds; - TInt64 totalLengthInSeconds; - - playbackPosInSeconds = aPosition; - totalLengthInSeconds = iEngine->Duration(); - - TPtrC format = *iShortFormatString; - - if (totalLengthInSeconds >= KMPXOneHourInSeconds) - { - // For tracks longer than an hour we use different time format and a - // slightly different layout which has more space for the time labels. - format.Set(*iLongFormatString); - } - - TTime elapsedTime(playbackPosInSeconds * KMPXOneSecInMicroSecs); - TTime totalTime(totalLengthInSeconds * KMPXOneSecInMicroSecs); - - if (aPosition == 0) - { - totalLengthInSeconds = 0; - } - - // Convert total playing time to texts. - elapsedTime.FormatL(elapsed, format); - - if (totalLengthInSeconds) - { - // Time remaining - totalTime.FormatL(total, format); - } - else - { - // Time remaining: --:-- - TLocale locale; - TBuf pos; - TChar separator = locale.TimeSeparator(KMPXMinSecSeparatorIndex); - total = KMPXZeroDurationMark; - total.Append(separator); - total += KMPXZeroDurationMark; - } - - AknTextUtils::LanguageSpecificNumberConversion(elapsed); - AknTextUtils::LanguageSpecificNumberConversion(total); - - iElapsedTime.Copy(elapsed); - - iDuration.Copy(elapsed); - iDuration.Append(_L("/")); - iDuration.Append(total); - - if ( iState == EMPlayerStatePlaying || iState == EMPlayerStatePaused || iState == EMPlayerStateSeeking ) - { - for (TInt i = 0; i < iObservers.Count(); i++) - { - MAiContentObserver* observer = iObservers[i]; - observer->StartTransaction(reinterpret_cast(this)); - - //for (Classic view) - observer->Publish(*this, - EAiPlplContentElapsedTime, - iElapsedTime, - 1); - - //for (Navibar view) - observer->Publish(*this, - EAiPlplContentDurationCaption, - iDuration, - 1); - - observer->Commit(reinterpret_cast(this)); - } - } - } - -// ----------------------------------------------------------------------------- -// CAiPlayerPlugin::VolumeChanged -// ----------------------------------------------------------------------------- -// -void CAiPlayerPlugin::VolumeChanged( TInt aVolume ) - { - MPX_DEBUG1("CAiPlayerPlugin::VolumeChanged"); - - for (TInt i = 0; i < iObservers.Count(); i++) - { - MAiContentObserver* observer = iObservers[i]; - observer->StartTransaction(reinterpret_cast(this)); - - // Order of enum TAiPlplPluginResourceIds is important - // must stay EAiPlplResourceVol0= 0 ... EAiPlplResourceVol10 = 10 - // for this to work - if ( aVolume>=0 && aVolume<=10 ) - { - observer->Publish(*this, - EAiPlplContentVolume, - aVolume, - 1); - } - observer->Commit(reinterpret_cast(this)); - } - } - -// ======== GLOBAL FUNCTIONS ======== - -// Provide a key pair value table for ECOM. -// Used to identify the correct construction function for the requested interface. -const TImplementationProxy ImplementationTable[] = -{ - IMPLEMENTATION_PROXY_ENTRY( AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_PLAYERPLUGIN, - CAiPlayerPlugin::NewL ) -}; - - -// Return an instance of the proxy table. -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) -{ - aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); - return ImplementationTable; -} - diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/aiplayerplugin/src/aiplayerpluginengine.cpp --- a/mpxmusicplayer/activeidle/aiplayerplugin/src/aiplayerpluginengine.cpp Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,514 +0,0 @@ -/* -* Copyright (c) 2006 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: Music Player stautus observer -* -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "aiplayerpluginengine.h" - -const TInt KMPXOneSecInMilliSecs( 1000 ); -const TInt KVolumeLevelMin = 0; -const TInt KVolumeLevelMax = 10; - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CAiPlayerPluginEngine::ConstructL -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::ConstructL() - { - MPX_DEBUG1("CAiPlayerPluginEngine::ConstructL"); - // Get the playback utility instance from engine. - iPlaybackUtility = MMPXPlaybackUtility::NewL( KPbModeActivePlayer, this ); - - TMPXPlaybackState state( EPbStateNotInitialised ); - - // Not fatal error if fetching the playback state fails - TRAP_IGNORE( state = iPlaybackUtility->StateL() ); - - if( state != EPbStateNotInitialised && - state != EPbStateInitialising ) - { - // Playback is already ongoing. We aren't going to receive EMediaChanged - // for the current song so we need manually update the media info - RequestMediaL(); - } - } - -// --------------------------------------------------------------------------- -// CAiPlayerPluginEngine::NewL -// --------------------------------------------------------------------------- -// -CAiPlayerPluginEngine* CAiPlayerPluginEngine::NewL( MAiPlayerPluginEngineObserver& aObserver ) - { - MPX_DEBUG1("CAiPlayerPluginEngine::NewL"); - CAiPlayerPluginEngine* self = new ( ELeave ) CAiPlayerPluginEngine( aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CAiPlayerPluginEngine::CAiPlayerPluginEngine -// --------------------------------------------------------------------------- -// -CAiPlayerPluginEngine::CAiPlayerPluginEngine( MAiPlayerPluginEngineObserver& aObserver ) - : iObserver( &aObserver ), - iPlaybackUtility(NULL), - iTitle(NULL), - iArtist(NULL), - iMaxVolume(KVolumeLevelMax), - iVolume(KErrNotFound), - iPosition(KErrNotFound), - iDuration(KErrNotFound) - { - } - -// --------------------------------------------------------------------------- -// CAiPlayerPluginEngine::~CAiPlayerPluginEngine -// --------------------------------------------------------------------------- -// -CAiPlayerPluginEngine::~CAiPlayerPluginEngine() - { - MPX_DEBUG1("CAiPlayerPluginEngine::~CAiPlayerPluginEngine"); - if ( iPlaybackUtility ) - { - iPlaybackUtility->Close(); - } - delete iTitle; - delete iArtist; - } - -// --------------------------------------------------------------------------- -// From MMPXPlaybackObserver -// Handle playback message. -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError ) - { - if ( aError == KErrNone && aMessage ) - { - TRAP_IGNORE( DoHandlePlaybackMessageL( *aMessage ) ); - } - } - -// --------------------------------------------------------------------------- -// From MMPXPlaybackCallback -// Handle playback property. -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::HandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError ) - { - DoHandlePropertyL( aProperty, aValue, aError ); - } - -// --------------------------------------------------------------------------- -// From MMPXPlaybackCallback -// Method is called continously until aComplete=ETrue, signifying that -// it is done and there will be no more callbacks -// Only new items are passed each time -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::HandleSubPlayerNamesL( - TUid /* aPlayer */, - const MDesCArray* /* aSubPlayers */, - TBool /* aComplete */, - TInt /* aError */ ) - { - // do nothing - } - -// --------------------------------------------------------------------------- -// From MMPXPlaybackCallback -// Handle media -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::HandleMediaL( const CMPXMedia& aMedia, TInt aError ) - { - MPX_DEBUG1("CAiPlayerPluginEngine::HandleMediaL"); - if ( KErrNone == aError ) - { - delete iTitle; - iTitle = NULL; - if ( aMedia.IsSupported( KMPXMediaGeneralTitle ) ) - { - iTitle = (aMedia.ValueText( KMPXMediaGeneralTitle )).AllocL(); - } - else if ( aMedia.IsSupported( KMPXMediaGeneralUri ) ) - { - TParsePtrC filePath( aMedia.ValueText( KMPXMediaGeneralUri ) ); - iTitle = (filePath.Name()).AllocL(); - } - delete iArtist; - iArtist = NULL; - iArtist = (aMedia.ValueText( KMPXMediaMusicArtist )).AllocL(); - - iObserver->TrackInfoChanged( *iTitle, *iArtist ); - } - } - -// --------------------------------------------------------------------------- -// From MMPXPlaybackCallback -// Handle completion of a asynchronous command -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::HandlePlaybackCommandComplete( CMPXCommand* /*aCommandResult*/, TInt /*aError*/ ) - { - // do nothing - } - -// --------------------------------------------------------------------------- -// Get the current state of the active player -// --------------------------------------------------------------------------- -// -TMPlayerState CAiPlayerPluginEngine::PlayerState() - { - MPX_DEBUG1("CAiPlayerPluginEngine::PlayerState"); - TMPXPlaybackState state( EPbStateNotInitialised ); - TRAP_IGNORE( state = iPlaybackUtility->StateL() ); - return MapState( state ); - } - -// --------------------------------------------------------------------------- -// CAiPlayerPluginEngine::Title -// --------------------------------------------------------------------------- -// -const TDesC& CAiPlayerPluginEngine::Title() - { - if ( iTitle ) - { - return *iTitle; - } - else - { - return KNullDesC; - } - } - -// --------------------------------------------------------------------------- -// CAiPlayerPluginEngine::Artist -// --------------------------------------------------------------------------- -// -const TDesC& CAiPlayerPluginEngine::Artist() - { - if ( iArtist ) - { - return *iArtist; - } - else - { - return KNullDesC; - } - } - -// ---------------------------------------------------- -// CAiPlayerPluginEngine::Position -// ---------------------------------------------------- -// -TInt CAiPlayerPluginEngine::Position() - { - return iPosition; - } - -// ---------------------------------------------------- -// CAiPlayerPluginEngine::Duration -// ---------------------------------------------------- -// -TInt CAiPlayerPluginEngine::Duration() - { - return iDuration; - } - -// ---------------------------------------------------- -// CAiPlayerPluginEngine::Volume -// ---------------------------------------------------- -// -TInt CAiPlayerPluginEngine::Volume() - { - return iVolume; - } - -// ---------------------------------------------------- -// CAiPlayerPluginEngine::SetVolumeL -// ---------------------------------------------------- -// -void CAiPlayerPluginEngine::SetVolumeL( TInt aValue ) - { - MPX_DEBUG2("CAiPlayerPluginEngine::SetVolumeL(%d)", aValue ); - if ( aValue == iVolume ) - { - return; - } - if ( aValue < KVolumeLevelMin || aValue > KVolumeLevelMax ) - { - User::Leave(KErrArgument); - } - else - { - // iVolume will be updated upon callback DoHandlePropertyL - iPlaybackUtility->SetL( EPbPropertyVolume, MapToMpxVolume(aValue) ) ; - } - } - -// --------------------------------------------------------------------------- -// Handle playback message. -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::DoHandlePlaybackMessageL( const CMPXMessage& aMessage ) - { - MPX_DEBUG1("CAiPlayerPluginEngine::DoHandlePlaybackMessageL"); - - TMPXMessageId id( aMessage.ValueTObjectL( KMPXMessageGeneralId ) ); - if ( KMPXMessageGeneral == id ) - { - TInt event( aMessage.ValueTObjectL( KMPXMessageGeneralEvent ) ); - MPX_DEBUG2("CAiPlayerPluginEngine::DoHandlePlaybackMessageL(%d)", event ); - switch ( event ) - { - case TMPXPlaybackMessage::EPropertyChanged: - { - TInt error( KErrNone ); - DoHandlePropertyL( - aMessage.ValueTObjectL( KMPXMessageGeneralType ), - aMessage.ValueTObjectL( KMPXMessageGeneralData ), - error ); - break; - } - case TMPXPlaybackMessage::EStateChanged: - { - TMPXPlaybackState state( aMessage.ValueTObjectL( KMPXMessageGeneralType )); - MPX_DEBUG2("CAiPlayerPluginEngine::HandlePlaybackMessageL - EStateChanged(%d)", state); - - DoHandleStateChangedL( state ); - break; - } - case TMPXPlaybackMessage::EMediaChanged: - case TMPXPlaybackMessage::EPlaylistUpdated: - { - iPlaybackUtility->PropertyL( *this, EPbPropertyPosition ); - iPlaybackUtility->PropertyL( *this, EPbPropertyDuration ); - RequestMediaL(); - break; - } - case TMPXPlaybackMessage::ECommandReceived: - { - MPX_DEBUG2("CAiPlayerPluginEngine::HandlePlaybackMessageL - ECommandReceived(%d)", - aMessage.ValueTObjectL( KMPXMessageGeneralType ) ); - break; - } - case TMPXPlaybackMessage::EActivePlayerChanged: - { - MPX_DEBUG3("CAiPlayerPluginEngine::HandlePlaybackMessageL - EActivePlayerChanged(%d, %d)", - aMessage.ValueTObjectL( KMPXMessageGeneralType ), - aMessage.ValueTObjectL( KMPXMessageGeneralData ) ); - iPlaybackUtility->PropertyL( *this, EPbPropertyPosition ); - iPlaybackUtility->PropertyL( *this, EPbPropertyDuration ); - iPlaybackUtility->PropertyL( *this, EPbPropertyMaxVolume ); - iPlaybackUtility->PropertyL( *this, EPbPropertyVolume ); - DoHandleStateChangedL( iPlaybackUtility->StateL() ); - // refresh media property - RequestMediaL(); - break; - } - case TMPXPlaybackMessage::EDownloadStateChanged: - { - iPlaybackUtility->PropertyL( *this, EPbPropertyPosition ); - iPlaybackUtility->PropertyL( *this, EPbPropertyDuration ); - RequestMediaL(); - break; - } - default: - { - break; - } - } - } - } - -// --------------------------------------------------------------------------- -// Handle playback property. -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::DoHandlePropertyL( TInt aProperty, TInt aValue, TInt aError ) - { - MPX_DEBUG4("CAiPlayerPluginEngine::DoHandlePropertyL - Property(%d); Value(%d); Error(%d)", aProperty, aValue, aError ); - if ( KErrNone == aError ) - { - switch ( aProperty ) - { - case EPbPropertyPosition: - { - iPosition = aValue / KMPXOneSecInMilliSecs; - iObserver->PlaybackPositionChanged( iPosition ); - break; - } - case EPbPropertyDuration: - { - iDuration = aValue / KMPXOneSecInMilliSecs; - break; - } - case EPbPropertyMaxVolume: - { - iMaxVolume = aValue; - break; - } - case EPbPropertyVolume: - { - TInt volume = MapToAiVolume(aValue); - if ( iVolume != volume ) - { - iVolume = volume; - iObserver->VolumeChanged( iVolume ); - } - - break; - } - default: - { - break; - } - } - } - } - -// --------------------------------------------------------------------------- -// Handle playback state changed. -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::DoHandleStateChangedL( TMPXPlaybackState aState ) - { - TMPlayerState state = MapState( aState ); - MPX_DEBUG3("CAiPlayerPluginEngine::DoHandleStateChangedL - State mapped from (%d) to (%d)", aState, state ); - iObserver->PlayerStateChanged(state); - } - -// --------------------------------------------------------------------------- -// Displays error notes. -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::HandleErrorL( TInt aError ) - { - MPX_DEBUG2("CAiPlayerPluginEngine::HandleErrorL(%d)", aError ); - } - -// --------------------------------------------------------------------------- -// Map states from TMPXPlaybackState to TMPlayerState -// --------------------------------------------------------------------------- -// -TMPlayerState CAiPlayerPluginEngine::MapState( TMPXPlaybackState aState ) - { - TMPlayerState state = EMPlayerStateOther; - switch ( aState ) - { - case EPbStatePlaying: - state = EMPlayerStatePlaying; - break; - case EPbStatePaused: - state = EMPlayerStatePaused; - break; - case EPbStateSeekingForward: - case EPbStateSeekingBackward: - state = EMPlayerStateSeeking; - break; - default: - break; - } - return state; - } - -// --------------------------------------------------------------------------- -// Maps volume from MPX player to AI volume. -// --------------------------------------------------------------------------- -// -TInt CAiPlayerPluginEngine::MapToAiVolume( TInt aVolume ) - { - TInt volume; - if ( iMaxVolume == KVolumeLevelMax ) - { - // No need to translate - volume = aVolume; - } - else if ( aVolume == KVolumeLevelMin ) - { - volume = KVolumeLevelMin; - } - else if ( aVolume == iMaxVolume ) - { - volume = KVolumeLevelMax; - } - else - { - volume = (TInt) ((aVolume * KVolumeLevelMax) / iMaxVolume); - } - return volume; - } - -// --------------------------------------------------------------------------- -// Maps volume from AI to MPX player volume. -// --------------------------------------------------------------------------- -// -TInt CAiPlayerPluginEngine::MapToMpxVolume( TInt aVolume ) - { - TInt volume; - if ( iMaxVolume == KVolumeLevelMax ) - { - // No need to translate - volume = aVolume; - } - else if ( aVolume == KVolumeLevelMin ) - { - volume = KVolumeLevelMin; - } - else if ( aVolume == KVolumeLevelMax ) - { - volume = iMaxVolume; - } - else - { - volume = (TInt) ((aVolume * iMaxVolume) / KVolumeLevelMax); - } - return volume; - } - -// --------------------------------------------------------------------------- -// Requests Media. -// --------------------------------------------------------------------------- -// -void CAiPlayerPluginEngine::RequestMediaL() - { - MMPXSource* s = iPlaybackUtility->Source(); - if ( s ) - { - RArray attrs; - CleanupClosePushL(attrs); - attrs.Append( KMPXMediaGeneralUri ); - attrs.Append( KMPXMediaGeneralTitle ); - attrs.Append( KMPXMediaMusicArtist ); - s->MediaL( attrs.Array(), *this ); - CleanupStack::PopAndDestroy( &attrs ); - } - } -// End of File diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/group/bld.inf --- a/mpxmusicplayer/activeidle/group/bld.inf Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* Copyright (c) 2006 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: Build information file for project Active Idle plugin. -* -*/ - - -#include - -#include "../aiplayerplugin/group/bld.inf" - -PRJ_EXPORTS -../rom/mpxactiveidleplugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(mpxactiveidleplugin.iby) -../rom/mpxactiveidlepluginrsc.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(mpxactiveidlepluginrsc.iby) diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/rom/mpxactiveidleplugin.iby --- a/mpxmusicplayer/activeidle/rom/mpxactiveidleplugin.iby Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* -* Copyright (c) 2004 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: IBY file for Player plugin -* -*/ - -#ifndef MPXACTIVEIDLEPLUGIN_IBY -#define MPXACTIVEIDLEPLUGIN_IBY - -#include -#include - -#ifdef RD_CUSTOMIZABLE_AI -ECOM_PLUGIN( aiplayerplugin2.dll, aiplayerplugin2.rsc ) -#endif // RD_CUSTOMIZABLE_AI - -#endif // MPXACTIVEIDLEPLUGIN_IBY - -// End of File diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/activeidle/rom/mpxactiveidlepluginrsc.iby --- a/mpxmusicplayer/activeidle/rom/mpxactiveidlepluginrsc.iby Tue Feb 02 00:09:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2006 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: IBY file for Player plugin resource -* -*/ - - -#ifndef MPXACTIVEIDLEPLUGINRSC_IBY -#define MPXACTIVEIDLEPLUGINRSC_IBY - -#include - -data=DATAZ_\APP_RESOURCE_DIR\aiplayerpluginresource.rsc APP_RESOURCE_DIR\aiplayerpluginresource.rsc - -#endif // MPXACTIVEIDLEPLUGINRSC_IBY diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/app/src/mpxappui.cpp --- a/mpxmusicplayer/app/src/mpxappui.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxmusicplayer/app/src/mpxappui.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -211,9 +211,6 @@ // initialize FeatureManager FeatureManager::InitializeLibL(); - // Check updates from IAD, continue UI launching even if something fails there - TRAP_IGNORE( CheckUpdatesL() ); - if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) ) { iCoverDisplay = ETrue; @@ -3336,6 +3333,11 @@ TMPXPlaybackCommand cmd = EPbCmdEnd; switch ( aCommand ) { + case EMPXCmdCheckIADUpdates: + { + TRAP_IGNORE( CheckUpdatesL() ); + break; + } case EMPXCmdPlay: case EMPXCmdPause: case EMPXCmdPlayPause: diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/cenrep/101ffcd0.txt Binary file mpxmusicplayer/cenrep/101ffcd0.txt has changed diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/commonui/data/mpxcommonui.rss --- a/mpxmusicplayer/commonui/data/mpxcommonui.rss Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxmusicplayer/commonui/data/mpxcommonui.rss Fri Feb 19 22:48:30 2010 +0200 @@ -755,4 +755,30 @@ { buf = qtn_fldr_rename_query; } + +//---------------------------------------------------- +// +// r_attendee_query +// +// +//---------------------------------------------------- +// +RESOURCE DIALOG r_rename_query + { + flags = EGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_YES_NO; + items = + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationQueryLayout; + }; + } + }; + } + // End of File diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/commonui/src/mpxcommonuihelper.cpp --- a/mpxmusicplayer/commonui/src/mpxcommonuihelper.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxmusicplayer/commonui/src/mpxcommonuihelper.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -1200,8 +1200,8 @@ if ( iCollectionUiHelper->TitleExistsL( EMPXPlaylist, aNewName, EMPXOtherType ) ) { HBufC* info = StringLoader::LoadLC( R_MPX_PLAYLIST_NAME_EXIST, aNewName ); - - if( CEikonEnv::Static()->QueryWinL( KNullDesC, *info ) ) + CAknQueryDialog* query = new(ELeave)CAknQueryDialog( *info ); + if( query->ExecuteLD( R_RENAME_QUERY ) ) { if ( !LaunchRenameDialogL( aOldName, aNewName, aPath ) ) { @@ -1923,8 +1923,8 @@ if ( iCollectionUiHelper->TitleExistsL( EMPXPlaylist, aName, EMPXOtherType ) ) { HBufC* info = StringLoader::LoadLC( R_MPX_PLAYLIST_NAME_EXIST, aName ); - - if( CEikonEnv::Static()->QueryWinL( KNullDesC, *info ) ) + CAknQueryDialog* query = new(ELeave)CAknQueryDialog( *info ); + if( query->ExecuteLD( R_RENAME_QUERY ) ) { if ( !PlaylistCreateNameExistL( aName, aParse ) ) { diff -r 2a40e88564c8 -r 13afc0e517bd mpxmusicplayer/group/bld.inf --- a/mpxmusicplayer/group/bld.inf Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxmusicplayer/group/bld.inf Fri Feb 19 22:48:30 2010 +0200 @@ -19,7 +19,6 @@ #include #include "../help/group/bld.inf" #include "../commonui/group/bld.inf" -#include "../activeidle/group/bld.inf" #include "../metadatahandler/group/bld.inf" #include "../mediakeyhandler/group/bld.inf" #include "../app/group/bld.inf" diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/inc/mpxdbmanager.h --- a/mpxplugins/serviceplugins/collectionplugins/inc/mpxdbmanager.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/inc/mpxdbmanager.h Fri Feb 19 22:48:30 2010 +0200 @@ -293,6 +293,130 @@ IMPORT_C RSqlStatement ExecuteSelectQueryOnAllDrivesL(TInt aDrive, TRefByValue aFmt, ...); + /** + * Copy all databases from RAM disk back to normal drive, E, F,... + * + * @return none + */ + IMPORT_C void CopyDBsFromRamL(); + + /** + * Copy all databases to RAM disk back from normal drive, E, F,... + * + * @return none + */ + IMPORT_C void CopyDBsToRamL( TBool aIsMTPInUse = EFalse); + + + /** + * Check if RAM disk is enough to operatte. If not, DBs will be copied back to drives. + * + * @return TInt index to the database handler + */ + IMPORT_C void EnsureRamSpaceL() ; + + /** + * Move DBs from RAMDisk to disks + */ + //IMPORT_C void BackupDBsL(); + + private: + + /** + * Find available RAMDISK + * @return error code + */ + TInt GetRAMDiskPath(); + + /** + * Check if RAM disk is available to copy. + * + * @return ETrue if there is enough space, EFalse otherwise + */ + TBool IsRamDiskSpaceAvailable(); + + /** + * To block a diskspace so that it can gurantee for a write back from RAM disk + * + * @return ETrue if the dummy file is created successfully, EFalse otherwise + */ + TBool BlockDiskSpace( TDriveUnit aDrive, TInt aOrigDbSize, TBool aIsMTPInUse = EFalse ); + + /** + * To copy db from regular drive to RAM + * + * @return ETrue if succeed + * @leave KErrDiskFull if there is any difficulty copying files + */ + TBool DoCopyDBToRamL( TDriveUnit aDrive, TBool aIsMTPInUse ); + + /** + * To copy db back regular drive from RAM + * + */ + void DoCopyDBFromRamL( TInt aIndex ); + + /** + * To replace dummy file with new content + * Writes over previous dummy file without freeing disk space + */ + void ReplaceFileL( const TDesC& aSrcName, const TDesC& aDstName ); + + /** + * To calculate necessary file size of the dummy file + * + * @return TInt64 estimated file size + */ + TInt64 CalculateInitalDummyDBSize( const TVolumeInfo& aVol, TInt aOrigDbSize, TBool aIsMTPInUse = EFalse); + + /** + * Get database index by giving drive index + * + * @return TInt index to the database handler + */ + TInt GetDatabaseIndex(TInt aDrive); + + /** + * Sum up the total size in bytes of the databases. + * + * @param aSize - On return, the total size of the databases. + * @return TInt System error. + */ + TInt GetTotalDatabasesSize(TInt& aSize); + + /** + * Sum up the total size in bytes of the databases on the RAM drive. + * + * @param aSize - On return, the total size of the databases on the RAM drive. + * @return TInt System error. + */ + TInt GetTotalRamDatabasesSize(TInt& aSize); + + /** + * Remove dummy file + * + * @return TInt index to the database handler + */ + void RemoveDummyFile( TInt index ); + + + +/** + * Check if disksapce is enough to operatte. If not, it leaves with KErrDiskFull + * + */ + void EnsureDiskSpaceL(TInt aDrive) ; + + /** + * Begin transaction, leaves on error + */ + void DoBeginL(); + + /** + * Commit transaction, leaves on error + */ + void DoCommitL(); + protected: // Types typedef struct @@ -300,6 +424,12 @@ TInt iDrive; TBool iOpen; HBufC* iAliasname; +#ifdef __RAMDISK_PERF_ENABLE + TBool iUseRAMdb; + HBufC* iOrigFullFilePath; + HBufC* iTargetFullFilePath; + TFileName iDummyFilePath; +#endif //__RAMDISK_PERF_ENABLE } DatabaseHandle; protected: // Data @@ -492,6 +622,14 @@ RArray iPreparedStatements; RPointerArray iStatements; + + // Defined for RAM disk performance + TBool iRAMDiskPerfEnabled; // flag to indicate RAM disk feature is enabled from cenrep. + TUint64 iMaximumAllowedRAMDiskSpaceToCopy; // maximum number of megabytes allow to do RAM disk operation. + TFileName iRAMFolder; + TChar iRAMDrive; + TBool iRAMInUse; + TInt64 iEstimatedDBSizes; }; #endif // MPXDBMANAGER_H diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/inc/mpxdbtable.h --- a/mpxplugins/serviceplugins/collectionplugins/inc/mpxdbtable.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/inc/mpxdbtable.h Fri Feb 19 22:48:30 2010 +0200 @@ -373,6 +373,13 @@ IMPORT_C void ExecuteMediaQueryOnDriveL(TInt aDrive,const TArray& aAttrs, CMPXMediaArray& aMediaArray, const TDesC& aQuery); + /** + * Executes a sum query with a string and two int parameters. + * @param aQuery query to be executed + * @param aPlaylistId string parameter + * @param aDrive integer parameter + */ + IMPORT_C TInt ExecuteSumExQueryL(const TDesC& aQuery, TUint32 aPlaylistId, TInt aDrive); protected: // Data CMPXDbManager& iDbManager; diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/bwinscw/mpxsqlitedbcommonu.def --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/bwinscw/mpxsqlitedbcommonu.def Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/bwinscw/mpxsqlitedbcommonu.def Fri Feb 19 22:48:30 2010 +0200 @@ -1,124 +1,128 @@ EXPORTS - ??0CMPXDbManager@@IAE@AAVRFs@@@Z @ 1 NONAME ; CMPXDbManager::CMPXDbManager(class RFs &) - ??0CMPXDbTable@@IAE@AAVCMPXDbManager@@@Z @ 2 NONAME ; CMPXDbTable::CMPXDbTable(class CMPXDbManager &) - ??1CMPXDbActiveTask@@UAE@XZ @ 3 NONAME ; CMPXDbActiveTask::~CMPXDbActiveTask(void) - ??1CMPXDbManager@@UAE@XZ @ 4 NONAME ; CMPXDbManager::~CMPXDbManager(void) - ??1CMPXDbTable@@MAE@XZ @ 5 NONAME ; CMPXDbTable::~CMPXDbTable(void) - ?AddItemChangedMessageL@MPXDbCommonUtil@@SAXAAVCMPXMediaArray@@VTMPXItemId@@W4TMPXChangeEventType@@W4TMPXGeneralCategory@@I1@Z @ 6 NONAME ; void MPXDbCommonUtil::AddItemChangedMessageL(class CMPXMediaArray &, class TMPXItemId, enum TMPXChangeEventType, enum TMPXGeneralCategory, unsigned int, class TMPXItemId) - ?AddSqlCriterionL@MPXDbCommonUtil@@SAHAAVCDesC16Array@@ABVTDesC16@@1@Z @ 7 NONAME ; int MPXDbCommonUtil::AddSqlCriterionL(class CDesC16Array &, class TDesC16 const &, class TDesC16 const &) - ?AddSqlCriterionL@MPXDbCommonUtil@@SAHAAVCDesC16Array@@ABVTDesC16@@H@Z @ 8 NONAME ; int MPXDbCommonUtil::AddSqlCriterionL(class CDesC16Array &, class TDesC16 const &, int) - ?AppendMediaL@MPXDbCommonUtil@@SAXAAVCMPXMediaArray@@ABVTDesC16@@W4TMPXGeneralType@@W4TMPXGeneralCategory@@VTMPXItemId@@HI@Z @ 9 NONAME ; void MPXDbCommonUtil::AppendMediaL(class CMPXMediaArray &, class TDesC16 const &, enum TMPXGeneralType, enum TMPXGeneralCategory, class TMPXItemId, int, unsigned int) - ?AppendValueL@MPXDbCommonUtil@@SAXAAVCDesC16Array@@0ABVTDesC16@@1@Z @ 10 NONAME ; void MPXDbCommonUtil::AppendValueL(class CDesC16Array &, class CDesC16Array &, class TDesC16 const &, class TDesC16 const &) - ?AppendValueL@MPXDbCommonUtil@@SAXAAVCDesC16Array@@0ABVTDesC16@@K@Z @ 11 NONAME ; void MPXDbCommonUtil::AppendValueL(class CDesC16Array &, class CDesC16Array &, class TDesC16 const &, unsigned long) - ?AttributeExists@MPXDbCommonUtil@@SAHABV?$TArray@VTMPXAttribute@@@@ABVTMPXAttribute@@@Z @ 12 NONAME ; int MPXDbCommonUtil::AttributeExists(class TArray const &, class TMPXAttribute const &) - ?BaseConstructL@CMPXDbTable@@IAEXXZ @ 13 NONAME ; void CMPXDbTable::BaseConstructL(void) - ?BeginL@CMPXDbManager@@QAEXXZ @ 14 NONAME ; void CMPXDbManager::BeginL(void) - ?CheckDiskSpaceL@CMPXDbManager@@QAEXH@Z @ 15 NONAME ; void CMPXDbManager::CheckDiskSpaceL(int) - ?CloseAllDatabases@CMPXDbManager@@QAEXXZ @ 16 NONAME ; void CMPXDbManager::CloseAllDatabases(void) - ?CloseDatabaseL@CMPXDbManager@@QAEXH@Z @ 17 NONAME ; void CMPXDbManager::CloseDatabaseL(int) - ?CommitL@CMPXDbManager@@QAEXXZ @ 18 NONAME ; void CMPXDbManager::CommitL(void) - ?ConstructL@CMPXDbManager@@IAEXABV?$TBuf@$0BAA@@@@Z @ 19 NONAME ; void CMPXDbManager::ConstructL(class TBuf<256> const &) - ?CreateFullPathL@MPXDbCommonUtil@@SAPAVHBufC16@@HABVTDesC16@@@Z @ 20 NONAME ; class HBufC16 * MPXDbCommonUtil::CreateFullPathL(int, class TDesC16 const &) - ?CreateTablesL@CMPXDbManager@@IAEXAAVRSqlDatabase@@@Z @ 21 NONAME ; void CMPXDbManager::CreateTablesL(class RSqlDatabase &) - ?CurrentDateDesLC@MPXDbCommonUtil@@SAPAVHBufC16@@XZ @ 22 NONAME ; class HBufC16 * MPXDbCommonUtil::CurrentDateDesLC(void) - ?CurrentTimeDesLC@MPXDbCommonUtil@@SAPAVHBufC16@@XZ @ 23 NONAME ; class HBufC16 * MPXDbCommonUtil::CurrentTimeDesLC(void) - ?DatabaseCount@CMPXDbManager@@QBEHXZ @ 24 NONAME ; int CMPXDbManager::DatabaseCount(void) const - ?DbDrive@CMPXDbManager@@QBEHH@Z @ 25 NONAME ; int CMPXDbManager::DbDrive(int) const - ?DeleteFile@MPXDbCommonUtil@@SAHAAVRFs@@ABVTDesC16@@@Z @ 26 NONAME ; int MPXDbCommonUtil::DeleteFile(class RFs &, class TDesC16 const &) - ?DesToTTimeL@MPXDbCommonUtil@@SA?AVTTime@@ABVTDesC16@@@Z @ 27 NONAME ; class TTime MPXDbCommonUtil::DesToTTimeL(class TDesC16 const &) - ?DoCancel@CMPXDbActiveTask@@MAEXXZ @ 28 NONAME ; void CMPXDbActiveTask::DoCancel(void) - ?DoCheckTable@CMPXDbTable@@IAEHAAVRSqlDatabase@@ABVTDesC16@@@Z @ 29 NONAME ; int CMPXDbTable::DoCheckTable(class RSqlDatabase &, class TDesC16 const &) - ?ExecuteIntQueryL@CMPXDbTable@@IAEKABVTDesC16@@0@Z @ 30 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(class TDesC16 const &, class TDesC16 const &) - ?ExecuteIntQueryL@CMPXDbTable@@IAEKABVTDesC16@@0K@Z @ 31 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(class TDesC16 const &, class TDesC16 const &, unsigned long) - ?ExecuteIntQueryL@CMPXDbTable@@IAEKABVTDesC16@@@Z @ 32 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(class TDesC16 const &) - ?ExecuteIntQueryL@CMPXDbTable@@IAEKABVTDesC16@@K@Z @ 33 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(class TDesC16 const &, unsigned long) - ?ExecuteIntQueryL@CMPXDbTable@@IAEKABVTDesC16@@KK@Z @ 34 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(class TDesC16 const &, unsigned long, unsigned long) - ?ExecuteIntQueryL@CMPXDbTable@@IAEKHABVTDesC16@@@Z @ 35 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(int, class TDesC16 const &) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMedia@@ABVTDesC16@@@Z @ 36 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMedia &, class TDesC16 const &) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMedia@@ABVTDesC16@@H@Z @ 37 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMedia &, class TDesC16 const &, int) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@22@Z @ 38 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@2@Z @ 39 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, class TDesC16 const &) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@2H2H@Z @ 40 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, class TDesC16 const &, int, class TDesC16 const &, int) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@2H@Z @ 41 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, class TDesC16 const &, int) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@2HHI@Z @ 42 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, class TDesC16 const &, int, int, unsigned int) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@@Z @ 43 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@H@Z @ 44 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, int) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@HH@Z @ 45 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, int, int) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@HHI@Z @ 46 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, int, int, unsigned int) - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@HABVTDesC16@@@Z @ 47 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, int, class TDesC16 const &) - ?ExecuteQueryL@CMPXDbManager@@QAAXHV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 48 NONAME ; void CMPXDbManager::ExecuteQueryL(int, class TRefByValue, ...) - ?ExecuteSelectQueryL@CMPXDbManager@@QAA?AVRSqlStatement@@HV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 49 NONAME ; class RSqlStatement CMPXDbManager::ExecuteSelectQueryL(int, class TRefByValue, ...) - ?ExecuteSelectQueryL@CMPXDbManager@@QAA?AVRSqlStatement@@V?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 50 NONAME ; class RSqlStatement CMPXDbManager::ExecuteSelectQueryL(class TRefByValue, ...) - ?ExecuteSelectQueryL@CMPXDbManager@@QAAAAVRSqlStatement@@IABVTDesC16@@HV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 51 NONAME ; class RSqlStatement & CMPXDbManager::ExecuteSelectQueryL(unsigned int, class TDesC16 const &, int, class TRefByValue, ...) - ?ExecuteSelectQueryL@CMPXDbManager@@QAAAAVRSqlStatement@@IHHV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 52 NONAME ; class RSqlStatement & CMPXDbManager::ExecuteSelectQueryL(unsigned int, int, int, class TRefByValue, ...) - ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@00@Z @ 53 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &) - ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@0@Z @ 54 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, class TDesC16 const &) - ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@0K0K@Z @ 55 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, class TDesC16 const &, unsigned long, class TDesC16 const &, unsigned long) - ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@@Z @ 56 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &) - ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@K@Z @ 57 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, unsigned long) - ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@KK@Z @ 58 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, unsigned long, unsigned long) - ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@KKK@Z @ 59 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, unsigned long, unsigned long, unsigned long) - ?ExecuteSumQueryL@CMPXDbTable@@IAEKABVTDesC16@@0K@Z @ 60 NONAME ; unsigned long CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, class TDesC16 const &, unsigned long) - ?FillInSupportedUIDsL@MPXDbCommonUtil@@SAXABV?$TArray@VTMPXAttribute@@@@AAV?$RArray@H@@@Z @ 61 NONAME ; void MPXDbCommonUtil::FillInSupportedUIDsL(class TArray const &, class RArray &) - ?FillItemChangedMessageL@MPXDbCommonUtil@@SAXAAVCMPXMedia@@VTMPXItemId@@W4TMPXChangeEventType@@W4TMPXGeneralCategory@@I1@Z @ 62 NONAME ; void MPXDbCommonUtil::FillItemChangedMessageL(class CMPXMedia &, class TMPXItemId, enum TMPXChangeEventType, enum TMPXGeneralCategory, unsigned int, class TMPXItemId) - ?FindAndReplaceSingleQuote@MPXDbCommonUtil@@SAXABVTDesC16@@AAVTDes16@@@Z @ 63 NONAME ; void MPXDbCommonUtil::FindAndReplaceSingleQuote(class TDesC16 const &, class TDes16 &) - ?FindItemChangedMessageL@MPXDbCommonUtil@@SAHABVCMPXMediaArray@@ABVCMPXMedia@@@Z @ 64 NONAME ; int MPXDbCommonUtil::FindItemChangedMessageL(class CMPXMediaArray const &, class CMPXMedia const &) - ?Fs@CMPXDbManager@@QAEAAVRFs@@XZ @ 65 NONAME ; class RFs & CMPXDbManager::Fs(void) - ?GenerateUniqueIdL@MPXDbCommonUtil@@SAKAAVRFs@@W4TMPXGeneralCategory@@ABVTDesC16@@H@Z @ 66 NONAME ; unsigned long MPXDbCommonUtil::GenerateUniqueIdL(class RFs &, enum TMPXGeneralCategory, class TDesC16 const &, int) - ?GetChangeMessages@CMPXDbActiveTask@@QAEAAVCMPXMediaArray@@XZ @ 67 NONAME ; class CMPXMediaArray & CMPXDbActiveTask::GetChangeMessages(void) - ?GetColumnTextL@MPXDbCommonUtil@@SA?AVTPtrC16@@AAVRSqlStatement@@H@Z @ 68 NONAME ; class TPtrC16 MPXDbCommonUtil::GetColumnTextL(class RSqlStatement &, int) - ?GetCommand@CMPXDbActiveTask@@QAEAAVCMPXMedia@@XZ @ 69 NONAME ; class CMPXMedia & CMPXDbActiveTask::GetCommand(void) - ?GetDRMTypeL@MPXDbCommonUtil@@SA?AW4TMCDrmType@@ABVTDesC16@@@Z @ 70 NONAME ; enum TMCDrmType MPXDbCommonUtil::GetDRMTypeL(class TDesC16 const &) - ?GetDriveIdMatchVolIdL@MPXDbCommonUtil@@SAHAAVRFs@@I@Z @ 71 NONAME ; int MPXDbCommonUtil::GetDriveIdMatchVolIdL(class RFs &, unsigned int) - ?GetDriveL@MPXDbCommonUtil@@SAHABVTDesC16@@AAVTDriveUnit@@@Z @ 72 NONAME ; int MPXDbCommonUtil::GetDriveL(class TDesC16 const &, class TDriveUnit &) - ?GetMimeTypeForUriL@MPXDbCommonUtil@@SA?AVTDataType@@ABVTDesC16@@@Z @ 73 NONAME ; class TDataType MPXDbCommonUtil::GetMimeTypeForUriL(class TDesC16 const &) - ?GetStep@CMPXDbActiveTask@@QAEHXZ @ 74 NONAME ; int CMPXDbActiveTask::GetStep(void) - ?GetTask@CMPXDbActiveTask@@QAEKXZ @ 75 NONAME ; unsigned long CMPXDbActiveTask::GetTask(void) - ?GetVisibleChange@CMPXDbActiveTask@@QAE?AW4TChangeVisibility@1@XZ @ 76 NONAME ; enum CMPXDbActiveTask::TChangeVisibility CMPXDbActiveTask::GetVisibleChange(void) - ?GetVolIdMatchDriveIdL@MPXDbCommonUtil@@SAIAAVRFs@@H@Z @ 77 NONAME ; unsigned int MPXDbCommonUtil::GetVolIdMatchDriveIdL(class RFs &, int) - ?InTransaction@CMPXDbManager@@QAEHXZ @ 78 NONAME ; int CMPXDbManager::InTransaction(void) - ?InitDatabasesL@CMPXDbManager@@QAEXV?$RArray@H@@@Z @ 79 NONAME ; void CMPXDbManager::InitDatabasesL(class RArray) - ?IsInitialized@CMPXDbManager@@QAEHXZ @ 80 NONAME ; int CMPXDbManager::IsInitialized(void) - ?IsOpen@CMPXDbManager@@QBEHH@Z @ 81 NONAME ; int CMPXDbManager::IsOpen(int) const - ?IsRemoteDrive@CMPXDbManager@@QAEHW4TDriveNumber@@@Z @ 82 NONAME ; int CMPXDbManager::IsRemoteDrive(enum TDriveNumber) - ?NewL@CMPXDbActiveTask@@SAPAV1@AAVMMPXDbActiveTaskObserver@@@Z @ 83 NONAME ; class CMPXDbActiveTask * CMPXDbActiveTask::NewL(class MMPXDbActiveTaskObserver &) - ?NewL@CMPXResource@@SAPAV1@ABVTDesC16@@@Z @ 84 NONAME ; class CMPXResource * CMPXResource::NewL(class TDesC16 const &) - ?NewLC@CMPXResource@@SAPAV1@ABVTDesC16@@@Z @ 85 NONAME ; class CMPXResource * CMPXResource::NewLC(class TDesC16 const &) - ?OpenAllDatabasesL@CMPXDbManager@@QAEXXZ @ 86 NONAME ; void CMPXDbManager::OpenAllDatabasesL(void) - ?OpenDatabaseL@CMPXDbManager@@QAEXH@Z @ 87 NONAME ; void CMPXDbManager::OpenDatabaseL(int) - ?PrependMediaL@MPXDbCommonUtil@@SAXAAVCMPXMediaArray@@ABVTDesC16@@W4TMPXGeneralType@@W4TMPXGeneralCategory@@VTMPXItemId@@HIH@Z @ 88 NONAME ; void MPXDbCommonUtil::PrependMediaL(class CMPXMediaArray &, class TDesC16 const &, enum TMPXGeneralType, enum TMPXGeneralCategory, class TMPXItemId, int, unsigned int, int) - ?PrintDatabaseL@CMPXDbManager@@QAEXXZ @ 89 NONAME ; void CMPXDbManager::PrintDatabaseL(void) - ?ProcessPatternCharsLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@@Z @ 90 NONAME ; class HBufC16 * MPXDbCommonUtil::ProcessPatternCharsLC(class TDesC16 const &) - ?ProcessSingleQuotesLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@@Z @ 91 NONAME ; class HBufC16 * MPXDbCommonUtil::ProcessSingleQuotesLC(class TDesC16 const &) - ?ReadDesCArrayL@CMPXResource@@QAEPAVCDesC16ArrayFlat@@H@Z @ 92 NONAME ; class CDesC16ArrayFlat * CMPXResource::ReadDesCArrayL(int) - ?ReadDesCArrayLC@CMPXResource@@QAEPAVCDesC16ArrayFlat@@H@Z @ 93 NONAME ; class CDesC16ArrayFlat * CMPXResource::ReadDesCArrayLC(int) - ?ReadHBufCL@CMPXResource@@QAEPAVHBufC16@@H@Z @ 94 NONAME ; class HBufC16 * CMPXResource::ReadHBufCL(int) - ?ReadMenuArrayL@CMPXResource@@QAEPAVCDesC16ArrayFlat@@HAAV?$RArray@H@@@Z @ 95 NONAME ; class CDesC16ArrayFlat * CMPXResource::ReadMenuArrayL(int, class RArray &) - ?ReadMenuArrayLC@CMPXResource@@QAEPAVCDesC16ArrayFlat@@HAAV?$RArray@H@@@Z @ 96 NONAME ; class CDesC16ArrayFlat * CMPXResource::ReadMenuArrayLC(int, class RArray &) - ?RecreateAllDatabasesL@CMPXDbManager@@QAEXXZ @ 97 NONAME ; void CMPXDbManager::RecreateAllDatabasesL(void) - ?RecreateDatabaseL@CMPXDbManager@@QAEXH@Z @ 98 NONAME ; void CMPXDbManager::RecreateDatabaseL(int) - ?RegenerateAllDatabasesL@CMPXDbManager@@QAEXXZ @ 99 NONAME ; void CMPXDbManager::RegenerateAllDatabasesL(void) - ?RegisterTableL@CMPXDbManager@@QAEXAAVMMPXTable@@@Z @ 100 NONAME ; void CMPXDbManager::RegisterTableL(class MMPXTable &) - ?Release@CMPXResource@@QAEXXZ @ 101 NONAME ; void CMPXResource::Release(void) - ?RollbackL@CMPXDbManager@@QAEXXZ @ 102 NONAME ; void CMPXDbManager::RollbackL(void) - ?RunError@CMPXDbActiveTask@@MAEHH@Z @ 103 NONAME ; int CMPXDbActiveTask::RunError(int) - ?RunL@CMPXDbActiveTask@@MAEXXZ @ 104 NONAME ; void CMPXDbActiveTask::RunL(void) + ?StringFromArrayLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVCDesC16Array@@ABVTDesC16@@@Z @ 1 NONAME ; class HBufC16 * MPXDbCommonUtil::StringFromArrayLC(class CDesC16Array const &, class TDesC16 const &) + ?IsInitialized@CMPXDbManager@@QAEHXZ @ 2 NONAME ; int CMPXDbManager::IsInitialized(void) + ?AppendValueL@MPXDbCommonUtil@@SAXAAVCDesC16Array@@0ABVTDesC16@@1@Z @ 3 NONAME ; void MPXDbCommonUtil::AppendValueL(class CDesC16Array &, class CDesC16Array &, class TDesC16 const &, class TDesC16 const &) + ?ExecuteSumQueryL@CMPXDbTable@@IAEKABVTDesC16@@0K@Z @ 4 NONAME ; unsigned long CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, class TDesC16 const &, unsigned long) + ?DbDrive@CMPXDbManager@@QBEHH@Z @ 5 NONAME ; int CMPXDbManager::DbDrive(int) const + ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@0@Z @ 6 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, class TDesC16 const &) + ?DesToTTimeL@MPXDbCommonUtil@@SA?AVTTime@@ABVTDesC16@@@Z @ 7 NONAME ; class TTime MPXDbCommonUtil::DesToTTimeL(class TDesC16 const &) + ?CloseDatabaseL@CMPXDbManager@@QAEXH@Z @ 8 NONAME ; void CMPXDbManager::CloseDatabaseL(int) + ?AddSqlCriterionL@MPXDbCommonUtil@@SAHAAVCDesC16Array@@ABVTDesC16@@1@Z @ 9 NONAME ; int MPXDbCommonUtil::AddSqlCriterionL(class CDesC16Array &, class TDesC16 const &, class TDesC16 const &) + ?TTimeToDesLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTTime@@@Z @ 10 NONAME ; class HBufC16 * MPXDbCommonUtil::TTimeToDesLC(class TTime const &) + ?ConstructL@CMPXDbManager@@IAEXABV?$TBuf@$0BAA@@@@Z @ 11 NONAME ; void CMPXDbManager::ConstructL(class TBuf<256> const &) + ?SetVisibleChange@CMPXDbActiveTask@@QAEXW4TChangeVisibility@1@@Z @ 12 NONAME ; void CMPXDbActiveTask::SetVisibleChange(enum CMPXDbActiveTask::TChangeVisibility) + ?ExecuteSelectQueryL@CMPXDbManager@@QAA?AVRSqlStatement@@HV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 13 NONAME ; class RSqlStatement CMPXDbManager::ExecuteSelectQueryL(int, class TRefByValue, ...) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMedia@@ABVTDesC16@@@Z @ 14 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMedia &, class TDesC16 const &) + ?StringFromArraysLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVCDesC16Array@@0ABVTDesC16@@1@Z @ 15 NONAME ; class HBufC16 * MPXDbCommonUtil::StringFromArraysLC(class CDesC16Array const &, class CDesC16Array const &, class TDesC16 const &, class TDesC16 const &) + ?CurrentDateDesLC@MPXDbCommonUtil@@SAPAVHBufC16@@XZ @ 16 NONAME ; class HBufC16 * MPXDbCommonUtil::CurrentDateDesLC(void) + ?ReadMenuArrayLC@CMPXResource@@QAEPAVCDesC16ArrayFlat@@HAAV?$RArray@H@@@Z @ 17 NONAME ; class CDesC16ArrayFlat * CMPXResource::ReadMenuArrayLC(int, class RArray &) + ?NewL@CMPXResource@@SAPAV1@ABVTDesC16@@@Z @ 18 NONAME ; class CMPXResource * CMPXResource::NewL(class TDesC16 const &) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@HH@Z @ 19 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, int, int) + ?AppendMediaL@MPXDbCommonUtil@@SAXAAVCMPXMediaArray@@ABVTDesC16@@W4TMPXGeneralType@@W4TMPXGeneralCategory@@VTMPXItemId@@HI@Z @ 20 NONAME ; void MPXDbCommonUtil::AppendMediaL(class CMPXMediaArray &, class TDesC16 const &, enum TMPXGeneralType, enum TMPXGeneralCategory, class TMPXItemId, int, unsigned int) + ?EnsureRamSpaceL@CMPXDbManager@@QAEXXZ @ 21 NONAME ; void CMPXDbManager::EnsureRamSpaceL(void) + ?ExecuteSelectQueryL@CMPXDbManager@@QAAAAVRSqlStatement@@IHHV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 22 NONAME ; class RSqlStatement & CMPXDbManager::ExecuteSelectQueryL(unsigned int, int, int, class TRefByValue, ...) + ?CopyDBsToRamL@CMPXDbManager@@QAEXH@Z @ 23 NONAME ; void CMPXDbManager::CopyDBsToRamL(int) + ?AppendValueL@MPXDbCommonUtil@@SAXAAVCDesC16Array@@0ABVTDesC16@@K@Z @ 24 NONAME ; void MPXDbCommonUtil::AppendValueL(class CDesC16Array &, class CDesC16Array &, class TDesC16 const &, unsigned long) + ?RunL@CMPXDbActiveTask@@MAEXXZ @ 25 NONAME ; void CMPXDbActiveTask::RunL(void) + ?CreateFullPathL@MPXDbCommonUtil@@SAPAVHBufC16@@HABVTDesC16@@@Z @ 26 NONAME ; class HBufC16 * MPXDbCommonUtil::CreateFullPathL(int, class TDesC16 const &) + ?SqlCriterionLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@HH@Z @ 27 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterionLC(class TDesC16 const &, int, int) + ?GetTask@CMPXDbActiveTask@@QAEKXZ @ 28 NONAME ; unsigned long CMPXDbActiveTask::GetTask(void) + ?RecreateAllDatabasesL@CMPXDbManager@@QAEXXZ @ 29 NONAME ; void CMPXDbManager::RecreateAllDatabasesL(void) + ?ReadDesCArrayL@CMPXResource@@QAEPAVCDesC16ArrayFlat@@H@Z @ 30 NONAME ; class CDesC16ArrayFlat * CMPXResource::ReadDesCArrayL(int) + ??1CMPXDbActiveTask@@UAE@XZ @ 31 NONAME ; CMPXDbActiveTask::~CMPXDbActiveTask(void) + ?FillInSupportedUIDsL@MPXDbCommonUtil@@SAXABV?$TArray@VTMPXAttribute@@@@AAV?$RArray@H@@@Z @ 32 NONAME ; void MPXDbCommonUtil::FillInSupportedUIDsL(class TArray const &, class RArray &) + ?SqlCriterionLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@0@Z @ 33 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterionLC(class TDesC16 const &, class TDesC16 const &) + ?SqlCriterion64LC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@_J1@Z @ 34 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterion64LC(class TDesC16 const &, long long, long long) + ?ExecuteSelectQueryL@CMPXDbManager@@QAAAAVRSqlStatement@@IABVTDesC16@@HV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 35 NONAME ; class RSqlStatement & CMPXDbManager::ExecuteSelectQueryL(unsigned int, class TDesC16 const &, int, class TRefByValue, ...) + ?UpdateMediaL@CMPXDbTable@@MAEXAAVRSqlStatement@@ABV?$TArray@VTMPXAttribute@@@@AAVCMPXMedia@@@Z @ 36 NONAME ; void CMPXDbTable::UpdateMediaL(class RSqlStatement &, class TArray const &, class CMPXMedia &) + ?CreateTablesL@CMPXDbManager@@IAEXAAVRSqlDatabase@@@Z @ 37 NONAME ; void CMPXDbManager::CreateTablesL(class RSqlDatabase &) + ??1CMPXDbManager@@UAE@XZ @ 38 NONAME ; CMPXDbManager::~CMPXDbManager(void) + ?ExecuteQueryL@CMPXDbManager@@QAAXHV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 39 NONAME ; void CMPXDbManager::ExecuteQueryL(int, class TRefByValue, ...) + ?CommitL@CMPXDbManager@@QAEXXZ @ 40 NONAME ; void CMPXDbManager::CommitL(void) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@2@Z @ 41 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, class TDesC16 const &) + ??1CMPXDbTable@@MAE@XZ @ 42 NONAME ; CMPXDbTable::~CMPXDbTable(void) + ?ProcessSingleQuotesLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@@Z @ 43 NONAME ; class HBufC16 * MPXDbCommonUtil::ProcessSingleQuotesLC(class TDesC16 const &) + ?GetDRMTypeL@MPXDbCommonUtil@@SA?AW4TMCDrmType@@ABVTDesC16@@@Z @ 44 NONAME ; enum TMCDrmType MPXDbCommonUtil::GetDRMTypeL(class TDesC16 const &) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@H@Z @ 45 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, int) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@@Z @ 46 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &) + ?InitDatabasesL@CMPXDbManager@@QAEXV?$RArray@H@@@Z @ 47 NONAME ; void CMPXDbManager::InitDatabasesL(class RArray) + ?GetChangeMessages@CMPXDbActiveTask@@QAEAAVCMPXMediaArray@@XZ @ 48 NONAME ; class CMPXMediaArray & CMPXDbActiveTask::GetChangeMessages(void) + ?ExecuteSelectQueryL@CMPXDbManager@@QAA?AVRSqlStatement@@V?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 49 NONAME ; class RSqlStatement CMPXDbManager::ExecuteSelectQueryL(class TRefByValue, ...) + ?ReadHBufCL@CMPXResource@@QAEPAVHBufC16@@H@Z @ 50 NONAME ; class HBufC16 * CMPXResource::ReadHBufCL(int) + ?GetCommand@CMPXDbActiveTask@@QAEAAVCMPXMedia@@XZ @ 51 NONAME ; class CMPXMedia & CMPXDbActiveTask::GetCommand(void) + ?GetMimeTypeForUriL@MPXDbCommonUtil@@SA?AVTDataType@@ABVTDesC16@@@Z @ 52 NONAME ; class TDataType MPXDbCommonUtil::GetMimeTypeForUriL(class TDesC16 const &) + ?ExecuteIntQueryL@CMPXDbTable@@IAEKABVTDesC16@@0K@Z @ 53 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(class TDesC16 const &, class TDesC16 const &, unsigned long) + ?OpenDatabaseL@CMPXDbManager@@QAEXH@Z @ 54 NONAME ; void CMPXDbManager::OpenDatabaseL(int) + ?ExecuteMediaQueryOnDriveL@CMPXDbTable@@IAEXHABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@@Z @ 55 NONAME ; void CMPXDbTable::ExecuteMediaQueryOnDriveL(int, class TArray const &, class CMPXMediaArray &, class TDesC16 const &) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@2HHI@Z @ 56 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, class TDesC16 const &, int, int, unsigned int) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@22@Z @ 57 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &) + ?NewLC@CMPXResource@@SAPAV1@ABVTDesC16@@@Z @ 58 NONAME ; class CMPXResource * CMPXResource::NewLC(class TDesC16 const &) + ?RegisterTableL@CMPXDbManager@@QAEXAAVMMPXTable@@@Z @ 59 NONAME ; void CMPXDbManager::RegisterTableL(class MMPXTable &) + ?PrintDatabaseL@CMPXDbManager@@QAEXXZ @ 60 NONAME ; void CMPXDbManager::PrintDatabaseL(void) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@2H@Z @ 61 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, class TDesC16 const &, int) + ?RollbackL@CMPXDbManager@@QAEXXZ @ 62 NONAME ; void CMPXDbManager::RollbackL(void) + ?BeginL@CMPXDbManager@@QAEXXZ @ 63 NONAME ; void CMPXDbManager::BeginL(void) + ??0CMPXDbManager@@IAE@AAVRFs@@@Z @ 64 NONAME ; CMPXDbManager::CMPXDbManager(class RFs &) + ?RecreateDatabaseL@CMPXDbManager@@QAEXH@Z @ 65 NONAME ; void CMPXDbManager::RecreateDatabaseL(int) + ?ExecuteIntQueryL@CMPXDbTable@@IAEKABVTDesC16@@K@Z @ 66 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(class TDesC16 const &, unsigned long) + ?RegenerateAllDatabasesL@CMPXDbManager@@QAEXXZ @ 67 NONAME ; void CMPXDbManager::RegenerateAllDatabasesL(void) + ?NewL@CMPXDbActiveTask@@SAPAV1@AAVMMPXDbActiveTaskObserver@@@Z @ 68 NONAME ; class CMPXDbActiveTask * CMPXDbActiveTask::NewL(class MMPXDbActiveTaskObserver &) + ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@0K0K@Z @ 69 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, class TDesC16 const &, unsigned long, class TDesC16 const &, unsigned long) + ?ReadDesCArrayLC@CMPXResource@@QAEPAVCDesC16ArrayFlat@@H@Z @ 70 NONAME ; class CDesC16ArrayFlat * CMPXResource::ReadDesCArrayLC(int) + ?ExecuteIntQueryL@CMPXDbTable@@IAEKHABVTDesC16@@@Z @ 71 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(int, class TDesC16 const &) + ?AttributeExists@MPXDbCommonUtil@@SAHABV?$TArray@VTMPXAttribute@@@@ABVTMPXAttribute@@@Z @ 72 NONAME ; int MPXDbCommonUtil::AttributeExists(class TArray const &, class TMPXAttribute const &) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@HHI@Z @ 73 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, int, int, unsigned int) + ?OpenAllDatabasesL@CMPXDbManager@@QAEXXZ @ 74 NONAME ; void CMPXDbManager::OpenAllDatabasesL(void) + ?Release@CMPXResource@@QAEXXZ @ 75 NONAME ; void CMPXResource::Release(void) + ?CopyDBsFromRamL@CMPXDbManager@@QAEXXZ @ 76 NONAME ; void CMPXDbManager::CopyDBsFromRamL(void) + ?ExecuteIntQueryL@CMPXDbTable@@IAEKABVTDesC16@@@Z @ 77 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(class TDesC16 const &) + ?GetVisibleChange@CMPXDbActiveTask@@QAE?AW4TChangeVisibility@1@XZ @ 78 NONAME ; enum CMPXDbActiveTask::TChangeVisibility CMPXDbActiveTask::GetVisibleChange(void) + ?SqlCriterion64LC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@_J@Z @ 79 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterion64LC(class TDesC16 const &, long long) + ?GetStep@CMPXDbActiveTask@@QAEHXZ @ 80 NONAME ; int CMPXDbActiveTask::GetStep(void) + ?ExecuteIntQueryL@CMPXDbTable@@IAEKABVTDesC16@@0@Z @ 81 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(class TDesC16 const &, class TDesC16 const &) + ?GetVolIdMatchDriveIdL@MPXDbCommonUtil@@SAIAAVRFs@@H@Z @ 82 NONAME ; unsigned int MPXDbCommonUtil::GetVolIdMatchDriveIdL(class RFs &, int) + ?FindItemChangedMessageL@MPXDbCommonUtil@@SAHABVCMPXMediaArray@@ABVCMPXMedia@@@Z @ 83 NONAME ; int MPXDbCommonUtil::FindItemChangedMessageL(class CMPXMediaArray const &, class CMPXMedia const &) + ?IsOpen@CMPXDbManager@@QBEHH@Z @ 84 NONAME ; int CMPXDbManager::IsOpen(int) const + ?PrependMediaL@MPXDbCommonUtil@@SAXAAVCMPXMediaArray@@ABVTDesC16@@W4TMPXGeneralType@@W4TMPXGeneralCategory@@VTMPXItemId@@HIH@Z @ 85 NONAME ; void MPXDbCommonUtil::PrependMediaL(class CMPXMediaArray &, class TDesC16 const &, enum TMPXGeneralType, enum TMPXGeneralCategory, class TMPXItemId, int, unsigned int, int) + ?GetDriveL@MPXDbCommonUtil@@SAHABVTDesC16@@AAVTDriveUnit@@@Z @ 86 NONAME ; int MPXDbCommonUtil::GetDriveL(class TDesC16 const &, class TDriveUnit &) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@HABVTDesC16@@@Z @ 87 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, int, class TDesC16 const &) + ?AddItemChangedMessageL@MPXDbCommonUtil@@SAXAAVCMPXMediaArray@@VTMPXItemId@@W4TMPXChangeEventType@@W4TMPXGeneralCategory@@I1@Z @ 88 NONAME ; void MPXDbCommonUtil::AddItemChangedMessageL(class CMPXMediaArray &, class TMPXItemId, enum TMPXChangeEventType, enum TMPXGeneralCategory, unsigned int, class TMPXItemId) + ?SqlCriterionLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@0H0H@Z @ 89 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterionLC(class TDesC16 const &, class TDesC16 const &, int, class TDesC16 const &, int) + ?RunError@CMPXDbActiveTask@@MAEHH@Z @ 90 NONAME ; int CMPXDbActiveTask::RunError(int) + ??0CMPXDbTable@@IAE@AAVCMPXDbManager@@@Z @ 91 NONAME ; CMPXDbTable::CMPXDbTable(class CMPXDbManager &) + ?DoCheckTable@CMPXDbTable@@IAEHAAVRSqlDatabase@@ABVTDesC16@@@Z @ 92 NONAME ; int CMPXDbTable::DoCheckTable(class RSqlDatabase &, class TDesC16 const &) + ?StartL@CMPXDbActiveTask@@QAEXKABVCMPXMedia@@@Z @ 93 NONAME ; void CMPXDbActiveTask::StartL(unsigned long, class CMPXMedia const &) + ?DoCancel@CMPXDbActiveTask@@MAEXXZ @ 94 NONAME ; void CMPXDbActiveTask::DoCancel(void) + ?ExecuteIntQueryL@CMPXDbTable@@IAEKABVTDesC16@@KK@Z @ 95 NONAME ; unsigned long CMPXDbTable::ExecuteIntQueryL(class TDesC16 const &, unsigned long, unsigned long) + ?Fs@CMPXDbManager@@QAEAAVRFs@@XZ @ 96 NONAME ; class RFs & CMPXDbManager::Fs(void) + ?GenerateUniqueIdL@MPXDbCommonUtil@@SAKAAVRFs@@W4TMPXGeneralCategory@@ABVTDesC16@@H@Z @ 97 NONAME ; unsigned long MPXDbCommonUtil::GenerateUniqueIdL(class RFs &, enum TMPXGeneralCategory, class TDesC16 const &, int) + ?DeleteFile@MPXDbCommonUtil@@SAHAAVRFs@@ABVTDesC16@@@Z @ 98 NONAME ; int MPXDbCommonUtil::DeleteFile(class RFs &, class TDesC16 const &) + ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@00@Z @ 99 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &) + ?ExecuteSelectQueryOnAllDrivesL@CMPXDbManager@@QAA?AVRSqlStatement@@HV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 100 NONAME ; class RSqlStatement CMPXDbManager::ExecuteSelectQueryOnAllDrivesL(int, class TRefByValue, ...) + ?ReadMenuArrayL@CMPXResource@@QAEPAVCDesC16ArrayFlat@@HAAV?$RArray@H@@@Z @ 101 NONAME ; class CDesC16ArrayFlat * CMPXResource::ReadMenuArrayL(int, class RArray &) + ?SqlCriterionLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@H@Z @ 102 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterionLC(class TDesC16 const &, int) + ?GetDriveIdMatchVolIdL@MPXDbCommonUtil@@SAHAAVRFs@@I@Z @ 103 NONAME ; int MPXDbCommonUtil::GetDriveIdMatchVolIdL(class RFs &, unsigned int) + ?BaseConstructL@CMPXDbTable@@IAEXXZ @ 104 NONAME ; void CMPXDbTable::BaseConstructL(void) ?SetHBuf@MPXDbCommonUtil@@SAHAAPAVHBufC16@@PBVTDesC16@@H@Z @ 105 NONAME ; int MPXDbCommonUtil::SetHBuf(class HBufC16 * &, class TDesC16 const *, int) - ?SetVisibleChange@CMPXDbActiveTask@@QAEXW4TChangeVisibility@1@@Z @ 106 NONAME ; void CMPXDbActiveTask::SetVisibleChange(enum CMPXDbActiveTask::TChangeVisibility) - ?SqlCriterion64LC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@_J1@Z @ 107 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterion64LC(class TDesC16 const &, long long, long long) - ?SqlCriterion64LC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@_J@Z @ 108 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterion64LC(class TDesC16 const &, long long) - ?SqlCriterionLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@00@Z @ 109 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterionLC(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &) - ?SqlCriterionLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@0@Z @ 110 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterionLC(class TDesC16 const &, class TDesC16 const &) - ?SqlCriterionLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@0H0H@Z @ 111 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterionLC(class TDesC16 const &, class TDesC16 const &, int, class TDesC16 const &, int) - ?SqlCriterionLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@H@Z @ 112 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterionLC(class TDesC16 const &, int) - ?SqlCriterionLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@HH@Z @ 113 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterionLC(class TDesC16 const &, int, int) - ?StartL@CMPXDbActiveTask@@QAEXKABVCMPXMedia@@@Z @ 114 NONAME ; void CMPXDbActiveTask::StartL(unsigned long, class CMPXMedia const &) - ?StringFromArrayLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVCDesC16Array@@ABVTDesC16@@@Z @ 115 NONAME ; class HBufC16 * MPXDbCommonUtil::StringFromArrayLC(class CDesC16Array const &, class TDesC16 const &) - ?StringFromArraysLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVCDesC16Array@@0ABVTDesC16@@1@Z @ 116 NONAME ; class HBufC16 * MPXDbCommonUtil::StringFromArraysLC(class CDesC16Array const &, class CDesC16Array const &, class TDesC16 const &, class TDesC16 const &) - ?TTimeToDesLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTTime@@@Z @ 117 NONAME ; class HBufC16 * MPXDbCommonUtil::TTimeToDesLC(class TTime const &) - ?UpdateMediaL@CMPXDbTable@@MAEXAAVRSqlStatement@@ABV?$TArray@VTMPXAttribute@@@@AAVCMPXMedia@@@Z @ 118 NONAME ; void CMPXDbTable::UpdateMediaL(class RSqlStatement &, class TArray const &, class CMPXMedia &) - ?Version@CMPXDbManager@@QBE?AVTVersion@@XZ @ 119 NONAME ; class TVersion CMPXDbManager::Version(void) const - ?ExecuteMediaQueryL@CMPXDbTable@@IAEXHABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@H@Z @ 120 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(int, class TArray const &, class CMPXMediaArray &, class TDesC16 const &, int) - ?ExecuteMediaQueryOnDriveL@CMPXDbTable@@IAEXHABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@@Z @ 121 NONAME ; void CMPXDbTable::ExecuteMediaQueryOnDriveL(int, class TArray const &, class CMPXMediaArray &, class TDesC16 const &) - ?ExecuteSelectQueryOnAllDrivesL@CMPXDbManager@@QAA?AVRSqlStatement@@HV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 122 NONAME ; class RSqlStatement CMPXDbManager::ExecuteSelectQueryOnAllDrivesL(int, class TRefByValue, ...) + ?FindAndReplaceSingleQuote@MPXDbCommonUtil@@SAXABVTDesC16@@AAVTDes16@@@Z @ 106 NONAME ; void MPXDbCommonUtil::FindAndReplaceSingleQuote(class TDesC16 const &, class TDes16 &) + ?SqlCriterionLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@00@Z @ 107 NONAME ; class HBufC16 * MPXDbCommonUtil::SqlCriterionLC(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMedia@@ABVTDesC16@@H@Z @ 108 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMedia &, class TDesC16 const &, int) + ?CurrentTimeDesLC@MPXDbCommonUtil@@SAPAVHBufC16@@XZ @ 109 NONAME ; class HBufC16 * MPXDbCommonUtil::CurrentTimeDesLC(void) + ?AddSqlCriterionL@MPXDbCommonUtil@@SAHAAVCDesC16Array@@ABVTDesC16@@H@Z @ 110 NONAME ; int MPXDbCommonUtil::AddSqlCriterionL(class CDesC16Array &, class TDesC16 const &, int) + ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@KKK@Z @ 111 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, unsigned long, unsigned long, unsigned long) + ?InTransaction@CMPXDbManager@@QAEHXZ @ 112 NONAME ; int CMPXDbManager::InTransaction(void) + ?DatabaseCount@CMPXDbManager@@QBEHXZ @ 113 NONAME ; int CMPXDbManager::DatabaseCount(void) const + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXHABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@H@Z @ 114 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(int, class TArray const &, class CMPXMediaArray &, class TDesC16 const &, int) + ?ExecuteSumExQueryL@CMPXDbTable@@IAEHABVTDesC16@@KH@Z @ 115 NONAME ; int CMPXDbTable::ExecuteSumExQueryL(class TDesC16 const &, unsigned long, int) + ?CheckDiskSpaceL@CMPXDbManager@@QAEXH@Z @ 116 NONAME ; void CMPXDbManager::CheckDiskSpaceL(int) + ?ProcessPatternCharsLC@MPXDbCommonUtil@@SAPAVHBufC16@@ABVTDesC16@@@Z @ 117 NONAME ; class HBufC16 * MPXDbCommonUtil::ProcessPatternCharsLC(class TDesC16 const &) + ?GetColumnTextL@MPXDbCommonUtil@@SA?AVTPtrC16@@AAVRSqlStatement@@H@Z @ 118 NONAME ; class TPtrC16 MPXDbCommonUtil::GetColumnTextL(class RSqlStatement &, int) + ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@K@Z @ 119 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, unsigned long) + ?CloseAllDatabases@CMPXDbManager@@QAEXXZ @ 120 NONAME ; void CMPXDbManager::CloseAllDatabases(void) + ?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@2H2H@Z @ 121 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray const &, class CMPXMediaArray &, class TDesC16 const &, class TDesC16 const &, int, class TDesC16 const &, int) + ?FillItemChangedMessageL@MPXDbCommonUtil@@SAXAAVCMPXMedia@@VTMPXItemId@@W4TMPXChangeEventType@@W4TMPXGeneralCategory@@I1@Z @ 122 NONAME ; void MPXDbCommonUtil::FillItemChangedMessageL(class CMPXMedia &, class TMPXItemId, enum TMPXChangeEventType, enum TMPXGeneralCategory, unsigned int, class TMPXItemId) + ?Version@CMPXDbManager@@QBE?AVTVersion@@XZ @ 123 NONAME ; class TVersion CMPXDbManager::Version(void) const + ?IsRemoteDrive@CMPXDbManager@@QAEHW4TDriveNumber@@@Z @ 124 NONAME ; int CMPXDbManager::IsRemoteDrive(enum TDriveNumber) + ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@@Z @ 125 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &) + ?ExecuteSumQueryL@CMPXDbTable@@IAEHABVTDesC16@@KK@Z @ 126 NONAME ; int CMPXDbTable::ExecuteSumQueryL(class TDesC16 const &, unsigned long, unsigned long) diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/eabi/mpxsqlitedbcommonu.def --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/eabi/mpxsqlitedbcommonu.def Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/eabi/mpxsqlitedbcommonu.def Fri Feb 19 22:48:30 2010 +0200 @@ -28,110 +28,114 @@ _ZN11CMPXDbTable18ExecuteMediaQueryLERK6TArrayI13TMPXAttributeER14CMPXMediaArrayiRK7TDesC16 @ 27 NONAME _ZN11CMPXDbTable18ExecuteMediaQueryLERK6TArrayI13TMPXAttributeER9CMPXMediaRK7TDesC16 @ 28 NONAME _ZN11CMPXDbTable18ExecuteMediaQueryLERK6TArrayI13TMPXAttributeER9CMPXMediaRK7TDesC16i @ 29 NONAME - _ZN11CMPXDbTableC2ER13CMPXDbManager @ 30 NONAME - _ZN11CMPXDbTableD0Ev @ 31 NONAME - _ZN11CMPXDbTableD1Ev @ 32 NONAME - _ZN11CMPXDbTableD2Ev @ 33 NONAME - _ZN12CMPXResource10ReadHBufCLEi @ 34 NONAME - _ZN12CMPXResource14ReadDesCArrayLEi @ 35 NONAME - _ZN12CMPXResource14ReadMenuArrayLEiR6RArrayIiE @ 36 NONAME - _ZN12CMPXResource15ReadDesCArrayLCEi @ 37 NONAME - _ZN12CMPXResource15ReadMenuArrayLCEiR6RArrayIiE @ 38 NONAME - _ZN12CMPXResource4NewLERK7TDesC16 @ 39 NONAME - _ZN12CMPXResource5NewLCERK7TDesC16 @ 40 NONAME - _ZN12CMPXResource7ReleaseEv @ 41 NONAME - _ZN13CMPXDbManager10ConstructLERK4TBufILi256EE @ 42 NONAME - _ZN13CMPXDbManager13CreateTablesLER12RSqlDatabase @ 43 NONAME - _ZN13CMPXDbManager13ExecuteQueryLEi11TRefByValueIK7TDesC16Ez @ 44 NONAME - _ZN13CMPXDbManager13InTransactionEv @ 45 NONAME - _ZN13CMPXDbManager13IsInitializedEv @ 46 NONAME - _ZN13CMPXDbManager13IsRemoteDriveE12TDriveNumber @ 47 NONAME - _ZN13CMPXDbManager13OpenDatabaseLEi @ 48 NONAME - _ZN13CMPXDbManager14CloseDatabaseLEi @ 49 NONAME - _ZN13CMPXDbManager14InitDatabasesLE6RArrayIiE @ 50 NONAME - _ZN13CMPXDbManager14PrintDatabaseLEv @ 51 NONAME - _ZN13CMPXDbManager14RegisterTableLER9MMPXTable @ 52 NONAME - _ZN13CMPXDbManager15CheckDiskSpaceLEi @ 53 NONAME - _ZN13CMPXDbManager17CloseAllDatabasesEv @ 54 NONAME - _ZN13CMPXDbManager17OpenAllDatabasesLEv @ 55 NONAME - _ZN13CMPXDbManager17RecreateDatabaseLEi @ 56 NONAME - _ZN13CMPXDbManager19ExecuteSelectQueryLE11TRefByValueIK7TDesC16Ez @ 57 NONAME - _ZN13CMPXDbManager19ExecuteSelectQueryLEi11TRefByValueIK7TDesC16Ez @ 58 NONAME - _ZN13CMPXDbManager19ExecuteSelectQueryLEjRK7TDesC16i11TRefByValueIS1_Ez @ 59 NONAME - _ZN13CMPXDbManager19ExecuteSelectQueryLEjii11TRefByValueIK7TDesC16Ez @ 60 NONAME - _ZN13CMPXDbManager21RecreateAllDatabasesLEv @ 61 NONAME - _ZN13CMPXDbManager23RegenerateAllDatabasesLEv @ 62 NONAME - _ZN13CMPXDbManager2FsEv @ 63 NONAME - _ZN13CMPXDbManager6BeginLEv @ 64 NONAME - _ZN13CMPXDbManager7CommitLEv @ 65 NONAME - _ZN13CMPXDbManager9RollbackLEv @ 66 NONAME - _ZN13CMPXDbManagerC1ER3RFs @ 67 NONAME - _ZN13CMPXDbManagerC2ER3RFs @ 68 NONAME - _ZN13CMPXDbManagerD0Ev @ 69 NONAME - _ZN13CMPXDbManagerD1Ev @ 70 NONAME - _ZN13CMPXDbManagerD2Ev @ 71 NONAME - _ZN15MPXDbCommonUtil10DeleteFileER3RFsRK7TDesC16 @ 72 NONAME - _ZN15MPXDbCommonUtil11DesToTTimeLERK7TDesC16 @ 73 NONAME - _ZN15MPXDbCommonUtil11GetDRMTypeLERK7TDesC16 @ 74 NONAME - _ZN15MPXDbCommonUtil12AppendMediaLER14CMPXMediaArrayRK7TDesC1615TMPXGeneralType19TMPXGeneralCategory10TMPXItemIdij @ 75 NONAME - _ZN15MPXDbCommonUtil12AppendValueLER12CDesC16ArrayS1_RK7TDesC16S4_ @ 76 NONAME - _ZN15MPXDbCommonUtil12AppendValueLER12CDesC16ArrayS1_RK7TDesC16m @ 77 NONAME - _ZN15MPXDbCommonUtil12TTimeToDesLCERK5TTime @ 78 NONAME - _ZN15MPXDbCommonUtil13PrependMediaLER14CMPXMediaArrayRK7TDesC1615TMPXGeneralType19TMPXGeneralCategory10TMPXItemIdiji @ 79 NONAME - _ZN15MPXDbCommonUtil14GetColumnTextLER13RSqlStatementi @ 80 NONAME - _ZN15MPXDbCommonUtil14SqlCriterionLCERK7TDesC16S2_ @ 81 NONAME - _ZN15MPXDbCommonUtil14SqlCriterionLCERK7TDesC16S2_S2_ @ 82 NONAME - _ZN15MPXDbCommonUtil14SqlCriterionLCERK7TDesC16S2_iS2_i @ 83 NONAME - _ZN15MPXDbCommonUtil14SqlCriterionLCERK7TDesC16i @ 84 NONAME - _ZN15MPXDbCommonUtil14SqlCriterionLCERK7TDesC16ii @ 85 NONAME - _ZN15MPXDbCommonUtil15AttributeExistsERK6TArrayI13TMPXAttributeERKS1_ @ 86 NONAME - _ZN15MPXDbCommonUtil15CreateFullPathLEiRK7TDesC16 @ 87 NONAME - _ZN15MPXDbCommonUtil16AddSqlCriterionLER12CDesC16ArrayRK7TDesC16S4_ @ 88 NONAME - _ZN15MPXDbCommonUtil16AddSqlCriterionLER12CDesC16ArrayRK7TDesC16i @ 89 NONAME - _ZN15MPXDbCommonUtil16CurrentDateDesLCEv @ 90 NONAME - _ZN15MPXDbCommonUtil16CurrentTimeDesLCEv @ 91 NONAME - _ZN15MPXDbCommonUtil16SqlCriterion64LCERK7TDesC16x @ 92 NONAME - _ZN15MPXDbCommonUtil16SqlCriterion64LCERK7TDesC16xx @ 93 NONAME - _ZN15MPXDbCommonUtil17GenerateUniqueIdLER3RFs19TMPXGeneralCategoryRK7TDesC16i @ 94 NONAME - _ZN15MPXDbCommonUtil17StringFromArrayLCERK12CDesC16ArrayRK7TDesC16 @ 95 NONAME - _ZN15MPXDbCommonUtil18GetMimeTypeForUriLERK7TDesC16 @ 96 NONAME - _ZN15MPXDbCommonUtil18StringFromArraysLCERK12CDesC16ArrayS2_RK7TDesC16S5_ @ 97 NONAME - _ZN15MPXDbCommonUtil20FillInSupportedUIDsLERK6TArrayI13TMPXAttributeER6RArrayIiE @ 98 NONAME - _ZN15MPXDbCommonUtil21GetDriveIdMatchVolIdLER3RFsj @ 99 NONAME - _ZN15MPXDbCommonUtil21GetVolIdMatchDriveIdLER3RFsi @ 100 NONAME - _ZN15MPXDbCommonUtil21ProcessPatternCharsLCERK7TDesC16 @ 101 NONAME - _ZN15MPXDbCommonUtil21ProcessSingleQuotesLCERK7TDesC16 @ 102 NONAME - _ZN15MPXDbCommonUtil22AddItemChangedMessageLER14CMPXMediaArray10TMPXItemId19TMPXChangeEventType19TMPXGeneralCategoryjS2_ @ 103 NONAME - _ZN15MPXDbCommonUtil23FillItemChangedMessageLER9CMPXMedia10TMPXItemId19TMPXChangeEventType19TMPXGeneralCategoryjS2_ @ 104 NONAME - _ZN15MPXDbCommonUtil23FindItemChangedMessageLERK14CMPXMediaArrayRK9CMPXMedia @ 105 NONAME - _ZN15MPXDbCommonUtil25FindAndReplaceSingleQuoteERK7TDesC16R6TDes16 @ 106 NONAME - _ZN15MPXDbCommonUtil7SetHBufERP7HBufC16PK7TDesC16i @ 107 NONAME - _ZN15MPXDbCommonUtil9GetDriveLERK7TDesC16R10TDriveUnit @ 108 NONAME - _ZN16CMPXDbActiveTask10GetCommandEv @ 109 NONAME - _ZN16CMPXDbActiveTask16GetVisibleChangeEv @ 110 NONAME - _ZN16CMPXDbActiveTask16SetVisibleChangeENS_17TChangeVisibilityE @ 111 NONAME - _ZN16CMPXDbActiveTask17GetChangeMessagesEv @ 112 NONAME - _ZN16CMPXDbActiveTask4NewLER24MMPXDbActiveTaskObserver @ 113 NONAME - _ZN16CMPXDbActiveTask4RunLEv @ 114 NONAME - _ZN16CMPXDbActiveTask6StartLEmRK9CMPXMedia @ 115 NONAME - _ZN16CMPXDbActiveTask7GetStepEv @ 116 NONAME - _ZN16CMPXDbActiveTask7GetTaskEv @ 117 NONAME - _ZN16CMPXDbActiveTask8DoCancelEv @ 118 NONAME - _ZN16CMPXDbActiveTask8RunErrorEi @ 119 NONAME - _ZN16CMPXDbActiveTaskD0Ev @ 120 NONAME - _ZN16CMPXDbActiveTaskD1Ev @ 121 NONAME - _ZN16CMPXDbActiveTaskD2Ev @ 122 NONAME - _ZNK13CMPXDbManager13DatabaseCountEv @ 123 NONAME - _ZNK13CMPXDbManager6IsOpenEi @ 124 NONAME - _ZNK13CMPXDbManager7DbDriveEi @ 125 NONAME - _ZNK13CMPXDbManager7VersionEv @ 126 NONAME - _ZTI11CMPXDbTable @ 127 NONAME ; ## - _ZTI12CMPXResource @ 128 NONAME ; ## - _ZTI13CMPXDbManager @ 129 NONAME ; ## - _ZTV11CMPXDbTable @ 130 NONAME ; ## - _ZTV12CMPXResource @ 131 NONAME ; ## - _ZTV13CMPXDbManager @ 132 NONAME ; ## - _ZN11CMPXDbTable18ExecuteMediaQueryLEiRK6TArrayI13TMPXAttributeER14CMPXMediaArrayRK7TDesC16i @ 133 NONAME - _ZN11CMPXDbTable25ExecuteMediaQueryOnDriveLEiRK6TArrayI13TMPXAttributeER14CMPXMediaArrayRK7TDesC16 @ 134 NONAME - _ZN13CMPXDbManager30ExecuteSelectQueryOnAllDrivesLEi11TRefByValueIK7TDesC16Ez @ 135 NONAME + _ZN11CMPXDbTable18ExecuteMediaQueryLEiRK6TArrayI13TMPXAttributeER14CMPXMediaArrayRK7TDesC16i @ 30 NONAME + _ZN11CMPXDbTable18ExecuteSumExQueryLERK7TDesC16mi @ 31 NONAME + _ZN11CMPXDbTable25ExecuteMediaQueryOnDriveLEiRK6TArrayI13TMPXAttributeER14CMPXMediaArrayRK7TDesC16 @ 32 NONAME + _ZN11CMPXDbTableC2ER13CMPXDbManager @ 33 NONAME + _ZN11CMPXDbTableD0Ev @ 34 NONAME + _ZN11CMPXDbTableD1Ev @ 35 NONAME + _ZN11CMPXDbTableD2Ev @ 36 NONAME + _ZN12CMPXResource10ReadHBufCLEi @ 37 NONAME + _ZN12CMPXResource14ReadDesCArrayLEi @ 38 NONAME + _ZN12CMPXResource14ReadMenuArrayLEiR6RArrayIiE @ 39 NONAME + _ZN12CMPXResource15ReadDesCArrayLCEi @ 40 NONAME + _ZN12CMPXResource15ReadMenuArrayLCEiR6RArrayIiE @ 41 NONAME + _ZN12CMPXResource4NewLERK7TDesC16 @ 42 NONAME + _ZN12CMPXResource5NewLCERK7TDesC16 @ 43 NONAME + _ZN12CMPXResource7ReleaseEv @ 44 NONAME + _ZN13CMPXDbManager10ConstructLERK4TBufILi256EE @ 45 NONAME + _ZN13CMPXDbManager13CopyDBsToRamLEi @ 46 NONAME + _ZN13CMPXDbManager13CreateTablesLER12RSqlDatabase @ 47 NONAME + _ZN13CMPXDbManager13ExecuteQueryLEi11TRefByValueIK7TDesC16Ez @ 48 NONAME + _ZN13CMPXDbManager13InTransactionEv @ 49 NONAME + _ZN13CMPXDbManager13IsInitializedEv @ 50 NONAME + _ZN13CMPXDbManager13IsRemoteDriveE12TDriveNumber @ 51 NONAME + _ZN13CMPXDbManager13OpenDatabaseLEi @ 52 NONAME + _ZN13CMPXDbManager14CloseDatabaseLEi @ 53 NONAME + _ZN13CMPXDbManager14InitDatabasesLE6RArrayIiE @ 54 NONAME + _ZN13CMPXDbManager14PrintDatabaseLEv @ 55 NONAME + _ZN13CMPXDbManager14RegisterTableLER9MMPXTable @ 56 NONAME + _ZN13CMPXDbManager15CheckDiskSpaceLEi @ 57 NONAME + _ZN13CMPXDbManager15CopyDBsFromRamLEv @ 58 NONAME + _ZN13CMPXDbManager15EnsureRamSpaceLEv @ 59 NONAME + _ZN13CMPXDbManager17CloseAllDatabasesEv @ 60 NONAME + _ZN13CMPXDbManager17OpenAllDatabasesLEv @ 61 NONAME + _ZN13CMPXDbManager17RecreateDatabaseLEi @ 62 NONAME + _ZN13CMPXDbManager19ExecuteSelectQueryLE11TRefByValueIK7TDesC16Ez @ 63 NONAME + _ZN13CMPXDbManager19ExecuteSelectQueryLEi11TRefByValueIK7TDesC16Ez @ 64 NONAME + _ZN13CMPXDbManager19ExecuteSelectQueryLEjRK7TDesC16i11TRefByValueIS1_Ez @ 65 NONAME + _ZN13CMPXDbManager19ExecuteSelectQueryLEjii11TRefByValueIK7TDesC16Ez @ 66 NONAME + _ZN13CMPXDbManager21RecreateAllDatabasesLEv @ 67 NONAME + _ZN13CMPXDbManager23RegenerateAllDatabasesLEv @ 68 NONAME + _ZN13CMPXDbManager2FsEv @ 69 NONAME + _ZN13CMPXDbManager30ExecuteSelectQueryOnAllDrivesLEi11TRefByValueIK7TDesC16Ez @ 70 NONAME + _ZN13CMPXDbManager6BeginLEv @ 71 NONAME + _ZN13CMPXDbManager7CommitLEv @ 72 NONAME + _ZN13CMPXDbManager9RollbackLEv @ 73 NONAME + _ZN13CMPXDbManagerC1ER3RFs @ 74 NONAME + _ZN13CMPXDbManagerC2ER3RFs @ 75 NONAME + _ZN13CMPXDbManagerD0Ev @ 76 NONAME + _ZN13CMPXDbManagerD1Ev @ 77 NONAME + _ZN13CMPXDbManagerD2Ev @ 78 NONAME + _ZN15MPXDbCommonUtil10DeleteFileER3RFsRK7TDesC16 @ 79 NONAME + _ZN15MPXDbCommonUtil11DesToTTimeLERK7TDesC16 @ 80 NONAME + _ZN15MPXDbCommonUtil11GetDRMTypeLERK7TDesC16 @ 81 NONAME + _ZN15MPXDbCommonUtil12AppendMediaLER14CMPXMediaArrayRK7TDesC1615TMPXGeneralType19TMPXGeneralCategory10TMPXItemIdij @ 82 NONAME + _ZN15MPXDbCommonUtil12AppendValueLER12CDesC16ArrayS1_RK7TDesC16S4_ @ 83 NONAME + _ZN15MPXDbCommonUtil12AppendValueLER12CDesC16ArrayS1_RK7TDesC16m @ 84 NONAME + _ZN15MPXDbCommonUtil12TTimeToDesLCERK5TTime @ 85 NONAME + _ZN15MPXDbCommonUtil13PrependMediaLER14CMPXMediaArrayRK7TDesC1615TMPXGeneralType19TMPXGeneralCategory10TMPXItemIdiji @ 86 NONAME + _ZN15MPXDbCommonUtil14GetColumnTextLER13RSqlStatementi @ 87 NONAME + _ZN15MPXDbCommonUtil14SqlCriterionLCERK7TDesC16S2_ @ 88 NONAME + _ZN15MPXDbCommonUtil14SqlCriterionLCERK7TDesC16S2_S2_ @ 89 NONAME + _ZN15MPXDbCommonUtil14SqlCriterionLCERK7TDesC16S2_iS2_i @ 90 NONAME + _ZN15MPXDbCommonUtil14SqlCriterionLCERK7TDesC16i @ 91 NONAME + _ZN15MPXDbCommonUtil14SqlCriterionLCERK7TDesC16ii @ 92 NONAME + _ZN15MPXDbCommonUtil15AttributeExistsERK6TArrayI13TMPXAttributeERKS1_ @ 93 NONAME + _ZN15MPXDbCommonUtil15CreateFullPathLEiRK7TDesC16 @ 94 NONAME + _ZN15MPXDbCommonUtil16AddSqlCriterionLER12CDesC16ArrayRK7TDesC16S4_ @ 95 NONAME + _ZN15MPXDbCommonUtil16AddSqlCriterionLER12CDesC16ArrayRK7TDesC16i @ 96 NONAME + _ZN15MPXDbCommonUtil16CurrentDateDesLCEv @ 97 NONAME + _ZN15MPXDbCommonUtil16CurrentTimeDesLCEv @ 98 NONAME + _ZN15MPXDbCommonUtil16SqlCriterion64LCERK7TDesC16x @ 99 NONAME + _ZN15MPXDbCommonUtil16SqlCriterion64LCERK7TDesC16xx @ 100 NONAME + _ZN15MPXDbCommonUtil17GenerateUniqueIdLER3RFs19TMPXGeneralCategoryRK7TDesC16i @ 101 NONAME + _ZN15MPXDbCommonUtil17StringFromArrayLCERK12CDesC16ArrayRK7TDesC16 @ 102 NONAME + _ZN15MPXDbCommonUtil18GetMimeTypeForUriLERK7TDesC16 @ 103 NONAME + _ZN15MPXDbCommonUtil18StringFromArraysLCERK12CDesC16ArrayS2_RK7TDesC16S5_ @ 104 NONAME + _ZN15MPXDbCommonUtil20FillInSupportedUIDsLERK6TArrayI13TMPXAttributeER6RArrayIiE @ 105 NONAME + _ZN15MPXDbCommonUtil21GetDriveIdMatchVolIdLER3RFsj @ 106 NONAME + _ZN15MPXDbCommonUtil21GetVolIdMatchDriveIdLER3RFsi @ 107 NONAME + _ZN15MPXDbCommonUtil21ProcessPatternCharsLCERK7TDesC16 @ 108 NONAME + _ZN15MPXDbCommonUtil21ProcessSingleQuotesLCERK7TDesC16 @ 109 NONAME + _ZN15MPXDbCommonUtil22AddItemChangedMessageLER14CMPXMediaArray10TMPXItemId19TMPXChangeEventType19TMPXGeneralCategoryjS2_ @ 110 NONAME + _ZN15MPXDbCommonUtil23FillItemChangedMessageLER9CMPXMedia10TMPXItemId19TMPXChangeEventType19TMPXGeneralCategoryjS2_ @ 111 NONAME + _ZN15MPXDbCommonUtil23FindItemChangedMessageLERK14CMPXMediaArrayRK9CMPXMedia @ 112 NONAME + _ZN15MPXDbCommonUtil25FindAndReplaceSingleQuoteERK7TDesC16R6TDes16 @ 113 NONAME + _ZN15MPXDbCommonUtil7SetHBufERP7HBufC16PK7TDesC16i @ 114 NONAME + _ZN15MPXDbCommonUtil9GetDriveLERK7TDesC16R10TDriveUnit @ 115 NONAME + _ZN16CMPXDbActiveTask10GetCommandEv @ 116 NONAME + _ZN16CMPXDbActiveTask16GetVisibleChangeEv @ 117 NONAME + _ZN16CMPXDbActiveTask16SetVisibleChangeENS_17TChangeVisibilityE @ 118 NONAME + _ZN16CMPXDbActiveTask17GetChangeMessagesEv @ 119 NONAME + _ZN16CMPXDbActiveTask4NewLER24MMPXDbActiveTaskObserver @ 120 NONAME + _ZN16CMPXDbActiveTask4RunLEv @ 121 NONAME + _ZN16CMPXDbActiveTask6StartLEmRK9CMPXMedia @ 122 NONAME + _ZN16CMPXDbActiveTask7GetStepEv @ 123 NONAME + _ZN16CMPXDbActiveTask7GetTaskEv @ 124 NONAME + _ZN16CMPXDbActiveTask8DoCancelEv @ 125 NONAME + _ZN16CMPXDbActiveTask8RunErrorEi @ 126 NONAME + _ZN16CMPXDbActiveTaskD0Ev @ 127 NONAME + _ZN16CMPXDbActiveTaskD1Ev @ 128 NONAME + _ZN16CMPXDbActiveTaskD2Ev @ 129 NONAME + _ZNK13CMPXDbManager13DatabaseCountEv @ 130 NONAME + _ZNK13CMPXDbManager6IsOpenEi @ 131 NONAME + _ZNK13CMPXDbManager7DbDriveEi @ 132 NONAME + _ZNK13CMPXDbManager7VersionEv @ 133 NONAME + _ZTI11CMPXDbTable @ 134 NONAME + _ZTI12CMPXResource @ 135 NONAME + _ZTI13CMPXDbManager @ 136 NONAME + _ZTV11CMPXDbTable @ 137 NONAME + _ZTV12CMPXResource @ 138 NONAME + _ZTV13CMPXDbManager @ 139 NONAME diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/group/mpxsqlitedbcommon.mmp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/group/mpxsqlitedbcommon.mmp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/group/mpxsqlitedbcommon.mmp Fri Feb 19 22:48:30 2010 +0200 @@ -27,6 +27,9 @@ CAPABILITY CAP_GENERAL_DLL +MACRO __RAMDISK_PERF_ENABLE +#define __RAMDISK_PERF_ENABLE + VERSION 15.0 SOURCEPATH ../src @@ -59,6 +62,7 @@ LIBRARY bafl.lib LIBRARY ecom.lib // DestroyedImplementation LIBRARY mpxcommon.lib +LIBRARY centralrepository.lib #if defined(ARMCC) deffile ../eabi/ diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -41,6 +41,120 @@ // CONSTANTS _LIT(KPathStart, ":\\"); +// ============================ FILE EXTENSION TO MIME MAP ============================== + +// ---------------------------------------------------------------------------------------------------------- +// Statically allocated Mime Map +// ---------------------------------------------------------------------------------------------------------- +// + +_LIT( KExtensionAac, "aac" ); +_LIT( KExtensionAif, "aif"); +_LIT( KExtensionAifc, "aifc"); +_LIT( KExtensionAiff, "aiff"); +_LIT( KExtensionAmr, "amr" ); +_LIT( KExtensionAu, "au" ); +_LIT( KExtensionAwb, "awb" ); +_LIT( KExtensionMid, "mid" ); +_LIT( KExtensionMidi, "midi" ); +_LIT( KExtensionMka, "mka" ); +_LIT( KExtensionMp3, "mp3" ); +_LIT( KExtensionOgg, "ogg"); +_LIT( KExtensionRa, "ra"); +_LIT( KExtensionRam, "ram"); +_LIT( KExtensionRmi, "rmi"); +_LIT( KExtensionSnd, "snd" ); +_LIT( KExtensionSpMid, "spmid" ); +_LIT( KExtensionWav, "wav" ); +_LIT( KExtensionWma, "wma" ); + +_LIT8( KMimeTypeAac, "audio/aac" ); +_LIT8( KMimeTypeAiff, "audio/x-aiff"); +_LIT8( KMimeTypeAmr, "audio/amr" ); +_LIT8( KMimeTypeAu, "audio/au" ); +_LIT8( KMimeTypeAwb, "audio/amr-wb" ); +_LIT8( KMimeTypeBasic, "audio/basic"); +_LIT8( KMimeTypeMatroska, "audio/x-matroska"); +_LIT8( KMimeTypeMid, "audio/mid"); +_LIT8( KMimeTypeMidi, "audio/midi" ); +_LIT8( KMimeTypeMpeg, "audio/mpeg" ); +_LIT8( KMimeTypeOgg, "audio/ogg"); +_LIT8( KMimeTypeReal, "audio/x-pn-realaudio"); +_LIT8( KMimeTypeSpMidi, "audio/sp-midi" ); +_LIT8( KMimeTypeWav, "audio/wav" ); +_LIT8( KMimeTypeWma, "audio/x-ms-wma"); + +struct TMimeMapItem { + const TDesC * iExt; + const TDesC8 * iType; +}; + +// We need to explicitly cast here as LitC::operator& requires writable DLL data (even though it is just a cast) +#define MIME_MAP_ITEM(ext,type) { &REINTERPRET_CAST(const TDesC&, ext), &REINTERPRET_CAST(const TDesC8&, type) } + +// THIS ARRAY MUST BE SORTED BY EXTENSION +static const TMimeMapItem KMimeMap [] = { + MIME_MAP_ITEM( KExtensionAac, KMimeTypeAac), + MIME_MAP_ITEM( KExtensionAif, KMimeTypeAiff ), + MIME_MAP_ITEM( KExtensionAifc, KMimeTypeAiff ), + MIME_MAP_ITEM( KExtensionAiff, KMimeTypeAiff ), + MIME_MAP_ITEM( KExtensionAmr, KMimeTypeAmr ), + MIME_MAP_ITEM( KExtensionAu, KMimeTypeAu ), // KMimeTypeAudioBasic? "audio/x-au"? + MIME_MAP_ITEM( KExtensionAwb, KMimeTypeAwb ), + MIME_MAP_ITEM( KExtensionMid, KMimeTypeMidi ), + MIME_MAP_ITEM( KExtensionMidi, KMimeTypeMidi ), + MIME_MAP_ITEM( KExtensionMka, KMimeTypeMatroska ), + MIME_MAP_ITEM( KExtensionMp3, KMimeTypeMpeg ), + MIME_MAP_ITEM( KExtensionOgg, KMimeTypeOgg ), + MIME_MAP_ITEM( KExtensionRa, KMimeTypeReal ), + MIME_MAP_ITEM( KExtensionRam, KMimeTypeReal ), + MIME_MAP_ITEM( KExtensionRmi, KMimeTypeMid ), + MIME_MAP_ITEM( KExtensionSnd, KMimeTypeBasic ), + MIME_MAP_ITEM( KExtensionSpMid, KMimeTypeSpMidi ), + MIME_MAP_ITEM( KExtensionWav, KMimeTypeWav ), // "audio/x-wav"? + MIME_MAP_ITEM( KExtensionWma, KMimeTypeWma ) +}; + +// ---------------------------------------------------------------------------------------------------------- +// Look for Mime Type from map by file extension +// Returns NULL if file extension is not known +// ---------------------------------------------------------------------------------------------------------- +// +static const TDesC8 * FindMimeTypeFromMap ( const TDesC& aFilename ) + { + // extract extension + TPtrC extension; + TInt pos = aFilename.LocateReverseF( '.' ); + if ( pos < 0 || ++pos >= aFilename.Length() ) + { + return NULL; + } + extension.Set( aFilename.Mid( pos ) ); + + // binary search from Mime Map + TUint begin = 0; + TUint end = sizeof KMimeMap / sizeof (TMimeMapItem); + while (begin < end) + { + TUint at = (begin + end) / 2; + const TMimeMapItem & item = KMimeMap[at]; + TUint r = item.iExt->CompareF(extension); + if (r == 0) + { + return item.iType; + } + else if (r > 0) + { + end = at; + } + else + { + begin = at + 1; + } + } + return NULL; +} + // ============================ MEMBER FUNCTIONS ============================== // ---------------------------------------------------------------------------------------------------------- @@ -809,7 +923,11 @@ { MPX_FUNC("MPXDbUtil::GetMimeTypeForUriL"); - TParsePtrC parse(aUri); + if ( const TDesC8 * type = FindMimeTypeFromMap (aUri) ) + { + return TDataType(*type); + } + RApaLsSession appArc; User::LeaveIfError(appArc.Connect()); CleanupClosePushL(appArc); diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -27,6 +27,11 @@ //#include //#endif #include +#ifdef __RAMDISK_PERF_ENABLE +#include +#include +#include +#endif //__RAMDISK_PERF_ENABLE #include @@ -68,6 +73,19 @@ const TInt KMaxLogQuery = 248; const TInt KBufIncrement = 10; +#ifdef __RAMDISK_PERF_ENABLE +_LIT(KSecurePath, "[%x]%S"); +_LIT(KRAMAliasName, "%S"); +_LIT( KDummyDbFile, "%c:\\private\\10281e17\\dummydb.dat" ); +const TInt64 KMPMegaByte = 1048576; +const TInt64 KMPEstimatedSongInBytes = KMPMegaByte * 2; +const TInt KMPEstimatedSizePerDBEntry = 3000; // worst scenario, can be lower if needed +const TInt KMPMinimumRAMSizeToRun = 6 * KMPMegaByte; +// if RAM is lower than 5MB, doesn't seem enough for SQL as well. +// so we set this number to move back DBs before being kicked out + +#endif //__RAMDISK_PERF_ENABLE + // Used to suppress overflow when appending formatted text to a buffer. class TOverflowHandle : public TDesOverflow @@ -102,7 +120,10 @@ // EXPORT_C CMPXDbManager::CMPXDbManager( RFs& aFs) : - iFs(aFs) + iFs(aFs), + iRAMDiskPerfEnabled(EFalse), + iMaximumAllowedRAMDiskSpaceToCopy(0), + iRAMInUse(EFalse) { MPX_FUNC("CMPXDbManager::CMPXDbManager"); } @@ -116,6 +137,35 @@ { MPX_FUNC("CMPXDbManager::ConstructL"); iDbFile = aDatabaseFile.AllocL(); + +#ifdef __RAMDISK_PERF_ENABLE + TInt flags( 0 ); + CRepository* repository = CRepository::NewLC( KCRUidMPXMPFeatures ); + User::LeaveIfError( repository->Get( KMPXMPLocalVariation, flags )); + MPX_DEBUG2("CMPXDbManager::ConstructL KMPXMPLocalVariation %d", flags); + iRAMDiskPerfEnabled = static_cast( flags & KMPXEnableRAMDisk ); + + TInt temp; + User::LeaveIfError( repository->Get( KMAXAllowedDiskSpaceToCopy, temp) ); + iMaximumAllowedRAMDiskSpaceToCopy = temp * KMPMegaByte; + CleanupStack::PopAndDestroy(repository); + + if ( iRAMDiskPerfEnabled ) + { + MPX_DEBUG1("CMPXDbManager::ConstructL RAMDisk performance is enabled."); + MPX_DEBUG2("CMPXDbManager::ConstructL RAMDisk iMaximumAllowedRAMDiskSpaceToCopy=%Lu", iMaximumAllowedRAMDiskSpaceToCopy); + if ( GetRAMDiskPath() != KErrNone ) + { + // Error finding ram drive, disable ram disk + iRAMDiskPerfEnabled = EFalse; + } + } + else + { + MPX_DEBUG2("CMPXDbManager::ConstructL RAMDisk performance is NOT enabled flag=%d", flags); + MPX_DEBUG2("CMPXDbManager::ConstructL RAMDisk iMaximumAllowedRAMDiskSpaceToCopy=%Lu", iMaximumAllowedRAMDiskSpaceToCopy); + } +#endif //__RAMDISK_PERF_ENABLE } // ---------------------------------------------------------------------------- @@ -141,6 +191,14 @@ CloseAllDatabases(); delete iDbFile; +#ifdef __RAMDISK_PERF_ENABLE + TInt count(iDatabaseHandles.Count()); + for (TInt i = 0; i < count; ++i) + { + RemoveDummyFile(i); + } +#endif //__RAMDISK_PERF_ENABLE + iDatabaseHandles.Close(); } // ---------------------------------------------------------------------------- @@ -165,20 +223,344 @@ if (++iTransactionCount == 1) { - TInt err = iDatabase.Exec(KBeginTransaction); + DoBeginL(); + } + } + +void CMPXDbManager::DoBeginL() + { + MPX_FUNC("CMPXDbManager::DoBeginL"); + + TInt err = iDatabase.Exec(KBeginTransaction); - // transforms SQL error to KErrNotReady - if( (err <= KSqlErrGeneral && err >= KSqlErrNotDb) || err == KSqlErrStmtExpired ) + // transforms SQL error to KErrNotReady + if( (err <= KSqlErrGeneral && err >= KSqlErrNotDb) || err == KSqlErrStmtExpired ) + { + User::Leave(KErrNotReady); + } + else + { + User::LeaveIfError(err); + } + } + +// ---------------------------------------------------------------------------- +// Copy all DBs to RAM disk +// ---------------------------------------------------------------------------- +// +EXPORT_C void CMPXDbManager::CopyDBsToRamL( TBool aIsMTPInUse ) + { +#ifdef __RAMDISK_PERF_ENABLE + MPX_DEBUG1("-->CMPXDbManager::CopyDBsToRamL"); + if( iRAMDiskPerfEnabled ) + { + if ( !IsRamDiskSpaceAvailable() ) + { + return; + } + + // Check if we are over the allowed ram space. + TInt dbSize=0; + TInt err = GetTotalDatabasesSize(dbSize); + if ( err || (dbSize > iMaximumAllowedRAMDiskSpaceToCopy) ) { - User::Leave(KErrNotReady); + MPX_DEBUG2("<--CMPXDbManager::CopyDBsToRamL Over the allowed Ram disk limit %Lu", iMaximumAllowedRAMDiskSpaceToCopy ); + return; + } + + TInt transactionCount = iTransactionCount; + if (iTransactionCount > 0) + { + iTransactionCount = 0; + DoCommitL(); } - else + + TInt count(iDatabaseHandles.Count()); + TBool ret = EFalse; + for ( TInt i = 0; i < count ; ++i ) { - User::LeaveIfError(err); + if ( iDatabaseHandles[i].iUseRAMdb ) + { + // already used + MPX_DEBUG1("CMPXDbManager::CopyDBsToRamL iUseRAMdb already ETrue"); + continue; + } + iDatabaseHandles[i].iUseRAMdb = ETrue; + TRAPD(err, ret = DoCopyDBToRamL( iDatabaseHandles[i].iDrive, aIsMTPInUse )) + if ( err != KErrNone ) + { + MPX_DEBUG2("CMPXDbManager::CopyDBsToRamL error=%d", err); + // remove dymmy file + RemoveDummyFile(i); + // try to close database that is opened from RAM disk + TRAP_IGNORE(CloseDatabaseL( iDatabaseHandles[i].iDrive )); + iDatabaseHandles[i].iUseRAMdb = EFalse; + // reopen database from drive not from RAM + OpenDatabaseL( iDatabaseHandles[i].iDrive ); + continue; // continue to copy for next drive + } + if ( !ret ) + { + iDatabaseHandles[i].iUseRAMdb = EFalse; + } + } + + if (transactionCount > 0) + { + DoBeginL(); + iTransactionCount = transactionCount; } } + iRAMInUse = ETrue; + + MPX_DEBUG1("<--CMPXDbManager::CopyDBsToRamL"); +#endif //__RAMDISK_PERF_ENABLE + } + +// ---------------------------------------------------------------------------- +// CMPXDbManager::DoCopyDBsToRamL +// ---------------------------------------------------------------------------- +// +TBool CMPXDbManager::DoCopyDBToRamL( TDriveUnit aDrive, TBool aIsMTPInUse ) + { +#ifdef __RAMDISK_PERF_ENABLE + MPX_DEBUG2("-->CMPXDbManager::DoCopyDBsToRamL drive=%d", (TInt)aDrive); + TFileName dst; + TFileName src; + dst.Append(iRAMFolder); + src.Append(aDrive.Name()); + src.Append(KDBFilePath); + TRAPD( err, BaflUtils::EnsurePathExistsL( iFs, dst )); + if ( err != KErrNone ) + { + return EFalse; + } + TFileName filename; + filename.Format(KSecurePath, User::Identity().iUid, iDbFile); //x:\private\10281e17\[sldfdsf]mpxv2_5.db + src.Append(filename); + MPX_DEBUG2("RAMDisk src path=%S", &src); + TEntry entry; + iFs.Entry( src, entry ); + if (!BlockDiskSpace( aDrive, entry.iSize, aIsMTPInUse ) ) + { + MPX_DEBUG1("CMPXDbManager::DoCopyDBsToRamL() BlockDiskSpace failed"); + return EFalse; // continue for next drive + } + TBuf<2> d; + d.Append(aDrive.Name()); + HBufC* temp = HBufC::NewLC(KMaxFileName); + temp->Des().Append(d.Left(1)); + temp->Des().Append(iDbFile->Des()); + filename.Format(KSecurePath, User::Identity().iUid, temp); + CleanupStack::PopAndDestroy(temp); + dst.Append(filename); + MPX_DEBUG2("RAMDisk dst path=%S", &dst); + TInt index( GetDatabaseIndex((TInt)aDrive) ); + delete iDatabaseHandles[index].iOrigFullFilePath; + iDatabaseHandles[index].iOrigFullFilePath = 0; + delete iDatabaseHandles[index].iTargetFullFilePath; + iDatabaseHandles[index].iTargetFullFilePath = 0; + + // Save these path so it is convenient to copy back + iDatabaseHandles[index].iOrigFullFilePath = HBufC::NewL(src.Length()); + iDatabaseHandles[index].iTargetFullFilePath = HBufC::NewL(dst.Length()); + + iDatabaseHandles[index].iOrigFullFilePath->Des().Append(src); + iDatabaseHandles[index].iTargetFullFilePath->Des().Append(dst); + + TRAP(err, CloseDatabaseL(aDrive)); + if ( err != KErrNone ) + { + MPX_DEBUG2("<--CMPXDbManager::DoCopyDBsToRamL error=%d", err); + TInt index(GetDatabaseIndex((TInt)aDrive)); + if ( index >= 0 ) + { + RemoveDummyFile( index ); + } + return EFalse; + } + User::LeaveIfError( BaflUtils::CopyFile(iFs, src, dst )); + OpenDatabaseL((TInt)aDrive); + + MPX_DEBUG2("RAMDisk Database opened=%d", (TInt)aDrive); + MPX_DEBUG1("<--CMPXDbManager::DoCopyDBsToRamL"); + return ETrue; +#endif //__RAMDISK_PERF_ENABLE + } + +// ---------------------------------------------------------------------------- +// Copy all DBs from RAM disk back to normal drives +// ---------------------------------------------------------------------------- +// +EXPORT_C void CMPXDbManager::CopyDBsFromRamL() + { +#ifdef __RAMDISK_PERF_ENABLE + MPX_DEBUG1("-->CMPXDbManager::CopyDBsFromRamL"); + if( iRAMDiskPerfEnabled ) + { + TInt transactionCount = iTransactionCount; + if (iTransactionCount > 0) + { + iTransactionCount = 0; + DoCommitL(); + } + + TInt count(iDatabaseHandles.Count()); + for (TInt i = 0; i < count && iDatabaseHandles[i].iUseRAMdb; ++i) + { + TRAPD(err, DoCopyDBFromRamL(i)); + if ( err != KErrNone ) + { + MPX_DEBUG2("<--CMPXDbManager::CopyDBsFromRamL error=%d", err); + //anyting wrong, delete the temp file and open database from drive + RemoveDummyFile(i); + // delete Db on RAM + User::LeaveIfError( BaflUtils::DeleteFile(iFs, + *iDatabaseHandles[i].iTargetFullFilePath)); + } + iDatabaseHandles[i].iUseRAMdb = EFalse; + // open db from drive + OpenDatabaseL( iDatabaseHandles[i].iDrive ); + } + + if (transactionCount > 0) + { + DoBeginL(); + iTransactionCount = transactionCount; + } + } + iRAMInUse = EFalse; + + MPX_DEBUG1("<--CMPXDbManager::CopyDBsFromRamL"); +#endif //__RAMDISK_PERF_ENABLE + } + + +// ---------------------------------------------------------------------------- +// CMPXDbManager::DoCopyDBsToRamL +// ---------------------------------------------------------------------------- +// +void CMPXDbManager::DoCopyDBFromRamL( TInt aIndex ) + { +#ifdef __RAMDISK_PERF_ENABLE + MPX_DEBUG1("-->CMPXDbManager::DoCopyDBsFromRamL"); + MPX_DEBUG2("-->CMPXDbManager::DoCopyDBsFromRamL Drive %d will be closed before copying db from RAM.", + iDatabaseHandles[aIndex].iDrive); + + CloseDatabaseL(iDatabaseHandles[aIndex].iDrive); + + // Delete existing DB on drive + User::LeaveIfError( BaflUtils::DeleteFile(iFs, + *iDatabaseHandles[aIndex].iOrigFullFilePath)); + MPX_DEBUG1("CMPXDbManager::DoCopyDBsFromRamL old DB on drive deleted"); + + // Rename dummy file to be orignal file name + User::LeaveIfError( BaflUtils::RenameFile(iFs, + iDatabaseHandles[aIndex].iDummyFilePath, + *iDatabaseHandles[aIndex].iOrigFullFilePath) ); + MPX_DEBUG1("CMPXDbManager::CopyDBsFromRamL RAMDisk renamed."); + + //Copy Db from RAM to replace dummy file + ReplaceFileL( *iDatabaseHandles[aIndex].iTargetFullFilePath, *iDatabaseHandles[aIndex].iOrigFullFilePath); + + MPX_DEBUG1("CMPXDbManager::CopyDBsFromRamL RAMDisk copied back."); + + // Delete existing DB on RAM + User::LeaveIfError( BaflUtils::DeleteFile(iFs, *iDatabaseHandles[aIndex].iTargetFullFilePath)); + MPX_DEBUG1("CMPXDbManager::DoCopyDBsFromRamL RAMDisk deleted"); + + MPX_DEBUG1("<--CMPXDbManager::DoCopyDBsFromRamL"); +#endif //__RAMDISK_PERF_ENABLE + } + +// ---------------------------------------------------------------------------- +// CMPXDbManager::ReplaceFileL +// +// Replaces a file with another writing over the destination file. +// Leaves on error. +// Implementation follows CFileMan::Copy except that +// - we don't resize target file to zero +// - we can assume that files already exist +// - we don't copy file attributes & timestamp +// ---------------------------------------------------------------------------- +// +void CMPXDbManager::ReplaceFileL( const TDesC& aSrcName, const TDesC& aDstName ) + { + // open files + RFile srcFile; + User::LeaveIfError( srcFile.Open(iFs, aSrcName, EFileRead|EFileShareReadersOnly) ); + CleanupClosePushL( srcFile ); + + RFile dstFile; + User::LeaveIfError( dstFile.Open(iFs, aDstName, EFileWrite|EFileWriteDirectIO|EFileShareExclusive) ); + CleanupClosePushL( dstFile ); + + // resize destination file + TInt remainingBytes; + User::LeaveIfError( srcFile.Size(remainingBytes) ); + User::LeaveIfError( dstFile.SetSize(remainingBytes) ); + + // allocate buffer + const TInt KBigBufSize = 512 * 1024; + const TInt KMediumBufSize = 32 * 1024; + const TInt KSmallBufSize = 4 * 1024; + HBufC8* bufPtr=HBufC8::New( Min(KBigBufSize, remainingBytes) ); + if (bufPtr==NULL) + bufPtr=HBufC8::New(KMediumBufSize); + if (bufPtr==NULL) + bufPtr=HBufC8::New(KSmallBufSize); + if (bufPtr == NULL) + User::Leave(KErrNoMemory); + CleanupStack::PushL(bufPtr); + + // copy + TPtr8 copyBuf=bufPtr->Des(); + TInt pos=0; + while( remainingBytes > 0 ) + { + TInt s = Min( remainingBytes, copyBuf.MaxSize() ); + TInt ret = srcFile.Read(pos, copyBuf, s); + if (ret == KErrNone && copyBuf.Length()!= s ) + { + ret = KErrCorrupt; + } + if (ret == KErrNone) + { + ret = dstFile.Write(pos, copyBuf, s); + } + User::LeaveIfError (ret); + pos += s; + remainingBytes -= s; + } + User::LeaveIfError( dstFile.Flush() ); + CleanupStack::PopAndDestroy(3); // bufPtr, dstFile, srcFile + } + +// ---------------------------------------------------------------------------- +// CMPXDbManager::RemoveDummyFile +// ---------------------------------------------------------------------------- +// +void CMPXDbManager::RemoveDummyFile( TInt index ) + { +#ifdef __RAMDISK_PERF_ENABLE + MPX_DEBUG1("-->CMPXDbManager::RemoveDummyFile"); + + if ( iDatabaseHandles[index].iDummyFilePath.Length() ) + { + TInt err = BaflUtils::DeleteFile(iFs, iDatabaseHandles[index].iDummyFilePath); + if ( !err ) + { + iDatabaseHandles[index].iDummyFilePath.Zero(); + } + } + MPX_DEBUG1("<--CMPXDbManager::RemoveDummyFile"); +#endif //__RAMDISK_PERF_ENABLE + + } + + // ---------------------------------------------------------------------------- // Commits a transaction on all databases. // ---------------------------------------------------------------------------- @@ -191,20 +573,31 @@ { if (--iTransactionCount == 0) { - TInt err = iDatabase.Exec(KCommitTransaction); - - // transforms SQL error to KErrNotReady - if( (err <= KSqlErrGeneral && err >= KSqlErrNotDb) || err == KSqlErrStmtExpired ) - { - User::Leave(KErrNotReady); - } - else - { - User::LeaveIfError(err); - } + DoCommitL(); } } } + +// ---------------------------------------------------------------------------- +// Commits a transaction on all databases. +// ---------------------------------------------------------------------------- +// +void CMPXDbManager::DoCommitL() + { + MPX_FUNC("CMPXDbManager::DoCommitL"); + TInt err = iDatabase.Exec(KCommitTransaction); + + // transforms SQL error to KErrNotReady + if( (err <= KSqlErrGeneral && err >= KSqlErrNotDb) || err == KSqlErrStmtExpired ) + { + MPX_DEBUG2("CMPXDbManager::CommitL failed err=%d", err); + User::Leave(KErrNotReady); + } + else + { + User::LeaveIfError(err); + } + } // ---------------------------------------------------------------------------- // Rolls back a transaction on all databases. @@ -273,6 +666,12 @@ handle.iAliasname = HBufC::NewL(KAliasName().Length()); handle.iAliasname->Des().Format(KAliasName, &driveName); handle.iOpen = EFalse; +#ifdef __RAMDISK_PERF_ENABLE + handle.iOrigFullFilePath = HBufC::NewL(0); + handle.iTargetFullFilePath = HBufC::NewL(0); + handle.iDummyFilePath.Zero(); + handle.iUseRAMdb = EFalse; +#endif //__RAMDISK_PERF_ENABLE iDatabaseHandles.AppendL(handle); @@ -313,8 +712,10 @@ { if (iDatabaseHandles[i].iDrive == aDrive) { + MPX_DEBUG2("CMPXDbManager::OpenDatabaseL found %d", aDrive); if (!iDatabaseHandles[i].iOpen) { + MPX_DEBUG1("CMPXDbManager::OpenDatabaseL not open found"); // make sure the database is created CreateDatabaseL(drive); @@ -329,6 +730,7 @@ } if (!found) { + MPX_DEBUG1("CMPXDbManager::OpenDatabaseL not found"); User::Leave(KErrArgument); } @@ -366,8 +768,10 @@ { if (iDatabaseHandles[i].iDrive == aDrive) { + MPX_DEBUG2("CMPXDbManager::CloseDatabaseL found %d", aDrive); if (iDatabaseHandles[i].iOpen) { + MPX_DEBUG1("CMPXDbManager::CloseDatabaseL found open"); DetachDatabaseL(drive); } @@ -378,6 +782,7 @@ } if (!found) { + MPX_DEBUG1("CMPXDbManager::CloseDatabaseL not found"); User::Leave(KErrArgument); } @@ -401,6 +806,11 @@ for (TInt i = 0; i < count; ++i) { delete iDatabaseHandles[i].iAliasname; +#ifdef __RAMDISK_PERF_ENABLE + delete iDatabaseHandles[i].iOrigFullFilePath; + delete iDatabaseHandles[i].iTargetFullFilePath; + iDatabaseHandles[i].iDummyFilePath.Zero(); +#endif //__RAMDISK_PERF_ENABLE } iDatabaseHandles.Reset(); @@ -1295,7 +1705,7 @@ if (database.Open(filename->Des()) != KErrNone) { - MPX_DEBUG2("CMPXDbManager::CreateDatabaseL - cannot open the database on drive %d", TInt(aDrive)); + MPX_DEBUG3("CMPXDbManager::CreateDatabaseL - cannot open db on drive %d %S", TInt(aDrive), filename); // close the database first database.Close(); @@ -1350,19 +1760,50 @@ { HBufC* filename = CreateFilenameL(aDrive); CleanupStack::PushL(filename); + +#ifdef __RAMDISK_PERF_ENABLE + if( iDatabaseHandles[i].iUseRAMdb ) + { + delete iDatabaseHandles[i].iAliasname; + iDatabaseHandles[i].iAliasname = HBufC::NewL(KAliasName().Length()); + HBufC* temp = HBufC::NewLC(2); // form of DE, DF, DX,... + temp->Des().Append(iRAMDrive); // length == 2 + TDriveUnit pdrive(aDrive); + temp->Des().Append(pdrive.Name().Left(1)); //length == 2+ 1 + iDatabaseHandles[i].iAliasname->Des().Format(KRAMAliasName, temp); + MPX_DEBUG2("CMPXDbManager::AttachDatabaseL - RAM change aliasname of %S", iDatabaseHandles[i].iAliasname ); + CleanupStack::PopAndDestroy(temp); + } + else +#endif //__RAMDISK_PERF_ENABLE + { + delete iDatabaseHandles[i].iAliasname; + TDriveUnit drive(aDrive); + const TDesC& driveName = drive.Name(); + iDatabaseHandles[i].iAliasname = HBufC::NewL(KAliasName().Length()); + iDatabaseHandles[i].iAliasname->Des().Format(KAliasName, &driveName); + MPX_DEBUG2("CMPXDbManager::AttachDatabaseL - normal change aliasname of %S", iDatabaseHandles[i].iAliasname); + } - User::LeaveIfError(iDatabase.Attach(filename->Des(), - *(iDatabaseHandles[i].iAliasname))); + TInt err = iDatabase.Attach(filename->Des(), *(iDatabaseHandles[i].iAliasname)); + MPX_DEBUG2("CMPXDbManager::AttachDatabaseL - Attach Error =%d", err); + User::LeaveIfError(err); iDatabaseHandles[i].iOpen = ETrue; CleanupStack::PopAndDestroy(filename); } + else + { + MPX_DEBUG1("CMPXDbManager::AttachDatabaseL - found already open"); + } + found = ETrue; break; } } if (!found) { + MPX_DEBUG1("CMPXDbManager::AttachDatabaseL - not found"); User::Leave(KErrNotFound); } } @@ -1384,9 +1825,24 @@ { if (iDatabaseHandles[i].iDrive == aDrive) { - if (iDatabaseHandles[i].iOpen) +#ifdef __RAMDISK_PERF_ENABLE + if ( iDatabaseHandles[i].iOpen || iDatabaseHandles[i].iUseRAMdb ) +#else //__RAMDISK_PERF_ENABLE + if ( iDatabaseHandles[i].iOpen ) +#endif //__RAMDISK_PERF_ENABLE + { - User::LeaveIfError(iDatabase.Detach(*(iDatabaseHandles[i].iAliasname))); + MPX_DEBUG1("CMPXDbManager::DetachDatabaseL found drive that is opening"); + TInt err = iDatabase.Detach(*(iDatabaseHandles[i].iAliasname)); + if ( err ) + { + MPX_DEBUG2("CMPXDbManager::DetachDatabaseL detach failed Error=%d", err); + } + else + { + MPX_DEBUG2("CMPXDbManager::DetachDatabaseL iAliasname=%S", iDatabaseHandles[i].iAliasname); + } + User::LeaveIfError(err); iDatabaseHandles[i].iOpen = EFalse; } @@ -1396,6 +1852,7 @@ } if (!found) { + MPX_DEBUG1("CMPXDbManager::DetachDatabaseL drive not found in iDatabaseHandlers"); User::Leave(KErrNotFound); } } @@ -1414,8 +1871,33 @@ const TDesC& securefilePath = KSecureFilePath; TDriveUnit cdrive(KRootDrive()); - const TDesC& driveName = aDrive.Name(); - filename->Des().Format(securefilePath, &driveName, User::Identity().iUid, iDbFile); +#ifdef __RAMDISK_PERF_ENABLE + TInt index(GetDatabaseIndex((TInt)aDrive)); + if ( index >=0 && iDatabaseHandles[index].iUseRAMdb && aDrive != cdrive ) + { + MPX_DEBUG1("CMPXDbManager::CreateFilenameL - use RAMDisk"); + TFileName path; + path.Append(iRAMDrive); + path.Append(_L(":")); + TBuf<2> d; + d.Append(aDrive.Name()); + HBufC* temp = HBufC::NewLC(KMaxFileName); + temp->Des().Append(d.Left(1)); // attach original drive name + temp->Des().Append(iDbFile->Des()); + filename->Des().Format(securefilePath, &path, User::Identity().iUid, temp); + MPX_DEBUG3("CMPXDbManager::CreateFilenameL - path=%S filename=%S", &path, filename); + CleanupStack::PopAndDestroy(temp); + } + else +#endif //__RAMDISK_PERF_ENABLE + { + MPX_DEBUG1("CMPXDbManager::CreateFilenameL - use normal drive"); + const TDesC& driveName = aDrive.Name(); + filename->Des().Format(securefilePath, &driveName, User::Identity().iUid, iDbFile); + + } + + MPX_DEBUG2("CMPXDbManager::CreateFilenameL filename = %S", filename); return filename; } @@ -1512,43 +1994,13 @@ MPX_DEBUG1("invalid driveId, leave with KErrNotReady"); User::Leave(KErrNotReady); } - - // handle the case of C drive - TDriveUnit drive(aDrive); - TDriveUnit cdrive(KRootDrive()); - - if(drive == cdrive) - { - if (SysUtil::DiskSpaceBelowCriticalLevelL(&iFs, 0, aDrive)) - { - User::Leave(KErrDiskFull); - } - - return; - } + +#ifndef __RAMDISK_PERF_ENABLE + + EnsureDiskSpaceL(aDrive); + +#endif //__RAMDISK_PERF_ENABLE - // handle other drives (eg. removable EDriveE) - TInt count(iDatabaseHandles.Count()); - for (TInt i = 0; i < count; ++i) - { - - if (((KDbManagerAllDrives == aDrive) || - (aDrive == iDatabaseHandles[i].iDrive)) && - iDatabaseHandles[i].iOpen) - { - if (SysUtil::DiskSpaceBelowCriticalLevelL(&iFs, 0, - iDatabaseHandles[i].iDrive)) - { - User::Leave(KErrDiskFull); - } - } - - if (aDrive == iDatabaseHandles[i].iDrive) - { - // exit if just one drive to check - break; - } - } } // ---------------------------------------------------------------------------- @@ -1984,7 +2436,24 @@ // remove old databases before creating/replacing new database TInt driveNameLen = aDrive.Name().Length(); - TFileName dbFileName(aDrive.Name()); //initialise with drive name + TFileName dbFileName; + +#ifdef __RAMDISK_PERF_ENABLE + TInt index(GetDatabaseIndex((TInt)aDrive)); + if( index >= 0 && iDatabaseHandles[index].iUseRAMdb ) + { + dbFileName.Append(iRAMDrive); // RAM + dbFileName.Append(_L(":")); // RAM + } + else +#endif //__RAMDISK_PERF_ENABLE + { + MPX_DEBUG1("CMPXDbManager::CreateDatabaseL - E:"); + dbFileName.Append(aDrive.Name()); //initialise with drive name + } + + + MPX_DEBUG2("CMPXDbManager::CreateDatabaseL - dbFileName=%S", &dbFileName); dbFileName.Append(KDBFilePath); // append private path //append file name @@ -2048,5 +2517,491 @@ CleanupStack::PopAndDestroy(filename); CleanupStack::PopAndDestroy(&database); } + +// --------------------------------------------------------------------------- +// CMPXDbManager::GetRAMDiskPath +// --------------------------------------------------------------------------- +// +TInt CMPXDbManager::GetRAMDiskPath() + { + TInt error = KErrNotSupported; +#ifdef __RAMDISK_PERF_ENABLE + MPX_DEBUG1("-->CMPXDbManager::GetRAMDiskPath"); + TDriveList driveList; + TBool ramDriveFound = EFalse; + TInt driveOffset = 'A'; + iRAMFolder.Zero(); + + error = iFs.DriveList( driveList ); + if ( error == KErrNone ) + { + for ( TInt i = 0; i < driveList.Length(); i++ ) + { + if ( driveList[i] != 0 ) + { + TDriveInfo info; + TInt err = iFs.Drive( info, i ); + if ( !err && info.iType == EMediaRam ) + { + iRAMDrive = driveOffset + i; + iRAMFolder.Append(iRAMDrive); + iRAMFolder.Append(_L(":")); + iRAMFolder.Append(KDBFilePath); + ramDriveFound = ETrue; + MPX_DEBUG2("RAMDisk path=%S", &iRAMFolder); + break; + } + } + } + + // Check if ram drive is found. + if ( !ramDriveFound ) + { + error = KErrNotFound; + } + } + MPX_DEBUG2("CMPXDbManager::GetRAMDiskPath Get DriveList error=%d", error); + MPX_DEBUG1("<--CMPXDbManager::GetRAMDiskPath"); +#endif //__RAMDISK_PERF_ENABLE + return error; + } +// --------------------------------------------------------------------------- +// CMPXDbManager::IsRamDiskSpaceAvailable +// --------------------------------------------------------------------------- +// +TBool CMPXDbManager::IsRamDiskSpaceAvailable() + { + +#ifdef __RAMDISK_PERF_ENABLE + + MPX_DEBUG1("-->CMPXDbManager::IsDiskSpaceAvailable" ); + TInt driveIndex; + RFs::CharToDrive(iRAMDrive, driveIndex); + TVolumeInfo vol; + TInt err = iFs.Volume( vol, driveIndex ); + if ( err == KErrNone ) + { + MPX_DEBUG2("CMPXDbManager::IsRamDiskSpaceAvailable Free in bytes =%Lu", vol.iFree); + if ( vol.iFree > KMPMinimumRAMSizeToRun ) + { + MPX_DEBUG1("CMPXDbManager::IsRamDiskSpaceAvailable Ok to copy"); + return ETrue; + } + MPX_DEBUG1("CMPXDbManager::IsRamDiskSpaceAvailable NOT Ok to copy"); + return EFalse; + } + + MPX_DEBUG2("CMPXDbManager::IsRamDiskSpaceAvailable Disk Not available to use. %d", err); + MPX_DEBUG1("<--CMPXDbManager::IsDiskSpaceAvailable"); + +#endif //__RAMDISK_PERF_ENABLE + + return EFalse; + } + + +// --------------------------------------------------------------------------- +// CMPXDbManager::BlockDiskSpaceL +// --------------------------------------------------------------------------- +// +TBool CMPXDbManager::BlockDiskSpace( TDriveUnit aDrive, TInt aOrigDbSize, TBool aIsMTPInUse ) + { +#ifdef __RAMDISK_PERF_ENABLE + + MPX_DEBUG2("-->CMPXDbManager::BlockDiskSpaceL %d", (TInt)aDrive ); + + // if current DB size can not fit in RAM, abort now + TInt ramDrive; + RFs::CharToDrive(iRAMDrive, ramDrive); + TVolumeInfo vol; + TInt err = iFs.Volume( vol, ramDrive ); + if ( vol.iFree <= aOrigDbSize + KMPMinimumRAMSizeToRun ) + { + MPX_DEBUG1("-->CMPXDbManager::BlockDiskSpaceL Not enough even for copy original DB file, leave" ); + return EFalse; + } + + // ensure you have the disk volume and database + err = iFs.Volume( vol, (TInt)aDrive ); + if (err != KErrNone) + { + MPX_DEBUG2("CMPXDbManager::BlockDiskSpaceL Volume not available on drive %d", (TInt)aDrive); + return EFalse; + } + + TInt index( GetDatabaseIndex((TInt)aDrive) ); + if (index < 0) + { + MPX_DEBUG2("CMPXDbManager::BlockDiskSpaceL Database not available for drive %d", (TInt)aDrive); + return EFalse; + } + + // Check if the drive has enough space to block + MPX_DEBUG2("CMPXDbManager::BlockDiskSpaceL Disk total free space in bytes =%Lu", vol.iFree); + TInt64 blockingSize( CalculateInitalDummyDBSize( vol, aOrigDbSize, aIsMTPInUse )); + MPX_DEBUG2("CMPXDbManager::BlockDiskSpaceL Disk blocking size =%Lu", blockingSize); + if ( vol.iFree <= blockingSize + 1*KMPMegaByte ) + { + MPX_DEBUG1("CMPXDbManager::BlockDiskSpaceL NOk to block"); + return EFalse; + } + + // Create and resize the dummy file + TFileName dummyDbFileName; + TChar ch; + RFs::DriveToChar((TInt)aDrive, ch ); + dummyDbFileName.Format( KDummyDbFile, (TUint)ch); + RFile dummyDb; + err = dummyDb.Replace( iFs, dummyDbFileName, EFileWrite ); + if (err != KErrNone) + { + MPX_DEBUG2("CMPXDbManager::BlockDiskSpaceL Can't open dummy file %d", err); + return EFalse; + } + err = dummyDb.SetSize( blockingSize ); + if ( err ) + { + MPX_DEBUG2("CMPXDbManager::BlockDiskSpaceL Can't resize dummy file %d", err); + dummyDb.Close(); + return EFalse; + } + + dummyDb.Close(); + MPX_DEBUG1("CMPXDbManager::BlockDiskSpaceL Ok to block"); + + iDatabaseHandles[index].iDummyFilePath.Copy(dummyDbFileName); + MPX_DEBUG1("<--CMPXDbManager::BlockDiskSpace"); + + return ETrue; +#else + return EFalse; +#endif //__RAMDISK_PERF_ENABLE + } + + +// --------------------------------------------------------------------------- +// CMPXDbManager::CalculateInitalDummyDBSizeL +// +//a) MTP case +//------------- +// totalNumOfSongsCanFit = / 2 MB; +// metadataSize = totalNumOfSongsCanFit * 3000B +// estimatedDBSize = metadataSize + ; +// dummyDBSize = MIN (iMaximumAllowedRAMDiskSpaceToCopy , estimatedDBSize ) + +//b) Harvesting case +//------------------- +// totalNumOfSongsCanFit = / 2 MB +// metadataSize = totalNumOfSongsCanFit * 3000B +// estimatedSize = metadataSize+ +// freeDiskSpace = - 1 MB +// dummyDBSize = MIN (freeDiskSpace, iMaximumAllowedRAMDiskSpaceToCopy , estimatedSize); +// +// --------------------------------------------------------------------------- +// +TInt64 CMPXDbManager::CalculateInitalDummyDBSize( const TVolumeInfo& aVol, TInt aOrigDbSize, TBool aIsMTPInUse ) + { +#ifdef __RAMDISK_PERF_ENABLE + MPX_DEBUG1("-->CMPXDbManager::CalculateInitalDummyDBSize"); + + if ( aIsMTPInUse ) + { + TInt64 totalNumOfSongsCanFit = aVol.iFree / KMPEstimatedSongInBytes; + MPX_DEBUG2("-->CMPXDbManager::CalculateInitalDummyDBSize aVol.iFree=%Lu", aVol.iFree ); + MPX_DEBUG2("-->CMPXDbManager::CalculateInitalDummyDBSize totalNumOfSongsCanFit=%Lu", totalNumOfSongsCanFit ); + TInt64 estimatedSize = totalNumOfSongsCanFit * (TInt64) KMPEstimatedSizePerDBEntry + aOrigDbSize; + MPX_DEBUG2("-->CMPXDbManager::CalculateInitalDummyDBSize (MTP case) estimated DB size from calculation=%Lu", estimatedSize ); + if ( estimatedSize > iMaximumAllowedRAMDiskSpaceToCopy ) + { + MPX_DEBUG2("<--CMPXDbManager::CalculateInitalDummyDBSize returned iMaximumAllowedRAMDiskSpaceToCopy %d", iMaximumAllowedRAMDiskSpaceToCopy); + return iMaximumAllowedRAMDiskSpaceToCopy; + } + else + { + MPX_DEBUG2("<--CMPXDbManager::CalculateInitalDummyDBSize returned %Lu", estimatedSize ); + return estimatedSize; + } + } + else + { + TInt64 totalNumOfSongsCanFit = aVol.iSize / KMPEstimatedSongInBytes; + TInt64 estimatedSize = totalNumOfSongsCanFit * (TInt64) KMPEstimatedSizePerDBEntry + aOrigDbSize; + MPX_DEBUG2("-->CMPXDbManager::CalculateInitalDummyDBSize estimated DB size from calculation=%Lu", estimatedSize ); + if ( estimatedSize > iMaximumAllowedRAMDiskSpaceToCopy ) + { + MPX_DEBUG1("<--CMPXDbManager::CalculateInitalDummyDBSize"); + // If estimated size is larger than expected free RAM size, + // and if the RAM size is larger than free disk space, + // then use free disk space. 1*KMPMegaByte prevent MP to use up all diskspace + //return iMaximumAllowedRAMDiskSpaceToCopy > aVol.iFree - 1*KMPMegaByte + // ? aVol.iFree - 1*KMPMegaByte : iMaximumAllowedRAMDiskSpaceToCopy; + return iMaximumAllowedRAMDiskSpaceToCopy; + } + else + { + MPX_DEBUG1("<--CMPXDbManager::CalculateInitalDummyDBSize"); + // If estimated size is larger than disk free size, use free diskspace size, + //return estimatedSize > aVol.iFree - 1*KMPMegaByte + // ? aVol.iFree - 1*KMPMegaByte : estimatedSize; + return estimatedSize; + } + } + +#endif //__RAMDISK_PERF_ENABLE + } + + +// --------------------------------------------------------------------------- +// CMPXDbManager::GetDatabaseIndex +// --------------------------------------------------------------------------- +// +TInt CMPXDbManager::GetDatabaseIndex(TInt aDrive) + { +#ifdef __RAMDISK_PERF_ENABLE + MPX_DEBUG2("-->CMPXDbManager::GetDatabaseIndex %d", aDrive ); + TInt count(iDatabaseHandles.Count()); + for (TInt i = 0; i < count; ++i) + { + if ( iDatabaseHandles[i].iDrive == aDrive ) + { + return i; + } + } +#endif //__RAMDISK_PERF_ENABLE + MPX_DEBUG1("<--CMPXDbManager::GetDatabaseIndex returned -1"); + return -1; + } + + +// --------------------------------------------------------------------------- +// CMPXDbManager::EnsureRamSpaceL +// --------------------------------------------------------------------------- +// +EXPORT_C void CMPXDbManager::EnsureRamSpaceL() + { +#ifdef __RAMDISK_PERF_ENABLE + MPX_DEBUG1("-->CMPXDbManager::EnsureRamSpaceL"); + + if ( iRAMInUse ) + { + TVolumeInfo vol; + TInt driveIndex; + RFs::CharToDrive( iRAMDrive, driveIndex ); + + TInt errRAM = iFs.Volume( vol, driveIndex ); + if ( errRAM == KErrNone && vol.iFree < KMPMinimumRAMSizeToRun ) + { + // RAM not enough, copy back to normal drive and continue to harvest. + MPX_DEBUG1("CMPXDbManager::EnsureRamSpaceL RAM diskspace is full, copy dbs back"); + CopyDBsFromRamL(); + } + else + { + TInt size=0; + TInt err = GetTotalRamDatabasesSize(size); + if ( err || (size > iMaximumAllowedRAMDiskSpaceToCopy) ) + { + // Databases using too much RAM space, copy back to normal drive and continue to harvest. + if ( err ) + { + MPX_DEBUG2("CMPXDbManager::EnsureRamSpaceL Get DBs Size Err = %d, copy dbs back", err); + } + else + { + MPX_DEBUG2("CMPXDbManager::EnsureRamSpaceL DBs using too much RAM space size = %d, copy dbs back", size); + } + CopyDBsFromRamL(); + } + } + } + MPX_DEBUG1("<--CMPXDbManager::EnsureRamSpaceL"); +#endif //__RAMDISK_PERF_ENABLE + } + + +// --------------------------------------------------------------------------- +// CMPXDbManager::EnsureDiskSpaceL +// --------------------------------------------------------------------------- +// +void CMPXDbManager::EnsureDiskSpaceL(TInt aDrive) + { + MPX_DEBUG2("-->CMPXDbManager::EnsureDiskSpaceL for drive %d", aDrive); + // handle the case of C drive + TDriveUnit drive(aDrive); + TDriveUnit cdrive(KRootDrive()); + + if(drive == cdrive) + { + if (SysUtil::DiskSpaceBelowCriticalLevelL(&iFs, 0, aDrive)) + { + MPX_DEBUG1("CMPXDbManager::EnsureDiskSpaceL Error diskspace full"); + User::Leave(KErrDiskFull); + } + + return; + } + + // handle other drives (eg. removable EDriveE) + TInt count(iDatabaseHandles.Count()); + for (TInt i = 0; i < count; ++i) + { + if (((KDbManagerAllDrives == aDrive) || + (aDrive == iDatabaseHandles[i].iDrive)) && + iDatabaseHandles[i].iOpen) + { + if (SysUtil::DiskSpaceBelowCriticalLevelL(&iFs, 0, + iDatabaseHandles[i].iDrive)) + { + MPX_DEBUG1("CMPXDbManager::EnsureDiskSpaceL Error diskspace full"); + User::Leave(KErrDiskFull); + } + } + + if (aDrive == iDatabaseHandles[i].iDrive) + { + // exit if just one drive to check + break; + } + } + MPX_DEBUG1("<--CMPXDbManager::EnsureDiskSpaceL"); + } + + +// --------------------------------------------------------------------------- +// CMPXDbManager::DoBackupDBs +// --------------------------------------------------------------------------- +// +/*EXPORT_C void CMPXDbManager::BackupDBsL() + { +#ifdef __RAMDISK_PERF_ENABLE + MPX_DEBUG1("-->CMPXDbManager::BackupDBsL"); + + TInt transactionCount = iTransactionCount; + if (iTransactionCount > 0) + { + iTransactionCount = 0; + DoCommitL(); + } + + TInt count(iDatabaseHandles.Count()); + for (TInt i = 0; i < count && iDatabaseHandles[i].iUseRAMdb ; ++i) + { + CloseDatabaseL( iDatabaseHandles[i].iDrive ); + + TInt err= BaflUtils::CopyFile(iFs, + iDatabaseHandles[i].iTargetFullFilePath->Des(), + iDatabaseHandles[i].iOrigFullFilePath->Des()); + + MPX_DEBUG2("CMPXDbManager::BackupDBsL err = %d", err); + + OpenDatabaseL( iDatabaseHandles[i].iDrive ); + } + + if (transactionCount > 0) + { + DoBeginL(); + iTransactionCount = transactionCount; + } + MPX_DEBUG1("<--CMPXDbManager::BackupDBsL"); +#endif //__RAMDISK_PERF_ENABLE + }*/ + +// --------------------------------------------------------------------------- +// CMPXDbManager::GetTotalDatabasesSize +// --------------------------------------------------------------------------- +// +TInt CMPXDbManager::GetTotalDatabasesSize(TInt& aSize) + { + MPX_FUNC("CMPXDbManager::GetTotalDatabasesSize"); + TInt err = KErrNotSupported; +#ifdef __RAMDISK_PERF_ENABLE + TInt size=0; + TInt count(iDatabaseHandles.Count()); + err = KErrNone; + for ( TInt i = 0; i < count ; ++i ) + { + // Generate database name. + TFileName dbFilename; + TDriveUnit drive(iDatabaseHandles[i].iDrive); + dbFilename.Append(drive.Name()); + dbFilename.Append(KDBFilePath); + TFileName filename; + filename.Format(KSecurePath, User::Identity().iUid, iDbFile); //x:\private\10281e17\[sldfdsf]mpxv2_5.db + dbFilename.Append(filename); + MPX_DEBUG2("CMPXDbManager::GetTotalDatabasesSize - Database name = %S", &dbFilename); + TEntry entry; + err = iFs.Entry( dbFilename, entry ); + if (err == KErrNotFound || err == KErrNotReady ) + { + MPX_DEBUG3("CMPXDbManager::GetTotalDatabasesSize - Ignored %S, error = %d", &dbFilename, err); + err = KErrNone; + continue; + } + if ( err != KErrNone ) + { + break; + } + MPX_DEBUG3("CMPXDbManager::GetTotalDatabasesSize - Size of Db %S = %d", &dbFilename, entry.iSize); + // sum up size + size += entry.iSize; + } + aSize = size; + MPX_DEBUG2("CMPXDbManager::GetTotalDatabasesSize - Total Size of Dbs = %d", size); + +#endif //__RAMDISK_PERF_ENABLE + MPX_DEBUG2("CMPXDbManager::GetTotalDatabasesSize - Return err = %d", err); + return err; + } + +// --------------------------------------------------------------------------- +// CMPXDbManager::GetTotalRamDatabasesSize +// --------------------------------------------------------------------------- +// +TInt CMPXDbManager::GetTotalRamDatabasesSize(TInt& aSize) + { + MPX_FUNC("CMPXDbManager::GetTotalRamDatabasesSize"); + TInt err = KErrNotSupported; +#ifdef __RAMDISK_PERF_ENABLE + TInt size=0; + TInt count(iDatabaseHandles.Count()); + err = KErrNone; + for ( TInt i = 0; i < count ; ++i ) + { + // make sure this db is in ram drive. + if ( !iDatabaseHandles[i].iUseRAMdb ) + { + continue; + } + // Generate database name. + TFileName dbFilename; + dbFilename.Append(iRAMFolder); + TBuf<2> d; + TDriveUnit drive(iDatabaseHandles[i].iDrive); + d.Append(drive.Name()); + HBufC* temp = HBufC::NewLC(KMaxFileName); + temp->Des().Append(d.Left(1)); + temp->Des().Append(iDbFile->Des()); + TFileName filename; + filename.Format(KSecurePath, User::Identity().iUid, temp); + CleanupStack::PopAndDestroy(temp); + dbFilename.Append(filename); + MPX_DEBUG2("CMPXDbManager::GetTotalRamDatabasesSize - Database name = %S", &dbFilename); + TEntry entry; + err = iFs.Entry( dbFilename, entry ); + if ( (err != KErrNone) && (err != KErrNotFound) ) + { + break; + } + MPX_DEBUG3("CMPXDbManager::GetTotalRamDatabasesSize - Size of Db %S = %d", &dbFilename, entry.iSize); + // sum up size + size += entry.iSize; + } + aSize = size; + MPX_DEBUG2("CMPXDbManager::GetTotalRamDatabasesSize - Total Size of Dbs = %d", size); +#endif //__RAMDISK_PERF_ENABLE + MPX_DEBUG2("CMPXDbManager::GetTotalRamDatabasesSize - Return err = %d", err); + return err; + } + // End of File diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbtable.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbtable.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbtable.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -764,6 +764,41 @@ } // ---------------------------------------------------------------------------- +// CMPXDbTable::ExecuteSumExQueryL +// ---------------------------------------------------------------------------- +// +EXPORT_C TInt CMPXDbTable::ExecuteSumExQueryL( + const TDesC& aQuery, + TUint32 aPlaylistId, + TInt aDrive) + { + MPX_FUNC("CMPXDbTable::ExecuteSumExQueryL"); + + HBufC* query = HBufC::NewLC(aQuery.Length() + KMCIntegerLen); + query->Des().Format(aQuery, aPlaylistId); + + RSqlStatement recordset(iDbManager.ExecuteSelectQueryOnAllDrivesL(aDrive, *query)); + CleanupClosePushL(recordset); + + TInt sum(0); + TInt err(KErrNone); + while ((err = recordset.Next()) == KSqlAtRow) + { + sum += recordset.ColumnInt64(KMPXTableDefaultIndex); + } + + CleanupStack::PopAndDestroy(&recordset); + CleanupStack::PopAndDestroy(query); + + if (err != KSqlAtEnd) + { + User::Leave(KErrCorrupt); + } + + return sum; + } + +// ---------------------------------------------------------------------------- // CMPXDbTable::ExecuteMediaQueryL // ---------------------------------------------------------------------------- // diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/group/mpxsqlitedbhgplugin.mmp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/group/mpxsqlitedbhgplugin.mmp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/group/mpxsqlitedbhgplugin.mmp Fri Feb 19 22:48:30 2010 +0200 @@ -32,6 +32,8 @@ MACRO __ENABLE_PODCAST_IN_MUSIC_MENU #define __ENABLE_PODCAST_IN_MUSIC_MENU //MACRO RD_MPX_COLLECTION_CACHE +MACRO __RAMDISK_PERF_ENABLE +#define __RAMDISK_PERF_ENABLE SOURCEPATH ../src SOURCE mpxdbplugin.cpp diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h Fri Feb 19 22:48:30 2010 +0200 @@ -1009,6 +1009,7 @@ * @see MMPXDbPlaylistObserver */ virtual TInt HandlePlaylistDurationL(TUint32 aPlaylistId); + virtual void HandlePlaylistInfoL(TUint32 aPlaylistId, TInt& aCount, TInt& aDuration); private: diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbplaylist.h --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbplaylist.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbplaylist.h Fri Feb 19 22:48:30 2010 +0200 @@ -44,6 +44,7 @@ { public: virtual TInt HandlePlaylistDurationL(TUint32 aPlaylistId) = 0; + virtual void HandlePlaylistInfoL(TUint32 aPlaylistId, TInt& aCount, TInt& aDuration) = 0; }; class CMPXDbPlaylist : public CMPXDbTable { diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbplaylistsongs.h --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbplaylistsongs.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbplaylistsongs.h Fri Feb 19 22:48:30 2010 +0200 @@ -216,9 +216,10 @@ /** * Get the number of songs for a playlist * @param aPlaylistId identifies the playlist + * @param aDriveId identifies the database to be query * @return number of songs */ - TInt CountL(TUint32 aPlaylistId); + TInt CountL(TUint32 aPlaylistId, TInt aDriveId); private: diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h Fri Feb 19 22:48:30 2010 +0200 @@ -283,7 +283,7 @@ _LIT(KQueryPlaylistSongsDeleteForCategory, "DELETE FROM :dbname.PlaylistSongs WHERE PlaylistSongs.SongId=Music.UniqueId AND Music.%S=%u"); _LIT(KQueryPlaylistSongsDeleteForArtistAlbum, "DELETE FROM :dbname.PlaylistSongs WHERE PlaylistSongs.SongId=Music.UniqueId AND Music.Artist=%u AND Music.Album=%u"); -_LIT(KQueryPlaylistSongsCount, "SELECT count(*) FROM :dbname.PlaylistSongs WHERE PlaylistId=%u"); +_LIT(KQueryPlaylistSongsCount, "SELECT count(*) FROM :dbname.music as m,:pldbname.Playlistsongs as pl WHERE pl.PlaylistId=%u AND m.UniqueId=pl.SongId AND m.Deleted=0"); _LIT(KQueryPlaylistSongsPlaylistSongCount, "SELECT count(*) FROM :dbname.PlaylistSongs WHERE PlaylistId=%u AND SongId=%u"); _LIT(KQueryPlaylistSongsSongCount, "SELECT count(*) FROM :dbname.PlaylistSongs WHERE SongId=%u"); _LIT(KQueryPlaylistSongsGetSongs, "SELECT UniqueId,SongId,Ordinal FROM :dbname.PlaylistSongs WHERE PlaylistId=%u ORDER BY Ordinal"); diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -1356,6 +1356,9 @@ } } +#ifdef __RAMDISK_PERF_ENABLE + iDbManager->CopyDBsToRamL(); +#endif //__RAMDISK_PERF_ENABLE iDbMusic->RefreshStartL(); BeginTransactionL(); @@ -1386,6 +1389,10 @@ { iSynchronizeBasicTable = EFalse; } + +#ifdef __RAMDISK_PERF_ENABLE + iDbManager->CopyDBsFromRamL(); +#endif //__RAMDISK_PERF_ENABLE } // ---------------------------------------------------------------------------- @@ -1394,9 +1401,20 @@ // void CMPXDbHandler::MtpStartL() { + MPX_DEBUG1("-->CMPXDbHandler::MtpStartL"); iMtpInUse = ETrue; iOpOnDbCount = 0; + +#ifdef __RAMDISK_PERF_ENABLE + TRAPD(err, iDbManager->CopyDBsToRamL(iMtpInUse)); + if ( err != KErrNone ) + { + MPX_DEBUG2("CMPXDbHandler::MtpStartL error=%d", err); + } +#endif //__RAMDISK_PERF_ENABLE + iDbManager->BeginL(); + MPX_DEBUG1("<--CMPXDbHandler::MtpStartL"); } // ---------------------------------------------------------------------------- @@ -1405,9 +1423,20 @@ // void CMPXDbHandler::MtpEndL() { + MPX_DEBUG1("-->CMPXDbHandler::MtpEndL"); iMtpInUse = EFalse; iOpOnDbCount = 0; iDbManager->CommitL(); + +#ifdef __RAMDISK_PERF_ENABLE + TRAPD(err, iDbManager->CopyDBsFromRamL()); + if ( err != KErrNone ) + { + MPX_DEBUG2("CMPXDbHandler::MtpEndL error=%d", err); + } +#endif //__RAMDISK_PERF_ENABLE + + MPX_DEBUG1("<--CMPXDbHandler::MtpEndL"); } // ---------------------------------------------------------------------------- @@ -1489,6 +1518,16 @@ { MPX_FUNC("CMPXDbHandler::BeginTransactionL"); +#ifdef __RAMDISK_PERF_ENABLE + // EnsureRamSpaceL will copy dbs from ram if ram space is low or dbs exceeded + // max space. + TRAPD(err, iDbManager->EnsureRamSpaceL()); + if (err) + { + //error but continue + } +#endif //__RAMDISK_PERF_ENABLE + if(!iMtpInUse) { iDbManager->BeginL(); @@ -2938,6 +2977,37 @@ { return GetPlaylistDurationL(aPlaylistId); } +void CMPXDbHandler::HandlePlaylistInfoL( + TUint32 aPlaylistId, + TInt& aCount, + TInt& aDuration) + { + MPX_FUNC("CMPXDbHandler::HandlePlaylistInfoL"); + MPX_DEBUG2("CMPXDbHandler::HandlePlaylistInfoL(0x%x)", aPlaylistId); + + RArray attributes; + CleanupClosePushL(attributes); + attributes.AppendL(KMPXMediaGeneralId); + attributes.AppendL(TMPXAttribute(KMPXMediaIdGeneral, EMPXMediaGeneralDuration)); + + CMPXMediaArray* mediaArray = CMPXMediaArray::NewL(); + CleanupStack::PushL(mediaArray); + + GetPlaylistSongsL(aPlaylistId, attributes.Array(), *mediaArray); + + aCount = mediaArray->Count(); + for (TInt index = 0; index < aCount; ++index) + { + CMPXMedia* media((*mediaArray)[index]); + if (media->IsSupported(KMPXMediaGeneralDuration)) + { + aDuration += media->ValueTObjectL(KMPXMediaGeneralDuration); + } + } + + CleanupStack::PopAndDestroy(mediaArray); + CleanupStack::PopAndDestroy(&attributes); + } TInt CMPXDbHandler::HandleGetAlbumsCountForArtistL(TUint32 aArtistId) { diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -1570,6 +1570,13 @@ } } + if (attributeId & EMPXMediaGeneralMimeType) + { + const TDesC& mimeTypeText( aMedia.ValueText(KMPXMediaGeneralMimeType) ); + MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicMimeType, mimeTypeText); + MPX_DEBUG2(" MimeType[%S]", &mimeTypeText); + } + if (attributeId & EMPXMediaGeneralUri) { const TDesC& uri = aMedia.ValueText(KMPXMediaGeneralUri); @@ -1586,12 +1593,14 @@ MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicLocation, uri.Mid(KMCPathStartPos)); MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicDRM, DRMTypeL(uri)); + MPX_DEBUG3(" VolumeId[%u] Location[%S]", volId, &uri); - const TDesC& mimeTypeText(MPXDbCommonUtil::GetMimeTypeForUriL(uri).Des()); - MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicMimeType, mimeTypeText); - - MPX_DEBUG3(" VolumeId[%u] Location[%S]", volId, &uri); - MPX_DEBUG2(" MimeType[%S]", &mimeTypeText); + if (!aMedia.IsSupported(KMPXMediaGeneralMimeType)) + { + TBuf< KMaxDataTypeLength > mimeTypeText(MPXDbCommonUtil::GetMimeTypeForUriL(uri).Des()); + MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicMimeType, mimeTypeText); + MPX_DEBUG2(" MimeType[%S]", &mimeTypeText); + } if (!aMusicTable && !aMedia.IsSupported(KMPXMediaGeneralTitle)) { diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplaylist.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplaylist.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplaylist.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -563,12 +563,18 @@ { // Setup basic info - with first record of a group TUint32 playlistId(recordset.ColumnInt64(EPlaylistUniqueId)); + TUint32 volId(recordset.ColumnInt64(EPlaylistVolumeId)); + TInt driveId = MPXDbCommonUtil::GetDriveIdMatchVolIdL(iDbManager.Fs(), volId); TBool valid(ETrue); TInt songCount(-1); if (criteriaCounterSet) { - songCount = iPlaylistSongs->CountL(playlistId); + if (driveId >= 0) + { + //valid disk + songCount = iPlaylistSongs->CountL(playlistId, driveId); + } valid = (criteriaCounter == songCount); } @@ -703,6 +709,8 @@ TUint32 playlistId(aRecord.ColumnInt64(EPlaylistUniqueId)); TInt count(aAttrs.Count()); + TUint32 volId(aRecord.ColumnInt64(EPlaylistVolumeId)); + TInt driveId = MPXDbCommonUtil::GetDriveIdMatchVolIdL(iDbManager.Fs(), volId); for (TInt i = 0; i < count; ++i) { TInt contentId(aAttrs[i].ContentId()); @@ -730,8 +738,6 @@ (attributeId & EMPXMediaGeneralDrive) || (attributeId & EMPXMediaGeneralFlags)) { - TUint32 volId(aRecord.ColumnInt64(EPlaylistVolumeId)); - TInt driveId = MPXDbCommonUtil::GetDriveIdMatchVolIdL(iDbManager.Fs(), volId); // LTAN-7GH6BZ, crash if eject memory card when adding song to existing playlist // due to special timing issue, it is possible drive number is -1 and create a @@ -798,22 +804,27 @@ } // end if contentId == KMPXMediaIdGeneral } // end for + TInt plSongCount(0); + TInt plSongDuration(0); if (countRequested) { - TInt count = iPlaylistSongs->CountL(playlistId); + if (driveId >= 0) + { + //valid disk + iObserver.HandlePlaylistInfoL(playlistId, plSongCount, plSongDuration); + } aMedia.SetTObjectValueL(KMPXMediaGeneralCount, - count ); - + plSongCount ); + MPX_DEBUG1(" EMPXMediaGeneralCount"); - MPX_DEBUG2(" Count[%d]", count); + MPX_DEBUG2(" Count[%d]", plSongCount); } if (durationRequested) { - TInt duration = iObserver.HandlePlaylistDurationL(playlistId); - aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, duration); - - MPX_DEBUG1(" EMPXMediaGeneralDuration"); - MPX_DEBUG2(" Duration[%d]", duration); + aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, plSongDuration); + + MPX_DEBUG1(" EMPXMediaGeneralDuration"); + MPX_DEBUG2(" Duration[%d]", plSongDuration); } aMedia.SetTObjectValueL(KMPXMediaGeneralType, EMPXItem); diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplaylistsongs.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplaylistsongs.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplaylistsongs.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -120,7 +120,12 @@ TInt aDriveId) { MPX_FUNC("CMPXDbPlaylistSongs::AddSongL"); - return AddSongL(aPlaylistId, CountL(aPlaylistId), aMedia, aDriveId); + TInt count(0); + if (aDriveId >= 0) + { + count = CountL(aPlaylistId, aDriveId); + } + return AddSongL(aPlaylistId, count, aMedia, aDriveId); } // ---------------------------------------------------------------------------- @@ -631,10 +636,11 @@ // ---------------------------------------------------------------------------- // TInt CMPXDbPlaylistSongs::CountL( - TUint32 aPlaylistId) + TUint32 aPlaylistId, + TInt aDriveId) { MPX_FUNC("CMPXDbPlaylist::CountL"); - return ExecuteSumQueryL(KQueryPlaylistSongsCount, aPlaylistId); + return ExecuteSumExQueryL(KQueryPlaylistSongsCount, aPlaylistId, aDriveId); } // ---------------------------------------------------------------------------- diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -1291,8 +1291,7 @@ { MPXDbCommonUtil::PrependMediaL(*aArray, *iShuffleAllText, EMPXItem, EMPXCommand, 0, 0, 0, 1); - aArray->AtL(1)->SetTObjectValueL(KMPXMediaColDetailNumberOfItems, - iDbHandler->NumberOfItemsL(EMPXSong)); + aArray->AtL(1)->SetTObjectValueL(KMPXMediaColDetailNumberOfItems, 0); TInt pPath(0); CMPXMedia* pMedia = aArray->AtL(0); diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/group/mpxsqlitedbplugin.mmp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/group/mpxsqlitedbplugin.mmp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/group/mpxsqlitedbplugin.mmp Fri Feb 19 22:48:30 2010 +0200 @@ -32,6 +32,8 @@ MACRO __ENABLE_PODCAST_IN_MUSIC_MENU #define __ENABLE_PODCAST_IN_MUSIC_MENU //MACRO RD_MPX_COLLECTION_CACHE +MACRO __RAMDISK_PERF_ENABLE +#define __RAMDISK_PERF_ENABLE SOURCEPATH ../src SOURCE mpxdbplugin.cpp diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbhandler.h --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbhandler.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbhandler.h Fri Feb 19 22:48:30 2010 +0200 @@ -1009,6 +1009,7 @@ * @see MMPXDbPlaylistObserver */ virtual TInt HandlePlaylistDurationL(TUint32 aPlaylistId); + virtual void HandlePlaylistInfoL(TUint32 aPlaylistId, TInt& aCount, TInt& aDuration); private: diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbplaylist.h --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbplaylist.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbplaylist.h Fri Feb 19 22:48:30 2010 +0200 @@ -44,6 +44,7 @@ { public: virtual TInt HandlePlaylistDurationL(TUint32 aPlaylistId) = 0; + virtual void HandlePlaylistInfoL(TUint32 aPlaylistId, TInt& aCount, TInt& aDuration) = 0; }; class CMPXDbPlaylist : public CMPXDbTable { diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbplaylistsongs.h --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbplaylistsongs.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbplaylistsongs.h Fri Feb 19 22:48:30 2010 +0200 @@ -216,9 +216,10 @@ /** * Get the number of songs for a playlist * @param aPlaylistId identifies the playlist + * @param aDriveId identifies the database to be query * @return number of songs */ - TInt CountL(TUint32 aPlaylistId); + TInt CountL(TUint32 aPlaylistId, TInt aDriveId); private: diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbpluginqueries.h --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbpluginqueries.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbpluginqueries.h Fri Feb 19 22:48:30 2010 +0200 @@ -283,7 +283,7 @@ _LIT(KQueryPlaylistSongsDeleteForCategory, "DELETE FROM :dbname.PlaylistSongs WHERE PlaylistSongs.SongId=Music.UniqueId AND Music.%S=%u"); _LIT(KQueryPlaylistSongsDeleteForArtistAlbum, "DELETE FROM :dbname.PlaylistSongs WHERE PlaylistSongs.SongId=Music.UniqueId AND Music.Artist=%u AND Music.Album=%u"); -_LIT(KQueryPlaylistSongsCount, "SELECT count(*) FROM :dbname.PlaylistSongs WHERE PlaylistId=%u"); +_LIT(KQueryPlaylistSongsCount, "SELECT count(*) FROM :dbname.music as m,:pldbname.Playlistsongs as pl WHERE pl.PlaylistId=%u AND m.UniqueId=pl.SongId AND m.Deleted=0"); _LIT(KQueryPlaylistSongsPlaylistSongCount, "SELECT count(*) FROM :dbname.PlaylistSongs WHERE PlaylistId=%u AND SongId=%u"); _LIT(KQueryPlaylistSongsSongCount, "SELECT count(*) FROM :dbname.PlaylistSongs WHERE SongId=%u"); _LIT(KQueryPlaylistSongsGetSongs, "SELECT UniqueId,SongId,Ordinal FROM :dbname.PlaylistSongs WHERE PlaylistId=%u ORDER BY Ordinal"); diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbhandler.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbhandler.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbhandler.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -1356,6 +1356,9 @@ } } +#ifdef __RAMDISK_PERF_ENABLE + iDbManager->CopyDBsToRamL(); +#endif //__RAMDISK_PERF_ENABLE iDbMusic->RefreshStartL(); BeginTransactionL(); @@ -1386,6 +1389,10 @@ { iSynchronizeBasicTable = EFalse; } + +#ifdef __RAMDISK_PERF_ENABLE + iDbManager->CopyDBsFromRamL(); +#endif //__RAMDISK_PERF_ENABLE } // ---------------------------------------------------------------------------- @@ -1394,9 +1401,20 @@ // void CMPXDbHandler::MtpStartL() { + MPX_DEBUG1("-->CMPXDbHandler::MtpStartL"); iMtpInUse = ETrue; iOpOnDbCount = 0; + +#ifdef __RAMDISK_PERF_ENABLE + TRAPD(err, iDbManager->CopyDBsToRamL(iMtpInUse)); + if ( err != KErrNone ) + { + MPX_DEBUG2("CMPXDbHandler::MtpStartL error=%d", err); + } +#endif //__RAMDISK_PERF_ENABLE + iDbManager->BeginL(); + MPX_DEBUG1("<--CMPXDbHandler::MtpStartL"); } // ---------------------------------------------------------------------------- @@ -1405,9 +1423,20 @@ // void CMPXDbHandler::MtpEndL() { + MPX_DEBUG1("-->CMPXDbHandler::MtpEndL"); iMtpInUse = EFalse; iOpOnDbCount = 0; iDbManager->CommitL(); + +#ifdef __RAMDISK_PERF_ENABLE + TRAPD(err, iDbManager->CopyDBsFromRamL()); + if ( err != KErrNone ) + { + MPX_DEBUG2("CMPXDbHandler::MtpEndL error=%d", err); + } +#endif //__RAMDISK_PERF_ENABLE + + MPX_DEBUG1("<--CMPXDbHandler::MtpEndL"); } // ---------------------------------------------------------------------------- @@ -1489,6 +1518,16 @@ { MPX_FUNC("CMPXDbHandler::BeginTransactionL"); +#ifdef __RAMDISK_PERF_ENABLE + // EnsureRamSpaceL will copy dbs from ram if ram space is low or dbs exceeded + // max space. + TRAPD(err, iDbManager->EnsureRamSpaceL()); + if (err) + { + //error but continue + } +#endif //__RAMDISK_PERF_ENABLE + if(!iMtpInUse) { iDbManager->BeginL(); @@ -2938,6 +2977,37 @@ { return GetPlaylistDurationL(aPlaylistId); } +void CMPXDbHandler::HandlePlaylistInfoL( + TUint32 aPlaylistId, + TInt& aCount, + TInt& aDuration) + { + MPX_FUNC("CMPXDbHandler::HandlePlaylistInfoL"); + MPX_DEBUG2("CMPXDbHandler::HandlePlaylistInfoL(0x%x)", aPlaylistId); + + RArray attributes; + CleanupClosePushL(attributes); + attributes.AppendL(KMPXMediaGeneralId); + attributes.AppendL(TMPXAttribute(KMPXMediaIdGeneral, EMPXMediaGeneralDuration)); + + CMPXMediaArray* mediaArray = CMPXMediaArray::NewL(); + CleanupStack::PushL(mediaArray); + + GetPlaylistSongsL(aPlaylistId, attributes.Array(), *mediaArray); + + aCount = mediaArray->Count(); + for (TInt index = 0; index < aCount; ++index) + { + CMPXMedia* media((*mediaArray)[index]); + if (media->IsSupported(KMPXMediaGeneralDuration)) + { + aDuration += media->ValueTObjectL(KMPXMediaGeneralDuration); + } + } + + CleanupStack::PopAndDestroy(mediaArray); + CleanupStack::PopAndDestroy(&attributes); + } TInt CMPXDbHandler::HandleGetAlbumsCountForArtistL(TUint32 aArtistId) { diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbmusic.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbmusic.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbmusic.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -1570,6 +1570,13 @@ } } + if (attributeId & EMPXMediaGeneralMimeType) + { + const TDesC& mimeTypeText( aMedia.ValueText(KMPXMediaGeneralMimeType) ); + MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicMimeType, mimeTypeText); + MPX_DEBUG2(" MimeType[%S]", &mimeTypeText); + } + if (attributeId & EMPXMediaGeneralUri) { const TDesC& uri = aMedia.ValueText(KMPXMediaGeneralUri); @@ -1586,12 +1593,14 @@ MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicLocation, uri.Mid(KMCPathStartPos)); MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicDRM, DRMTypeL(uri)); + MPX_DEBUG3(" VolumeId[%u] Location[%S]", volId, &uri); - const TDesC& mimeTypeText(MPXDbCommonUtil::GetMimeTypeForUriL(uri).Des()); - MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicMimeType, mimeTypeText); - - MPX_DEBUG3(" VolumeId[%u] Location[%S]", volId, &uri); - MPX_DEBUG2(" MimeType[%S]", &mimeTypeText); + if (!aMedia.IsSupported(KMPXMediaGeneralMimeType)) + { + TBuf< KMaxDataTypeLength > mimeTypeText(MPXDbCommonUtil::GetMimeTypeForUriL(uri).Des()); + MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicMimeType, mimeTypeText); + MPX_DEBUG2(" MimeType[%S]", &mimeTypeText); + } if (!aMusicTable && !aMedia.IsSupported(KMPXMediaGeneralTitle)) { diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplaylist.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplaylist.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplaylist.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -563,12 +563,18 @@ { // Setup basic info - with first record of a group TUint32 playlistId(recordset.ColumnInt64(EPlaylistUniqueId)); + TUint32 volId(recordset.ColumnInt64(EPlaylistVolumeId)); + TInt driveId = MPXDbCommonUtil::GetDriveIdMatchVolIdL(iDbManager.Fs(), volId); TBool valid(ETrue); TInt songCount(-1); if (criteriaCounterSet) { - songCount = iPlaylistSongs->CountL(playlistId); + if (driveId >= 0) + { + //valid disk + songCount = iPlaylistSongs->CountL(playlistId, driveId); + } valid = (criteriaCounter == songCount); } @@ -703,6 +709,8 @@ TUint32 playlistId(aRecord.ColumnInt64(EPlaylistUniqueId)); TInt count(aAttrs.Count()); + TUint32 volId(aRecord.ColumnInt64(EPlaylistVolumeId)); + TInt driveId = MPXDbCommonUtil::GetDriveIdMatchVolIdL(iDbManager.Fs(), volId); for (TInt i = 0; i < count; ++i) { TInt contentId(aAttrs[i].ContentId()); @@ -730,8 +738,6 @@ (attributeId & EMPXMediaGeneralDrive) || (attributeId & EMPXMediaGeneralFlags)) { - TUint32 volId(aRecord.ColumnInt64(EPlaylistVolumeId)); - TInt driveId = MPXDbCommonUtil::GetDriveIdMatchVolIdL(iDbManager.Fs(), volId); // LTAN-7GH6BZ, crash if eject memory card when adding song to existing playlist // due to special timing issue, it is possible drive number is -1 and create a @@ -798,22 +804,27 @@ } // end if contentId == KMPXMediaIdGeneral } // end for + TInt plSongCount(0); + TInt plSongDuration(0); if (countRequested) { - TInt count = iPlaylistSongs->CountL(playlistId); + if (driveId >= 0) + { + //valid disk + iObserver.HandlePlaylistInfoL(playlistId, plSongCount, plSongDuration); + } aMedia.SetTObjectValueL(KMPXMediaGeneralCount, - count ); + plSongCount ); MPX_DEBUG1(" EMPXMediaGeneralCount"); - MPX_DEBUG2(" Count[%d]", count); + MPX_DEBUG2(" Count[%d]", plSongCount); } if (durationRequested) { - TInt duration = iObserver.HandlePlaylistDurationL(playlistId); - aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, duration); + aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, plSongDuration); MPX_DEBUG1(" EMPXMediaGeneralDuration"); - MPX_DEBUG2(" Duration[%d]", duration); + MPX_DEBUG2(" Duration[%d]", plSongDuration); } aMedia.SetTObjectValueL(KMPXMediaGeneralType, EMPXItem); diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplaylistsongs.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplaylistsongs.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplaylistsongs.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -120,7 +120,12 @@ TInt aDriveId) { MPX_FUNC("CMPXDbPlaylistSongs::AddSongL"); - return AddSongL(aPlaylistId, CountL(aPlaylistId), aMedia, aDriveId); + TInt count(0); + if (aDriveId >= 0) + { + count = CountL(aPlaylistId, aDriveId); + } + return AddSongL(aPlaylistId, count, aMedia, aDriveId); } // ---------------------------------------------------------------------------- @@ -631,10 +636,11 @@ // ---------------------------------------------------------------------------- // TInt CMPXDbPlaylistSongs::CountL( - TUint32 aPlaylistId) + TUint32 aPlaylistId, + TInt aDriveId) { MPX_FUNC("CMPXDbPlaylist::CountL"); - return ExecuteSumQueryL(KQueryPlaylistSongsCount, aPlaylistId); + return ExecuteSumExQueryL(KQueryPlaylistSongsCount, aPlaylistId, aDriveId); } // ---------------------------------------------------------------------------- diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/viewplugins/plugins/podcastplaybackviewplugin/data/101ffcb9.rss --- a/mpxplugins/viewplugins/plugins/podcastplaybackviewplugin/data/101ffcb9.rss Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/viewplugins/plugins/podcastplaybackviewplugin/data/101ffcb9.rss Fri Feb 19 22:48:30 2010 +0200 @@ -70,7 +70,6 @@ opaque_data = "

0x101FFC06;0x101FFC3C

" "0x101FFCA0;" "0x102072C3;" - "0x0003" ""EMPXViewPluginPriorityLowest""; } }; diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewimp.cpp --- a/mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewimp.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewimp.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -107,7 +107,6 @@ #include #include #include // KFindInMShopKeyInValid -#include #include // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode @@ -625,29 +624,24 @@ TInt usbStatus; RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus); - - // if object doesn't exist or the usb doesn't connect - if(( retval2 != KErrAlreadyExists ) - || ( usbStatus != KUsbPersonalityIdPCSuite - || usbStatus != KUsbPersonalityIdMS - || usbStatus != KUsbPersonalityIdPTP - || usbStatus != KUsbPersonalityIdMTP - || usbStatus != KUsbPersonalityIdPCSuiteMTP )) - { + // Whenever usb is connected + if ( usbStatus == KUsbPersonalityIdMTP + || usbStatus == KUsbPersonalityIdMS + || usbStatus == KUsbPersonalityIdPTP + || usbStatus == KUsbPersonalityIdPCSuiteMTP + || usbStatus == KUsbPersonalityIdPCSuite ) + { RProperty::Set( KMPXViewPSUid, - KMPXUSBUnblockingPSStatus, + KMPXUSBUnblockingPSStatus, + EMPXUSBUnblockingPSStatusActive); + } + else + { + RProperty::Set( KMPXViewPSUid, + KMPXUSBUnblockingPSStatus, EMPXUSBUnblockingPSStatusUninitialized ); - } - // if usb mode is in MTP mode or pc suite mode - else if ( usbStatus == KUsbPersonalityIdMTP - || usbStatus == KUsbPersonalityIdPCSuiteMTP - || usbStatus == KUsbPersonalityIdPCSuite ) - { - RProperty::Set( KMPXViewPSUid, - KMPXUSBUnblockingPSStatus, - EMPXUSBUnblockingPSStatusActive ); - } - } + } + } // --------------------------------------------------------------------------- // Delete the selected items @@ -6031,6 +6025,7 @@ aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdGoToNowPlaying, ETrue ); } break; } diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/viewplugins/views/collectionviewhg/group/mpxcollectionviewhg.mmp --- a/mpxplugins/viewplugins/views/collectionviewhg/group/mpxcollectionviewhg.mmp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionviewhg/group/mpxcollectionviewhg.mmp Fri Feb 19 22:48:30 2010 +0200 @@ -101,7 +101,9 @@ LIBRARY featmgr.lib // Cover UI end +#ifdef IAD_INCLUDE_BACKSTEPPING LIBRARY mpxbacksteppingutility.lib +#endif // IAD_INCLUDE_BACKSTEPPING // Added by Harri for Hurriganes MediaWall mod LIBRARY ws32.lib diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h --- a/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h Fri Feb 19 22:48:30 2010 +0200 @@ -53,7 +53,11 @@ class CMediatorCommandInitiator; class CSendUi; class CUpnpCopyCommand; + +#ifdef BACKSTEPPING_INCLUDED class MMPXBackSteppingUtility; +#endif // BACKSTEPPING_INCLUDED + class MMPXCollectionUtility; class MMPXPlaybackUtility; class MMPXPlayerManager; @@ -847,6 +851,8 @@ void OpenGenreL(); void OpenPodcastsL(); + static TInt IADCheckTimerCallBack(TAny* aHgViewObject); //directly called + void StartCheckingforIADUpdates(); //indirectly called private: // Data @@ -939,7 +945,10 @@ TBool iPodcast; #endif // __ENABLE_PODCAST_IN_MUSIC_MENU +#ifdef BACKSTEPPING_INCLUDED MMPXBackSteppingUtility* iBackSteppingUtility; + TBool iActivateBackStepping; +#endif // BACKSTEPPING_INCLUDED TBool iUSBOnGoing; TBool iInAlbumArtDialog; @@ -967,10 +976,12 @@ CEikProgressInfo* iProgressInfo; TBool iIsAddingToPlaylist; // flag used to handle the return by adding songs incrementally CUpnpCopyCommand* iUpnpCopyCommand; - TBool iActivateBackStepping; + TBool iOpeningNote; // Waitnote is opening TBool iMarkedAll; TBool iFirstIncrementalBatch; + + CPeriodic* iTimer; }; #endif // C_CMPXCOLLECTIONVIEWHGIMP_H diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp --- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -80,12 +80,13 @@ #include #include #include +#ifdef BACKSTEPPING_INCLUDED #include +#endif // BACKSTEPPING_INCLUDED #include #include #include // KFindInMShopKeyInValid -#include // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode #include @@ -162,6 +163,7 @@ const TInt KMPXCollectionArtistAlbum( 3 ); const TInt KMPXCollectionGenre( 5 ); +const TInt KMPXTimeoutTimer = 1000000; // 1 second // ======== MEMBER FUNCTIONS ======== @@ -269,10 +271,20 @@ delete iMediaRecognizer; } + if ( iTimer ) + { + if ( iTimer->IsActive() ) + iTimer->Cancel(); + + delete iTimer; + iTimer = NULL; + } +#ifdef BACKSTEPPING_INCLUDED if( iBackSteppingUtility ) { iBackSteppingUtility->Close(); } +#endif // BACKSTEPPING_INCLUDED if ( iResourceOffset ) { @@ -389,6 +401,8 @@ iViewUtility->AddObserverL( this ); iBottomIndex = new (ELeave) CArrayFixFlat( 1 ); + iTimer = CPeriodic::NewL( CActive::EPriorityIdle ); + iCommonUiHelper = CMPXCommonUiHelper::NewL( iCollectionUtility ); iCollectionUiHelper = CMPXCollectionHelperFactory::NewCollectionUiHelperL(); @@ -509,11 +523,13 @@ iCachedSelectionIndex = new ( ELeave )CArrayFixFlat( KMPXArrayGranularity ); iIncrementalOpenUtil = CMPXCollectionOpenUtility::NewL( this ); +#ifdef BACKSTEPPING_INCLUDED // Initialize the Back Stepping Service Utility with the MPX Music Player iBackSteppingUtility = MMPXBackSteppingUtility::UtilityL(); iBackSteppingUtility->InitializeL( TUid::Uid( KMusicPlayerAppUidConstant ) ); iActivateBackStepping = EFalse; +#endif //BACKSTEPPING_INCLUDED iIsAddingToPlaylist = EFalse; @@ -595,28 +611,24 @@ RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus); - // if object doesn't exist or the usb doesn't connect - if(( retval2 != KErrAlreadyExists ) - || ( usbStatus != KUsbPersonalityIdPCSuite - || usbStatus != KUsbPersonalityIdMS - || usbStatus != KUsbPersonalityIdPTP - || usbStatus != KUsbPersonalityIdMTP - || usbStatus != KUsbPersonalityIdPCSuiteMTP )) + // Whenever usb is connected + if ( usbStatus == KUsbPersonalityIdMTP + || usbStatus == KUsbPersonalityIdMS + || usbStatus == KUsbPersonalityIdPTP + || usbStatus == KUsbPersonalityIdPCSuiteMTP + || usbStatus == KUsbPersonalityIdPCSuite ) { RProperty::Set( KMPXViewPSUid, - KMPXUSBUnblockingPSStatus, + KMPXUSBUnblockingPSStatus, + EMPXUSBUnblockingPSStatusActive); + } + else + { + RProperty::Set( KMPXViewPSUid, + KMPXUSBUnblockingPSStatus, EMPXUSBUnblockingPSStatusUninitialized ); } - // if usb mode is in MTP mode or pc suite mode - else if ( usbStatus == KUsbPersonalityIdMTP - || usbStatus == KUsbPersonalityIdPCSuiteMTP - || usbStatus == KUsbPersonalityIdPCSuite ) - { - RProperty::Set( KMPXViewPSUid, - KMPXUSBUnblockingPSStatus, - EMPXUSBUnblockingPSStatusActive ); - } - } + } // --------------------------------------------------------------------------- // Delete the selected items in TBone View @@ -4003,11 +4015,23 @@ // CEikMenuBar* menuBar( MenuBar() ); #ifdef SINGLE_CLICK_INCLUDED - iContainer->EnableMarking( EFalse ); - menuBar->SetMenuTitleResourceId( R_MPX_COLLECTION_VIEW_MENUBAR_NO_MARKING ); + if(iContainer) + { + iContainer->EnableMarking( EFalse ); + } + if(menuBar) + { + menuBar->SetMenuTitleResourceId( R_MPX_COLLECTION_VIEW_MENUBAR_NO_MARKING ); + } #else - iContainer->EnableMarking( ETrue ); + if(iContainer) + { + iContainer->EnableMarking( ETrue ); + } + if(menuBar) + { menuBar->SetMenuTitleResourceId( R_MPX_COLLECTION_VIEW_MENUBAR ); + } #endif TBool IsUSBEvent( EFalse ); if( type == EMcMsgUSBMassStorageStart || type == EMcMsgUSBMTPStart ) @@ -4189,11 +4213,13 @@ // View is not active. Ignore. return; } + #ifdef BACKSTEPPING_INCLUDED // handle deferred notification when view is in focus but not for view transitions if ( iActivateBackStepping ) { HandleBacksteppingActivation(); } + #endif // BACKSTEPPING_INCLUDED iCollectionReady = aComplete; #ifdef __ENABLE_PODCAST_IN_MUSIC_MENU @@ -4582,6 +4608,13 @@ } } + MPX_DEBUG1( "HandleOpenL CheckingTimer" ); + if ( iTimer && !iTimer->IsActive() ) + { + MPX_DEBUG1( "HandleOpenL Starting" ); + iTimer->Start( KMPXTimeoutTimer, KMPXTimeoutTimer, TCallBack( IADCheckTimerCallBack, this)); + } + MPX_PERF_CHECKPT("Collection View opened"); } @@ -5564,6 +5597,7 @@ TInt currentDepth( cpath->Levels() ); if ( currentDepth == 2 ) // 2 is the level of music main view { +#ifdef BACKSTEPPING_INCLUDED // let Back Stepping Service handle the event TInt statusInfo( KMPXBackSteppingNotConsumed ); if( iViewUtility && @@ -5580,6 +5614,7 @@ if ( statusInfo == KMPXBackSteppingNotConsumed ) // event not consumed by Back Stepping utility, handle here // +#endif // BACKSTEPPING_INCLUDED { AppUi()->HandleCommandL( aCommand ); } @@ -5989,6 +6024,7 @@ CloseWaitNoteL(); iOpeningNote = EFalse; } +#ifdef BACKSTEPPING_INCLUDED iActivateBackStepping = EFalse; MPX_DEBUG3("CMPXCollectionViewHgImp::HandleForegroundEventL - is in foreground=%d, this view=0x%x", aForeground, Id().iUid ); @@ -5998,6 +6034,7 @@ { iActivateBackStepping = ETrue; } +#endif // BACKSTEPPING_INCLUDED { CAknView::HandleForegroundEventL( aForeground ); } @@ -6010,6 +6047,7 @@ // void CMPXCollectionViewHgImp::HandleBacksteppingActivation() { +#ifdef BACKSTEPPING_INCLUDED TInt viewId( iViewUtility->ActiveViewType().iUid ); TBuf8 buf; buf.Copy( KMVPrefix ); @@ -6021,6 +6059,7 @@ ); MPX_DEBUG3("CMPXCollectionViewHgImp::HandleBacksteppingActivation - viewId=0x%x, statusInfo=%d", viewId, statusInfo ); iActivateBackStepping = EFalse; +#endif // BACKSTEPPING_INCLUDED } // --------------------------------------------------------------------------- @@ -6516,6 +6555,7 @@ aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdGoToNowPlaying, ETrue ); } break; } @@ -8086,4 +8126,40 @@ CleanupStack::PopAndDestroy( path ); } +// ----------------------------------------------------------------------------- +// CMPXCollectionViewHgImp::IADCheckTimerCallBack +// ----------------------------------------------------------------------------- +// +TInt CMPXCollectionViewHgImp::IADCheckTimerCallBack(TAny* aHgViewObject) + { + MPX_FUNC( "CMPXCollectionViewHgImp::IADCheckTimerCallBack" ); + + if (aHgViewObject) + { + CMPXCollectionViewHgImp* hgViewObject = static_cast(aHgViewObject); + hgViewObject->StartCheckingforIADUpdates(); + } + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMPXCollectionViewHgImp::StartCheckingforIADUpdates +// ----------------------------------------------------------------------------- +// +void CMPXCollectionViewHgImp::StartCheckingforIADUpdates() + { + MPX_FUNC( "CMPXCollectionViewHgImp::StartCheckingforIADUpdates" ); + + if ( iTimer ) + { + iTimer->Cancel(); + delete iTimer; + iTimer = NULL; + } + + AppUi()->HandleCommandL(EMPXCmdCheckIADUpdates); + } + + // End of File diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgplaylisthelper.cpp --- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgplaylisthelper.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgplaylisthelper.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -172,20 +172,20 @@ if (!iIsInitializing) { - if (aEnableShuffle) - { - TTime time; - time.UniversalTime(); - TInt64 seed = time.Int64(); - TInt randIndex = Math::Rand(seed) % aPath.Count(); - aPath.Set(randIndex); - } - CMPXCollectionPlaylist* playlist = CMPXCollectionPlaylist::NewL( aPath ); CleanupStack::PushL( playlist ); + + if (aEnableShuffle) + { + TTime time; + time.UniversalTime(); + TInt64 seed = time.Int64(); + TInt randIndex = Math::Rand(seed) % aPath.Count(); + aPath.Set(randIndex); + playlist->SetShuffleEnabledL( aEnableShuffle ); + iPlaybackUtility->SetL( EPbPropertyRandomMode, aEnableShuffle ); + } - playlist->SetShuffleEnabledL( aEnableShuffle ); - iPlaybackUtility->SetL( EPbPropertyRandomMode, aEnableShuffle ); iPlaybackUtility->InitL( *playlist, ETrue ); CleanupStack::PopAndDestroy( playlist ); diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp --- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -204,20 +204,15 @@ iViewUtility->AddObserverL( this ); TInt flags( 0 ); - CRepository* repository( CRepository::NewL( KCRUidMPXMPFeatures )); + CRepository* repository( CRepository::NewLC( KCRUidMPXMPFeatures )); User::LeaveIfError( repository->Get( KMPXMPLocalVariation, flags )); - delete repository; + CleanupStack::PopAndDestroy( repository ); repository = NULL; + iChangeRTForAllProfiles = static_cast( flags & KMPXChangeRTForAll ); - // Pre-load Equalizer & Audio Effects views - iViewUtility->PreLoadViewL( - TUid::Uid( KMPXPluginTypeEqualizerUid ) ); - iViewUtility->PreLoadViewL( - TUid::Uid( KMPXPluginTypeAudioEffectsUid ) ); - iLayout = new (ELeave) CMPXCommonPlaybackViewLayout(); iCollectionUtility = MMPXCollectionUtility::NewL( this ); @@ -2026,7 +2021,7 @@ } case EAknSoftkeyBack: { - AppUi()->HandleCommandL( EMPXCmdGotoCollection ); + #ifdef BACKSTEPPING_INCLUDED // let Back Stepping Service handle the event TInt statusInfo( KMPXBackSteppingNotConsumed ); diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/viewplugins/views/pdsbplaybackview/src/mpxpdsbplaybackviewimp.cpp --- a/mpxplugins/viewplugins/views/pdsbplaybackview/src/mpxpdsbplaybackviewimp.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/viewplugins/views/pdsbplaybackview/src/mpxpdsbplaybackviewimp.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -887,13 +887,16 @@ TMPXPlaybackState state = iPlaybackUtility->StateL(); CAknButton* pausePlayControl; pausePlayControl = (CAknButton*)(toolbar->ComponentControl( 1 )); - if ((state == EPbStateInitialising) || (state == EPbStatePlaying)) + if (pausePlayControl) { - pausePlayControl->SetCurrentState(0, ETrue); - } - else - { - pausePlayControl->SetCurrentState(1, ETrue); + if( (state == EPbStateInitialising) || (state == EPbStatePlaying) ) + { + pausePlayControl->SetCurrentState(0, ETrue); + } + else + { + pausePlayControl->SetCurrentState(1, ETrue); + } } if ( state == EPbStatePlaying || state == EPbStatePaused || diff -r 2a40e88564c8 -r 13afc0e517bd mpxplugins/viewplugins/views/waitnotedialog/src/mpxscanningdialog.cpp --- a/mpxplugins/viewplugins/views/waitnotedialog/src/mpxscanningdialog.cpp Tue Feb 02 00:09:33 2010 +0200 +++ b/mpxplugins/viewplugins/views/waitnotedialog/src/mpxscanningdialog.cpp Fri Feb 19 22:48:30 2010 +0200 @@ -332,7 +332,11 @@ if( op == EMcMsgRefreshEnd ) { MPX_DEBUG1("CMPXScanningWaitDialog::HandleCollectionMessageL refresh end"); - iNumItemsAdded = mmcCount; + // Do not reset iNumItemsAdded while KErrLocked or KErrDiskFull. + if( data != KErrLocked && data != KErrDiskFull ) + { + iNumItemsAdded = mmcCount; + } switch ( iWaitNoteType ) { case EMPXScanningNote: diff -r 2a40e88564c8 -r 13afc0e517bd musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/hsps/00/manifest.dat --- a/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/hsps/00/manifest.dat Tue Feb 02 00:09:33 2010 +0200 +++ b/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/hsps/00/manifest.dat Fri Feb 19 22:48:30 2010 +0200 @@ -1,5 +1,5 @@ - + qhd_tch diff -r 2a40e88564c8 -r 13afc0e517bd musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/00/MusicWidget.css --- a/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/00/MusicWidget.css Tue Feb 02 00:09:33 2010 +0200 +++ b/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/00/MusicWidget.css Fri Feb 19 22:48:30 2010 +0200 @@ -95,14 +95,6 @@ } -box:focus - { - touchfeedbackdown: basic; - touchfeedbackdrag: sensitive; - focus-background:"SKIN(268458534 9896)"; - } - - image { margin-left: auto; diff -r 2a40e88564c8 -r 13afc0e517bd musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/00/MusicWidget.xml --- a/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/00/MusicWidget.xml Tue Feb 02 00:09:33 2010 +0200 +++ b/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/00/MusicWidget.xml Fri Feb 19 22:48:30 2010 +0200 @@ -13,14 +13,7 @@ - - - - - - - @@ -40,14 +33,7 @@ - - - - - - - @@ -85,14 +71,7 @@ - - - - - - - @@ -111,14 +90,7 @@ - - - - - - - @@ -140,14 +112,7 @@ - - - - - - - diff -r 2a40e88564c8 -r 13afc0e517bd musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/37/MusicWidget.css --- a/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/37/MusicWidget.css Tue Feb 02 00:09:33 2010 +0200 +++ b/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/37/MusicWidget.css Fri Feb 19 22:48:30 2010 +0200 @@ -95,15 +95,6 @@ display: none; } - -box:focus - { - touchfeedbackdown: basic; - touchfeedbackdrag: sensitive; - focus-background:"SKIN(268458534 9896)"; - } - - image { margin-left: auto; diff -r 2a40e88564c8 -r 13afc0e517bd musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/50/MusicWidget.css --- a/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/50/MusicWidget.css Tue Feb 02 00:09:33 2010 +0200 +++ b/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/50/MusicWidget.css Fri Feb 19 22:48:30 2010 +0200 @@ -95,15 +95,6 @@ display: none; } - -box:focus - { - touchfeedbackdown: basic; - touchfeedbackdrag: sensitive; - focus-background:"SKIN(268458534 9896)"; - } - - image { margin-left: auto; diff -r 2a40e88564c8 -r 13afc0e517bd musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/57/MusicWidget.css --- a/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/57/MusicWidget.css Tue Feb 02 00:09:33 2010 +0200 +++ b/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/57/MusicWidget.css Fri Feb 19 22:48:30 2010 +0200 @@ -96,14 +96,6 @@ } -box:focus - { - touchfeedbackdown: basic; - touchfeedbackdrag: sensitive; - focus-background:"SKIN(268458534 9896)"; - } - - image { margin-left: auto; diff -r 2a40e88564c8 -r 13afc0e517bd musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/94/MusicWidget.css --- a/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/94/MusicWidget.css Tue Feb 02 00:09:33 2010 +0200 +++ b/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/94/MusicWidget.css Fri Feb 19 22:48:30 2010 +0200 @@ -96,14 +96,6 @@ } -box:focus - { - touchfeedbackdown: basic; - touchfeedbackdrag: sensitive; - focus-background:"SKIN(268458534 9896)"; - } - - image { margin-left: auto; diff -r 2a40e88564c8 -r 13afc0e517bd musicplayer_plat/mpx_music_player_app_api/inc/mpxappui.hrh --- a/musicplayer_plat/mpx_music_player_app_api/inc/mpxappui.hrh Tue Feb 02 00:09:33 2010 +0200 +++ b/musicplayer_plat/mpx_music_player_app_api/inc/mpxappui.hrh Fri Feb 19 22:48:30 2010 +0200 @@ -54,7 +54,8 @@ EMPXCmdGotoCollection, EMPXCmdVolumeMute, EMPXCmdVolumeUnMute, - EMPXCmdCancelReorder + EMPXCmdCancelReorder, + EMPXCmdCheckIADUpdates }; #endif // MPXAPPUI_HRH diff -r 2a40e88564c8 -r 13afc0e517bd musicplayer_plat/mpx_music_player_app_api/inc/mpxinternalcrkeys.h --- a/musicplayer_plat/mpx_music_player_app_api/inc/mpxinternalcrkeys.h Tue Feb 02 00:09:33 2010 +0200 +++ b/musicplayer_plat/mpx_music_player_app_api/inc/mpxinternalcrkeys.h Fri Feb 19 22:48:30 2010 +0200 @@ -49,6 +49,10 @@ // +128 to disable podcasting #define KMPXDisablePodcastingOption 0x0008 +// Feature to enable RAM disk database copying +#define KMPXEnableRAMDisk 0x00f0 + +#define KMAXAllowedDiskSpaceToCopy 0x9 // Feature to enable Go To MusicShop option in option menus. #define KMPXEnableGoToMusicShopOption 0x0010 diff -r 2a40e88564c8 -r 13afc0e517bd musicplayer_plat/mpx_music_wap_adapter_cenrep_api/group/bld.inf --- a/musicplayer_plat/mpx_music_wap_adapter_cenrep_api/group/bld.inf Tue Feb 02 00:09:33 2010 +0200 +++ b/musicplayer_plat/mpx_music_wap_adapter_cenrep_api/group/bld.inf Fri Feb 19 22:48:30 2010 +0200 @@ -24,4 +24,4 @@ PRJ_EXPORTS -../inc/MusicWapCenRepKeys.h APP_LAYER_PLATFORM_EXPORT_PATH(MusicWapCenRepKeys.h) +//../inc/MusicWapCenRepKeys.h APP_LAYER_PLATFORM_EXPORT_PATH(MusicWapCenRepKeys.h)