mpviewplugins/mpdetailsviewplugin/src/mpdetailsview.cpp
changeset 32 c163ef0b758d
parent 29 8192e5b5c935
child 37 eb79a7c355bf
--- a/mpviewplugins/mpdetailsviewplugin/src/mpdetailsview.cpp	Thu May 27 12:49:57 2010 +0300
+++ b/mpviewplugins/mpdetailsviewplugin/src/mpdetailsview.cpp	Fri Jun 11 13:36:36 2010 +0300
@@ -1,7 +1,7 @@
 /*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
-* This component and the accompanying materials are made available 
+* This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
@@ -26,9 +26,7 @@
 #include <QGraphicsLinearLayout>
 #include <QSizeF>
 
-#include <thumbnailmanager_qt.h>
-#include <thumbnaildata.h>
-#include <thumbnailobjectsource.h>
+
 
 #include <hbinstance.h>
 #include <hbmainwindow.h>
@@ -57,7 +55,7 @@
 #include "mpdetailssharedialog.h"
 #endif
 
-const int KUndefined = -1;
+
 const int KRecommendationCount = 2;
 
 
@@ -68,16 +66,20 @@
     : mMpEngine( 0 ),
       mSongData( 0 ),
       mActivated( false ),
-      mWindow( 0 ),
       mSoftKeyBack( 0 ),
-      mSongText( NULL ),
-      mAlbumText( NULL ),
-      mArtistText( NULL ),
-      mAlbumArt( NULL ),
-      mDocumentLoader( NULL ),
-      mDownloadedAlbumArts( 0 ),
+      mSongText( 0 ),
+      mAlbumText( 0 ),
+      mArtistText( 0 ),
+      mAlbumArt( 0 ),
+      mSongDetailsGroupBox(0),
+      mInspireMeGroupBox(0),
+      mShareButton(0),
+      mDocumentLoader( 0 ),
+      mDetailList(0),
+      mInspireList(0),
+      mInspireMeProgressBar(0),
       mMpTranslator( 0 ),
-      mCommonTranslator( 0 ), 
+      mCommonTranslator( 0 ),
       mMpQueryManager( 0 ),
       mInspireMeQueryOngoing( false ),
       mInspireMeQueryRendered( false ),
@@ -91,28 +93,26 @@
     bool widgetsOk = false;
     HbMainWindow *mainWindow = hbInstance->allMainWindows()[0];
     mDocumentLoader = new HbDocumentLoader();
-    
+
     TX_LOG_ARGS("Document loader created")
     if(!mDocumentLoader) {
         TX_LOG_ARGS( "MpDetailsView() Error: HbDocumentLoader not constructed" );
-        return;    
+        return;
     }
 
     TX_LOG_ARGS("Loading :/mpdetailsviewdocml/mpdetailsview.docml")
     mDocumentLoader->load( QString(":/mpdetailsviewdocml/mpdetailsview.docml"), &widgetsOk );
     if(!widgetsOk) {
         TX_LOG_ARGS( "MpDetailsView() Error: invalid mpdetailsview.docml" );
-        return;    
+        return;
     }
-    
+
     TX_LOG_ARGS("Loaded :/mpdetailsviewdocml/mpdetailsview.docml")
-    QGraphicsWidget *widget = 0; 
-        
+    QGraphicsWidget *widget = 0;
+
     widget = mDocumentLoader->findWidget( QString("content") );
     TX_LOG_ARGS( "MpDetailsView() mDocumentLoader->findWidget for <content>: " << (int)(widget) );
-    mContainer = qobject_cast<HbWidget *>(widget);
-    TX_LOG_ARGS("MpDetailsView() <content> widget found mContainer: " << (int)(mContainer));
-    setWidget( mContainer );
+    setWidget(  qobject_cast<HbWidget *>(widget) );
 
     widget = mDocumentLoader->findWidget( QString("shareButton") );
     mShareButton = qobject_cast<HbPushButton *>(widget);
@@ -121,11 +121,11 @@
     widget = mDocumentLoader->findWidget( QString("trackTitle") );
     mSongText = qobject_cast<HbLabel *>(widget);
     TX_LOG_ARGS("MpDetailsView() <trackTitle> widget found mSongText: " << (int)(mSongText) );
-    
+
     widget = mDocumentLoader->findWidget( QString("artist") );
     mArtistText = qobject_cast<HbLabel *>(widget);
     TX_LOG_ARGS("MpDetailsView() <artist> widget found mArtistText: " << (int)(mArtistText) );
-    
+
     widget = mDocumentLoader->findWidget( QString("albumName") );
     mAlbumText = qobject_cast<HbLabel *>(widget);
     TX_LOG_ARGS("MpDetailsView() <albumName> widget found mAlbumText: " << (int)(mAlbumText) );
@@ -133,15 +133,15 @@
     widget = mDocumentLoader->findWidget( QString("albumArt") );
     mAlbumArt = qobject_cast<HbLabel *>(widget);
     TX_LOG_ARGS("MpDetailsView() <albumArt> widget found mAlbumArt: " << (int)(mAlbumArt) );
-    
+
     widget = mDocumentLoader->findWidget( QString("songDetails") );
     mSongDetailsGroupBox = qobject_cast<HbGroupBox *>(widget);
     TX_LOG_ARGS("MpDetailsView() <songDetails> widget found mSongDetailsGroupBox: " << (int)(mSongDetailsGroupBox) );
-     
+
     widget = mDocumentLoader->findWidget( QString("songDetailsListWidget") );
     mDetailList = qobject_cast<HbListWidget *>(widget);
     TX_LOG_ARGS("MpDetailsView() <songDetailsListWidget> widget found mDetailList: " << (int)(mDetailList) );
-             
+
     widget = mDocumentLoader->findWidget( QString("inspireMeGroupBox") );
     mInspireMeGroupBox = qobject_cast<HbGroupBox *>(widget);
     TX_LOG_ARGS("MpDetailsView() <inspireMeGroupBox> widget found mInspireMeGroupBox: " << (int)(mInspireMeGroupBox) );
@@ -149,11 +149,20 @@
     widget = mDocumentLoader->findWidget( QString("inspireListWidget") );
     mInspireList = qobject_cast<HbListWidget *>(widget);
     TX_LOG_ARGS("MpDetailsView() <inspireListWidget> widget found mInspireList: " << (int)(mInspireList) );
-        
+
     widget = mDocumentLoader->findWidget( QString("inspireMeProgressBar") );
     mInspireMeProgressBar = qobject_cast<HbProgressBar *>(widget);
     TX_LOG_ARGS("MpDetailsView() <inspireMeProgressBar> widget found mInspireMeProgressBar: " << (int)(mInspireMeProgressBar) );
-   
+    
+    // load section HideInspireMe if no ovi store suport
+    bool loadingSectionOk = false;
+    mDocumentLoader->load( QString(":/mpdetailsviewdocml/mpdetailsview.docml"), QString( "ShowInspireMe" ), &loadingSectionOk );    
+    if( loadingSectionOk ) {
+        TX_LOG_ARGS( "Loading ShowInspireMe section is successful." );
+    } else {
+        TX_LOG_ARGS( "Loading ShowInspireMe section fails." );
+    }
+
     TX_EXIT
 }
 
@@ -162,16 +171,9 @@
  */
 MpDetailsView::~MpDetailsView()
 {
-    TX_ENTRY    
-    if ( mSoftKeyBack ) {
-        delete mSoftKeyBack;
-    }
-    if ( mDocumentLoader ) {
-        delete mDocumentLoader;
-    }
-    if( mThumbnailManager ) {
-        delete mThumbnailManager;
-    }
+    TX_ENTRY
+    delete mSoftKeyBack;
+    delete mDocumentLoader;
     delete mMpTranslator;
     delete mCommonTranslator;
     delete mMpQueryManager;
@@ -188,8 +190,8 @@
  */
 void MpDetailsView::initializeView()
 {
-    TX_ENTRY    
-    
+    TX_ENTRY
+
     //Load musicplayer and common translators
     QString lang = QLocale::system().name();
     QString path = QString( "z:/resource/qt/translations/" );
@@ -208,47 +210,31 @@
     if ( translatorLoaded ) {
         qApp->installTranslator( mMpTranslator );
     }
-        
-    // TODO: Hkn: Remove this once ELCE-844GBS is fixed    
-    mInspireMeProgressBar->hide();
-    
-    mWindow = mainWindow();
-    mSoftKeyBack = new HbAction( Hb::BackNaviAction, this );    
-    
+
+    mSoftKeyBack = new HbAction( Hb::BackNaviAction, this );
+
     mMpEngine = MpEngineFactory::sharedEngine();
     mSongData = mMpEngine->songData();
-    
-    // TODO: Remove this once Orbit bug ELCE-843HFJ is fixed
-    mInspireList->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
-    
-    
-   
-    
-    mThumbnailManager = new ThumbnailManager( this );
-    mThumbnailManager->setQualityPreference( ThumbnailManager::OptimizeForQuality );
-    mThumbnailManager->setThumbnailSize( ThumbnailManager::ThumbnailSmall );
-    QObject::connect( mThumbnailManager, SIGNAL( thumbnailReady( QPixmap , void * , int , int ) ),
-            this, SLOT( thumbnailReady( QPixmap , void * , int , int  ) ) );
-    // TODO: Use the album art in provided by 10.1 wk16 platform. Current one is in the binary        
-    mDefaultRecommendationAlbumArt = QPixmap( ":/mpdetailsviewicons/qtg_large_music_album.svg" );
-    
+
     // TODO: might need later
     setupMenu();
-    mMpQueryManager = new MpQueryManager(); 
-      
+    mMpQueryManager = new MpQueryManager();
+
     connect( mSoftKeyBack, SIGNAL( triggered() ), this, SLOT( back() ) );
-    connect( mSongData, SIGNAL( albumArtReady() ), this, SLOT( albumArtChanged() ) ); 
+    connect( mSongData, SIGNAL( albumArtReady() ), this, SLOT( albumArtChanged() ) );
     connect( mSongData, SIGNAL( playbackInfoChanged() ), this, SLOT( handlePlaybackInfoChanged() ) );
-    connect( mSongData, SIGNAL( songDetailInfoChanged() ), this, SLOT( songDetailInfoChanged() ) ); 
+    connect( mSongData, SIGNAL( songDetailInfoChanged() ), this, SLOT( songDetailInfoChanged() ) );
+    connect( mSongDetailsGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleDetailsGroupBoxToggled( bool ) ) );
+    connect( mInspireMeGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleInspireMeGroupBoxToggled( bool ) ) );
     connect( mMpQueryManager, SIGNAL( networkError() ), this ,SLOT( handleNetworkError() ) );
