Revision: 201003 RCL_3 PDK_3.0.h
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 22:48:30 +0200
branchRCL_3
changeset 9 13afc0e517bd
parent 5 2a40e88564c8
child 11 943ff5625028
Revision: 201003 Kit: 201007
inc/musicplayerbldvariant.hrh
mpxmusicplayer/Conf/mpxmusicplayer.confml
mpxmusicplayer/Conf/mpxmusicplayer_101FFCD0.crml
mpxmusicplayer/activeidle/aiplayerplugin/data/aiplayerplugin.rss
mpxmusicplayer/activeidle/aiplayerplugin/data/aiplayerpluginresource.rss
mpxmusicplayer/activeidle/aiplayerplugin/group/aiplayerplugin.mmp
mpxmusicplayer/activeidle/aiplayerplugin/group/bld.inf
mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerplugin.h
mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerplugincontentmodel.h
mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerpluginengine.h
mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerpluginengineobserver.h
mpxmusicplayer/activeidle/aiplayerplugin/inc/aiplayerpluginuids.hrh
mpxmusicplayer/activeidle/aiplayerplugin/loc/aiplayerplugin.loc
mpxmusicplayer/activeidle/aiplayerplugin/src/aiplayerplugin.cpp
mpxmusicplayer/activeidle/aiplayerplugin/src/aiplayerpluginengine.cpp
mpxmusicplayer/activeidle/group/bld.inf
mpxmusicplayer/activeidle/rom/mpxactiveidleplugin.iby
mpxmusicplayer/activeidle/rom/mpxactiveidlepluginrsc.iby
mpxmusicplayer/app/src/mpxappui.cpp
mpxmusicplayer/cenrep/101ffcd0.txt
mpxmusicplayer/commonui/data/mpxcommonui.rss
mpxmusicplayer/commonui/src/mpxcommonuihelper.cpp
mpxmusicplayer/group/bld.inf
mpxplugins/serviceplugins/collectionplugins/inc/mpxdbmanager.h
mpxplugins/serviceplugins/collectionplugins/inc/mpxdbtable.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/bwinscw/mpxsqlitedbcommonu.def
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/eabi/mpxsqlitedbcommonu.def
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/group/mpxsqlitedbcommon.mmp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbtable.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/group/mpxsqlitedbhgplugin.mmp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbplaylist.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbplaylistsongs.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplaylist.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplaylistsongs.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/group/mpxsqlitedbplugin.mmp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbhandler.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbplaylist.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbplaylistsongs.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/inc/mpxdbpluginqueries.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbhandler.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbmusic.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplaylist.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplaylistsongs.cpp
mpxplugins/viewplugins/plugins/podcastplaybackviewplugin/data/101ffcb9.rss
mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewimp.cpp
mpxplugins/viewplugins/views/collectionviewhg/group/mpxcollectionviewhg.mmp
mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h
mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp
mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgplaylisthelper.cpp
mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp
mpxplugins/viewplugins/views/pdsbplaybackview/src/mpxpdsbplaybackviewimp.cpp
mpxplugins/viewplugins/views/waitnotedialog/src/mpxscanningdialog.cpp
musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/hsps/00/manifest.dat
musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/00/MusicWidget.css
musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/00/MusicWidget.xml
musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/37/MusicWidget.css
musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/50/MusicWidget.css
musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/57/MusicWidget.css
musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/xuikon/94/MusicWidget.css
musicplayer_plat/mpx_music_player_app_api/inc/mpxappui.hrh
musicplayer_plat/mpx_music_player_app_api/inc/mpxinternalcrkeys.h
musicplayer_plat/mpx_music_wap_adapter_cenrep_api/group/bld.inf
--- 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
Binary file mpxmusicplayer/Conf/mpxmusicplayer.confml has changed
Binary file mpxmusicplayer/Conf/mpxmusicplayer_101FFCD0.crml has changed
--- 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 <aicontentpublisheruid.hrh>
-#include <ecom/registryinfov2.rh>
-#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;
-                    }
-                };
-            }
-        };
-    }
--- 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 <avkon.rh>
-#include <eikon.rh>
-#include <aiplayerplugin.loc>
-
-RESOURCE RSS_SIGNATURE { }
-RESOURCE TBUF { buf=""; }
-
-// ---------------------------------------------------------------------------
-// ?resource_name
-// ?description
-// ---------------------------------------------------------------------------
-//
-RESOURCE TBUF r_mpx_qtn_aipp_unknown_artist
-    {
-    buf = qtn_aipp_unknown_artist;
-    }
-
--- 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 <platform_paths.hrh>
-#include <data_caging_paths.hrh>
-
-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
--- 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 <bldvariant.hrh>
-#include <platform_paths.hrh>
-
-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
-
--- 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 <aicontentpublisher.h>
-#include <aicontentobserver.h>
-#include <aipropertyextension.h>
-#include <aieventhandlerextension.h>
-
-#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<MAiContentObserver>   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
-
-
--- 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 <aicontentmodel.h>
-#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
--- 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 <e32base.h>
-#include <mpxplaybackobserver.h>
-
-#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
--- 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 <e32std.h>
-
-/**
- *  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
--- 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
--- 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"
--- 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 <ecom/implementationproxy.h>
-#include <aiutility.h>
-
-#include <AknUtils.h>
-#include <StringLoader.h>
-#include <bautils.h>
-#include <avkon.rsg>
-
-#include <data_caging_path_literals.hrh> 	// KDC_APP_BITMAP_DIR
-#include <apgcli.h>           				// RApaLsSession
-#include <apacmdln.h>         				// CApaCommandLine
-#include <apgtask.h>
-
-#include <mpxlog.h>
-#include <mpxconstants.h> 					// KAppUidMusicPlayer
-#include <mpxparameter.h>
-#include <mpxmusicplayerviewplugin.hrh>
-#include <aiplayerpluginresource.rsg>
-
-#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<MAiPropertyExtension*>(this);
-        }
-    else if (aUid == KExtensionUidEventHandler)
-        {
-        return static_cast<MAiEventHandlerExtension*>(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<MAiContentItemIterator*>(iContent);
-
-        case EAiPublisherResources:
-        return static_cast<MAiContentItemIterator*>(iResources);
-
-        case EAiPublisherEvents:
-        return static_cast<MAiContentItemIterator*>(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<const TAiPublisherInfo*>(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<CAiPlayerPlugin*> (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<TInt32>(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<TInt32>(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<TInt32>(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<TInt32>(this));
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CAiPlayerPlugin::PlaybackPositionChanged
-// -----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::PlaybackPositionChanged( TInt aPosition )
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::PlaybackPositionChanged");
-
-    TBuf<KMPXTimeIndicatorLength> elapsed;
-    TBuf<KMPXTimeIndicatorLength> 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<KMPXTimeIndicatorLength> 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<TInt32>(this));
-
-            //for (Classic view)
-            observer->Publish(*this,
-                           EAiPlplContentElapsedTime,
-                           iElapsedTime,
-                           1);
-
-            //for (Navibar view)
-            observer->Publish(*this,
-                           EAiPlplContentDurationCaption,
-                           iDuration,
-                           1);
-
-            observer->Commit(reinterpret_cast<TInt32>(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<TInt32>(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<TInt32>(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;
-}
-
--- 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 <mpxplaybackutility.h>
-#include <mpxplaybackmessage.h>
-#include <mpxmedia.h>
-#include <mpxmediageneraldefs.h>
-#include <mpxmediamusicdefs.h>
-#include <mpxmessagegeneraldefs.h>
-#include <mpxplaybackmessagedefs.h>
-#include <mpxlog.h>
-
-#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<TMPXMessageId>( KMPXMessageGeneralId ) );
-    if ( KMPXMessageGeneral == id )
-        {
-        TInt event( aMessage.ValueTObjectL<TInt>( KMPXMessageGeneralEvent ) );
-        MPX_DEBUG2("CAiPlayerPluginEngine::DoHandlePlaybackMessageL(%d)", event );
-        switch ( event )
-            {
-            case TMPXPlaybackMessage::EPropertyChanged:
-                {
-                TInt error( KErrNone );
-                DoHandlePropertyL(
-                    aMessage.ValueTObjectL<TInt>( KMPXMessageGeneralType ),
-                    aMessage.ValueTObjectL<TInt>( KMPXMessageGeneralData ),
-                    error );
-                break;
-                }
-            case TMPXPlaybackMessage::EStateChanged:
-                {
-				TMPXPlaybackState state( aMessage.ValueTObjectL<TMPXPlaybackState>( 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<TInt>( KMPXMessageGeneralType ) );
-                break;
-                }
-            case TMPXPlaybackMessage::EActivePlayerChanged:
-                {
-                MPX_DEBUG3("CAiPlayerPluginEngine::HandlePlaybackMessageL - EActivePlayerChanged(%d, %d)",
-                    aMessage.ValueTObjectL<TInt>( KMPXMessageGeneralType ), 
-                    aMessage.ValueTObjectL<TInt>( 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<TMPXAttribute> attrs;
-        CleanupClosePushL(attrs);
-        attrs.Append( KMPXMediaGeneralUri );
-        attrs.Append( KMPXMediaGeneralTitle );
-        attrs.Append( KMPXMediaMusicArtist );
-        s->MediaL( attrs.Array(), *this );
-        CleanupStack::PopAndDestroy( &attrs );
-        }
-    }
-//  End of File
--- 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 <platform_paths.hrh>
-
-#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)
--- 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 <bldvariant.hrh>
-#include <data_caging_paths_for_iby.hrh>
-
-#ifdef RD_CUSTOMIZABLE_AI
-ECOM_PLUGIN( aiplayerplugin2.dll, aiplayerplugin2.rsc )
-#endif // RD_CUSTOMIZABLE_AI
-
-#endif // MPXACTIVEIDLEPLUGIN_IBY
-
-//  End of File  
--- 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_caging_paths_for_iby.hrh>
-
-data=DATAZ_\APP_RESOURCE_DIR\aiplayerpluginresource.rsc     APP_RESOURCE_DIR\aiplayerpluginresource.rsc
-
-#endif  // MPXACTIVEIDLEPLUGINRSC_IBY
--- 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:
Binary file mpxmusicplayer/cenrep/101ffcd0.txt has changed
--- 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
--- 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 ) )
                     {
--- 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 <platform_paths.hrh>
 #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"
--- 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<const TDesC> 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<TSqlStatementState> iPreparedStatements;
         RPointerArray<RSqlStatement> 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
--- 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<TMPXAttribute>& 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;
--- 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<class TMPXAttribute> 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<class TMPXAttribute> const &, class CMPXMedia &, class TDesC16 const &)
-	?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMedia@@ABVTDesC16@@H@Z @ 37 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray<class TMPXAttribute> const &, class CMPXMedia &, class TDesC16 const &, int)
-	?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@22@Z @ 38 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray<class TMPXAttribute> 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<class TMPXAttribute> 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<class TMPXAttribute> 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<class TMPXAttribute> 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<class TMPXAttribute> 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<class TMPXAttribute> const &, class CMPXMediaArray &, class TDesC16 const &)
-	?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@H@Z @ 44 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray<class TMPXAttribute> const &, class CMPXMediaArray &, class TDesC16 const &, int)
-	?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@HH@Z @ 45 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray<class TMPXAttribute> const &, class CMPXMediaArray &, class TDesC16 const &, int, int)
-	?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@HHI@Z @ 46 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray<class TMPXAttribute> 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<class TMPXAttribute> const &, class CMPXMediaArray &, int, class TDesC16 const &)
-	?ExecuteQueryL@CMPXDbManager@@QAAXHV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 48 NONAME ; void CMPXDbManager::ExecuteQueryL(int, class TRefByValue<class TDesC16 const >, ...)
-	?ExecuteSelectQueryL@CMPXDbManager@@QAA?AVRSqlStatement@@HV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 49 NONAME ; class RSqlStatement CMPXDbManager::ExecuteSelectQueryL(int, class TRefByValue<class TDesC16 const >, ...)
-	?ExecuteSelectQueryL@CMPXDbManager@@QAA?AVRSqlStatement@@V?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 50 NONAME ; class RSqlStatement CMPXDbManager::ExecuteSelectQueryL(class TRefByValue<class TDesC16 const >, ...)
-	?ExecuteSelectQueryL@CMPXDbManager@@QAAAAVRSqlStatement@@IABVTDesC16@@HV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 51 NONAME ; class RSqlStatement & CMPXDbManager::ExecuteSelectQueryL(unsigned int, class TDesC16 const &, int, class TRefByValue<class TDesC16 const >, ...)
-	?ExecuteSelectQueryL@CMPXDbManager@@QAAAAVRSqlStatement@@IHHV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 52 NONAME ; class RSqlStatement & CMPXDbManager::ExecuteSelectQueryL(unsigned int, int, int, class TRefByValue<class TDesC16 const >, ...)
-	?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<class TMPXAttribute> const &, class RArray<int> &)
-	?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<int>)
-	?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<int> &)
-	?ReadMenuArrayLC@CMPXResource@@QAEPAVCDesC16ArrayFlat@@HAAV?$RArray@H@@@Z @ 96 NONAME ; class CDesC16ArrayFlat * CMPXResource::ReadMenuArrayLC(int, class RArray<int> &)
-	?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<class TDesC16 const >, ...)
+	?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMedia@@ABVTDesC16@@@Z @ 14 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray<class TMPXAttribute> 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<int> &)
+	?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<class TMPXAttribute> 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<class TDesC16 const >, ...)
+	?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<class TMPXAttribute> const &, class RArray<int> &)
+	?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<class TDesC16 const >, ...)
+	?UpdateMediaL@CMPXDbTable@@MAEXAAVRSqlStatement@@ABV?$TArray@VTMPXAttribute@@@@AAVCMPXMedia@@@Z @ 36 NONAME ; void CMPXDbTable::UpdateMediaL(class RSqlStatement &, class TArray<class TMPXAttribute> 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<class TDesC16 const >, ...)
+	?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<class TMPXAttribute> 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<class TMPXAttribute> const &, class CMPXMediaArray &, class TDesC16 const &, int)
+	?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@@Z @ 46 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray<class TMPXAttribute> const &, class CMPXMediaArray &, class TDesC16 const &)
+	?InitDatabasesL@CMPXDbManager@@QAEXV?$RArray@H@@@Z @ 47 NONAME ; void CMPXDbManager::InitDatabasesL(class RArray<int>)
+	?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<class TDesC16 const >, ...)
+	?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<class TMPXAttribute> const &, class CMPXMediaArray &, class TDesC16 const &)
+	?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@2HHI@Z @ 56 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray<class TMPXAttribute> 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<class TMPXAttribute> 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<class TMPXAttribute> 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<class TMPXAttribute> const &, class TMPXAttribute const &)
+	?ExecuteMediaQueryL@CMPXDbTable@@IAEXABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@HHI@Z @ 73 NONAME ; void CMPXDbTable::ExecuteMediaQueryL(class TArray<class TMPXAttribute> 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<class TMPXAttribute> 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<class TDesC16 const >, ...)
+	?ReadMenuArrayL@CMPXResource@@QAEPAVCDesC16ArrayFlat@@HAAV?$RArray@H@@@Z @ 101 NONAME ; class CDesC16ArrayFlat * CMPXResource::ReadMenuArrayL(int, class RArray<int> &)
+	?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<class TMPXAttribute> 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<class TMPXAttribute> const &, class CMPXMediaArray &, class TDesC16 const &, int)
-	?ExecuteMediaQueryOnDriveL@CMPXDbTable@@IAEXHABV?$TArray@VTMPXAttribute@@@@AAVCMPXMediaArray@@ABVTDesC16@@@Z @ 121 NONAME ; void CMPXDbTable::ExecuteMediaQueryOnDriveL(int, class TArray<class TMPXAttribute> const &, class CMPXMediaArray &, class TDesC16 const &)
-	?ExecuteSelectQueryOnAllDrivesL@CMPXDbManager@@QAA?AVRSqlStatement@@HV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 122 NONAME ; class RSqlStatement CMPXDbManager::ExecuteSelectQueryOnAllDrivesL(int, class TRefByValue<class TDesC16 const >, ...)
+	?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<class TMPXAttribute> 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<class TMPXAttribute> 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<class TMPXAttribute> 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)
 
--- 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 ; #<TI>#
-	_ZTI12CMPXResource @ 128 NONAME ; #<TI>#
-	_ZTI13CMPXDbManager @ 129 NONAME ; #<TI>#
-	_ZTV11CMPXDbTable @ 130 NONAME ; #<VT>#
-	_ZTV12CMPXResource @ 131 NONAME ; #<VT>#
-	_ZTV13CMPXDbManager @ 132 NONAME ; #<VT>#
-	_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
 
--- 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/ 
--- 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);
--- 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 <sqlrowsetutil.h>
 //#endif
 #include <sysutil.h>
+#ifdef __RAMDISK_PERF_ENABLE
+#include <centralrepository.h>
+#include <BAUTILS.H>  
+#include <mpxinternalcrkeys.h>
+#endif //__RAMDISK_PERF_ENABLE
 
 #include <mpxlog.h>
 
@@ -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<TBool>( 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 = <disk free space> / 2 MB;
+//        metadataSize = totalNumOfSongsCanFit * 3000B 
+//        estimatedDBSize = metadataSize + <orig DB size>;
+//        dummyDBSize = MIN (iMaximumAllowedRAMDiskSpaceToCopy , estimatedDBSize )
+
+//b) Harvesting case
+//-------------------
+//        totalNumOfSongsCanFit = <disk total size>/ 2 MB
+//        metadataSize = totalNumOfSongsCanFit * 3000B 
+//        estimatedSize = metadataSize+ <orig DB size>
+//        freeDiskSpace = <disk free space> - 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
--- 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
 // ----------------------------------------------------------------------------
 //
--- 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
--- 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:
 
--- 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
     {
--- 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:
 
--- 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");
--- 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<TMPXAttribute> 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<TInt>(KMPXMediaGeneralDuration);
+            }
+        }
+
+    CleanupStack::PopAndDestroy(mediaArray);
+    CleanupStack::PopAndDestroy(&attributes);        
+    }
 
 TInt CMPXDbHandler::HandleGetAlbumsCountForArtistL(TUint32 aArtistId)
 	{
--- 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))
                             {
--- 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<TInt>(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<TInt>(KMPXMediaGeneralDuration, duration);
-
-		MPX_DEBUG1("    EMPXMediaGeneralDuration");
-		MPX_DEBUG2("	Duration[%d]", duration);
+        aMedia.SetTObjectValueL<TInt>(KMPXMediaGeneralDuration, plSongDuration);
+		
+        MPX_DEBUG1("    EMPXMediaGeneralDuration");
+        MPX_DEBUG2("	Duration[%d]", plSongDuration);				
 		}
 
     aMedia.SetTObjectValueL<TMPXGeneralType>(KMPXMediaGeneralType, EMPXItem);
--- 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);
     }
 
 // ----------------------------------------------------------------------------
--- 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);
--- 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
--- 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:
 
--- 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
     {
--- 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:
 
--- 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");
--- 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<TMPXAttribute> 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<TInt>(KMPXMediaGeneralDuration);
+            }
+        }
+
+    CleanupStack::PopAndDestroy(mediaArray);
+    CleanupStack::PopAndDestroy(&attributes);        
+    }
 
 TInt CMPXDbHandler::HandleGetAlbumsCountForArtistL(TUint32 aArtistId)
 	{
--- 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))
                             {
--- 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<TInt>(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<TInt>(KMPXMediaGeneralDuration, duration);
+        aMedia.SetTObjectValueL<TInt>(KMPXMediaGeneralDuration, plSongDuration);
 		
 		MPX_DEBUG1("    EMPXMediaGeneralDuration");
-		MPX_DEBUG2("	Duration[%d]", duration);				
+        MPX_DEBUG2("	Duration[%d]", plSongDuration);				
 		}
 
     aMedia.SetTObjectValueL<TMPXGeneralType>(KMPXMediaGeneralType, EMPXItem);
--- 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);
     }
 
 // ----------------------------------------------------------------------------
--- 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 = "<p>0x101FFC06;0x101FFC3C</p>"
                                   "<t>0x101FFCA0;</t>"
                                   "<a>0x102072C3;</a>"
-                                  "<f>0x0003</f>"
                                   "<i>"EMPXViewPluginPriorityLowest"</i>";
                     }
                 };
--- 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 <e32property.h>
 #include <mpxfindinmusicshop.h>
 #include <mpxfindinmusicshopcommon.h>  // KFindInMShopKeyInValid
-#include <MusicWapCenRepKeys.h>
 #include <mpxcollectionopenutility.h>
 
 // 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;
             }
--- 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
--- 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
--- 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 <mpxcollectioncommanddefs.h>
 #include <mpxviewpluginmanager.h>
 #include <mpxviewplugin.h>
+#ifdef BACKSTEPPING_INCLUDED
 #include <mpxbacksteppingutility.h>
+#endif // BACKSTEPPING_INCLUDED
 #include <mpxcollectionopenutility.h>
 
 #include <mpxfindinmusicshop.h>
 #include <mpxfindinmusicshopcommon.h>  // KFindInMShopKeyInValid
-#include <MusicWapCenRepKeys.h>
 
 // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode
 #include <UsbWatcherInternalPSKeys.h>
@@ -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<TInt>( 1 );
 
+    iTimer = CPeriodic::NewL( CActive::EPriorityIdle );
+
     iCommonUiHelper = CMPXCommonUiHelper::NewL( iCollectionUtility );
     iCollectionUiHelper = CMPXCollectionHelperFactory::NewCollectionUiHelperL();
 
@@ -509,11 +523,13 @@
     iCachedSelectionIndex = new ( ELeave )CArrayFixFlat<TInt>( 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<KMVPrefixLen + KMaxIntLen> 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<CMPXCollectionViewHgImp*>(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
--- 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 );
 
--- 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<TBool>( 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 );
--- 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 ||
--- 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:
--- 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 @@
 <?xml version="1.0"?>
-<package version="1.0">
+<package version="2.0">
 
   <family>qhd_tch</family>
 
--- 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;
--- 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 @@
         <box id="area1" focusable="true" _s60-initial-focus="1"> 
             <actions>
                 <action>
-                    <trigger name="stylus">
-                        <property name="eventtype" value="up" />
-                    </trigger>
                     <trigger name="activate"/>
-                    <trigger name="keyevent">
-                        <property name="scancode" value="3"/>
-                        <property name="eventtype" value="1"/>
-                    </trigger>
                     <event name="MWPublisher/area1_image1(MWTrigger1)"/>
                 </action>
             </actions>
@@ -40,14 +33,7 @@
                 <box id="textbox2" focusable="true">
                 <actions>
                     <action>
-                        <trigger name="stylus">
-                            <property name="eventtype" value="up" />
-                        </trigger>
                         <trigger name="activate"/>
-                        <trigger name="keyevent">
-                            <property name="scancode" value="3"/>
-                            <property name="eventtype" value="1"/>
-                        </trigger>
                         <event name="MWPublisher/default_text(MWTrigger2)"/>
                     </action>
                     <action>                    
@@ -85,14 +71,7 @@
                     <box id="toolbarbutton1" class="toolbarbuttonbox" focusable="true">
                         <actions>
                             <action>
-                                <trigger name="stylus">
-                                    <property name="eventtype" value="up" />
-                                </trigger>
                                 <trigger name="activate"/>
-                                <trigger name="keyevent">
-                                    <property name="scancode" value="3"/>
-                                    <property name="eventtype" value="1"/>
-                                </trigger>
                                 <event name="MWPublisher/toolbar_b1(TB1Trigger)"/>
                             </action>
                             <action>
@@ -111,14 +90,7 @@
                     <box id="toolbarbutton2" class="toolbarbuttonbox" focusable="true">
                         <actions>
                             <action>
-                                <trigger name="stylus">
-                                    <property name="eventtype" value="up" />
-                                </trigger>
                                 <trigger name="activate"/>
-                                <trigger name="keyevent">
-                                    <property name="scancode" value="3"/>
-                                    <property name="eventtype" value="1"/>
-                                </trigger>
                                 <event name="MWPublisher/toolbar_b2(TB2Trigger)"/>
                             </action>
                             <action>
@@ -140,14 +112,7 @@
                     <box id="toolbarbutton3" class="toolbarbuttonbox" focusable="true">
                         <actions>
                             <action>
-                                <trigger name="stylus">
-                                    <property name="eventtype" value="up" />
-                                </trigger>
                                 <trigger name="activate"/>
-                                <trigger name="keyevent">
-                                    <property name="scancode" value="3"/>
-                                    <property name="eventtype" value="1"/>
-                                </trigger>
                                 <event name="MWPublisher/toolbar_b3(TB3Trigger)"/>
                             </action>
                             <action>
--- 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;
--- 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;
--- 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;
--- 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;
--- 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
--- 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
 
--- 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)