--- a/app/app.pro Wed Jun 23 18:10:13 2010 +0300
+++ b/app/app.pro Tue Jul 06 14:13:36 2010 +0300
@@ -26,7 +26,11 @@
SKINICON = qtg_large_music_player
BLD_INF_RULES.prj_exports += \
- "../sis/musicplayer_stub.sis /epoc32/data/z/system/install/musicplayer_stub.sis"
+ "../sis/musicplayer_stub.sis /epoc32/data/z/system/install/musicplayer_stub.sis" \
+ "resources/musicplayer.docml /epoc32/release/winscw/udeb/Z/resource/hb/splashml/musicplayer.docml" \
+ "resources/musicplayer.splashml /epoc32/release/winscw/udeb/Z/resource/hb/splashml/musicplayer.splashml" \
+ "resources/musicplayer.docml /epoc32/data/Z/resource/hb/splashml/musicplayer.docml" \
+ "resources/musicplayer.splashml /epoc32/data/Z/resource/hb/splashml/musicplayer.splashml"
}
--- a/app/inc/mpmainwindow.h Wed Jun 23 18:10:13 2010 +0300
+++ b/app/inc/mpmainwindow.h Tue Jul 06 14:13:36 2010 +0300
@@ -29,6 +29,7 @@
class MpxViewPlugin;
class MusicServices;
class MpGlobalPopupHandler;
+class HbActivityManager;
// Class declaration
class MpMainWindow: public MpxViewFramework
@@ -55,6 +56,10 @@
void initialize( ActivityMode mode );
+signals:
+ // For automation testability
+ void applicationReady();
+
public slots:
void handleCommand( int commandCode );
void handleLibraryUpdated();
@@ -62,6 +67,8 @@
void switchView( Qt::Orientation orientation );
void initializeServiceView( TUid hostUid );
void handleActivity();
+ void saveActivity();
+ void handleRestorePathFailed();
private:
void activateView(ViewType);
@@ -69,6 +76,7 @@
void disconnectView();
void keyPressEvent(QKeyEvent *event);
MpxViewPlugin* loadView( ViewType type, MpCommon::MpViewMode viewMode= MpCommon::DefaultView );
+ void loadActivity( QVariant data );
private:
@@ -81,6 +89,8 @@
ViewType mVerticalViewType;
MusicServices *mMusicServices; // Own
MpGlobalPopupHandler *mPopupHandler; // Own
+ bool mUserExit;
+ HbActivityManager *mActivityManager; //Not Own
};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/resources/musicplayer.docml Tue Jul 06 14:13:36 2010 +0300
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<hbdocument version="0.9">
+ <section name="portrait">
+ <widget name="splashView" type="HbView">
+ <string locid="txt_mus_title_music" name="title" value="musicplayer"/>
+ </widget>
+ </section>
+ <section name="landscape">
+ <widget name="splashView" type="HbView">
+ <string locid="txt_mus_title_music" name="title" value="musicplayer"/>
+ <enums name="titleBarFlags" value="TitleBarHidden"/>
+ </widget>
+ </section>
+
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/resources/musicplayer.splashml Tue Jul 06 14:13:36 2010 +0300
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbsplash version="1">
+ <docml>musicplayer.docml</docml>
+ <widget>splashView</widget>
+ <appuid>0x10207C62</appuid>
+ <tsappname>musicplayer</tsappname>
+ <use-section when="portrait">portrait</use-section>
+ <use-section when="landscape">landscape</use-section>
+</hbsplash>
--- a/app/rom/musicplayer.iby Wed Jun 23 18:10:13 2010 +0300
+++ b/app/rom/musicplayer.iby Tue Jul 06 14:13:36 2010 +0300
@@ -25,5 +25,7 @@
data = ZPRIVATE\10003A3F\import\APPS\musicplayer_reg.rsc PRIVATE\10003a3f\import\apps\musicplayer_reg.rsc
data = ZSYSTEM\install\musicplayer_stub.sis system\install\musicplayer_stub.sis
+data = ZRESOURCE\hb\splashml\musicplayer.splashml RESOURCE_FILES_DIR\hb\splashml\musicplayer.splashml
+data = ZRESOURCE\hb\splashml\musicplayer.docml RESOURCE_FILES_DIR\hb\splashml\musicplayer.docml
#endif // MUSICPLAYER_IBY
\ No newline at end of file
--- a/app/src/main.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/app/src/main.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -18,6 +18,8 @@
#include <QtGui>
#include <hbapplication.h>
#include <hbtranslator.h>
+#include <xqserviceutil.h>
+#include <hbsplashscreen.h>
#include "mpmainwindow.h"
#include "mptrace.h"
@@ -52,19 +54,17 @@
TX_STATIC_ENTRY
// Initialization
- HbApplication app(argc, argv);
+ HbApplication app(argc, argv, Hb::NoSplash);
+ if ( !XQServiceUtil::isService() ) {
+ HbSplashScreen::start( );
+ }
QVariantHash params = app.activateParams();
HbTranslator translator;
translator.loadCommon();
MpMainWindow::ActivityMode mode;
if ( !params.value( "activityname" ).toString().compare( "MusicNowPlayingView" ) ) {
- if( params.contains( "shuffle" ) ) {
- mode = !params.value( "shuffle" ).toString().compare( "yes" ) ? MpMainWindow::MusicNowPlayingViewShuffleAll : MpMainWindow::MusicNowPlayingView;
- }
- else {
- mode = MpMainWindow::MusicNowPlayingView;
- }
+ mode = MpMainWindow::MusicNowPlayingView;
}
else {
mode = MpMainWindow::MusicMainView;
--- a/app/src/mpmainwindow.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/app/src/mpmainwindow.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -33,6 +33,9 @@
#include "mpglobalpopuphandler.h"
#include "mptrace.h"
+const QString MUSIC_MAIN_VIEW = "MusicMainView";
+const QString MUSIC_NOW_PLAYING_VIEW = "MusicNowPlayingView";
+
/*!
\class MpMainWindow
\brief The MpMainWindow class provides Main Window functionalities.
@@ -55,7 +58,9 @@
mCurrentViewPlugin(0),
mVerticalViewType( CollectionView ),
mMusicServices(0),
- mPopupHandler(0)
+ mPopupHandler(0),
+ mUserExit( false ),
+ mActivityManager(0)
{
TX_LOG
}
@@ -123,41 +128,62 @@
}
if ( !mMusicServices ) {
+ HbApplication* app = qobject_cast<HbApplication*>(qApp);
+ QVariantHash params = app->activateParams();
MpEngineFactory::createSharedEngine();
mPopupHandler = new MpGlobalPopupHandler( this );
+ if( app->activateReason() == Hb::ActivationReasonActivity ) {
+ // Restoring an activity, not a fresh startup or a service
+ // Activities from Task switcher only have one parameter
+ if( params.count() == 1 ) {
+ loadActivity( app->activateData() );
+ }
+ }
if ( orientation() == Qt::Vertical ) {
// If first startup ignore shuffleAll and send to collection view to refresh library
if ( mode == MusicMainView || MpSettingsManager::firstStartup() ) {
- loadView(CollectionView);
- activateView(CollectionView);
- loadView(MediaWallView);
+ loadView( CollectionView );
+ activateView( CollectionView );
+ loadView( MediaWallView );
loadView( PlaybackView );
- } else if (mode == MusicNowPlayingViewShuffleAll ) {
- MpEngineFactory::sharedEngine()->shuffleAll();
+ } else if ( mode == MusicNowPlayingView ) {
+ if( params.contains( "shuffle" ) ) {
+ if( !params.value( "shuffle" ).toString().compare( "yes" ) ) {
+ MpEngineFactory::sharedEngine()->shuffleAll();
+ }
+ }
loadView( PlaybackView );
- activateView(PlaybackView);
- loadView(CollectionView);
- loadView(MediaWallView);
+ activateView( PlaybackView );
+ loadView( CollectionView );
+ loadView( MediaWallView );
}
}
else {
// If first startup ignore shuffleAll and send to refresh library
- if( mode == MusicNowPlayingViewShuffleAll && !MpSettingsManager::firstStartup() ) {
- MpEngineFactory::sharedEngine()->shuffleAll();
+ if( mode == MusicNowPlayingView && !MpSettingsManager::firstStartup() ) {
+ if( params.contains( "shuffle" ) ) {
+ if( !params.value( "shuffle" ).toString().compare( "yes" ) ) {
+ MpEngineFactory::sharedEngine()->shuffleAll();
+ }
+ }
mVerticalViewType = PlaybackView;
}
- loadView(MediaWallView);
- activateView(MediaWallView);
- loadView(CollectionView);
+ loadView( MediaWallView );
+ activateView( MediaWallView );
+ loadView( CollectionView );
loadView( PlaybackView );
}
connect(this, SIGNAL( orientationChanged( Qt::Orientation ) ), SLOT( switchView( Qt::Orientation ) ) );
connect( MpEngineFactory::sharedEngine(), SIGNAL( libraryUpdated() ), SLOT( handleLibraryUpdated() ) );
MpEngineFactory::sharedEngine()->checkForSystemEvents();
- //Register to application manager to wait for activities
- HbApplication* app = qobject_cast<HbApplication*>(qApp);
- app->activityManager()->waitActivity();
+ //Register to application manager to wait for activities and clear previous activities on the task switcher
+ mActivityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+ mActivityManager->waitActivity();
+ mActivityManager->removeActivity( MUSIC_MAIN_VIEW );
+ mActivityManager->removeActivity( MUSIC_NOW_PLAYING_VIEW );
connect( app, SIGNAL( activate() ), this , SLOT( handleActivity() ) );
+ connect( app, SIGNAL( aboutToQuit() ), this, SLOT( saveActivity() ) );
+ emit applicationReady();
}
else {
@@ -182,6 +208,7 @@
if ( mCurrentViewPlugin ) {
disconnectView();
}
+ mUserExit = true;
qApp->quit();
break;
case MpCommon::SendToBackground:
@@ -326,6 +353,9 @@
}
}
+/*!
+ Slot to initialize the view that corresponds to the requested service
+ */
void MpMainWindow::initializeServiceView( TUid hostUid )
{
switch (mMusicServices->currentService()) {
@@ -360,6 +390,74 @@
Q_ASSERT_X(false, "MpMainWindow::initializeServiceView", "undefined service");
break;
}
+ emit applicationReady();
+}
+
+/*!
+ Slot to handle activity switching once the stand alone instance is running and registered
+ in the activity manager to wait for activities.
+ Only running activity supported at the moment is "MusicNowPlayingView"
+ */
+void MpMainWindow::handleActivity()
+{
+ TX_ENTRY
+ HbApplication* app = qobject_cast<HbApplication*>(qApp);
+ QString activityId = app->activateId();
+
+ if( !activityId.compare( MUSIC_NOW_PLAYING_VIEW ) ) {
+ if ( orientation() == Qt::Vertical ) {
+ if( mVerticalViewType != PlaybackView ) {
+ activateView( PlaybackView );
+ }
+ }
+ }
+
+ mActivityManager->waitActivity();
+ TX_EXIT
+}
+
+/*!
+ Slot to save activity upon exiting application
+ */
+void MpMainWindow::saveActivity()
+{
+ TX_ENTRY
+ QString activity = ( mVerticalViewType == CollectionView ) ? MUSIC_MAIN_VIEW : MUSIC_NOW_PLAYING_VIEW;
+ //Get data from engine
+ QByteArray serializedRestorePath;
+ if ( mUserExit ) {
+ //Internal exit will always return to the main view
+ activity = MUSIC_MAIN_VIEW;
+ }
+ else {
+ //Only saved data if exited via task switcher or GOOM
+ MpEngineFactory::sharedEngine()->saveActivityData( serializedRestorePath );
+ }
+ QVariantHash activityParameters;
+ activityParameters.insert( "screenshot", QPixmap::grabWidget( this, this->rect() ) );
+ QVariantHash activityData;
+ activityData.insert( "restorePath", serializedRestorePath );
+
+
+ bool ok = mActivityManager->addActivity( activity , activityData, activityParameters );
+ if ( !ok ){
+ TX_LOG_ARGS( "Error: Add Failed; should never get here." );
+ }
+ TX_EXIT
+}
+
+/*!
+ Slot to handle a failed path restoration. Switch to collection view if not already there.
+ */
+void MpMainWindow::handleRestorePathFailed()
+{
+ TX_ENTRY
+ if ( orientation() == Qt::Vertical ) {
+ if( mVerticalViewType != CollectionView ) {
+ activateView( CollectionView );
+ }
+ }
+ TX_EXIT
}
/*!
@@ -414,23 +512,15 @@
}
/*!
- Slot to handle activity switching once the stand alone instance is running and registered
- in the activity manager to wait for activities.
- Only running activity supported at the moment is "MusicNowPlayingView"
+ Load activity called via task switcher
+ Restore view and playback path if applicable
*/
-void MpMainWindow::handleActivity()
+void MpMainWindow::loadActivity( QVariant data )
{
- HbApplication* app = qobject_cast<HbApplication*>(qApp);
- QString activityId = app->activateId();
-
- if( !activityId.compare( "MusicNowPlayingView&launchtype=standalone" ) ) {
- if ( orientation() == Qt::Vertical ) {
- if( mVerticalViewType != PlaybackView ) {
- activateView( PlaybackView );
- }
- }
- }
- HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
- activityManager->waitActivity();
+ TX_ENTRY
+ QVariantHash activityData = data.toHash();
+ QByteArray serializedRestorePath = activityData.value( "restorePath" ).toByteArray();
+ MpEngineFactory::sharedEngine()->loadActivityData( serializedRestorePath );
+ TX_EXIT
}
--- a/inc/mpengine.h Wed Jun 23 18:10:13 2010 +0300
+++ b/inc/mpengine.h Tue Jul 06 14:13:36 2010 +0300
@@ -121,6 +121,10 @@
void disableEqualizer();
int activePreset();
QStringList presetNames();
+
+ //Activity related
+ void saveActivityData( QByteArray &data );
+ void loadActivityData( const QByteArray &data );
signals:
@@ -142,6 +146,7 @@
void playlistsRenamed( bool success );
void isolatedCollectionOpened( MpMpxCollectionData* collectionData );
void containerContentsChanged();
+ void restorePathFailed();
// Equalizer related
void equalizerReady();
--- a/mpdata/src/mpmpxcollectiondata_p.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpdata/src/mpmpxcollectiondata_p.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -668,7 +668,7 @@
*/
bool MpMpxCollectionDataPrivate::DoTestCachedItemL( int itemId )
{
- if ( !iCachedRemovedItem && !iCachedRemovedItem->IsSupported( KMPXMediaGeneralId ) ) {
+ if ( !iCachedRemovedItem || !iCachedRemovedItem->IsSupported( KMPXMediaGeneralId ) ) {
User::Leave(KErrNotFound);
}
return ( itemId == iCachedRemovedItem->ValueTObjectL<TInt>( KMPXMediaGeneralId ) );
--- a/mpdata/tsrc/unittest_mpmpxcollectiondata/src/unittest_mpmpxcollectiondata.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpdata/tsrc/unittest_mpmpxcollectiondata/src/unittest_mpmpxcollectiondata.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -625,9 +625,14 @@
int itemId = 147;
CMPXMedia* item = CMPXMedia::NewL();
+ // Test error case when iCachedRemovedItem is NULL.
+ QVERIFY( !mTest->testCachedItem( itemId ) );
+
+ // Test error case when KMPXMediaGeneralId is not supported.
mTestPrivate->iCachedRemovedItem = item;
QVERIFY( !mTest->testCachedItem( itemId ) );
+ // Test good case.
item->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, itemId );
QVERIFY( mTest->testCachedItem( itemId ) );
--- a/mpengine/bwins/mpengineu.def Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/bwins/mpengineu.def Tue Jul 06 14:13:36 2010 +0300
@@ -1,128 +1,131 @@
EXPORTS
- ?metaObject@MpEngine@@UBEPBUQMetaObject@@XZ @ 1 NONAME ; struct QMetaObject const * MpEngine::metaObject(void) const
- ?instance@MpEngineFactory@@SAPAV1@XZ @ 2 NONAME ; class MpEngineFactory * MpEngineFactory::instance(void)
- ?createIsolatedEngine@MpEngineFactory@@SAPAVMpEngine@@W4EngineMode@2@@Z @ 3 NONAME ; class MpEngine * MpEngineFactory::createIsolatedEngine(enum MpEngine::EngineMode)
- ??_EMpSongScanner@@UAE@I@Z @ 4 NONAME ; MpSongScanner::~MpSongScanner(unsigned int)
- ?findAlbumSongs@MpEngine@@QAEXH@Z @ 5 NONAME ; void MpEngine::findAlbumSongs(int)
- ?equalizerReady@MpEngine@@IAEXXZ @ 6 NONAME ; void MpEngine::equalizerReady(void)
- ?setPosition@MpEngine@@QAEXH@Z @ 7 NONAME ; void MpEngine::setPosition(int)
- ?saveToCurrentPlaylist@MpEngine@@QAEXAAV?$QList@H@@PAVMpMpxCollectionData@@@Z @ 8 NONAME ; void MpEngine::saveToCurrentPlaylist(class QList<int> &, class MpMpxCollectionData *)
- ?metaObject@MpEngineFactory@@UBEPBUQMetaObject@@XZ @ 9 NONAME ; struct QMetaObject const * MpEngineFactory::metaObject(void) const
- ?handleDeleteStarted@MpEngine@@QAEXW4TCollectionContext@@H@Z @ 10 NONAME ; void MpEngine::handleDeleteStarted(enum TCollectionContext, int)
- ?handleEqualizerReady@MpEngine@@QAEXXZ @ 11 NONAME ; void MpEngine::handleEqualizerReady(void)
- ?collectionData@MpEngine@@QAEPAVMpMpxCollectionData@@XZ @ 12 NONAME ; class MpMpxCollectionData * MpEngine::collectionData(void)
- ?createPlaylist@MpEngine@@QAEXAAVQString@@AAV?$QList@H@@PAVMpMpxCollectionData@@@Z @ 13 NONAME ; void MpEngine::createPlaylist(class QString &, class QList<int> &, class MpMpxCollectionData *)
- ?collectionPlaylistOpened@MpEngine@@IAEXXZ @ 14 NONAME ; void MpEngine::collectionPlaylistOpened(void)
- ?tr@MpSongScanner@@SA?AVQString@@PBD0@Z @ 15 NONAME ; class QString MpSongScanner::tr(char const *, char const *)
- ?renamePlaylist@MpEngine@@QAEXAAVQString@@H@Z @ 16 NONAME ; void MpEngine::renamePlaylist(class QString &, int)
- ?scanCountChanged@MpSongScanner@@IAEXH@Z @ 17 NONAME ; void MpSongScanner::scanCountChanged(int)
- ?handleUsbMtpEndEvent@MpEngine@@AAEXXZ @ 18 NONAME ; void MpEngine::handleUsbMtpEndEvent(void)
- ?setBalance@MpEngine@@QAEXH@Z @ 19 NONAME ; void MpEngine::setBalance(int)
- ?songData@MpEngine@@QAEPAVMpSongData@@XZ @ 20 NONAME ; class MpSongData * MpEngine::songData(void)
- ?skipForward@MpEngine@@QAEXXZ @ 21 NONAME ; void MpEngine::skipForward(void)
- ??_EMpEngineFactory@@UAE@I@Z @ 22 NONAME ; MpEngineFactory::~MpEngineFactory(unsigned int)
- ?playAlbumSongs@MpEngine@@QAEXHHPAVMpMpxCollectionData@@@Z @ 23 NONAME ; void MpEngine::playAlbumSongs(int, int, class MpMpxCollectionData *)
- ?setShuffle@MpEngine@@QAEX_N@Z @ 24 NONAME ; void MpEngine::setShuffle(bool)
- ?openIsolatedCollection@MpEngine@@QAEXW4TCollectionContext@@@Z @ 25 NONAME ; void MpEngine::openIsolatedCollection(enum TCollectionContext)
- ?usbSynchronizationFinished@MpEngine@@IAEXXZ @ 26 NONAME ; void MpEngine::usbSynchronizationFinished(void)
- ?trUtf8@MpSongScanner@@SA?AVQString@@PBD0H@Z @ 27 NONAME ; class QString MpSongScanner::trUtf8(char const *, char const *, int)
- ?close@MpEngineFactory@@SAXXZ @ 28 NONAME ; void MpEngineFactory::close(void)
- ?qt_metacall@MpEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 29 NONAME ; int MpEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?playlistSaved@MpEngine@@IAEX_N@Z @ 30 NONAME ; void MpEngine::playlistSaved(bool)
- ?playbackData@MpEngine@@QAEPAVMpPlaybackData@@XZ @ 31 NONAME ; class MpPlaybackData * MpEngine::playbackData(void)
- ?stop@MpEngine@@QAEXXZ @ 32 NONAME ; void MpEngine::stop(void)
- ?retrieveSong@MpEngine@@QAEXXZ @ 33 NONAME ; void MpEngine::retrieveSong(void)
- ?libraryAboutToUpdate@MpEngine@@IAEXXZ @ 34 NONAME ; void MpEngine::libraryAboutToUpdate(void)
- ?scan@MpSongScanner@@QAEX_N@Z @ 35 NONAME ; void MpSongScanner::scan(bool)
- ?openCollection@MpEngine@@QAEXW4TCollectionContext@@@Z @ 36 NONAME ; void MpEngine::openCollection(enum TCollectionContext)
- ?trUtf8@MpEngine@@SA?AVQString@@PBD0H@Z @ 37 NONAME ; class QString MpEngine::trUtf8(char const *, char const *, int)
- ?reopenCollection@MpEngine@@QAEXXZ @ 38 NONAME ; void MpEngine::reopenCollection(void)
- ?songsDeleted@MpEngine@@IAEX_N@Z @ 39 NONAME ; void MpEngine::songsDeleted(bool)
- ??0MpEngineFactory@@AAE@XZ @ 40 NONAME ; MpEngineFactory::MpEngineFactory(void)
- ?refreshLibrary@MpEngine@@QAEX_N@Z @ 41 NONAME ; void MpEngine::refreshLibrary(bool)
- ?qt_metacast@MpEngine@@UAEPAXPBD@Z @ 42 NONAME ; void * MpEngine::qt_metacast(char const *)
- ?startSeekForward@MpEngine@@QAEXXZ @ 43 NONAME ; void MpEngine::startSeekForward(void)
- ?saveToPlaylist@MpEngine@@QAEXHAAV?$QList@H@@@Z @ 44 NONAME ; void MpEngine::saveToPlaylist(int, class QList<int> &)
- ?qt_metacall@MpEngineFactory@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 45 NONAME ; int MpEngineFactory::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?qt_metacall@MpSongScanner@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 46 NONAME ; int MpSongScanner::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?libraryRefreshNeeded@MpEngine@@IAEXXZ @ 47 NONAME ; void MpEngine::libraryRefreshNeeded(void)
- ?handleDiskEvent@MpSongScanner@@QAEXW4MpxDiskEvents@@@Z @ 48 NONAME ; void MpSongScanner::handleDiskEvent(enum MpxDiskEvents)
- ?tr@MpEngineFactory@@SA?AVQString@@PBD0H@Z @ 49 NONAME ; class QString MpEngineFactory::tr(char const *, char const *, int)
- ?tr@MpEngine@@SA?AVQString@@PBD0H@Z @ 50 NONAME ; class QString MpEngine::tr(char const *, char const *, int)
- ?trUtf8@MpEngine@@SA?AVQString@@PBD0@Z @ 51 NONAME ; class QString MpEngine::trUtf8(char const *, char const *)
- ?findPlaylists@MpEngine@@QAEXAAVQStringList@@@Z @ 52 NONAME ; void MpEngine::findPlaylists(class QStringList &)
- ?presetNames@MpEngine@@QAE?AVQStringList@@XZ @ 53 NONAME ; class QStringList MpEngine::presetNames(void)
- ?isAutomaticScan@MpSongScanner@@QAE_NXZ @ 54 NONAME ; bool MpSongScanner::isAutomaticScan(void)
- ??1MpEngineFactory@@UAE@XZ @ 55 NONAME ; MpEngineFactory::~MpEngineFactory(void)
- ?previewItem@MpEngine@@QAEXH@Z @ 56 NONAME ; void MpEngine::previewItem(int)
- ??1MpSongScanner@@UAE@XZ @ 57 NONAME ; MpSongScanner::~MpSongScanner(void)
- ?loudness@MpEngine@@QAE_NXZ @ 58 NONAME ; bool MpEngine::loudness(void)
- ?staticMetaObject@MpEngineFactory@@2UQMetaObject@@B @ 59 NONAME ; struct QMetaObject const MpEngineFactory::staticMetaObject
- ?deleteSongs@MpEngine@@QAEXAAV?$QList@H@@@Z @ 60 NONAME ; void MpEngine::deleteSongs(class QList<int> &)
- ?releaseIsolatedCollection@MpEngine@@QAEXXZ @ 61 NONAME ; void MpEngine::releaseIsolatedCollection(void)
- ?deleteStarted@MpEngine@@IAEXW4TCollectionContext@@H@Z @ 62 NONAME ; void MpEngine::deleteStarted(enum TCollectionContext, int)
- ?stopSeeking@MpEngine@@QAEXXZ @ 63 NONAME ; void MpEngine::stopSeeking(void)
- ?playEmbedded@MpEngine@@QAEXVQString@@@Z @ 64 NONAME ; void MpEngine::playEmbedded(class QString)
- ?initialize@MpEngine@@AAEXVTUid@@W4EngineMode@1@@Z @ 65 NONAME ; void MpEngine::initialize(class TUid, enum MpEngine::EngineMode)
- ?tr@MpEngine@@SA?AVQString@@PBD0@Z @ 66 NONAME ; class QString MpEngine::tr(char const *, char const *)
- ?disableEqualizer@MpEngine@@QAEXXZ @ 67 NONAME ; void MpEngine::disableEqualizer(void)
- ?getStaticMetaObject@MpEngine@@SAABUQMetaObject@@XZ @ 68 NONAME ; struct QMetaObject const & MpEngine::getStaticMetaObject(void)
- ?shuffleAll@MpEngine@@QAEXXZ @ 69 NONAME ; void MpEngine::shuffleAll(void)
- ?qt_metacast@MpEngineFactory@@UAEPAXPBD@Z @ 70 NONAME ; void * MpEngineFactory::qt_metacast(char const *)
- ?renamePlaylist@MpEngine@@QAEXAAVQString@@@Z @ 71 NONAME ; void MpEngine::renamePlaylist(class QString &)
- ?libraryUpdated@MpEngine@@IAEXXZ @ 72 NONAME ; void MpEngine::libraryUpdated(void)
- ?metaObject@MpSongScanner@@UBEPBUQMetaObject@@XZ @ 73 NONAME ; struct QMetaObject const * MpSongScanner::metaObject(void) const
- ?setRepeat@MpEngine@@QAEX_N@Z @ 74 NONAME ; void MpEngine::setRepeat(bool)
- ?trUtf8@MpEngineFactory@@SA?AVQString@@PBD0@Z @ 75 NONAME ; class QString MpEngineFactory::trUtf8(char const *, char const *)
- ??0MpSongScanner@@QAE@PAVMpMpxHarvesterFrameworkWrapper@@PAVQObject@@@Z @ 76 NONAME ; MpSongScanner::MpSongScanner(class MpMpxHarvesterFrameworkWrapper *, class QObject *)
- ?cancelCollectionRequest@MpEngine@@QAEXXZ @ 77 NONAME ; void MpEngine::cancelCollectionRequest(void)
- ?containerContentsChanged@MpEngine@@IAEXXZ @ 78 NONAME ; void MpEngine::containerContentsChanged(void)
- ?startSeekBackward@MpEngine@@QAEXXZ @ 79 NONAME ; void MpEngine::startSeekBackward(void)
- ?playlistsRenamed@MpEngine@@IAEX_N@Z @ 80 NONAME ; void MpEngine::playlistsRenamed(bool)
- ?playPause@MpEngine@@QAEXXZ @ 81 NONAME ; void MpEngine::playPause(void)
- ?checkForSystemEvents@MpEngine@@QAEXXZ @ 82 NONAME ; void MpEngine::checkForSystemEvents(void)
- ?tr@MpEngineFactory@@SA?AVQString@@PBD0@Z @ 83 NONAME ; class QString MpEngineFactory::tr(char const *, char const *)
- ?applyPreset@MpEngine@@QAEXH@Z @ 84 NONAME ; void MpEngine::applyPreset(int)
- ?playEmbedded@MpEngine@@QAEXABVXQSharableFile@@@Z @ 85 NONAME ; void MpEngine::playEmbedded(class XQSharableFile const &)
- ?trUtf8@MpEngineFactory@@SA?AVQString@@PBD0H@Z @ 86 NONAME ; class QString MpEngineFactory::trUtf8(char const *, char const *, int)
- ?staticMetaObject@MpEngine@@2UQMetaObject@@B @ 87 NONAME ; struct QMetaObject const MpEngine::staticMetaObject
- ?scanStarted@MpSongScanner@@IAEXXZ @ 88 NONAME ; void MpSongScanner::scanStarted(void)
- ?unableToCotinueDueUSB@MpEngine@@IAEXXZ @ 89 NONAME ; void MpEngine::unableToCotinueDueUSB(void)
- ?handleUsbMtpStartEvent@MpEngine@@AAEXXZ @ 90 NONAME ; void MpEngine::handleUsbMtpStartEvent(void)
- ?openCollectionItem@MpEngine@@QAEXH@Z @ 91 NONAME ; void MpEngine::openCollectionItem(int)
- ?cancelScan@MpSongScanner@@QAEXXZ @ 92 NONAME ; void MpSongScanner::cancelScan(void)
- ?trUtf8@MpSongScanner@@SA?AVQString@@PBD0@Z @ 93 NONAME ; class QString MpSongScanner::trUtf8(char const *, char const *)
- ?handleScanStarted@MpEngine@@QAEXXZ @ 94 NONAME ; void MpEngine::handleScanStarted(void)
- ?back@MpEngine@@QAEXXZ @ 95 NONAME ; void MpEngine::back(void)
- ?activePreset@MpEngine@@QAEHXZ @ 96 NONAME ; int MpEngine::activePreset(void)
- ?tr@MpSongScanner@@SA?AVQString@@PBD0H@Z @ 97 NONAME ; class QString MpSongScanner::tr(char const *, char const *, int)
- ?handleUsbEvent@MpEngine@@QAEXW4MpxUsbEvents@@@Z @ 98 NONAME ; void MpEngine::handleUsbEvent(enum MpxUsbEvents)
- ?songScanner@MpEngine@@QAEPAVMpSongScanner@@XZ @ 99 NONAME ; class MpSongScanner * MpEngine::songScanner(void)
- ?sharedEngine@MpEngineFactory@@SAPAVMpEngine@@XZ @ 100 NONAME ; class MpEngine * MpEngineFactory::sharedEngine(void)
- ?handleUsbMassStorageStartEvent@MpEngine@@AAEXXZ @ 101 NONAME ; void MpEngine::handleUsbMassStorageStartEvent(void)
- ?balance@MpEngine@@QAEHXZ @ 102 NONAME ; int MpEngine::balance(void)
- ?handleDeleteEnded@MpEngine@@QAEX_N@Z @ 103 NONAME ; void MpEngine::handleDeleteEnded(bool)
- ?handleDiskEvent@MpEngine@@QAEXW4MpxDiskEvents@@@Z @ 104 NONAME ; void MpEngine::handleDiskEvent(enum MpxDiskEvents)
- ?verifyUsbBlocking@MpEngine@@QAE_N_N@Z @ 105 NONAME ; bool MpEngine::verifyUsbBlocking(bool)
- ?usbSynchronizationStarted@MpEngine@@IAEXXZ @ 106 NONAME ; void MpEngine::usbSynchronizationStarted(void)
- ?handleUsbMassStorageEndEvent@MpEngine@@AAEXXZ @ 107 NONAME ; void MpEngine::handleUsbMassStorageEndEvent(void)
- ?createSharedEngine@MpEngineFactory@@SAPAVMpEngine@@VTUid@@W4EngineMode@2@@Z @ 108 NONAME ; class MpEngine * MpEngineFactory::createSharedEngine(class TUid, enum MpEngine::EngineMode)
- ?usbBlocked@MpEngine@@IAEX_N@Z @ 109 NONAME ; void MpEngine::usbBlocked(bool)
- ?getStaticMetaObject@MpSongScanner@@SAABUQMetaObject@@XZ @ 110 NONAME ; struct QMetaObject const & MpSongScanner::getStaticMetaObject(void)
- ?getStaticMetaObject@MpEngineFactory@@SAABUQMetaObject@@XZ @ 111 NONAME ; struct QMetaObject const & MpEngineFactory::getStaticMetaObject(void)
- ??0MpEngine@@AAE@XZ @ 112 NONAME ; MpEngine::MpEngine(void)
- ?handleUsbMtpNotActive@MpEngine@@AAEXXZ @ 113 NONAME ; void MpEngine::handleUsbMtpNotActive(void)
- ?staticMetaObject@MpSongScanner@@2UQMetaObject@@B @ 114 NONAME ; struct QMetaObject const MpSongScanner::staticMetaObject
- ?handleScanEnded@MpSongScanner@@QAEXHH@Z @ 115 NONAME ; void MpSongScanner::handleScanEnded(int, int)
- ?isolatedCollectionOpened@MpEngine@@IAEXPAVMpMpxCollectionData@@@Z @ 116 NONAME ; void MpEngine::isolatedCollectionOpened(class MpMpxCollectionData *)
- ?handleScanEnded@MpEngine@@QAEXHH@Z @ 117 NONAME ; void MpEngine::handleScanEnded(int, int)
- ?aboutToAddSongs@MpEngine@@IAEXH@Z @ 118 NONAME ; void MpEngine::aboutToAddSongs(int)
- ?skipBackward@MpEngine@@QAEXXZ @ 119 NONAME ; void MpEngine::skipBackward(void)
- ??_EMpEngine@@UAE@I@Z @ 120 NONAME ; MpEngine::~MpEngine(unsigned int)
- ??1MpEngine@@UAE@XZ @ 121 NONAME ; MpEngine::~MpEngine(void)
- ?changeUsbBlockingState@MpEngine@@AAEXW4UsbBlockingState@1@@Z @ 122 NONAME ; void MpEngine::changeUsbBlockingState(enum MpEngine::UsbBlockingState)
- ?setLoudness@MpEngine@@QAEX_N@Z @ 123 NONAME ; void MpEngine::setLoudness(bool)
- ?scanFinished@MpSongScanner@@IAEXHH@Z @ 124 NONAME ; void MpSongScanner::scanFinished(int, int)
- ?reorderPlaylist@MpEngine@@QAEXHHHH@Z @ 125 NONAME ; void MpEngine::reorderPlaylist(int, int, int, int)
+ ?instance@MpEngineFactory@@SAPAV1@XZ @ 1 NONAME ; class MpEngineFactory * MpEngineFactory::instance(void)
+ ?saveToCurrentPlaylist@MpEngine@@QAEXAAV?$QList@H@@PAVMpMpxCollectionData@@@Z @ 2 NONAME ; void MpEngine::saveToCurrentPlaylist(class QList<int> &, class MpMpxCollectionData *)
+ ?handleDeleteStarted@MpEngine@@QAEXW4TCollectionContext@@H@Z @ 3 NONAME ; void MpEngine::handleDeleteStarted(enum TCollectionContext, int)
+ ?collectionData@MpEngine@@QAEPAVMpMpxCollectionData@@XZ @ 4 NONAME ; class MpMpxCollectionData * MpEngine::collectionData(void)
+ ?createPlaylist@MpEngine@@QAEXAAVQString@@AAV?$QList@H@@PAVMpMpxCollectionData@@@Z @ 5 NONAME ; void MpEngine::createPlaylist(class QString &, class QList<int> &, class MpMpxCollectionData *)
+ ?collectionPlaylistOpened@MpEngine@@IAEXXZ @ 6 NONAME ; void MpEngine::collectionPlaylistOpened(void)
+ ?renamePlaylist@MpEngine@@QAEXAAVQString@@H@Z @ 7 NONAME ; void MpEngine::renamePlaylist(class QString &, int)
+ ?scanCountChanged@MpSongScanner@@IAEXH@Z @ 8 NONAME ; void MpSongScanner::scanCountChanged(int)
+ ?handleUsbMtpEndEvent@MpEngine@@AAEXXZ @ 9 NONAME ; void MpEngine::handleUsbMtpEndEvent(void)
+ ?setBalance@MpEngine@@QAEXH@Z @ 10 NONAME ; void MpEngine::setBalance(int)
+ ?playAlbumSongs@MpEngine@@QAEXHHPAVMpMpxCollectionData@@@Z @ 11 NONAME ; void MpEngine::playAlbumSongs(int, int, class MpMpxCollectionData *)
+ ?setShuffle@MpEngine@@QAEX_N@Z @ 12 NONAME ; void MpEngine::setShuffle(bool)
+ ?openIsolatedCollection@MpEngine@@QAEXW4TCollectionContext@@@Z @ 13 NONAME ; void MpEngine::openIsolatedCollection(enum TCollectionContext)
+ ?usbSynchronizationFinished@MpEngine@@IAEXXZ @ 14 NONAME ; void MpEngine::usbSynchronizationFinished(void)
+ ?qt_metacall@MpEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 15 NONAME ; int MpEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?playlistSaved@MpEngine@@IAEX_N@Z @ 16 NONAME ; void MpEngine::playlistSaved(bool)
+ ?playbackData@MpEngine@@QAEPAVMpPlaybackData@@XZ @ 17 NONAME ; class MpPlaybackData * MpEngine::playbackData(void)
+ ?stop@MpEngine@@QAEXXZ @ 18 NONAME ; void MpEngine::stop(void)
+ ?retrieveSong@MpEngine@@QAEXXZ @ 19 NONAME ; void MpEngine::retrieveSong(void)
+ ?scan@MpSongScanner@@QAEX_N@Z @ 20 NONAME ; void MpSongScanner::scan(bool)
+ ?openCollection@MpEngine@@QAEXW4TCollectionContext@@@Z @ 21 NONAME ; void MpEngine::openCollection(enum TCollectionContext)
+ ??0MpEngineFactory@@AAE@XZ @ 22 NONAME ; MpEngineFactory::MpEngineFactory(void)
+ ?libraryRefreshNeeded@MpEngine@@IAEXXZ @ 23 NONAME ; void MpEngine::libraryRefreshNeeded(void)
+ ?handleDiskEvent@MpSongScanner@@QAEXW4MpxDiskEvents@@@Z @ 24 NONAME ; void MpSongScanner::handleDiskEvent(enum MpxDiskEvents)
+ ?tr@MpEngine@@SA?AVQString@@PBD0H@Z @ 25 NONAME ; class QString MpEngine::tr(char const *, char const *, int)
+ ?trUtf8@MpEngine@@SA?AVQString@@PBD0@Z @ 26 NONAME ; class QString MpEngine::trUtf8(char const *, char const *)
+ ?presetNames@MpEngine@@QAE?AVQStringList@@XZ @ 27 NONAME ; class QStringList MpEngine::presetNames(void)
+ ?previewItem@MpEngine@@QAEXH@Z @ 28 NONAME ; void MpEngine::previewItem(int)
+ ??1MpSongScanner@@UAE@XZ @ 29 NONAME ; MpSongScanner::~MpSongScanner(void)
+ ?loudness@MpEngine@@QAE_NXZ @ 30 NONAME ; bool MpEngine::loudness(void)
+ ?deleteSongs@MpEngine@@QAEXAAV?$QList@H@@@Z @ 31 NONAME ; void MpEngine::deleteSongs(class QList<int> &)
+ ?releaseIsolatedCollection@MpEngine@@QAEXXZ @ 32 NONAME ; void MpEngine::releaseIsolatedCollection(void)
+ ?deleteStarted@MpEngine@@IAEXW4TCollectionContext@@H@Z @ 33 NONAME ; void MpEngine::deleteStarted(enum TCollectionContext, int)
+ ?stopSeeking@MpEngine@@QAEXXZ @ 34 NONAME ; void MpEngine::stopSeeking(void)
+ ?initialize@MpEngine@@AAEXVTUid@@W4EngineMode@1@@Z @ 35 NONAME ; void MpEngine::initialize(class TUid, enum MpEngine::EngineMode)
+ ?tr@MpEngine@@SA?AVQString@@PBD0@Z @ 36 NONAME ; class QString MpEngine::tr(char const *, char const *)
+ ?disableEqualizer@MpEngine@@QAEXXZ @ 37 NONAME ; void MpEngine::disableEqualizer(void)
+ ?getStaticMetaObject@MpEngine@@SAABUQMetaObject@@XZ @ 38 NONAME ; struct QMetaObject const & MpEngine::getStaticMetaObject(void)
+ ?qt_metacast@MpEngineFactory@@UAEPAXPBD@Z @ 39 NONAME ; void * MpEngineFactory::qt_metacast(char const *)
+ ?libraryUpdated@MpEngine@@IAEXXZ @ 40 NONAME ; void MpEngine::libraryUpdated(void)
+ ??0MpSongScanner@@QAE@PAVMpMpxHarvesterFrameworkWrapper@@PAVQObject@@@Z @ 41 NONAME ; MpSongScanner::MpSongScanner(class MpMpxHarvesterFrameworkWrapper *, class QObject *)
+ ?checkForSystemEvents@MpEngine@@QAEXXZ @ 42 NONAME ; void MpEngine::checkForSystemEvents(void)
+ ?applyPreset@MpEngine@@QAEXH@Z @ 43 NONAME ; void MpEngine::applyPreset(int)
+ ?trUtf8@MpEngineFactory@@SA?AVQString@@PBD0H@Z @ 44 NONAME ; class QString MpEngineFactory::trUtf8(char const *, char const *, int)
+ ?staticMetaObject@MpEngine@@2UQMetaObject@@B @ 45 NONAME ; struct QMetaObject const MpEngine::staticMetaObject
+ ?scanStarted@MpSongScanner@@IAEXXZ @ 46 NONAME ; void MpSongScanner::scanStarted(void)
+ ?unableToCotinueDueUSB@MpEngine@@IAEXXZ @ 47 NONAME ; void MpEngine::unableToCotinueDueUSB(void)
+ ?openCollectionItem@MpEngine@@QAEXH@Z @ 48 NONAME ; void MpEngine::openCollectionItem(int)
+ ?handleScanStarted@MpEngine@@QAEXXZ @ 49 NONAME ; void MpEngine::handleScanStarted(void)
+ ?back@MpEngine@@QAEXXZ @ 50 NONAME ; void MpEngine::back(void)
+ ?tr@MpSongScanner@@SA?AVQString@@PBD0H@Z @ 51 NONAME ; class QString MpSongScanner::tr(char const *, char const *, int)
+ ?songScanner@MpEngine@@QAEPAVMpSongScanner@@XZ @ 52 NONAME ; class MpSongScanner * MpEngine::songScanner(void)
+ ?handleUsbMassStorageStartEvent@MpEngine@@AAEXXZ @ 53 NONAME ; void MpEngine::handleUsbMassStorageStartEvent(void)
+ ?saveActivityData@MpEngine@@QAEXAAVQByteArray@@@Z @ 54 NONAME ; void MpEngine::saveActivityData(class QByteArray &)
+ ?handleDeleteEnded@MpEngine@@QAEX_N@Z @ 55 NONAME ; void MpEngine::handleDeleteEnded(bool)
+ ?handleDiskEvent@MpEngine@@QAEXW4MpxDiskEvents@@@Z @ 56 NONAME ; void MpEngine::handleDiskEvent(enum MpxDiskEvents)
+ ?verifyUsbBlocking@MpEngine@@QAE_N_N@Z @ 57 NONAME ; bool MpEngine::verifyUsbBlocking(bool)
+ ?usbSynchronizationStarted@MpEngine@@IAEXXZ @ 58 NONAME ; void MpEngine::usbSynchronizationStarted(void)
+ ?handleUsbMassStorageEndEvent@MpEngine@@AAEXXZ @ 59 NONAME ; void MpEngine::handleUsbMassStorageEndEvent(void)
+ ?getStaticMetaObject@MpSongScanner@@SAABUQMetaObject@@XZ @ 60 NONAME ; struct QMetaObject const & MpSongScanner::getStaticMetaObject(void)
+ ?getStaticMetaObject@MpEngineFactory@@SAABUQMetaObject@@XZ @ 61 NONAME ; struct QMetaObject const & MpEngineFactory::getStaticMetaObject(void)
+ ??0MpEngine@@AAE@XZ @ 62 NONAME ; MpEngine::MpEngine(void)
+ ?isolatedCollectionOpened@MpEngine@@IAEXPAVMpMpxCollectionData@@@Z @ 63 NONAME ; void MpEngine::isolatedCollectionOpened(class MpMpxCollectionData *)
+ ?aboutToAddSongs@MpEngine@@IAEXH@Z @ 64 NONAME ; void MpEngine::aboutToAddSongs(int)
+ ??1MpEngine@@UAE@XZ @ 65 NONAME ; MpEngine::~MpEngine(void)
+ ?changeUsbBlockingState@MpEngine@@AAEXW4UsbBlockingState@1@@Z @ 66 NONAME ; void MpEngine::changeUsbBlockingState(enum MpEngine::UsbBlockingState)
+ ?metaObject@MpEngine@@UBEPBUQMetaObject@@XZ @ 67 NONAME ; struct QMetaObject const * MpEngine::metaObject(void) const
+ ??_EMpSongScanner@@UAE@I@Z @ 68 NONAME ; MpSongScanner::~MpSongScanner(unsigned int)
+ ?createIsolatedEngine@MpEngineFactory@@SAPAVMpEngine@@W4EngineMode@2@@Z @ 69 NONAME ; class MpEngine * MpEngineFactory::createIsolatedEngine(enum MpEngine::EngineMode)
+ ?equalizerReady@MpEngine@@IAEXXZ @ 70 NONAME ; void MpEngine::equalizerReady(void)
+ ?findAlbumSongs@MpEngine@@QAEXH@Z @ 71 NONAME ; void MpEngine::findAlbumSongs(int)
+ ?setPosition@MpEngine@@QAEXH@Z @ 72 NONAME ; void MpEngine::setPosition(int)
+ ?metaObject@MpEngineFactory@@UBEPBUQMetaObject@@XZ @ 73 NONAME ; struct QMetaObject const * MpEngineFactory::metaObject(void) const
+ ?handleEqualizerReady@MpEngine@@QAEXXZ @ 74 NONAME ; void MpEngine::handleEqualizerReady(void)
+ ?tr@MpSongScanner@@SA?AVQString@@PBD0@Z @ 75 NONAME ; class QString MpSongScanner::tr(char const *, char const *)
+ ??_EMpEngineFactory@@UAE@I@Z @ 76 NONAME ; MpEngineFactory::~MpEngineFactory(unsigned int)
+ ?skipForward@MpEngine@@QAEXXZ @ 77 NONAME ; void MpEngine::skipForward(void)
+ ?songData@MpEngine@@QAEPAVMpSongData@@XZ @ 78 NONAME ; class MpSongData * MpEngine::songData(void)
+ ?trUtf8@MpSongScanner@@SA?AVQString@@PBD0H@Z @ 79 NONAME ; class QString MpSongScanner::trUtf8(char const *, char const *, int)
+ ?close@MpEngineFactory@@SAXXZ @ 80 NONAME ; void MpEngineFactory::close(void)
+ ?libraryAboutToUpdate@MpEngine@@IAEXXZ @ 81 NONAME ; void MpEngine::libraryAboutToUpdate(void)
+ ?reopenCollection@MpEngine@@QAEXXZ @ 82 NONAME ; void MpEngine::reopenCollection(void)
+ ?trUtf8@MpEngine@@SA?AVQString@@PBD0H@Z @ 83 NONAME ; class QString MpEngine::trUtf8(char const *, char const *, int)
+ ?songsDeleted@MpEngine@@IAEX_N@Z @ 84 NONAME ; void MpEngine::songsDeleted(bool)
+ ?refreshLibrary@MpEngine@@QAEX_N@Z @ 85 NONAME ; void MpEngine::refreshLibrary(bool)
+ ?qt_metacast@MpEngine@@UAEPAXPBD@Z @ 86 NONAME ; void * MpEngine::qt_metacast(char const *)
+ ?startSeekForward@MpEngine@@QAEXXZ @ 87 NONAME ; void MpEngine::startSeekForward(void)
+ ?saveToPlaylist@MpEngine@@QAEXHAAV?$QList@H@@@Z @ 88 NONAME ; void MpEngine::saveToPlaylist(int, class QList<int> &)
+ ?qt_metacall@MpEngineFactory@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 89 NONAME ; int MpEngineFactory::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?qt_metacall@MpSongScanner@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 90 NONAME ; int MpSongScanner::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?tr@MpEngineFactory@@SA?AVQString@@PBD0H@Z @ 91 NONAME ; class QString MpEngineFactory::tr(char const *, char const *, int)
+ ?findPlaylists@MpEngine@@QAEXAAVQStringList@@@Z @ 92 NONAME ; void MpEngine::findPlaylists(class QStringList &)
+ ?isAutomaticScan@MpSongScanner@@QAE_NXZ @ 93 NONAME ; bool MpSongScanner::isAutomaticScan(void)
+ ??1MpEngineFactory@@UAE@XZ @ 94 NONAME ; MpEngineFactory::~MpEngineFactory(void)
+ ?staticMetaObject@MpEngineFactory@@2UQMetaObject@@B @ 95 NONAME ; struct QMetaObject const MpEngineFactory::staticMetaObject
+ ?playEmbedded@MpEngine@@QAEXVQString@@@Z @ 96 NONAME ; void MpEngine::playEmbedded(class QString)
+ ?shuffleAll@MpEngine@@QAEXXZ @ 97 NONAME ; void MpEngine::shuffleAll(void)
+ ?metaObject@MpSongScanner@@UBEPBUQMetaObject@@XZ @ 98 NONAME ; struct QMetaObject const * MpSongScanner::metaObject(void) const
+ ?renamePlaylist@MpEngine@@QAEXAAVQString@@@Z @ 99 NONAME ; void MpEngine::renamePlaylist(class QString &)
+ ?setRepeat@MpEngine@@QAEX_N@Z @ 100 NONAME ; void MpEngine::setRepeat(bool)
+ ?cancelCollectionRequest@MpEngine@@QAEXXZ @ 101 NONAME ; void MpEngine::cancelCollectionRequest(void)
+ ?trUtf8@MpEngineFactory@@SA?AVQString@@PBD0@Z @ 102 NONAME ; class QString MpEngineFactory::trUtf8(char const *, char const *)
+ ?containerContentsChanged@MpEngine@@IAEXXZ @ 103 NONAME ; void MpEngine::containerContentsChanged(void)
+ ?playPause@MpEngine@@QAEXXZ @ 104 NONAME ; void MpEngine::playPause(void)
+ ?playlistsRenamed@MpEngine@@IAEX_N@Z @ 105 NONAME ; void MpEngine::playlistsRenamed(bool)
+ ?startSeekBackward@MpEngine@@QAEXXZ @ 106 NONAME ; void MpEngine::startSeekBackward(void)
+ ?tr@MpEngineFactory@@SA?AVQString@@PBD0@Z @ 107 NONAME ; class QString MpEngineFactory::tr(char const *, char const *)
+ ?playEmbedded@MpEngine@@QAEXABVXQSharableFile@@@Z @ 108 NONAME ; void MpEngine::playEmbedded(class XQSharableFile const &)
+ ?handleUsbMtpStartEvent@MpEngine@@AAEXXZ @ 109 NONAME ; void MpEngine::handleUsbMtpStartEvent(void)
+ ?cancelScan@MpSongScanner@@QAEXXZ @ 110 NONAME ; void MpSongScanner::cancelScan(void)
+ ?trUtf8@MpSongScanner@@SA?AVQString@@PBD0@Z @ 111 NONAME ; class QString MpSongScanner::trUtf8(char const *, char const *)
+ ?activePreset@MpEngine@@QAEHXZ @ 112 NONAME ; int MpEngine::activePreset(void)
+ ?handleUsbEvent@MpEngine@@QAEXW4MpxUsbEvents@@@Z @ 113 NONAME ; void MpEngine::handleUsbEvent(enum MpxUsbEvents)
+ ?loadActivityData@MpEngine@@QAEXABVQByteArray@@@Z @ 114 NONAME ; void MpEngine::loadActivityData(class QByteArray const &)
+ ?sharedEngine@MpEngineFactory@@SAPAVMpEngine@@XZ @ 115 NONAME ; class MpEngine * MpEngineFactory::sharedEngine(void)
+ ?balance@MpEngine@@QAEHXZ @ 116 NONAME ; int MpEngine::balance(void)
+ ?createSharedEngine@MpEngineFactory@@SAPAVMpEngine@@VTUid@@W4EngineMode@2@@Z @ 117 NONAME ; class MpEngine * MpEngineFactory::createSharedEngine(class TUid, enum MpEngine::EngineMode)
+ ?handleUsbMtpNotActive@MpEngine@@AAEXXZ @ 118 NONAME ; void MpEngine::handleUsbMtpNotActive(void)
+ ?restorePathFailed@MpEngine@@IAEXXZ @ 119 NONAME ; void MpEngine::restorePathFailed(void)
+ ?usbBlocked@MpEngine@@IAEX_N@Z @ 120 NONAME ; void MpEngine::usbBlocked(bool)
+ ?handleScanEnded@MpSongScanner@@QAEXHH@Z @ 121 NONAME ; void MpSongScanner::handleScanEnded(int, int)
+ ?staticMetaObject@MpSongScanner@@2UQMetaObject@@B @ 122 NONAME ; struct QMetaObject const MpSongScanner::staticMetaObject
+ ?handleScanEnded@MpEngine@@QAEXHH@Z @ 123 NONAME ; void MpEngine::handleScanEnded(int, int)
+ ??_EMpEngine@@UAE@I@Z @ 124 NONAME ; MpEngine::~MpEngine(unsigned int)
+ ?skipBackward@MpEngine@@QAEXXZ @ 125 NONAME ; void MpEngine::skipBackward(void)
?qt_metacast@MpSongScanner@@UAEPAXPBD@Z @ 126 NONAME ; void * MpSongScanner::qt_metacast(char const *)
+ ?reorderPlaylist@MpEngine@@QAEXHHHH@Z @ 127 NONAME ; void MpEngine::reorderPlaylist(int, int, int, int)
+ ?scanFinished@MpSongScanner@@IAEXHH@Z @ 128 NONAME ; void MpSongScanner::scanFinished(int, int)
+ ?setLoudness@MpEngine@@QAEX_N@Z @ 129 NONAME ; void MpEngine::setLoudness(bool)
--- a/mpengine/eabi/mpengineu.def Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/eabi/mpengineu.def Tue Jul 06 14:13:36 2010 +0300
@@ -73,56 +73,59 @@
_ZN8MpEngine15handleScanEndedEii @ 72 NONAME
_ZN8MpEngine15reorderPlaylistEiiii @ 73 NONAME
_ZN8MpEngine16disableEqualizerEv @ 74 NONAME
- _ZN8MpEngine16playlistsRenamedEb @ 75 NONAME
- _ZN8MpEngine16reopenCollectionEv @ 76 NONAME
- _ZN8MpEngine16startSeekForwardEv @ 77 NONAME
- _ZN8MpEngine16staticMetaObjectE @ 78 NONAME DATA 16
- _ZN8MpEngine17handleDeleteEndedEb @ 79 NONAME
- _ZN8MpEngine17handleScanStartedEv @ 80 NONAME
- _ZN8MpEngine17startSeekBackwardEv @ 81 NONAME
- _ZN8MpEngine17verifyUsbBlockingEb @ 82 NONAME
- _ZN8MpEngine18openCollectionItemEi @ 83 NONAME
- _ZN8MpEngine19getStaticMetaObjectEv @ 84 NONAME
- _ZN8MpEngine19handleDeleteStartedE18TCollectionContexti @ 85 NONAME
- _ZN8MpEngine20checkForSystemEventsEv @ 86 NONAME
- _ZN8MpEngine20handleEqualizerReadyEv @ 87 NONAME
- _ZN8MpEngine20handleUsbMtpEndEventEv @ 88 NONAME
- _ZN8MpEngine20libraryAboutToUpdateEv @ 89 NONAME
- _ZN8MpEngine20libraryRefreshNeededEv @ 90 NONAME
- _ZN8MpEngine21handleUsbMtpNotActiveEv @ 91 NONAME
- _ZN8MpEngine21saveToCurrentPlaylistER5QListIiEP19MpMpxCollectionData @ 92 NONAME
- _ZN8MpEngine21unableToCotinueDueUSBEv @ 93 NONAME
- _ZN8MpEngine22changeUsbBlockingStateENS_16UsbBlockingStateE @ 94 NONAME
- _ZN8MpEngine22handleUsbMtpStartEventEv @ 95 NONAME
- _ZN8MpEngine22openIsolatedCollectionE18TCollectionContext @ 96 NONAME
- _ZN8MpEngine23cancelCollectionRequestEv @ 97 NONAME
- _ZN8MpEngine24collectionPlaylistOpenedEv @ 98 NONAME
- _ZN8MpEngine24containerContentsChangedEv @ 99 NONAME
- _ZN8MpEngine24isolatedCollectionOpenedEP19MpMpxCollectionData @ 100 NONAME
- _ZN8MpEngine25releaseIsolatedCollectionEv @ 101 NONAME
- _ZN8MpEngine25usbSynchronizationStartedEv @ 102 NONAME
- _ZN8MpEngine26usbSynchronizationFinishedEv @ 103 NONAME
- _ZN8MpEngine28handleUsbMassStorageEndEventEv @ 104 NONAME
- _ZN8MpEngine30handleUsbMassStorageStartEventEv @ 105 NONAME
- _ZN8MpEngine4backEv @ 106 NONAME
- _ZN8MpEngine4stopEv @ 107 NONAME
- _ZN8MpEngine7balanceEv @ 108 NONAME
- _ZN8MpEngine8loudnessEv @ 109 NONAME
- _ZN8MpEngine8songDataEv @ 110 NONAME
- _ZN8MpEngine9playPauseEv @ 111 NONAME
- _ZN8MpEngine9setRepeatEb @ 112 NONAME
- _ZN8MpEngineC1Ev @ 113 NONAME
- _ZN8MpEngineC2Ev @ 114 NONAME
- _ZN8MpEngineD0Ev @ 115 NONAME
- _ZN8MpEngineD1Ev @ 116 NONAME
- _ZN8MpEngineD2Ev @ 117 NONAME
- _ZNK13MpSongScanner10metaObjectEv @ 118 NONAME
- _ZNK15MpEngineFactory10metaObjectEv @ 119 NONAME
- _ZNK8MpEngine10metaObjectEv @ 120 NONAME
- _ZTI13MpSongScanner @ 121 NONAME
- _ZTI15MpEngineFactory @ 122 NONAME
- _ZTI8MpEngine @ 123 NONAME
- _ZTV13MpSongScanner @ 124 NONAME
- _ZTV15MpEngineFactory @ 125 NONAME
- _ZTV8MpEngine @ 126 NONAME
+ _ZN8MpEngine16loadActivityDataERK10QByteArray @ 75 NONAME
+ _ZN8MpEngine16playlistsRenamedEb @ 76 NONAME
+ _ZN8MpEngine16reopenCollectionEv @ 77 NONAME
+ _ZN8MpEngine16saveActivityDataER10QByteArray @ 78 NONAME
+ _ZN8MpEngine16startSeekForwardEv @ 79 NONAME
+ _ZN8MpEngine16staticMetaObjectE @ 80 NONAME DATA 16
+ _ZN8MpEngine17handleDeleteEndedEb @ 81 NONAME
+ _ZN8MpEngine17handleScanStartedEv @ 82 NONAME
+ _ZN8MpEngine17restorePathFailedEv @ 83 NONAME
+ _ZN8MpEngine17startSeekBackwardEv @ 84 NONAME
+ _ZN8MpEngine17verifyUsbBlockingEb @ 85 NONAME
+ _ZN8MpEngine18openCollectionItemEi @ 86 NONAME
+ _ZN8MpEngine19getStaticMetaObjectEv @ 87 NONAME
+ _ZN8MpEngine19handleDeleteStartedE18TCollectionContexti @ 88 NONAME
+ _ZN8MpEngine20checkForSystemEventsEv @ 89 NONAME
+ _ZN8MpEngine20handleEqualizerReadyEv @ 90 NONAME
+ _ZN8MpEngine20handleUsbMtpEndEventEv @ 91 NONAME
+ _ZN8MpEngine20libraryAboutToUpdateEv @ 92 NONAME
+ _ZN8MpEngine20libraryRefreshNeededEv @ 93 NONAME
+ _ZN8MpEngine21handleUsbMtpNotActiveEv @ 94 NONAME
+ _ZN8MpEngine21saveToCurrentPlaylistER5QListIiEP19MpMpxCollectionData @ 95 NONAME
+ _ZN8MpEngine21unableToCotinueDueUSBEv @ 96 NONAME
+ _ZN8MpEngine22changeUsbBlockingStateENS_16UsbBlockingStateE @ 97 NONAME
+ _ZN8MpEngine22handleUsbMtpStartEventEv @ 98 NONAME
+ _ZN8MpEngine22openIsolatedCollectionE18TCollectionContext @ 99 NONAME
+ _ZN8MpEngine23cancelCollectionRequestEv @ 100 NONAME
+ _ZN8MpEngine24collectionPlaylistOpenedEv @ 101 NONAME
+ _ZN8MpEngine24containerContentsChangedEv @ 102 NONAME
+ _ZN8MpEngine24isolatedCollectionOpenedEP19MpMpxCollectionData @ 103 NONAME
+ _ZN8MpEngine25releaseIsolatedCollectionEv @ 104 NONAME
+ _ZN8MpEngine25usbSynchronizationStartedEv @ 105 NONAME
+ _ZN8MpEngine26usbSynchronizationFinishedEv @ 106 NONAME
+ _ZN8MpEngine28handleUsbMassStorageEndEventEv @ 107 NONAME
+ _ZN8MpEngine30handleUsbMassStorageStartEventEv @ 108 NONAME
+ _ZN8MpEngine4backEv @ 109 NONAME
+ _ZN8MpEngine4stopEv @ 110 NONAME
+ _ZN8MpEngine7balanceEv @ 111 NONAME
+ _ZN8MpEngine8loudnessEv @ 112 NONAME
+ _ZN8MpEngine8songDataEv @ 113 NONAME
+ _ZN8MpEngine9playPauseEv @ 114 NONAME
+ _ZN8MpEngine9setRepeatEb @ 115 NONAME
+ _ZN8MpEngineC1Ev @ 116 NONAME
+ _ZN8MpEngineC2Ev @ 117 NONAME
+ _ZN8MpEngineD0Ev @ 118 NONAME
+ _ZN8MpEngineD1Ev @ 119 NONAME
+ _ZN8MpEngineD2Ev @ 120 NONAME
+ _ZNK13MpSongScanner10metaObjectEv @ 121 NONAME
+ _ZNK15MpEngineFactory10metaObjectEv @ 122 NONAME
+ _ZNK8MpEngine10metaObjectEv @ 123 NONAME
+ _ZTI13MpSongScanner @ 124 NONAME
+ _ZTI15MpEngineFactory @ 125 NONAME
+ _ZTI8MpEngine @ 126 NONAME
+ _ZTV13MpSongScanner @ 127 NONAME
+ _ZTV15MpEngineFactory @ 128 NONAME
+ _ZTV8MpEngine @ 129 NONAME
--- a/mpengine/inc/mpmpxcollectionframeworkwrapper.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/inc/mpmpxcollectionframeworkwrapper.h Tue Jul 06 14:13:36 2010 +0300
@@ -68,6 +68,9 @@
void openShuffleAllSongsPath();
+ void savePath( QByteArray &data );
+ void restorePath( const QByteArray &data );
+
signals:
void collectionPlaylistOpened();
@@ -80,6 +83,7 @@
void isolatedCollectionOpened( MpMpxCollectionData* collectionData );
void containerContentsChanged();
+ void restorePathFailed();
private:
--- a/mpengine/inc/mpmpxcollectionframeworkwrapper_p.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/inc/mpmpxcollectionframeworkwrapper_p.h Tue Jul 06 14:13:36 2010 +0300
@@ -85,6 +85,9 @@
MpMpxCollectionData *collectionData();
void openShuffleAllSongsPath();
+
+ void savePath( QByteArray &data );
+ void restorePath( const QByteArray &data );
private:
@@ -96,6 +99,7 @@
void HandleCollectionMediaL( const CMPXMedia& aMedia, TInt aError );
void HandleOperationCompleteL( TCHelperOperation aOperation, TInt aErr, void* aArgument );
void HandleIsolatedOpenL( const CMPXMedia& aEntries, TInt aError );
+ void HandleIsolatedOpenRestorePathL( const CMPXCollectionPath& aPath, TInt aError );
void HandleFindAllL( const CMPXMedia& aResults, TBool aComplete, TInt aError );
void DoInitL();
@@ -129,6 +133,8 @@
void PreparePlaylistMediaL( CMPXMedia& aMedia, QList<int> &selection, MpMpxCollectionData *collectionData );
void createPlaybackUtilityL();
void DoPlayAllSongsPlaylistL();
+ void DoSavePathL( QByteArray &data );
+ void DoRestorePathL( const QByteArray &data );
private:
@@ -149,6 +155,9 @@
TBool iShuffleFeature;
TBool iReopen;
TBool iShuffleAll;
+ TBool iRestoreDefaultPath;
+ TInt iRestorePathIndex;
+ TMPXItemId iRestorePathIndexId;
};
--- a/mpengine/inc/mpmpxisolatedcollectionhelper.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/inc/mpmpxisolatedcollectionhelper.h Tue Jul 06 14:13:36 2010 +0300
@@ -23,6 +23,7 @@
class CMPXCollectionOpenUtility;
class CMPXCollectionPath;
+const TInt KIncrementalNullOffset = 0;
/*!
\class MpMpxIsolatedCollectionHelperObserver
\brief Observer interface for class CMpMpxIsolatedCollectionHelper
@@ -35,17 +36,23 @@
virtual void HandleIsolatedOpenL( const CMPXMedia& aEntries,
TInt aError ) = 0;
+
+ virtual void HandleIsolatedOpenRestorePathL( const CMPXCollectionPath& aPath,
+ TInt aError ) = 0;
};
class CMpMpxIsolatedCollectionHelper : public CBase,
public MMPXCollectionObserver
{
public:
-
+ enum MpOpenMode{
+ DefaultMode = 0,
+ RestorePathMode
+ };
static CMpMpxIsolatedCollectionHelper* NewL( MMpMpxIsolatedCollectionHelperObserver* aObserver );
static CMpMpxIsolatedCollectionHelper* NewLC( MMpMpxIsolatedCollectionHelperObserver* aObserver );
virtual ~CMpMpxIsolatedCollectionHelper();
- void OpenCollectionL( CMPXCollectionPath& aPath );
+ void OpenCollectionL( CMPXCollectionPath& aPath, TInt aIndex = KIncrementalNullOffset, MpOpenMode aMode = DefaultMode );
private:
CMpMpxIsolatedCollectionHelper( MMpMpxIsolatedCollectionHelperObserver* aObserver );
@@ -60,6 +67,7 @@
MMpMpxIsolatedCollectionHelperObserver* iObserver;
CMPXCollectionOpenUtility* iIncrementalOpenUtil; //owned
TBool iFirstIncrementalOpen;
+ MpOpenMode iOpenMode;
};
--- a/mpengine/src/mpengine.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/src/mpengine.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -168,6 +168,14 @@
*/
/*!
+ \fn void restorePathFailed()
+
+ This signal is emitted when an the previous path cannot be restored
+ (i.e. no music in collection).
+
+ */
+
+/*!
\fn void containerContentsChanged()
This signal is emitted when items are removed or inserted on the current
@@ -266,6 +274,9 @@
connect( mMpxCollectionWrapper, SIGNAL( songsDeleted( bool ) ),
this, SLOT( handleDeleteEnded( bool ) ),
Qt::QueuedConnection );
+ connect( mMpxCollectionWrapper, SIGNAL( restorePathFailed() ),
+ this, SIGNAL( restorePathFailed() ),
+ Qt::QueuedConnection );
}
if( mode == StandAlone ){
@@ -970,6 +981,22 @@
}
/*!
+ Save data needed to later restore state (activity)
+ */
+void MpEngine::saveActivityData( QByteArray &data )
+{
+ mMpxCollectionWrapper->savePath( data );
+}
+
+/*!
+ Restore state from activity data
+ */
+void MpEngine::loadActivityData( const QByteArray &data )
+{
+ mMpxCollectionWrapper->restorePath( data );
+}
+
+/*!
Slot to handle equalizer ready signal from equalizer wrapper.
*/
void MpEngine::handleEqualizerReady()
--- a/mpengine/src/mpmediakeyhandler_p.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/src/mpmediakeyhandler_p.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -405,13 +405,63 @@
TMPXPlaybackState playerState( iPlaybackUtility->StateL() );
switch ( aCommandId ) {
+ case EPbCmdPlayPause:
+ if ( playerState == EPbStatePlaying || playerState == EPbStatePaused
+ || playerState == EPbStateStopped ) {
+ iPlaybackUtility->CommandL( EPbCmdPlayPause );
+ }
+ break;
+ case EPbCmdPlay:
+ if ( playerState == EPbStateStopped || playerState == EPbStatePaused ) {
+ iPlaybackUtility->CommandL( EPbCmdPlay );
+ }
+ break;
+ case EPbCmdStop:
+ if ( playerState == EPbStatePlaying || playerState == EPbStatePaused ) {
+ iPlaybackUtility->CommandL( EPbCmdStop );
+ }
+ break;
+ case EPbCmdPause:
+ if ( playerState == EPbStatePlaying ) {
+ iPlaybackUtility->CommandL( EPbCmdPause );
+ }
+ break;
+ case EPbCmdStartSeekBackward:
+ if ( playerState == EPbStatePlaying || playerState == EPbStatePaused ) {
+ iPlaybackUtility->CommandL( EPbCmdStartSeekBackward );
+ }
+ break;
+ case EPbCmdStartSeekForward:
+ if ( playerState == EPbStatePlaying || playerState == EPbStatePaused ) {
+ iPlaybackUtility->CommandL( EPbCmdStartSeekForward );
+ }
+ break;
+ case EPbCmdStopSeeking:
+ if ( playerState == EPbStateSeekingBackward || playerState == EPbStateSeekingForward ) {
+ iPlaybackUtility->CommandL( EPbCmdStopSeeking );
+ }
+ break;
+ case EPbCmdPrevious:
+ if ( playerState == EPbStatePlaying || playerState == EPbStatePaused
+ || playerState == EPbStateStopped ) {
+ iPlaybackUtility->CommandL( EPbCmdPrevious );
+ }
+ break;
+ case EPbCmdNext:
+ if ( playerState == EPbStatePlaying || playerState == EPbStatePaused
+ || playerState == EPbStateStopped ) {
+ iPlaybackUtility->CommandL( EPbCmdNext );
+ }
+ break;
case EPbCmdIncreaseVolume:
- if ( EPbStatePlaying == playerState ) {
+ if ( playerState == EPbStatePlaying || playerState == EPbStatePaused
+ || playerState == EPbStateStopped ) {
iPlaybackUtility->CommandL( EPbCmdIncreaseVolume );
}
break;
case EPbCmdDecreaseVolume:
- if ( EPbStatePlaying == playerState ) {
+ if ( playerState == EPbStatePlaying || playerState == EPbStatePaused
+ || playerState == EPbStateStopped ) {
iPlaybackUtility->CommandL( EPbCmdDecreaseVolume );
}
break;
@@ -419,7 +469,6 @@
break;
}
}
-
}
// ---------------------------------------------------------------------------
@@ -431,7 +480,6 @@
static_cast<MpMediaKeyHandlerPrivate*>( aPtr )->HandleRepeatEvent();
-
return KErrNone;
}
--- a/mpengine/src/mpmediakeyremconresponse.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/src/mpmediakeyremconresponse.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -70,6 +70,54 @@
{
switch ( aOperationId )
{
+ case ERemConCoreApiPausePlayFunction:
+ {
+ iRemConCoreApiTarget.PausePlayFunctionResponse( iStatus, KErrNone );
+ SetActive();
+ break;
+ }
+ case ERemConCoreApiPlay:
+ {
+ iRemConCoreApiTarget.PlayResponse( iStatus, KErrNone );
+ SetActive();
+ break;
+ }
+ case ERemConCoreApiStop:
+ {
+ iRemConCoreApiTarget.StopResponse( iStatus, KErrNone );
+ SetActive();
+ break;
+ }
+ case ERemConCoreApiPause:
+ {
+ iRemConCoreApiTarget.PauseResponse( iStatus, KErrNone );
+ SetActive();
+ break;
+ }
+ case ERemConCoreApiRewind:
+ {
+ iRemConCoreApiTarget.RewindResponse( iStatus, KErrNone );
+ SetActive();
+ break;
+ }
+ case ERemConCoreApiFastForward:
+ {
+ iRemConCoreApiTarget.FastForwardResponse( iStatus, KErrNone );
+ SetActive();
+ break;
+ }
+ case ERemConCoreApiBackward:
+ {
+ iRemConCoreApiTarget.BackwardResponse( iStatus, KErrNone );
+ SetActive();
+ break;
+ }
+ case ERemConCoreApiForward:
+ {
+ iRemConCoreApiTarget.ForwardResponse( iStatus, KErrNone );
+ SetActive();
+ break;
+ }
case ERemConCoreApiVolumeUp:
{
iRemConCoreApiTarget.VolumeUpResponse( iStatus, KErrNone );
--- a/mpengine/src/mpmpxcollectionframeworkwrapper.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/src/mpmpxcollectionframeworkwrapper.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -294,6 +294,22 @@
{
d_ptr->openShuffleAllSongsPath();
}
+
+/*!
+ Called to save playback data used for publishing activity (i.e. restore path)
+ */
+void MpMpxCollectionFrameworkWrapper::savePath( QByteArray &data )
+{
+ d_ptr->savePath( data );
+}
+
+/*!
+ Called to load playback data used from returning activity (i.e. restore path)
+ */
+void MpMpxCollectionFrameworkWrapper::restorePath( const QByteArray &data )
+{
+ return d_ptr->restorePath( data );
+}
/*!
Cancels CollectionUiHelper request.
*/
--- a/mpengine/src/mpmpxcollectionframeworkwrapper_p.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/src/mpmpxcollectionframeworkwrapper_p.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -82,7 +82,9 @@
iRepeatFeature( ETrue ),
iShuffleFeature( ETrue ),
iReopen( EFalse ),
- iShuffleAll( EFalse )
+ iShuffleAll( EFalse ),
+ iRestoreDefaultPath( EFalse ),
+ iRestorePathIndex(0)
{
TX_LOG
}
@@ -382,6 +384,34 @@
/*!
\internal
+ */
+void MpMpxCollectionFrameworkWrapperPrivate::savePath( QByteArray &data )
+{
+ TX_ENTRY
+ TRAPD( err, DoSavePathL( data ) );
+ if ( err != KErrNone ) {
+ TX_LOG_ARGS( "Error: " << err << "; should never get here." );
+ }
+ TX_EXIT
+
+}
+
+/*!
+ \internal
+ */
+void MpMpxCollectionFrameworkWrapperPrivate::restorePath( const QByteArray &data )
+{
+ TX_ENTRY
+ TRAPD( err, DoRestorePathL( data ) );
+ if ( err != KErrNone ) {
+ TX_LOG_ARGS( "Error: " << err << "; should never get here." );
+ }
+ TX_EXIT
+}
+
+
+/*!
+ \internal
Result of open or re-open operation to the Collection Framework.
*/
void MpMpxCollectionFrameworkWrapperPrivate::HandleOpenL(
@@ -512,6 +542,77 @@
/*!
\internal
*/
+void MpMpxCollectionFrameworkWrapperPrivate::HandleIsolatedOpenRestorePathL( const CMPXCollectionPath& aPath, TInt aError )
+{
+ TX_ENTRY_ARGS( "aError=" << aError );
+ if ( aError == KErrNone ) {
+ CMPXCollectionPath* cpath = CMPXCollectionPath::NewL( aPath );
+ CleanupStack::PushL( cpath );
+ if ( cpath->Count() <= 0 ) {
+ //There are no entries on the path
+ if ( !iRestoreDefaultPath ) {
+ //Try restoring default path if not already tried
+ //This is a special case where a playlist's songs where on the MMC and it was removed
+ iRestoreDefaultPath = ETrue;
+ iRestorePathIndex = 0;
+ CMPXCollectionPath* cpath = iCollectionUiHelper->MusicAllSongsPathL();
+ CleanupStack::PushL( cpath );
+ iIsolatedCollectionHelper->OpenCollectionL( *cpath, iRestorePathIndex, CMpMpxIsolatedCollectionHelper::RestorePathMode );
+ CleanupStack::PopAndDestroy( cpath );
+ }
+ else {
+ //emit signal to go back to collection view because there is no music
+ emit q_ptr->restorePathFailed();
+ }
+ }
+ else if ( iRestorePathIndex ) {
+ //If RestorePathIndex equals zero there is no need to check with previous index
+ //just go and create playlist below
+ if ( iRestorePathIndex == cpath->IndexOfId( iRestorePathIndexId ) ) {
+ //Song is in path and maintains previous position
+ cpath->Set( iRestorePathIndex );
+ CMPXCollectionPlaylist* playList = CMPXCollectionPlaylist::NewL( *cpath );
+ CleanupStack::PushL( playList );
+ createPlaybackUtilityL();
+ iPlaybackUtility->InitL( *playList, EFalse );
+ CleanupStack::PopAndDestroy( playList );
+ }
+ else {
+ //Re open path starting at the beginning of the collection
+ iRestorePathIndex = 0;
+ cpath->Back();
+ iIsolatedCollectionHelper->OpenCollectionL( *cpath, iRestorePathIndex, CMpMpxIsolatedCollectionHelper::RestorePathMode );
+ }
+ }
+ else {
+ //We create a playlist right away since there is no need to check the index for the first element
+ CMPXCollectionPlaylist* playList = CMPXCollectionPlaylist::NewL( *cpath );
+ CleanupStack::PushL( playList );
+ createPlaybackUtilityL();
+ iPlaybackUtility->InitL( *playList, EFalse );
+ CleanupStack::PopAndDestroy( playList );
+ }
+ CleanupStack::PopAndDestroy( cpath );
+ }
+ else if ( aError == KErrNotFound ) {
+ //Path not found (e.g. MMC removed) try restoring default path
+ iRestoreDefaultPath = ETrue;
+ iRestorePathIndex = 0;
+ CMPXCollectionPath* cpath = iCollectionUiHelper->MusicAllSongsPathL();
+ CleanupStack::PushL( cpath );
+ iIsolatedCollectionHelper->OpenCollectionL( *cpath, iRestorePathIndex, CMpMpxIsolatedCollectionHelper::RestorePathMode );
+ CleanupStack::PopAndDestroy( cpath );
+ }
+ else {
+ //Open path failed
+ TX_LOG_ARGS( "Error: " << aError << "; should never get here." );
+ }
+ TX_EXIT
+}
+
+/*!
+ \internal
+ */
void MpMpxCollectionFrameworkWrapperPrivate::HandleFindAllL( const CMPXMedia& aResults, TBool aComplete, TInt aError )
{
Q_UNUSED( aComplete );
@@ -1294,5 +1395,77 @@
TX_EXIT
}
+/*!
+ \internal
+ */
+void MpMpxCollectionFrameworkWrapperPrivate::DoSavePathL( QByteArray &data )
+{
+ TX_ENTRY
+ CBufFlat* buffer = CBufFlat::NewL( 256 );
+ CleanupStack::PushL( buffer );
+ TBufBuf bufBuf;
+ bufBuf.Set( *buffer, 0, TBufBuf::EWrite );
+
+ RWriteStream writeStream( &bufBuf );
+ writeStream.PushL();
+
+ if ( iPlaybackUtility ) {
+ MMPXSource* source = iPlaybackUtility->Source();
+ CMPXCollectionPlaylist* playList( NULL );
+ if( source ) {
+ playList = source->PlaylistL();
+ if ( playList ) {
+ CleanupStack::PushL( playList );
+ const CMPXCollectionPath& cpath = playList->Path();
+ writeStream << cpath;
+ writeStream.CommitL();
+ CleanupStack::PopAndDestroy( playList );
+ }
+ }
+ }
+ data.append(reinterpret_cast<const char*>(buffer->Ptr(0).Ptr()) ,buffer->Ptr(0).Length());
+ CleanupStack::PopAndDestroy( 2, buffer ); //writeStream and buffer
+ TX_EXIT
+}
+
+/*!
+ \internal
+ */
+void MpMpxCollectionFrameworkWrapperPrivate::DoRestorePathL( const QByteArray &data )
+{
+ TX_ENTRY
+ int dataSize = data.size();
+ if ( dataSize > 0 ) {
+ TPtrC8 activityDataDescriptor( reinterpret_cast<const unsigned char*> ( data.constData() ), data.size() );
+
+ //Take a copy of the data
+ CBufFlat* buffer = CBufFlat::NewL( dataSize );
+ CleanupStack::PushL( buffer );
+ buffer->InsertL( 0, activityDataDescriptor, dataSize );
+
+ TBufBuf bufBuf;
+ bufBuf.Set( *buffer, 0, TBufBuf::ERead );
+ RReadStream readStream( &bufBuf );
+ readStream.PushL();
+
+ CMPXCollectionPath* cpath( NULL );
+ cpath = CMPXCollectionPath::NewL(readStream);
+ CleanupStack::PushL(cpath);
+ iRestorePathIndex = 0;
+ if( cpath->Levels() ) {
+ iRestorePathIndexId = cpath->Id();
+ iRestorePathIndex = cpath->Index();
+ cpath->Back();
+ }
+ if ( !iIsolatedCollectionHelper ) {
+ iIsolatedCollectionHelper = CMpMpxIsolatedCollectionHelper::NewL( this );
+ }
+ iIsolatedCollectionHelper->OpenCollectionL( *cpath, iRestorePathIndex, CMpMpxIsolatedCollectionHelper::RestorePathMode );
+
+ CleanupStack::PopAndDestroy( cpath );
+ CleanupStack::PopAndDestroy( 2, buffer ); //readStream and buffer
+ }
+ TX_EXIT
+}
//EOF
--- a/mpengine/src/mpmpxisolatedcollectionhelper.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpengine/src/mpmpxisolatedcollectionhelper.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -28,7 +28,7 @@
const TInt KIncrementalDelayNone = 0;
const TInt KIncrementalDelayHalfSecond = 1000000;
const TInt KIncrementalFetchBlockSize = 20;
-const TInt KIncrementalNullOffset = 0;
+
/*!
@@ -78,10 +78,10 @@
\internal
Opens an isolated collection with the /a path.
*/
-void CMpMpxIsolatedCollectionHelper::OpenCollectionL( CMPXCollectionPath& aPath )
+void CMpMpxIsolatedCollectionHelper::OpenCollectionL( CMPXCollectionPath& aPath, TInt aIndex, MpOpenMode aMode )
{
//Using incremental open to open the collection.
-
+ iOpenMode = aMode;
// Cancel any reads
iIncrementalOpenUtil->Stop();
@@ -92,7 +92,7 @@
TArray<TMPXAttribute> ary = attrs.Array();
iIncrementalOpenUtil->SetDelay( KIncrementalDelayNone );
iIncrementalOpenUtil->StartL( aPath, ary, KIncrementalFetchBlockSize,
- KIncrementalNullOffset, CMPXCollectionOpenUtility::EFetchNormal );
+ aIndex, CMPXCollectionOpenUtility::EFetchNormal );
iIncrementalOpenUtil->SetDelay( KIncrementalDelayHalfSecond );
CleanupStack::PopAndDestroy( &attrs );
}
@@ -131,8 +131,22 @@
{
if ( iFirstIncrementalOpen )
{
- iObserver->HandleIsolatedOpenL( aEntries, aError );
+ CMPXCollectionPath* cPath = NULL;
iFirstIncrementalOpen = EFalse;
+ switch( iOpenMode ) {
+ case RestorePathMode:
+ cPath = iIncrementalOpenUtil->PathL();
+ CleanupStack::PushL( cPath );
+ iObserver->HandleIsolatedOpenRestorePathL( *cPath, aError );
+ CleanupStack::PopAndDestroy( cPath );
+
+ break;
+ case DefaultMode:
+ default:
+ iObserver->HandleIsolatedOpenL( aEntries, aError );
+ break;
+ }
+
}
}
--- a/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -867,30 +867,27 @@
{
MPX_FUNC("CMPXDbManager::CloseAllDatabases");
- if (iInitialized)
- {
- // Close all prepared statements if a db is closed
- //
- ResetPreparedQueries();
+ // Close all prepared statements if a db is closed
+ //
+ ResetPreparedQueries();
- TInt count(iDatabaseHandles.Count());
- for (TInt i = 0; i < count; ++i)
- {
- delete iDatabaseHandles[i].iAliasname;
- iDatabaseHandles[i].iAliasname = 0;
+ TInt count(iDatabaseHandles.Count());
+ for (TInt i = 0; i < count; ++i)
+ {
+ delete iDatabaseHandles[i].iAliasname;
+ iDatabaseHandles[i].iAliasname = 0;
#ifdef __RAMDISK_PERF_ENABLE
- RemoveDummyFile(i);
- delete iDatabaseHandles[i].iOrigFullFilePath;
- iDatabaseHandles[i].iOrigFullFilePath = 0;
- delete iDatabaseHandles[i].iTargetFullFilePath;
- iDatabaseHandles[i].iTargetFullFilePath = 0;
+ RemoveDummyFile(i);
+ delete iDatabaseHandles[i].iOrigFullFilePath;
+ iDatabaseHandles[i].iOrigFullFilePath = 0;
+ delete iDatabaseHandles[i].iTargetFullFilePath;
+ iDatabaseHandles[i].iTargetFullFilePath = 0;
#endif //__RAMDISK_PERF_ENABLE
- }
+ }
- iDatabaseHandles.Reset();
- iDatabase.Close();
- iInitialized = EFalse;
- }
+ iDatabaseHandles.Reset();
+ iDatabase.Close();
+ iInitialized = EFalse;
}
// ----------------------------------------------------------------------------
@@ -1732,6 +1729,16 @@
}
// ----------------------------------------------------------------------------
+// CleanupTransaction: close transaction when creating DB
+// ----------------------------------------------------------------------------
+//
+static void CleanupTransaction(TAny * aDatabase)
+ {
+ TInt err = ((RSqlDatabase*)aDatabase)->Exec(KRollbackTransaction);
+ MPX_DEBUG2("CMPXDbManager CleanupTransaction rollback, error %d", err);
+ }
+
+// ----------------------------------------------------------------------------
// CMPXDbManager::CreateTablesL
// ----------------------------------------------------------------------------
//
@@ -1739,11 +1746,26 @@
RSqlDatabase& aDatabase,
TBool aCorrupt)
{
+ MPX_FUNC("CMPXDbManager::CreateTablesL");
+ TInt err = aDatabase.Exec(KBeginTransaction);
+ if (err < 0)
+ {
+ MPX_DEBUG2("SQL BEGIN TRANSACTION error %d", err);
+ User::Leave (err);
+ }
+ CleanupStack::PushL(TCleanupItem(&CleanupTransaction, &aDatabase));
TInt count(iTables.Count());
for (TInt i = 0; i < count; ++i)
{
iTables[i]->CreateTableL(aDatabase, aCorrupt);
}
+ err = aDatabase.Exec(KCommitTransaction);
+ if (err < 0)
+ {
+ MPX_DEBUG2("SQL COMMIT TRANSACTION error %d", err);
+ User::Leave (err);
+ }
+ CleanupStack::Pop();
}
// ----------------------------------------------------------------------------
--- a/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxcollectiondbdef.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxcollectiondbdef.h Tue Jul 06 14:13:36 2010 +0300
@@ -28,9 +28,11 @@
// Db filename
#ifdef ABSTRACTAUDIOALBUM_INCLUDED
-_LIT(KMCDbFile, "mpxv2_6.db");
+_LIT(KMCDbFile, "mpxv3_0.db");
+_LIT(KMCDbFileEMMC, "mpxv3_0i.db");
#else
-_LIT(KMCDbFile, "mpxv2_5.db");
+_LIT(KMCDbFile, "mpxv3_0n.db");
+_LIT(KMCDbFileEMMC, "mpxv3_0in.db");
#endif // ABSTRACTAUDIOALBUM_INCLUDED
// Collection Db resource file
_LIT(KMPXCollectionDbResourceFile, "mpxcollectiondbhgres.rsc");
@@ -133,6 +135,8 @@
_LIT(KMCPlaylistSongInfoVolumeId, "VolumeId");
_LIT(KMCPlaylistSongInfoDbFlag, "DbFlag");
+// == Album TABLE FIELDS ==============================================
+_LIT(KMCAlbumArtistName, "ArtistName");
// == Auxiliary TABLE FIELDS ==================================================
// Version of database
// The version integer looks like:
--- a/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbabstractalbum.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbabstractalbum.h Tue Jul 06 14:13:36 2010 +0300
@@ -156,6 +156,25 @@
*/
void GetAllItemsWithNoSongL(RArray<TUint32>& aItemsIds);
+ /**
+ * Create Thumbnail Manager session.
+ * Create Thumbnail Manager session when needed: rename/delete entries in Thumbnail table.
+ */
+ void CreateTNMSessionL();
+
+ /**
+ * Remove all abstractalbum items with no songs associated,
+ * TN entry and .alb files also removed.
+ *
+ */
+ void RemoveAbstractAlbumsWithNoSongL();
+
+ /**
+ /* When refresh library, Remove .alb entry from AbstractAlnum table, TN table if .alb files already deleted
+ /* from file system via file manager.
+ */
+ void AbstractAlbumCleanUpL();
+
private:
--- a/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbalbum.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbalbum.h Tue Jul 06 14:13:36 2010 +0300
@@ -30,7 +30,7 @@
{
public:
virtual TInt HandleIsUnknownArtistL(TUint32 aId) = 0;
- virtual TUint32 HandleArtistForAlbumL( const TUint32 aId ) = 0;
+ virtual HBufC* HandleArtistForAlbumL( const TUint32 aId ) = 0;
/**
* HandleAlbumartForAlbumL.
* @param aId, The album ID.
@@ -86,7 +86,7 @@
* into consideration when generating the unique row id
* @return The unique id of the row added.
*/
- TUint32 AddItemL(const TDesC& aName, TUint32 aArtist, const TDesC& aArt, TInt aDriveId, TBool& aNewRecord,
+ TUint32 AddItemL(const TDesC& aName, const TDesC& aArtistName, const TDesC& aArt, TInt aDriveId, TBool& aNewRecord,
TBool aCaseSensitive = ETrue);
/**
@@ -171,7 +171,12 @@
TBool IsUnknownArtistL(TUint32 aId);
- TUint32 ArtistForAlbumL(const TUint32 aId);
+ /**
+ * Get the ArtistName of song which belongs to the specified Album.
+ * @param aId The ID of the album
+ * @returns alternative artistname retrieved in the specified Album.
+ */
+ HBufC* ArtistForAlbumL(const TUint32 aId);
/**
* Get the Albumart of song which belongs to the specified Album.
* @param aId The ID of the album
@@ -214,11 +219,10 @@
enum TAlbumColumns
{
EAlbumUniqueId = KMPXTableDefaultIndex,
+ EAlbumArtistName,
EAlbumName,
- EAlbumSongCount,
- EAlbumArtist,
+ EAlbumSongCount,
EAlbumArt,
- EAlbumArtistName,
EAlbumFieldCount
};
--- a/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h Tue Jul 06 14:13:36 2010 +0300
@@ -913,21 +913,7 @@
void DoRemoveSongFromPlaylistL(TUint32 aPlaylistId, const TMPXItemId& aSongId,
TInt aOrdinal, CMPXMessageArray& aItemChangedMessages);
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED
- /**
- * Remove all abstractalbum items with no songs associated,
- * TN and .alb files also removed.
- *
- */
- void RemoveAbstractAlbumsWithNoSongL();
-
- /**
- /* When refresh library, Remove .alb entry from AbstractAlnum table, TN table if .alb files deleted
- /* from file manager
- */
- void AbstractAlbumCleanUpL();
-
-#endif // ABSTRACTAUDIOALBUM_INCLUDED
+
/**
* Deletes all song records marked as deleted.
@@ -1052,7 +1038,7 @@
#endif // ABSTRACTAUDIOALBUM_INCLUDED
virtual TUint32 AddCategoryItemL(TMPXGeneralCategory aCategory, const TDesC& aName,
- TUint32 aArtist, const TDesC& aArt,
+ const TDesC& aArtistName, const TDesC& aArt,
TInt aDrive, CMPXMessageArray* aItemChangedMessages, TBool& aItemExist);
virtual void UpdateCategoryItemL(TMPXGeneralCategory aCategory, TUint32 aCategoryId,
@@ -1091,7 +1077,12 @@
* @see MMPXDbAlbumObserver
*/
virtual TBool HandleIsUnknownArtistL(TUint32 aArtistId);
- virtual TUint32 HandleArtistForAlbumL(const TUint32 aAlbumId);
+ /**
+ * Get the Artistname of song which belongs to the specified Album.
+ * @param aId, The Album ID.
+ * @returns alternative artistname retrieved in the specified Album.
+ */
+ virtual HBufC* HandleArtistForAlbumL(const TUint32 aAlbumId);
/**
* Get the Albumart of song which belongs to the specified Album.
--- a/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbmusic.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbmusic.h Tue Jul 06 14:13:36 2010 +0300
@@ -80,7 +80,7 @@
#endif // ABSTRACTAUDIOALBUM_INCLUDED
// for Album and Artist table
virtual TUint32 AddCategoryItemL(TMPXGeneralCategory aCategory, const TDesC& aName,
- TUint32 aArtistId, const TDesC& aArt,
+ const TDesC& aArtistName, const TDesC& aArt,
TInt aDrive, CMPXMessageArray* aItemChangedMessages, TBool& aItemExist) = 0;
/**
* Called when the ID of a category item changed for a Music record, for example when
@@ -528,7 +528,7 @@
* Get the ID of Artist which belongs to the specified Album
* @param aId, the ID of Album
*/
- TUint32 CMPXDbMusic::ArtistForAlbumL(const TUint32 aId);
+ TUint32 ArtistForAlbumL(const TUint32 aId);
/**
* Get the Albumart of song which belongs to the specified Album
@@ -688,9 +688,6 @@
const TMPXAttribute& aAttribute, TUint32 aOldId, TInt aDriveId,
CMPXMessageArray* aItemChangedMessages, TUint32& aItemId);
- TBool UpdateCategoryFieldL(TMPXGeneralCategory aCategory, const CMPXMedia& aMedia,
- const TMPXAttribute& aAttribute, TUint32 aOldId, TInt aDriveId,
- CMPXMessageArray* aItemChangedMessages, TUint32& aItemId, TUint32 aArtistId);
/**
* Checks if extra attributes are required. The "standard attribute set includes:
* EMPXMediaGeneralId, EMPXMediaGeneralType, EMPXMediaGeneralCategory,
@@ -707,6 +704,12 @@
* otherwise EFalse.
*/
TBool IsSupported(const CMPXMedia& aMedia);
+
+ /**
+ * Query all songs from the database and add results to the
+ * iAllSongsQueryResult cache array.
+ */
+ void ExecuteQueryAllSongsL(const TArray<TMPXAttribute>& aAttrs);
private: // from MMPXTable
@@ -809,6 +812,7 @@
#ifdef ABSTRACTAUDIOALBUM_INCLUDED
TBool iArtNeedUpdated;
#endif // ABSTRACTAUDIOALBUM_INCLUDED
+ RPointerArray<CMPXMedia> iAllSongsQueryResult;
};
#endif // MPXDBMUSIC_H
--- a/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h Tue Jul 06 14:13:36 2010 +0300
@@ -270,9 +270,9 @@
_LIT(KAuxiliaryDropTable,"DROP TABLE Auxiliary");
_LIT(KAuxiliaryCheckTable, "SELECT Id,Version,TimeRefreshed,TimeSynced,Corrupt,SaveDeletedRecordCount FROM AUXILIARY");
#ifdef ABSTRACTAUDIOALBUM_INCLUDED
-_LIT(KQueryAuxiliaryInsert, "INSERT INTO Auxiliary(Id,Version,Corrupt) VALUES(0,'6.5.0',%u)");
+_LIT(KQueryAuxiliaryInsert, "INSERT INTO Auxiliary(Id,Version,Corrupt) VALUES(0,'6.6.0',%u)");
#else
-_LIT(KQueryAuxiliaryInsert, "INSERT INTO Auxiliary(Id,Version,Corrupt) VALUES(0,'6.4.0',%u)");
+_LIT(KQueryAuxiliaryInsert, "INSERT INTO Auxiliary(Id,Version,Corrupt) VALUES(0,'6.6.1',%u)");
#endif // ABSTRACTAUDIOALBUM_INCLUDED
_LIT(KQueryAuxiliarySetTime, "UPDATE :dbname.Auxiliary SET TimeRefreshed='%S', Corrupt=0");
_LIT(KQueryAuxiliaryGetTime, "SELECT TimeRefreshed FROM :dbname.Auxiliary");
@@ -427,19 +427,22 @@
//
_LIT(KAlbumCreateTable,"CREATE TABLE Album("
L"UniqueId INTEGER PRIMARY KEY,"
+ L"ArtistName TEXT COLLATE NOCASE,"
L"Name TEXT COLLATE NOCASE,"
L"SongCount INTEGER,"
- L"Artist INTEGER,"
- L"Art TEXT)");
+ L"Art TEXT)");
-_LIT(KAlbumCheckTable,"SELECT UniqueId,Name,SongCount,Artist,Art FROM Album");
+_LIT(KAlbumCheckTable,"SELECT UniqueId,ArtistName,Name,SongCount,Art FROM Album");
-_LIT(KQueryAlbumInsert, "INSERT INTO :dbname.Album(UniqueId,Name,SongCount,Artist,Art) VALUES(%u,'%S',%u,%u,'%S')");
+_LIT(KQueryAlbumInsert, "INSERT INTO :dbname.Album(UniqueId,ArtistName,Name,SongCount,Art) VALUES(%u,'%S','%S',%u,'%S')");
_LIT(KQueryAlbumUpdate, "UPDATE :dbname.Album SET %S WHERE UniqueId=%u");
_LIT(KQueryAlbumItem, "SELECT Album.*,Artist.Name FROM :dbname.Album,:dbname.Artist WHERE Album.Artist=Artist.UniqueId AND UniqueId=%u");
-_LIT(KQueryAlbumAll, "SELECT Album.*,Artist.Name FROM :dbname.Album,:dbname.Artist WHERE Album.Artist=Artist.UniqueId ORDER BY 2");
-_LIT(KQueryAlbumAllMediaWall, "SELECT Album.*,Artist.Name FROM :dbname.Album,:dbname.Artist WHERE Album.Artist=Artist.UniqueId ORDER BY 6");
+_LIT(KQueryAlbumAll, "SELECT Album.* FROM :dbname.Album ORDER BY Name");
+_LIT(KQueryAlbumAllMediaWall, "SELECT Album.* FROM :dbname.Album ORDER BY ArtistName");
+_LIT(KCriterionArtistName, "ArtistName='%S'");
+_LIT(KCriterionArt, "Art='%S'");
+
// == Artist table queries ==========================================
//
_LIT(KArtistCreateTable,"CREATE TABLE Artist("
--- a/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxcollectiondbmanager.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxcollectiondbmanager.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -80,7 +80,26 @@
void CMPXCollectionDbManager::ConstructL()
{
MPX_FUNC("CMPXCollectionDbManager::ConstructL");
- CMPXDbManager::ConstructL(TFileName(KMCDbFile));
+ //Find out if the system has an internal drive (eMMC)
+ TBool eMMC( EFalse );
+ TDriveInfo driveInfo;
+ if( Fs().Drive( driveInfo, EDriveE ) == KErrNone )
+ {
+ if ( driveInfo.iDriveAtt & KDriveAttInternal )
+ eMMC = ETrue;
+ }
+
+ //Use different name for Dbs if the system has an internal drive vs. MMC-only.
+ //Since hard-coded drive letters in the Thumbnail URIs
+ //So Dbs are not interchangeable between an internal drive system and MMC-only system.
+ if ( eMMC )
+ {
+ CMPXDbManager::ConstructL(TFileName( KMCDbFileEMMC ));
+ }
+ else
+ {
+ CMPXDbManager::ConstructL(TFileName( KMCDbFile ));
+ }
}
// End of File
--- a/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbabstractalbum.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbabstractalbum.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -78,7 +78,8 @@
{
MPX_FUNC("CMPXDbAbstractAlbum::~CMPXDbAbstractAlbum");
#ifdef RD_MPX_TNM_INTEGRATION
- delete iTNManager;
+ if (iTNManager)
+ delete iTNManager;
#endif //RD_MPX_TNM_INTEGRATION
}
@@ -222,6 +223,81 @@
}
// ----------------------------------------------------------------------------
+// Remove abstractalbums which have no songs associated.
+// ----------------------------------------------------------------------------
+//
+void CMPXDbAbstractAlbum::RemoveAbstractAlbumsWithNoSongL()
+ {
+ MPX_FUNC("CMPXDbAbstractAlbum::RemoveAbstractAlbumsWithNoSongL");
+
+ RArray<TUint32> iItemsIds;
+ CleanupClosePushL(iItemsIds);
+
+ //get all abstractalbum with no songs associated.
+ GetAllItemsWithNoSongL(iItemsIds);
+ TInt count = iItemsIds.Count();
+ TInt err = KErrNone;
+ if (count)
+ {
+ MPX_DEBUG2("CMPXDbAbstractAlbum::RemoveAbstractAlbumsWithNoSongL, abstractalbum count[%d] ", iItemsIds.Count());
+ CMPXMessageArray* itemChangedMessages = CMPXMediaArray::NewL();
+ CleanupStack::PushL(itemChangedMessages);
+
+ //go through each one to delete
+ for (TInt i=0; i< count; i++)
+ {
+ TRAP(err, RemoveAbstractAlbumL(iItemsIds[i], *itemChangedMessages, EFalse));
+ if (err != KErrNone)
+ {
+ MPX_DEBUG2("CMPXDbAbstractAlbum::RemoveAbstractAlbumsWithNoSongL, error happens when delete abstractalbum, err ", err);
+ }
+ }
+ CleanupStack::PopAndDestroy(itemChangedMessages);
+ }
+ CleanupStack::PopAndDestroy(&iItemsIds);
+ }
+
+// ----------------------------------------------------------------------------
+// Remove .alb entry from AbstractAlnum table, TN table if .alb files deleted
+// from file manager when refresh library
+// ----------------------------------------------------------------------------
+//
+void CMPXDbAbstractAlbum::AbstractAlbumCleanUpL()
+ {
+ MPX_FUNC("CMPXDbAbstractAlbum::AbstractAlbumCleanUpL");
+ RArray<TMPXAttribute> attributes;
+ CleanupClosePushL(attributes);
+ attributes.AppendL(KMPXMediaGeneralUri);
+ CMPXMediaArray* mediaArray = CMPXMediaArray::NewL();
+ CleanupStack::PushL(mediaArray);
+
+ GetAllCategoryItemsL(attributes.Array(), *mediaArray);
+
+ TInt count(mediaArray->Count());
+ if (count)
+ {
+ CMPXMessageArray* itemChangedMessages = CMPXMediaArray::NewL();
+ CleanupStack::PushL(itemChangedMessages);
+ for (TInt i = 0; i < count; i++)
+ {
+ CMPXMedia* element = mediaArray->AtL(i);
+ const TDesC& uri = element->ValueText(KMPXMediaGeneralUri);
+
+ //check if the file exists in file system
+ if (!(BaflUtils::FileExists(iFs, uri)))
+ {
+ //generate abstractalbum UID with the Uri
+ TUint32 abstractAlbumId(MPXDbCommonUtil::GenerateUniqueIdL(iFs, EMPXAbstractAlbum, uri, EFalse));
+ RemoveAbstractAlbumL(abstractAlbumId, *itemChangedMessages, ETrue);
+ }
+ }
+ CleanupStack::PopAndDestroy(itemChangedMessages);
+ }
+ CleanupStack::PopAndDestroy(mediaArray);
+ CleanupStack::PopAndDestroy(&attributes);
+ }
+
+// ----------------------------------------------------------------------------
// CMPXDbAbstractAlbum::RemoveAbstractAlbumL
// ----------------------------------------------------------------------------
//
@@ -252,10 +328,13 @@
// ----------------------------------------------------------------------------
//
void CMPXDbAbstractAlbum::HandleTNL( const TDesC& aOldPath,
- const TDesC& aNewPath, TInt /*aPriority*/ )
+ const TDesC& aNewPath, TInt aPriority )
{
MPX_FUNC("CMPXDbAbstractAlbum::HandleTNL");
-
+ if (!iTNManager)
+ {
+ CreateTNMSessionL();
+ }
if (aNewPath.Compare(KNullDesC)==0 && aOldPath.Compare(KNullDesC)!=0)
{
// remove from thumbnail database table
@@ -263,14 +342,15 @@
CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
aOldPath, KImageFileType );
iTNManager->DeleteThumbnails( *source );
+
CleanupStack::PopAndDestroy( source );
}
else if (aNewPath.Compare(KNullDesC)!=0)
{
//rename thumbnail
- MPX_DEBUG1("CMPXDbAbstractAlbum::HandleTNL, rename TN");
- // TODO: uncomment when RenameThumbnailsL is supported.
- //iTNManager->RenameThumbnailsL( aOldPath, aNewPath, aPriority );
+ MPX_DEBUG1("CMPXDbAbstractAlbum::HandleTNL, rename Thumbnail entry in Thumbnail table");
+
+ iTNManager->RenameThumbnailsL( aOldPath, aNewPath, aPriority );
//after rename, reset flag
iRenameTN = EFalse;
}
@@ -532,6 +612,7 @@
CMPXDbManager& aDbManager,
TMPXGeneralCategory aCategory, RFs& aFs) :
CMPXDbCategory(aDbManager, aCategory),
+ iTNManager(NULL),
iFs(aFs)
{
MPX_FUNC("CMPXDbAbstractAlbum::CMPXDbAbstractAlbum");
@@ -546,11 +627,7 @@
MPX_FUNC("CMPXDbAbstractAlbum::ConstructL");
BaseConstructL();
-#ifdef RD_MPX_TNM_INTEGRATION
- // Create Thumbnail Manager instance. This object is the observer.
- iTNManager = CThumbnailManager::NewL( *this );
iRenameTN = EFalse;
-#endif //RD_MPX_TNM_INTEGRATION
}
@@ -573,4 +650,16 @@
MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/ )
{
}
+
+// ---------------------------------------------------------------------------
+// CMPXDbAbstractAlbum::CreateTNMSessionL
+// Create thumbnail session
+// ---------------------------------------------------------------------------
+void CMPXDbAbstractAlbum::CreateTNMSessionL()
+ {
+ if(!iTNManager)
+ {
+ iTNManager = CThumbnailManager::NewL( *this );
+ }
+ }
// End of File
--- a/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbalbum.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbalbum.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -112,7 +112,7 @@
//
TUint32 CMPXDbAlbum::AddItemL(
const TDesC& aName,
- TUint32 aArtist,
+ const TDesC& aArtistName,
const TDesC& aArt,
TInt aDriveId,
TBool& aNewRecord,
@@ -130,11 +130,13 @@
// insert new
HBufC* query = PreProcessStringLC(KQueryAlbumInsert);
HBufC* name = MPXDbCommonUtil::ProcessSingleQuotesLC(aName);
+ HBufC* artistname = MPXDbCommonUtil::ProcessSingleQuotesLC(aArtistName);
HBufC* art = MPXDbCommonUtil::ProcessSingleQuotesLC(aArt);
- iDbManager.ExecuteQueryL(aDriveId, *query, rowId, name, 1, aArtist, art);
+ iDbManager.ExecuteQueryL(aDriveId, *query, rowId, artistname, name, 1, art);
CleanupStack::PopAndDestroy(art);
+ CleanupStack::PopAndDestroy(artistname);
CleanupStack::PopAndDestroy(name);
CleanupStack::PopAndDestroy(query);
}
@@ -154,17 +156,21 @@
}
// Artist
- TUint32 artistId = recordset.ColumnInt64(EAlbumArtist);
+ TPtrC artistname(KNullDesC);
+ artistname.Set(MPXDbCommonUtil::GetColumnTextL(recordset, EAlbumArtistName));
// the current one is Unknown and the new one is Not Unknown.
- if ( IsUnknownArtistL( artistId ) && !IsUnknownArtistL( aArtist ) )
+ if ( artistname == KNullDesC && aArtistName!= KNullDesC )
{
- _LIT( KFormatArtistId, "Artist=%d" );
- HBufC* setStr = HBufC::NewLC(KFormatArtistId().Length() + KMCIntegerLen);
- setStr->Des().Format( KFormatArtistId, aArtist );
-
+ HBufC* artistnameReplaceSingleQuote =
+ MPXDbCommonUtil::ProcessSingleQuotesLC( aArtistName );
+ TPtrC criteria(KCriterionArtistName);
+ HBufC* setStr = HBufC::NewLC(criteria.Length() + artistnameReplaceSingleQuote->Length());
+ setStr->Des().Format( KCriterionArtistName, artistnameReplaceSingleQuote );
+
iDbManager.ExecuteQueryL(aDriveId, KQueryAlbumUpdate, setStr, rowId);
CleanupStack::PopAndDestroy(setStr);
+ CleanupStack::PopAndDestroy(artistnameReplaceSingleQuote);
}
// Album Art
@@ -176,9 +182,10 @@
{
HBufC* artReplaceSingleQuote =
MPXDbCommonUtil::ProcessSingleQuotesLC( aArt );
- _LIT( KFormatArt, "Art=\'%S\'" );
- HBufC* setStr = HBufC::NewLC(256);
- setStr->Des().Format( KFormatArt, artReplaceSingleQuote );
+
+ TPtrC criteria(KCriterionArt);
+ HBufC* setStr = HBufC::NewLC(criteria.Length() + artReplaceSingleQuote->Length());
+ setStr->Des().Format( KCriterionArt, artReplaceSingleQuote );
iDbManager.ExecuteQueryL(aDriveId, KQueryAlbumUpdate, setStr, rowId);
CleanupStack::PopAndDestroy(setStr);
@@ -240,24 +247,31 @@
User::Leave(KErrNotFound);
}
- TUint32 artistId = recordset.ColumnInt64(EAlbumArtist);
TBool itemModified = EFalse;
+ TPtrC artistname(MPXDbCommonUtil::GetColumnTextL(recordset, EAlbumArtistName));
+ TUint32 artistId = MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), EMPXArtist,
+ artistname, ETrue);
// the current artist is equal to deleted song's artist
if ( artistId == aArtist )
{
- TUint32 newArtistId = ArtistForAlbumL(aId);
- if ( artistId != newArtistId )
- {
- _LIT( KFormatArtistId, "Artist=%d" );
- HBufC* setStr = HBufC::NewLC(KFormatArtistId().Length() + KMCIntegerLen);
- setStr->Des().Format(KFormatArtistId, newArtistId);
+ HBufC* newArtistname = ArtistForAlbumL(aId);
+
+ CleanupStack::PushL(newArtistname);
+ if (newArtistname && newArtistname->CompareF(artistname)!=0)
+ {
+ HBufC* artistnameReplaceSingleQuote = MPXDbCommonUtil::ProcessSingleQuotesLC( *newArtistname );
+ TPtrC criteria(KCriterionArtistName);
+ HBufC* setStr = HBufC::NewLC(criteria.Length() + artistnameReplaceSingleQuote->Length());
+ setStr->Des().Format( KCriterionArtistName, artistnameReplaceSingleQuote );
iDbManager.ExecuteQueryL(aDriveId, KQueryAlbumUpdate, setStr, aId);
CleanupStack::PopAndDestroy(setStr);
+ CleanupStack::PopAndDestroy(artistnameReplaceSingleQuote);
itemModified = ETrue;
}
- }
+ CleanupStack::PopAndDestroy(newArtistname);
+ }
#ifdef ABSTRACTAUDIOALBUM_INCLUDED
TBool nonEmbeddedArt = EFalse;
@@ -290,9 +304,9 @@
{
MPX_DEBUG1("CMPXDbAlbum::DecrementSongsForCategoryL, get newArt");
HBufC* artReplaceSingleQuote = MPXDbCommonUtil::ProcessSingleQuotesLC( *newArt );
- _LIT( KFormatArt, "Art=\'%S\'" );
- HBufC* setStr = HBufC::NewLC(256);
- setStr->Des().Format( KFormatArt, artReplaceSingleQuote );
+ TPtrC criteria(KCriterionArt);
+ HBufC* setStr = HBufC::NewLC(criteria.Length() + artReplaceSingleQuote->Length());
+ setStr->Des().Format( KCriterionArt, artReplaceSingleQuote );
iDbManager.ExecuteQueryL(aDriveId, KQueryAlbumUpdate, setStr, aId);
CleanupStack::PopAndDestroy(setStr);
@@ -553,9 +567,7 @@
if (aMedia.IsSupported(KMPXMediaMusicArtist))
{
const TDesC& artistName = aMedia.ValueText(KMPXMediaMusicArtist).Left(KMCMaxTextLen);
- TUint32 artistId = MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), EMPXArtist,
- artistName, ETrue);
- MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicArtist, artistId);
+ MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCAlbumArtistName, artistName);
}
}
@@ -572,7 +584,7 @@
// CMPXDbAlbum::ArtistForAlbumL
// ----------------------------------------------------------------------------
//
-TUint32 CMPXDbAlbum::ArtistForAlbumL(const TUint32 aId)
+HBufC* CMPXDbAlbum::ArtistForAlbumL(const TUint32 aId)
{
return iObserver.HandleArtistForAlbumL(aId);
}
--- a/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -1589,9 +1589,8 @@
}
#ifdef ABSTRACTAUDIOALBUM_INCLUDED
- //for AbstractAlbum garbage collection
- //can not leave
- TRAP_IGNORE( AbstractAlbumCleanUpL() );
+ //for AbstractAlbum garbage collection
+ TRAP_IGNORE( iDbAbstractAlbum->AbstractAlbumCleanUpL() );
#endif
#ifdef __RAMDISK_PERF_ENABLE
@@ -1622,6 +1621,12 @@
iDbManager->BeginL();
}
+ //create Thumbnail manager session for cleanup for abstractalbum when MTP end.
+ //because when MTP end comes, in case of mode switching, we need to do it as fast as possible,
+ //hence we don’t want the delay happens on that time.
+#ifdef RD_MPX_TNM_INTEGRATION
+ iDbAbstractAlbum->CreateTNMSessionL();
+#endif //RD_MPX_TNM_INTEGRATION
MPX_DEBUG1("<--CMPXDbHandler::MtpStartL");
}
@@ -1647,11 +1652,13 @@
#endif //__RAMDISK_PERF_ENABLE
#ifdef ABSTRACTAUDIOALBUM_INCLUDED
- TRAP(err, RemoveAbstractAlbumsWithNoSongL());
+ BeginTransactionL();
+ TRAP(err, iDbAbstractAlbum->RemoveAbstractAlbumsWithNoSongL());
if ( err != KErrNone )
{
MPX_DEBUG2("CMPXDbHandler::MtpEndL error happened when cleanup albstractalbum with no songs association[%d]", err);
}
+ EndTransactionL(err);
#endif
MPX_DEBUG1("<--CMPXDbHandler::MtpEndL");
}
@@ -2383,83 +2390,6 @@
EMPXSong, KDBPluginUid);
}
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED
-// ----------------------------------------------------------------------------
-// Remove abstractalbums which have no songs associated.
-// ----------------------------------------------------------------------------
-//
-void CMPXDbHandler::RemoveAbstractAlbumsWithNoSongL()
- {
- MPX_FUNC("CMPXDbHandler::RemoveAbstractAlbumsWithNoSongL");
-
- BeginTransactionL();
- RArray<TUint32> iItemsIds;
- CleanupClosePushL(iItemsIds);
- //get all abstractalbum with no songs associated.
- iDbAbstractAlbum->GetAllItemsWithNoSongL(iItemsIds);
- TInt count = iItemsIds.Count();
- TInt err = KErrNone;
- if (count)
- {
- MPX_DEBUG2("CMPXDbHandler::RemoveAbstractAlbumsWithNoSongL, abstractalbum count[%d] ", iItemsIds.Count());
- CMPXMessageArray* itemChangedMessages = CMPXMediaArray::NewL();
- CleanupStack::PushL(itemChangedMessages);
-
- //go through each one to delete
- for (TInt i=0; i< count; i++)
- {
- TRAP(err, RemoveAbstractAlbumL(iItemsIds[i], *itemChangedMessages, EFalse));
- if (err != KErrNone)
- {
- MPX_DEBUG2("CMPXDbHandler::RemoveAbstractAlbumsWithNoSongL, error happens when delete abstractalbum, err ", err);
- }
- }
- CleanupStack::PopAndDestroy(itemChangedMessages);
- }
- CleanupStack::PopAndDestroy(&iItemsIds);
- EndTransactionL(err);
- }
-
-// ----------------------------------------------------------------------------
-// Remove .alb entry from AbstractAlnum table, TN table if .alb files deleted
-// from file manager when refresh library
-// ----------------------------------------------------------------------------
-//
-void CMPXDbHandler::AbstractAlbumCleanUpL()
- {
- MPX_FUNC("CMPXDbHandler::AbstractAlbumCleanUpL");
- RArray<TMPXAttribute> attributes;
- CleanupClosePushL(attributes);
- attributes.AppendL(KMPXMediaGeneralUri);
- CMPXMediaArray* mediaArray = CMPXMediaArray::NewL();
- CleanupStack::PushL(mediaArray);
-
- iDbAbstractAlbum->GetAllCategoryItemsL(attributes.Array(), *mediaArray);
-
- TInt count(mediaArray->Count());
- if (count)
- {
- CMPXMessageArray* itemChangedMessages = CMPXMediaArray::NewL();
- CleanupStack::PushL(itemChangedMessages);
- for (TInt i = 0; i < count; i++)
- {
- CMPXMedia* element = mediaArray->AtL(i);
- const TDesC& uri = element->ValueText(KMPXMediaGeneralUri);
-
- //check if the file exists in file system
- if (!(BaflUtils::FileExists(iFs, uri)))
- {
- //generate abstractalbum UID with the Uri
- TUint32 abstractAlbumId(MPXDbCommonUtil::GenerateUniqueIdL(iFs, EMPXAbstractAlbum, uri, EFalse));
- RemoveAbstractAlbumL(abstractAlbumId, *itemChangedMessages, ETrue);
- }
- }
- CleanupStack::PopAndDestroy(itemChangedMessages);
- }
- CleanupStack::PopAndDestroy(mediaArray);
- CleanupStack::PopAndDestroy(&attributes);
- }
-#endif //ABSTRACTAUDIOALBUM_INCLUDED
// ----------------------------------------------------------------------------
// CMPXDbHandler::DoCleanupDeletedRecordsL
@@ -2911,22 +2841,6 @@
// append the drive to the drive list
iDbDrives.AppendL(driveUnit);
-
- // make sure the folder is created
- TVolumeInfo info;
- if (iFs.Volume(info, driveUnit) == KErrNone)
- {
- if (!BaflUtils::PathExists(iFs, folder))
- {
- // create music folder if necessary
- TInt err(iFs.MkDirAll(folder));
- MPX_DEBUG3("Try to create music folder %S return code %d", &folder, err);
- if (err != KErrAlreadyExists)
- {
- User::LeaveIfError(err);
- }
- }
- }
}
}
@@ -3202,7 +3116,7 @@
TUint32 CMPXDbHandler::AddCategoryItemL(
TMPXGeneralCategory aCategory,
const TDesC& aName,
- TUint32 aArtist,
+ const TDesC& aArtistName,
const TDesC& aArt,
TInt aDriveId,
CMPXMessageArray* aItemChangedMessages,
@@ -3215,9 +3129,9 @@
TBool newRecord(EFalse);
TUint32 id = 0;
- if ( aArtist )
+ if(aCategory == EMPXAlbum)
{
- id = iDbAlbum->AddItemL(aName, aArtist, aArt, aDriveId, newRecord, (aCategory != EMPXGenre));
+ id = iDbAlbum->AddItemL(aName, aArtistName, aArt, aDriveId, newRecord, (aCategory != EMPXGenre));
}
else
{
@@ -3379,9 +3293,12 @@
// CMPXDbHandler::HandleArtistForAlbumL
// ---------------------------------------------------------------------------
//
-TUint32 CMPXDbHandler::HandleArtistForAlbumL(const TUint32 aAlbumId)
+HBufC* CMPXDbHandler::HandleArtistForAlbumL(const TUint32 aAlbumId)
{
- return iDbMusic->ArtistForAlbumL(aAlbumId);
+
+ TUint32 artistId = iDbMusic->ArtistForAlbumL(aAlbumId);
+ HBufC* artistname = GetNameMatchingIdL(artistId);
+ return artistname;
}
// ---------------------------------------------------------------------------
--- a/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -56,6 +56,7 @@
_LIT( KAbstractAlbumExt, ".alb" );
#endif // ABSTRACTAUDIOALBUM_INCLUDED
+const TInt KAllSongsQueryResultGranularity = 250;
// ============================ MEMBER FUNCTIONS ==============================
@@ -99,6 +100,7 @@
{
MPX_FUNC("CMPXDbMusic::~CMPXDbMusic");
delete iExtensionsDrm;
+ iAllSongsQueryResult.ResetAndDestroy();
}
// ----------------------------------------------------------------------------
@@ -113,6 +115,7 @@
#ifdef ABSTRACTAUDIOALBUM_INCLUDED
,iArtNeedUpdated(ETrue)
#endif
+ ,iAllSongsQueryResult(KAllSongsQueryResultGranularity)
{
MPX_FUNC("CMPXDbMusic::CMPXDbMusic");
}
@@ -682,11 +685,51 @@
{
MPX_FUNC("CMPXDbMusic::GetAllSongsLimitedL");
- // Gets a subset of the data from all songs ordered by title
- HBufC* query = HBufC::NewLC( KQueryMusicGetSongsLimited().Length() + KMCIntegerLen );
- query->Des().Format( KQueryMusicGetSongsLimited, aLimit );
- ExecuteMediaQueryL(aAttrs, aMediaArray, *query);
- CleanupStack::PopAndDestroy( query );
+ // Reset and create a cache for the query results.
+ if (iAllSongsQueryResult.Count())
+ {
+ iAllSongsQueryResult.ResetAndDestroy();
+ }
+
+ ExecuteQueryAllSongsL(aAttrs);
+
+ TInt limit = aLimit > iAllSongsQueryResult.Count() ?
+ iAllSongsQueryResult.Count() : aLimit;
+
+ for ( TInt i=0; i < limit; i++ )
+ {
+ CMPXMedia* m = iAllSongsQueryResult[i];
+ aMediaArray.AppendL(*m);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CMPXDbMusic::ExecuteQueryAllSongsL
+// ----------------------------------------------------------------------------
+//
+void CMPXDbMusic::ExecuteQueryAllSongsL(const TArray<TMPXAttribute>& aAttrs)
+ {
+ // Run query and add result media objects to the cache array.
+ MPX_FUNC("CMPXDbMusic::ExecuteQueryAllSongsL");
+
+ RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(KQueryMusicGetAllSongs));
+ CleanupClosePushL(recordset);
+
+ TInt err(KErrNone);
+ while ((err = recordset.Next()) == KSqlAtRow)
+ {
+ CMPXMedia* media = CMPXMedia::NewL();
+ CleanupStack::PushL(media);
+ UpdateMediaL(recordset, aAttrs, *media);
+ iAllSongsQueryResult.AppendL(media);
+ CleanupStack::Pop(media);
+ }
+
+ CleanupStack::PopAndDestroy(&recordset);
+ if (err!= KSqlAtEnd)
+ {
+ User::Leave(KErrCorrupt);
+ }
}
// ----------------------------------------------------------------------------
@@ -723,12 +766,23 @@
TInt aOffset,
TInt aCount )
{
- MPX_DEBUG1("CMPXDbMusic::GetSongsAtOffsetL <--");
+ MPX_DEBUG3("CMPXDbMusic::GetSongsAtOffsetL offset[%d], count[%d]", aOffset, aCount);
+
+ if ( !iAllSongsQueryResult.Count() )
+ {
+ // If there's no cache, create a cache for the query results.
+ ExecuteQueryAllSongsL(aAttrs);
+ }
- ExecuteMediaQueryL(aAttrs, aMediaArray, KQueryMusicGetSongsAtOffset,
- aCount, aOffset, EOffSetQuery );
-
- MPX_DEBUG1("CMPXDbMusic::GetSongsAtOffsetL() -->");
+ TInt limit = aOffset + aCount > iAllSongsQueryResult.Count() ?
+ iAllSongsQueryResult.Count() : aOffset + aCount;
+ for ( TInt i = aOffset; i < limit; i++ )
+ {
+ CMPXMedia* m = iAllSongsQueryResult[i];
+ aMediaArray.AppendL(*m);
+ }
+
+ MPX_DEBUG1("CMPXDbMusic::GetSongsAtOffsetL() -->");
}
// ----------------------------------------------------------------------------
@@ -2081,19 +2135,17 @@
// update the artist field
TUint32 id(0);
- TUint32 artistIdForAlbum(artistId);
if (UpdateCategoryFieldL(EMPXArtist, aMedia, KMPXMediaMusicArtist, artistId,
- aDrive, aItemChangedMessages, id, 0))
+ aDrive, aItemChangedMessages, id))
{
MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicArtist, id);
metaDataModified = (aMusicTable != NULL);
visibleChange = CMPXDbActiveTask::EAllVisible;
- artistIdForAlbum = id;
}
// update the album field
if (UpdateCategoryFieldL(EMPXAlbum, aMedia, KMPXMediaMusicAlbum, albumId,
- aDrive, aItemChangedMessages, id, artistIdForAlbum))
+ aDrive, aItemChangedMessages, id))
{
MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicAlbum, id);
metaDataModified = (aMusicTable != NULL);
@@ -2488,6 +2540,25 @@
}
else
#endif // ABSTRACTAUDIOALBUM_INCLUDED
+ if (aCategory == EMPXArtist || aCategory == EMPXAlbum)
+ {
+ TPtrC art(KNullDesC);
+ TPtrC artistname(KNullDesC);
+
+ if (aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName))
+ {
+ art.Set(aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Left(KMCMaxTextLen));
+ }
+ if (aCategory == EMPXAlbum)
+ {
+ if (aMedia.IsSupported(KMPXMediaMusicArtist))
+ {
+ artistname.Set(aMedia.ValueText(KMPXMediaMusicArtist).Left(KMCMaxTextLen));
+ }
+ }
+ iObserver.AddCategoryItemL(aCategory, name, artistname, art, aDriveId, aItemChangedMessages, itemAdded);
+ }
+ else
{
// ignore the return value
iObserver.AddCategoryItemL(aCategory, name, aDriveId,
@@ -2523,8 +2594,27 @@
}
else
#endif // ABSTRACTAUDIOALBUM_INCLUDED
- {
- // ignore the return value
+ if (aCategory == EMPXArtist || aCategory == EMPXAlbum)
+ {
+ TPtrC art(KNullDesC);
+ TPtrC artistname(KNullDesC);
+ if (aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName))
+ {
+ art.Set(aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Left(KMCMaxTextLen));
+ }
+ if (aCategory == EMPXAlbum)
+ {
+ if (aMedia.IsSupported(KMPXMediaMusicArtist))
+ {
+ artistname.Set(aMedia.ValueText(KMPXMediaMusicArtist).Left(KMCMaxTextLen));
+ }
+ }
+ iObserver.AddCategoryItemL(aCategory, KNullDesC, artistname, art, aDriveId,
+ aItemChangedMessages, itemAdded);
+ }
+ else
+ {
+ // ignore the return value
iObserver.AddCategoryItemL(aCategory, KNullDesC, aDriveId,
aItemChangedMessages, itemAdded);
}
@@ -2595,132 +2685,7 @@
return updated;
}
-TBool CMPXDbMusic::UpdateCategoryFieldL(
- TMPXGeneralCategory aCategory,
- const CMPXMedia& aMedia,
- const TMPXAttribute& aAttribute,
- TUint32 aOldId,
- TInt aDriveId,
- CMPXMessageArray* aItemChangedMessages,
- TUint32& aItemId,
- TUint32 aArtistId)
- {
- TBool updated(EFalse);
- TBool itemNotRemoved( EFalse );
- TBool itemAdded( EFalse );
- // update category table and add category Id to the music table
- if (!aOldId || aMedia.IsSupported(aAttribute))
- {
- TInt changeMsgCount( 0 );
- if( aItemChangedMessages )
- {
- changeMsgCount = aItemChangedMessages->Count();
- }
-
- if (aMedia.IsSupported(aAttribute))
- {
- TPtrC name(aMedia.ValueText(aAttribute).Left(KMCMaxTextLen));
-
- // construct the new ID for the category record
- // only genre is not case sensitive
- aItemId = MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), aCategory,
- name, (aCategory != EMPXGenre));
- if (!aOldId || (aOldId != aItemId))
- {
- // only add if the ID changed,
- // otherwise the song was updated but the artist name was not
- TPtrC art(KNullDesC);
- if (aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName))
- {
- art.Set(aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Left(KMCMaxTextLen));
- }
-
- iObserver.AddCategoryItemL(aCategory, name, aArtistId, art, aDriveId, aItemChangedMessages, itemAdded);
- updated = ETrue;
- }
- }
- else
- {
- // only genre is not case sensitive
- aItemId = MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), aCategory, KNullDesC,
- (aCategory != EMPXGenre));
- if (!aOldId || (aOldId != aItemId))
- {
- TPtrC art(KNullDesC);
- if (aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName))
- {
- art.Set(aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Left(KMCMaxTextLen));
- }
-
- iObserver.AddCategoryItemL(aCategory, KNullDesC, aArtistId, art, aDriveId,
- aItemChangedMessages, itemAdded);
- updated = ETrue;
- }
- }
-
- if (aOldId && (aOldId != aItemId))
- {
- iObserver.DeleteSongForCategoryL(aCategory, aOldId, aDriveId,
- aItemChangedMessages, itemNotRemoved);
- updated = ETrue;
- }
-
- // Special case where the item(s) has been renamed.
- // In this case, a new category is created +1 change msg
- // a old category is removed +1 change msg
- // We merge these 2 change messages into one using the deprecated ID
- //
- if( aItemChangedMessages )
- {
- TInt newChangeMsgCount( aItemChangedMessages->Count() );
- if( newChangeMsgCount - changeMsgCount > 0 )
- {
- TInt oldId = KErrNotFound;
- TInt newId = KErrNotFound;
- for( TInt i=0; i<newChangeMsgCount; ++i )
- {
- CMPXMessage& msg = *(*aItemChangedMessages)[i];
-
- TMPXItemId id = msg.ValueTObjectL<TMPXItemId>(KMPXMessageMediaGeneralId);
- TMPXChangeEventType changeType = msg.ValueTObjectL<TMPXChangeEventType>(KMPXMessageChangeEventType);
-
- // Look for the added and deleted category IDs
- //
- if( id == aOldId && changeType == EMPXItemDeleted )
- {
- oldId = i;
- }
- else if( id == aItemId && changeType == EMPXItemInserted )
- {
- newId = i;
- }
- }
-
- if( oldId != KErrNotFound &&
- newId != KErrNotFound )
- {
- aItemChangedMessages->Remove(oldId); // category removed
- aItemChangedMessages->Remove(newId); // category added
- MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, aItemId, EMPXItemModified,
- aCategory, KDBPluginUid, aOldId );
- }
- else if ( oldId !=KErrNotFound && itemAdded ) // old item removed, new item already exist
- {
- MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, aItemId, EMPXItemModified,
- aCategory, KDBPluginUid, aOldId );
- }
- else if ( newId !=KErrNotFound && itemNotRemoved ) // new item added, old item still exist
- {
- MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, aOldId, EMPXItemModified,
- aCategory, KDBPluginUid, aItemId );
- }
- }
- }
- }
-
- return updated;
- }
// ----------------------------------------------------------------------------
// CMPXDbMusic::ExtraFieldsRequired
// ----------------------------------------------------------------------------
--- a/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -4079,12 +4079,13 @@
TInt numItems = aCmd.ValueTObjectL<TInt>( KMPXCollectionCommandIdIncOpenLNumItems );
TReadDirection direction(EReadUnknown);
+/* Ascending and Decending reads are currently not used. We optimized for offset reads.
if( aCmd.IsSupported(KMPXCollectionCommandIdIncOpenLAscDsc) &&
aCmd.IsSupported(KMPXCollectionCommandIdIncOpenLKeyItem) )
{
direction = aCmd.ValueTObjectL<TReadDirection>(KMPXCollectionCommandIdIncOpenLAscDsc);
}
-
+*/
CMPXCollectionPath* path = aCmd.ValueCObjectL<CMPXCollectionPath>(KMPXCollectionCommandIdIncOpenLPath);
CleanupStack::PushL( path );
MPX_DEBUG_PATH( *path );
--- a/mpserviceplugins/mpxsqlitepodcastdbplugin/inc/mpxpodcastcollectiondbdef.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpserviceplugins/mpxsqlitepodcastdbplugin/inc/mpxpodcastcollectiondbdef.h Tue Jul 06 14:13:36 2010 +0300
@@ -27,7 +27,7 @@
// Db filename
_LIT(KMCDbFile, "pcv6_1.db");
-
+_LIT(KMCDbFileEMMC, "pcv6_1i.db");
// Collection Db resource file
_LIT(KMPXCollectionDbResourceFile, "PCRes.rsc");
--- a/mpviewplugins/mpcollectionviewplugin/inc/mpcollectionview.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpviewplugins/mpcollectionviewplugin/inc/mpcollectionview.h Tue Jul 06 14:13:36 2010 +0300
@@ -108,7 +108,7 @@
void setPlaylistToolBar();
HbAction *createToolBarAction( QActionGroup *actionsGroup,
- const QString& icon );
+ const QString& icon, const QString& objectName );
void updateMenu();
void updateToolBar();
--- a/mpviewplugins/mpcollectionviewplugin/src/mpcollectionview.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/mpviewplugins/mpcollectionviewplugin/src/mpcollectionview.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -803,33 +803,34 @@
if ( !mMainToolBar ) {
//Create the toolbar.
mMainToolBar = new HbToolBar();
+ mMainToolBar->setObjectName( "MainToolBar" );
mMainToolBar->setOrientation( Qt::Horizontal );
QActionGroup *actionsGroup = new QActionGroup( mMainToolBar );
HbAction *action;
// All Songs
- action = createToolBarAction( actionsGroup, "qtg_mono_songs_all" );
+ action = createToolBarAction( actionsGroup, "qtg_mono_songs_all", "AllSongsAction" );
connect( action, SIGNAL( triggered( bool ) ), this, SLOT( openSongs() ) );
mMainToolBar->addAction( action );
// Artists
- action = createToolBarAction( actionsGroup, "qtg_mono_artists" );
+ action = createToolBarAction( actionsGroup, "qtg_mono_artists", "ArtistsAction" );
connect( action, SIGNAL( triggered( bool ) ), this, SLOT( openArtists() ) );
mMainToolBar->addAction( action );
// Albums
- action = createToolBarAction( actionsGroup, "qtg_mono_music_albums" );
+ action = createToolBarAction( actionsGroup, "qtg_mono_music_albums", "AlbumsAction" );
connect( action, SIGNAL( triggered( bool ) ), this, SLOT( openAlbums() ) );
mMainToolBar->addAction( action );
// Playlists
- action = createToolBarAction( actionsGroup, "qtg_mono_playlist" );
+ action = createToolBarAction( actionsGroup, "qtg_mono_playlist", "PlaylistsAction" );
connect( action, SIGNAL( triggered( bool ) ), this, SLOT( openPlaylists() ) );
mMainToolBar->addAction( action );
if ( mViewMode != MpCommon::FetchView ) {
// Music Store
- action = createToolBarAction(actionsGroup, "qtg_mono_ovistore" );
+ action = createToolBarAction(actionsGroup, "qtg_mono_ovistore", "MusicStoreAction" );
connect( action, SIGNAL( triggered( bool ) ), this, SLOT( openMusicStore() ) );
mMainToolBar->addAction( action );
}
@@ -872,26 +873,26 @@
TX_ENTRY
if ( !mPlaylistToolBar ) {
mPlaylistToolBar = new HbToolBar();
+ mPlaylistToolBar->setObjectName( "PlaylistToolBar" );
mPlaylistToolBar->setOrientation( Qt::Horizontal );
HbAction *action;
- HbIcon *icon;
action = new HbAction( this );
- icon = new HbIcon( "qtg_mono_plus" );
- action->setIcon( *icon );
+ action->setIcon( HbIcon( "qtg_mono_plus" ) );
connect( action, SIGNAL( triggered( bool ) ), this, SLOT( prepareToAddToPlaylist() ) );
+ action->setObjectName( "AddToPlaylistAction" );
mPlaylistToolBar->addAction( action );
action = new HbAction( this );
- icon = new HbIcon( "qtg_mono_minus" );
- action->setIcon( *icon);
+ action->setIcon( HbIcon( "qtg_mono_minus" ) );
connect( action, SIGNAL( triggered( bool ) ), this, SLOT( deleteSongs() ) );
+ action->setObjectName( "RemoveFromPlaylistAction" );
mPlaylistToolBar->addAction( action );
action = new HbAction( this );
- icon = new HbIcon( "qtg_mono_organize" );
- action->setIcon( *icon );
+ action->setIcon( HbIcon( "qtg_mono_organize" ) );
connect( action, SIGNAL( triggered( bool ) ), this, SLOT( arrangeSongs() ) );
+ action->setObjectName( "OrganizePlaylistAction" );
mPlaylistToolBar->addAction( action );
}
@@ -922,13 +923,15 @@
*/
HbAction *MpCollectionView::createToolBarAction(
QActionGroup *actionsGroup,
- const QString& icon )
+ const QString& icon,
+ const QString& objectName )
{
HbIcon actionIcon( icon );
HbAction *action = new HbAction( actionsGroup );
action->setIcon( actionIcon );
action->setCheckable( true );
+ action->setObjectName( objectName );
return action;
}
--- a/mpviewplugins/mpdetailsviewplugin/inc/mpdetailssharedialog.h Wed Jun 23 18:10:13 2010 +0300
+++ b/mpviewplugins/mpdetailsviewplugin/inc/mpdetailssharedialog.h Tue Jul 06 14:13:36 2010 +0300
@@ -21,7 +21,7 @@
#include <HbDialog>
#include <QList>
-#include <QSsLError>
+#include <QSslError>
#include "mpsharedata.h"
class QGraphicsWebView;
--- a/musicwidgetplugin/rom/musicwidgetplugin.iby Wed Jun 23 18:10:13 2010 +0300
+++ b/musicwidgetplugin/rom/musicwidgetplugin.iby Tue Jul 06 14:13:36 2010 +0300
@@ -22,5 +22,6 @@
data=ZPRIVATE\20022f35\import\widgetregistry\200286FA\musicwidgetplugin.qtplugin private\20022f35\import\widgetregistry\200286FA\musicwidgetplugin.qtplugin
data=ZPRIVATE\20022f35\import\widgetregistry\200286FA\musicwidgetplugin.manifest private\20022f35\import\widgetregistry\200286FA\musicwidgetplugin.manifest
data=ZPRIVATE\20022f35\import\widgetregistry\200286FA\musicwidgetplugin.xml private\20022f35\import\widgetregistry\200286FA\musicwidgetplugin.xml
+data=ZPRIVATE\20022f35\import\widgetregistry\200286FA\musicwidgeticon.png private\20022f35\import\widgetregistry\200286FA\musicwidgeticon.png
#endif // MUSICWIDGETPLUGIN_IBY
\ No newline at end of file
--- a/tsrc/mpfetchertestapp/inc/mpfetchertestappview.h Wed Jun 23 18:10:13 2010 +0300
+++ b/tsrc/mpfetchertestapp/inc/mpfetchertestappview.h Tue Jul 06 14:13:36 2010 +0300
@@ -43,6 +43,9 @@
void launchHomeScreen();
void launchHomeScreenNowPlaying();
void launchHomeScreenNPShuffle();
+ void playNPVSong();
+ void endMP();
+ void killMP();
--- a/tsrc/mpfetchertestapp/src/mpfetchertestappview.cpp Wed Jun 23 18:10:13 2010 +0300
+++ b/tsrc/mpfetchertestapp/src/mpfetchertestappview.cpp Tue Jul 06 14:13:36 2010 +0300
@@ -24,6 +24,11 @@
#include <QDebug>
#include "mpfetchertestappview.h"
+#include <apgcli.h>
+#include <apacmdln.h>
+#include <apgtask.h>
+#include <eikenv.h>
+
MpFetcherTestAppView::MpFetcherTestAppView(QGraphicsItem *parent) :
HbView(parent),
@@ -120,39 +125,68 @@
connect(button, SIGNAL(clicked()), SLOT(fetchSong()));
bottomLayout->addItem(button);
}
+
+ QGraphicsLinearLayout *playLayout = new QGraphicsLinearLayout(Qt::Horizontal);
HbPushButton* playButton = new HbPushButton("Play song");
if (playButton)
{
connect(playButton, SIGNAL(clicked()), SLOT(viewSong()));
- bottomLayout->addItem(playButton);
+ playLayout->addItem(playButton);
}
HbPushButton* viewButton = new HbPushButton("Play song caged");
if (viewButton)
{
connect(viewButton, SIGNAL(clicked()), SLOT(viewSongCaged()));
- bottomLayout->addItem(viewButton);
+ playLayout->addItem(viewButton);
}
-
+ bottomLayout->addItem(playLayout);
+
+ QGraphicsLinearLayout *hsLayout = new QGraphicsLinearLayout(Qt::Horizontal);
HbPushButton* homeScreenButton = new HbPushButton("HS Widget MainView");
if (homeScreenButton)
{
connect(homeScreenButton, SIGNAL(clicked()), SLOT(launchHomeScreen()));
- bottomLayout->addItem(homeScreenButton);
+ hsLayout->addItem(homeScreenButton);
}
HbPushButton* homeScreenButtonNPV = new HbPushButton("HS Widget NowPlayingView");
if (homeScreenButtonNPV)
{
connect(homeScreenButtonNPV, SIGNAL(clicked()), SLOT(launchHomeScreenNowPlaying()));
- bottomLayout->addItem(homeScreenButtonNPV);
+ hsLayout->addItem(homeScreenButtonNPV);
}
HbPushButton* homeScreenButtonNPVS = new HbPushButton("HS Widget NPV Shuffle");
if (homeScreenButtonNPVS)
{
connect(homeScreenButtonNPVS, SIGNAL(clicked()), SLOT(launchHomeScreenNPShuffle()));
- bottomLayout->addItem(homeScreenButtonNPVS);
+ hsLayout->addItem(homeScreenButtonNPVS);
+ }
+ bottomLayout->addItem(hsLayout);
+
+ HbPushButton* NowPlayingButton = new HbPushButton("NPV File Activity");
+ if (NowPlayingButton)
+ {
+ connect(NowPlayingButton, SIGNAL(clicked()), SLOT(playNPVSong()));
+ bottomLayout->addItem(NowPlayingButton);
}
+ QGraphicsLinearLayout *goomLayout = new QGraphicsLinearLayout(Qt::Horizontal);
+ HbPushButton* endButton = new HbPushButton("End MP");
+ if (endButton)
+ {
+ connect(endButton, SIGNAL(clicked()), SLOT(endMP()));
+ goomLayout->addItem(endButton);
+ }
+
+ HbPushButton* killButton = new HbPushButton("Kill MP");
+ if (killButton)
+ {
+ connect(killButton, SIGNAL(clicked()), SLOT(killMP()));
+ goomLayout->addItem(killButton);
+ }
+
+ bottomLayout->addItem(goomLayout);
+
layout->addItem(bottomLayout);
}
@@ -437,3 +471,55 @@
}
}
+
+void MpFetcherTestAppView::playNPVSong()
+{
+ QUrl url;
+
+ url.setUrl("appto://10207C62?activityname=MusicNowPlayingView&launchtype=standalone&uri=" + mResultEdit->text() );
+ if(mReq){
+ delete mReq;
+ mReq = 0;
+ }
+ mReq = mAppMgr.create(url);
+ if (mReq == NULL)
+ {
+ // No handlers for the URI
+ return;
+ }
+
+ mReq->setBackground(false);
+
+ // Send the request
+ bool res = mReq->send();
+ if (!res)
+ {
+ // Request failed.
+ int error = mReq->lastError();
+
+ // Handle error
+ }
+
+}
+
+void MpFetcherTestAppView::endMP()
+{
+ TApaTaskList taskList(CEikonEnv::Static()->WsSession());
+ TApaTask task = taskList.FindApp(TUid::Uid(270564450));
+ if (task.Exists()) {
+ task.EndTask();
+ } else {
+ qCritical("Cannot bring to forward task %08x", 270564450);
+ }
+
+}
+void MpFetcherTestAppView::killMP()
+{
+ TApaTaskList taskList(CEikonEnv::Static()->WsSession());
+ TApaTask task = taskList.FindApp(TUid::Uid(270564450));
+ if (task.Exists()) {
+ task.KillTask();
+ } else {
+ qCritical("Cannot bring to forward task %08x", 270564450);
+ }
+}