-    connect( mMpQueryManager, SIGNAL(setAlbumArt(const QString &, const QString &) ), this ,SLOT(setAlbumArtUri(const QString &, const QString & )));
     connect( mMpQueryManager, SIGNAL(searchUrlRetrieved(const QString&)), this, SLOT(updateSharedData(const QString&)));
+    connect( mMpQueryManager, SIGNAL(recommendationAlbumArtsReady()), this, SLOT(RenderInspireMeGroupBox()));
 
-#ifdef SHARE_FUNC_ENABLED    
+#ifdef SHARE_FUNC_ENABLED
     connect( mShareButton, SIGNAL( clicked() ), this, SLOT( share() ) );
-       
+
     // Preload the share popup
-    createShareDialog();
+    preloadShareDialog();
 #endif
     TX_EXIT
 }
@@ -258,10 +244,10 @@
  */
 void MpDetailsView::activateView()
 {
-    TX_ENTRY    
+    TX_ENTRY
     setNavigationAction( mSoftKeyBack );
     mMpEngine->retrieveSong();
-        
+
     mActivated = true;
     mInspireMeOpen = MpSettingsManager::inspireMe();
     mSongDetailsGbOpen = MpSettingsManager::songDetailsGb();
@@ -269,10 +255,6 @@
     TX_LOG_ARGS( "SongDetailsGbVal: " << mSongDetailsGbOpen );
     mInspireMeGroupBox->setCollapsed(!mInspireMeOpen);
     mSongDetailsGroupBox->setCollapsed(!mSongDetailsGbOpen);
-
-    connect( mSongDetailsGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleDetailsGroupBoxToggled( bool ) ) );
-    connect( mInspireMeGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleInspireMeGroupBoxToggled( bool ) ) );
-    
     TX_EXIT
 }
 
@@ -281,25 +263,21 @@
  */
 void MpDetailsView::deactivateView()
 {
-    TX_ENTRY    
+    TX_ENTRY
     if (mInspireMeGroupBox->isCollapsed() ) {
       MpSettingsManager::setInspireMe(false);
       } else {
       MpSettingsManager::setInspireMe(true);
       }
-      
+
     if (mSongDetailsGroupBox->isCollapsed() ) {
       MpSettingsManager::setSongDetailsGb(false);
       } else {
       MpSettingsManager::setSongDetailsGb(true);
       }
-    
+
     setNavigationAction( 0 );
-    mActivated = false;    
-
-    disconnect( mSongDetailsGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleDetailsGroupBoxToggled( bool ) ) );
-    disconnect( mInspireMeGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleInspireMeGroupBoxToggled( bool ) ) );
-    
+    mActivated = false;
     TX_EXIT
 }
 
@@ -318,7 +296,7 @@
  */
 void MpDetailsView::back()
 {
-    TX_ENTRY  
+    TX_ENTRY
     emit command( MpCommon::ActivatePlaybackView );
     TX_EXIT
 }
@@ -327,7 +305,7 @@
  Slot to handle Album art changed.
  */
 void MpDetailsView::albumArtChanged( )
-{    
+{
     TX_ENTRY
     HbIcon icon;
     mSongData->albumArt( icon );
@@ -343,38 +321,15 @@
     TX_ENTRY
     mInspireMeQueryOngoing = false;
     mInspireMeQueryRendered = false;
-    clearInspireMe();    
+    clearInspireMe();
     mInspireMeGroupBox->setCollapsed( true );
     TX_EXIT
 }
 
 /*!
- Sets recommendation album art
-*/
-void MpDetailsView::setAlbumArtUri( const QString &albumArtUri, const QString &albumArtName )
-{
-    TX_ENTRY_ARGS( "albumArtUri = " << albumArtUri )
-    TX_LOG_ARGS( "albumArtName = " << albumArtName )
-    if ( !albumArtUri.isEmpty() && !albumArtName.isEmpty() ) {
-        int id = mThumbnailManager->getThumbnail( albumArtName, reinterpret_cast<void *>( const_cast<QString *>( &albumArtUri ) ) );
-        if ( id == KUndefined ) {
-            // Request failed. Set default album art.
-            mMpQueryManager->insertMapItem( albumArtUri, mDefaultRecommendationAlbumArt );
-            recommendationAlbumArtReady();
-        }
-    }
-    else {
-        // No album art uri. Set default album art.
-        mMpQueryManager->insertMapItem( albumArtUri, mDefaultRecommendationAlbumArt );
-        recommendationAlbumArtReady();
-    }
-    TX_EXIT
-}
-
-/*!
  Render inspireme groupbox after album arts downloaded
  */
-void MpDetailsView::RenderInspireMeGroupBox() 
+void MpDetailsView::RenderInspireMeGroupBox()
 {
     TX_ENTRY
     mInspireMeQueryOngoing = false;
@@ -386,13 +341,13 @@
         for ( int i = 0; i < KRecommendationCount; i++ ) {
             // configure the layout properties
             if(!mInspireList->count()) {
-                // we havent configured the prototype before 
+                // we havent configured the prototype before
                 HbListViewItem *prototype = mInspireList->listItemPrototype();
                 prototype->setGraphicsSize( HbListViewItem::LargeIcon );
             }
             // create the item
             HbListWidgetItem  *inspireMeItem = new HbListWidgetItem();
-            HbIcon icon( QIcon( mMpQueryManager->recommendationAlbumArtsMap().value(mMpQueryManager->recommendationAlbumArtsLink().at( i ) ) ) ); 
+            HbIcon icon( QIcon( mMpQueryManager->recommendationAlbumArtsMap().value(mMpQueryManager->recommendationAlbumArtsLink().at( i ) ) ) );
             inspireMeItem->setIcon( icon );
             inspireMeItem->setText( mMpQueryManager->recommendationSongs().at( i ) );
             inspireMeItem->setSecondaryText( mMpQueryManager->recommendationArtists().at( i ) );
@@ -402,37 +357,26 @@
     else {
         TX_LOG_ARGS( "There is NO recommendation." )
         // we dont have recommendations
-        // we havent configured the prototype before 
+        // we havent configured the prototype before
         HbListViewItem *prototype = mInspireList->listItemPrototype();
         const int maxTextRowCount = 20;
         const int minTextRowCount = 1;
         prototype->setSecondaryTextRowCount(minTextRowCount,maxTextRowCount);
-        
+
         HbListWidgetItem  *inspireMeItem = new HbListWidgetItem();
         QString info(tr("There are no recommendations for this track, but you can always discover new music on Ovi"));
         inspireMeItem->setText( QString( " " ) );
         inspireMeItem->setSecondaryText( info );
         mInspireList->addItem( inspireMeItem );
     }
-    
+
     TX_EXIT
 }
 
-void MpDetailsView::recommendationAlbumArtReady()
-{   
-    TX_ENTRY_ARGS( "mAlbumArtsReadyCount = " << mMpQueryManager->albumArtsReadyCount() )
-        ( mMpQueryManager->albumArtsReadyCount() )++;
-    if ( mMpQueryManager->albumArtsReadyCount() == KRecommendationCount ) {
-        RenderInspireMeGroupBox();
-    }
-    TX_EXIT
-}
-
-
 bool MpDetailsView::canQueryRecommendations() const
 {
     bool result = ( ( !mSongData->album().isEmpty() ) ||
-                    ( !mSongData->artist().isEmpty() ) ) && 
+                    ( !mSongData->artist().isEmpty() ) ) &&
                   !( mInspireMeGroupBox->isCollapsed() );
     TX_LOG_ARGS( "Can query recommendations:" << result );
     return result;
@@ -455,33 +399,37 @@
     mMpQueryManager->clearNetworkReplies();
     clearInspireMe();
     mInspireMeQueryRendered = false;
-    
+
+    // Clear the song data link until new query has been made.
+    mSongData->setLink( "" );
+
     if ( !mSongData->title().isEmpty () ) {
         mSongText->setPlainText( mSongData->title() );
     } else {
         mSongText->setPlainText( mSongData->fileName() );
     }
-    
+
     if ( !mSongData->album().isEmpty () ) {
         mAlbumText->setPlainText( mSongData->album() );
     } else {
-        mAlbumText->setPlainText( tr( "Unknown ") );
+        mAlbumText->setPlainText( tr( "Unknown") );
     }
-    
+
     if ( !mSongData->artist().isEmpty() ) {
         mArtistText->setPlainText( mSongData->artist() );
     } else {
-        mArtistText->setPlainText( tr( "Unknown ") );
+        mArtistText->setPlainText( tr( "Unknown") );
     }
-        
+
+    if (canQuerySharePlayerLink() ) {
+        mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title());
+    }
+
     if (canQueryRecommendations()) {
         // start inspire me area progress bar
         // TODO: currently, till we get to this callback from MPX the bar not shown
         // TODO: check if inspireMe is ON, if not, dont show
         mInspireMeProgressBar->show();
-        if (canQuerySharePlayerLink() ) {
-        mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title());
-        }
         mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title());
         mInspireMeQueryOngoing = true;
     }
@@ -491,15 +439,15 @@
       if (!mInspireMeGroupBox->isCollapsed())
         RenderInspireMeGroupBox();
     }
-    TX_EXIT    
+    TX_EXIT
 }
 
 void MpDetailsView::clearInspireMe()
 {
-    TX_ENTRY    
+    TX_ENTRY
     mInspireList->clear();
-    mMpQueryManager->clearRecommendations(); 
-    TX_EXIT    
+    mMpQueryManager->clearRecommendations();
+    TX_EXIT
 }
 /*!
  Slot to handle detail song information
@@ -508,15 +456,15 @@
 {
     TX_ENTRY
     mDetailList->clear();
-    
+
     if ( !mSongData->albumTrack().isNull() ) {
-        HbListWidgetItem *item = new HbListWidgetItem(); 
+        HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Song number" ) );
         item->setSecondaryText( mSongData->albumTrack() );
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
-    
+
     if ( !mSongData->year().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Year" ) );
@@ -524,7 +472,7 @@
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
-    
+
     if ( !mSongData->genre().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Genre" ) );
@@ -532,7 +480,7 @@
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
-    
+
     if ( !mSongData->composer().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Composer" ) );
@@ -548,7 +496,7 @@
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
-    
+
     if ( !mSongData->mimeType().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Format" ) );
@@ -564,7 +512,7 @@
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
-    
+
     if ( !mSongData->bitRate().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Bitrate" ) );
@@ -572,7 +520,7 @@
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
-    
+
     if ( !mSongData->sampleRate().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Sampling rate" ) );
@@ -580,7 +528,7 @@
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
-    
+
     if ( !mSongData->size().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Size" ) );
@@ -588,7 +536,7 @@
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
-    
+
     if ( !mSongData->modified().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Modified" ) );
@@ -604,7 +552,7 @@
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
-    
+
     if ( !mSongData->musicURL().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Web site" ) );
@@ -612,7 +560,7 @@
         item->setEnabled( true );
         mDetailList->addItem( item );
     }
-    
+
     if ( mSongData->isDrmProtected() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
         item->setText( tr( "Licences" ) );
@@ -624,9 +572,8 @@
     TX_EXIT
 }
 
-void MpDetailsView::handleDetailsGroupBoxToggled(bool state)
+void MpDetailsView::handleDetailsGroupBoxToggled(bool /*state*/)
 {
-    Q_UNUSED(state);
     TX_ENTRY
     if ( !mSongDetailsGroupBox->isCollapsed() ) {
             mInspireMeGroupBox->setCollapsed( true );
@@ -639,7 +586,7 @@
     TX_ENTRY
     if ( !mInspireMeGroupBox->isCollapsed() ) {
         TX_LOG_ARGS( "InspireMe is expanded." )
-        mSongDetailsGroupBox->setCollapsed( true );     
+        mSongDetailsGroupBox->setCollapsed( true );
         if ( mInspireMeQueryOngoing ) {
             TX_LOG_ARGS( "Query is ongoing " )
             mInspireMeProgressBar->show();
@@ -658,7 +605,7 @@
                     TX_LOG_ARGS( "InspireMe is NOT rendered yet and CANNOT query for recommendations either. " )
                     RenderInspireMeGroupBox();
                 }
-            }        
+            }
         }
     } else {
         TX_LOG_ARGS( "InspireMe is collapsed." )
@@ -667,30 +614,6 @@
     TX_EXIT
 }
 
-/*!
- Slot to handle the recommendation album art 
-*/
-void MpDetailsView::thumbnailReady(
-        const QPixmap& pixmap,
-        void *data,
-        int /*id*/,
-        int error  )
-{
-    TX_ENTRY
-    // TODO: Hkn: use qobject_cast
-    QString uri = *( reinterpret_cast<QString *>( data ) );
-    TX_LOG_ARGS( "Uri: " << uri );
-    
-    if ( error == 0 ) {
-        TX_LOG_ARGS( "album art link: " << uri );
-        mMpQueryManager->insertMapItem( uri, pixmap );
-    } else {
-        mMpQueryManager->insertMapItem( uri, mDefaultRecommendationAlbumArt );
-    }
-    recommendationAlbumArtReady();
-    TX_EXIT
-}
-
 #ifdef SHARE_FUNC_ENABLED
 /*!
  Slot to be called when share button is clicked
@@ -699,10 +622,6 @@
 {
     TX_ENTRY
     createShareDialog();
-    if ( mSharePopup )
-    {
-        mSharePopup->show();
-    }
     if (canQuerySharePlayerLink() )
     {
         mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title() );
@@ -712,6 +631,7 @@
 
 /*!
   Method to create the share dialog on demand.
+  This will cause the share web view to be created and start loading.
   */
 void MpDetailsView::createShareDialog()
 {
@@ -719,13 +639,31 @@
     if ( !mSharePopup )
     {
         mSharePopup = new MpDetailsShareDialog();
-        connect( mSharePopup, SIGNAL(closeShareDialog() ), this, SLOT( closeShareDialog() ) );
-        mSharePopup->initialize( mSongData );
+    }
+    if ( !mSharePopup->isInitialized() )
+    {
+        connect( mSharePopup, SIGNAL( closeShareDialog() ), this, SLOT( closeShareDialog() ) );
+        mSharePopup->initialize( mSongData, tr( "Unknown" ) );
     }
     TX_EXIT
 }
 
 /*!
+  Method to create the share dialog on demand and preload publishing player files.
+  This will construct the share dialog but it will still be in "uninitialized" state.
+  */
+void MpDetailsView::preloadShareDialog()
+{
+    TX_ENTRY
+    if ( !mSharePopup )
+    {
+        mSharePopup = new MpDetailsShareDialog();
+    }
+    mSharePopup->cachePublishingPlayerFiles();
+    TX_EXIT
+}
+
+/*!
  Slot to be called when ok/close button in share dialog is pressed.
  */
 void MpDetailsView::closeShareDialog()
@@ -733,8 +671,8 @@
     TX_ENTRY
     if ( mSharePopup )
     {
+        // Dialog uses WA_DeleteOnClose so no need to delete it explicitely here, just close it.
         mSharePopup->close();
-        delete mSharePopup;
         mSharePopup = NULL;
     }
     TX_EXIT