| Start/ | End/ | |||
| True | False | - | Line | Source |
| 1 | /* | |||
| 2 | * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). | |||
| 3 | * All rights reserved. | |||
| 4 | * This component and the accompanying materials are made available | |||
| 5 | * under the terms of "Eclipse Public License v1.0" | |||
| 6 | * which accompanies this distribution, and is available | |||
| 7 | * at the URL "http://www.eclipse.org/legal/epl-v10.html". | |||
| 8 | * | |||
| 9 | * Initial Contributors: | |||
| 10 | * Nokia Corporation - initial contribution. | |||
| 11 | * | |||
| 12 | * Contributors: | |||
| 13 | * | |||
| 14 | * Description: Music Player details view. | |||
| 15 | * | |||
| 16 | */ | |||
| 17 | #include <qwebsettings> | |||
| 18 | #include <QGraphicsWidget> | |||
| 19 | #include <QGraphicsLayoutItem> | |||
| 20 | #include <QUrl> | |||
| 21 | #include <QSslError> | |||
| 22 | #include <QDomElement> | |||
| 23 | #include <QList> | |||
| 24 | #include <QFile> | |||
| 25 | #include <QTranslator> | |||
| 26 | #include <QLocale> | |||
| 27 | #include <QGraphicsLinearLayout> | |||
| 28 | #include <QSizeF> | |||
| 29 | ||||
| 30 | #include <thumbnailmanager_qt.h> | |||
| 31 | #include <thumbnaildata.h> | |||
| 32 | #include <thumbnailobjectsource.h> | |||
| 33 | ||||
| 34 | #include <hbinstance.h> | |||
| 35 | #include <hbmainwindow.h> | |||
| 36 | #include <hbaction.h> | |||
| 37 | #include <hblabel.h> | |||
| 38 | #include <hbgroupbox.h> | |||
| 39 | #include <hbdocumentloader.h> | |||
| 40 | #include <hbwidget.h> | |||
| 41 | #include <hbpushbutton.h> | |||
| 42 | #include <hbpopup.h> | |||
| 43 | #include <hbdialog.h> | |||
| 44 | #include <hblistwidget.h> | |||
| 45 | #include <hblistwidgetitem.h> | |||
| 46 | #include <hblistviewitem.h> | |||
| 47 | #include <hbprogressbar> | |||
| 48 | ||||
| 49 | #include "mpdetailsview.h" | |||
| 50 | #include "mpenginefactory.h" | |||
| 51 | #include "mpcommondefs.h" | |||
| 52 | #include "mpsongdata.h" | |||
| 53 | #include "mpsettingsmanager.h" | |||
| 54 | #include "mpdetailssharedialog.h" | |||
| 55 | #include "mpquerymanager.h" | |||
| 56 | #include "mptrace.h" | |||
| 57 | #include "logger.h" | |||
| 58 | #define SHARE_FUNC_ENABLE | |||
| 59 | ||||
| 60 | const int KUndefined = -1; | |||
| 61 | const int KRecommendationNum = 2; | |||
| 62 | ||||
| 63 | /*! | |||
| 64 | Constructor | |||
| 65 | */ | |||
| Top | ||||
| 4 | 4 | 66 | MpDetailsView::MpDetailsView() | |
| 67 | : mMpEngine( 0 ), | |||
| 68 | mSongData( 0 ), | |||
| 69 | mActivated( false ), | |||
| 70 | mWindow( 0 ), | |||
| 71 | mSoftKeyBack( 0 ), | |||
| 72 | mSongText( NULL ), | |||
| 73 | mAlbumText( NULL ), | |||
| 74 | mArtistText( NULL ), | |||
| 75 | mAlbumArt( NULL ), | |||
| 76 | mDocumentLoader( NULL ), | |||
| 77 | mDownloadedAlbumArts( 0 ), | |||
| 78 | mMpTranslator( 0 ), | |||
| 79 | mCommonTranslator( 0 ), | |||
| 80 | mSharePopup( 0 ), | |||
| 81 | mMpQueryManager( 0), | |||
| 82 | mInspireMeOpen(true), | |||
| 83 | mSongDetailsGbOpen(false) | |||
| 84 | { | |||
| 85 | TX_ENTRY | |||
| 86 | bool widgetsOk = false; | |||
| 87 | HbMainWindow *mainWindow = hbInstance->allMainWindows()[0]; | |||
| 88 | mDocumentLoader = new HbDocumentLoader(); | |||
| 89 | ||||
| 90 | TX_LOG_ARGS("Document loader created") | |||
| 0 | 4 | - | 91 | if(!mDocumentLoader) { |
| 92 | TX_LOG_ARGS( "MpDetailsView() Error: HbDocumentLoader not constructed" ); | |||
| 0 | - | 93 | return; | |
| 94 | } | |||
| 95 | ||||
| 96 | TX_LOG_ARGS("Loading :/mpdetailsviewdocml/mpdetailsview.docml") | |||
| 97 | mDocumentLoader->load( QString(":/mpdetailsviewdocml/mpdetailsview.docml"), &widgetsOk ); | |||
| 0 | 4 | - | 98 | if(!widgetsOk) { |
| 99 | TX_LOG_ARGS( "MpDetailsView() Error: invalid mpdetailsview.docml" ); | |||
| 0 | - | 100 | return; | |
| 101 | } | |||
| 102 | ||||
| 103 | TX_LOG_ARGS("Loaded :/mpdetailsviewdocml/mpdetailsview.docml") | |||
| 104 | QGraphicsWidget *widget = 0; | |||
| 105 | ||||
| 106 | widget = mDocumentLoader->findWidget( QString("content") ); | |||
| 107 | TRACE2("MpDetailsView() mDocumentLoader->findWidget for <content>:%x", widget); | |||
| 107 | while ( 0 ) | |||
| 108 | mContainer = qobject_cast<HbWidget *>(widget); | |||
| 109 | TRACE2("MpDetailsView() <content> widget found mContainer:%x", mContainer); | |||
| 109 | while ( 0 ) | |||
| 110 | setWidget( mContainer ); | |||
| 111 | ||||
| 112 | widget = mDocumentLoader->findWidget( QString("shareButton") ); | |||
| 113 | mShareButton = qobject_cast<HbPushButton *>(widget); | |||
| 114 | TRACE2("MpDetailsView() <shareButton> widget found mShareButton:%x", mShareButton); | |||
| 114 | while ( 0 ) | |||
| 115 | ||||
| 116 | widget = mDocumentLoader->findWidget( QString("trackTitle") ); | |||
| 117 | mSongText = qobject_cast<HbLabel *>(widget); | |||
| 118 | TRACE2("MpDetailsView() <trackTitle> widget found mSongText:%x", mSongText); | |||
| 118 | while ( 0 ) | |||
| 119 | ||||
| 120 | widget = mDocumentLoader->findWidget( QString("artist") ); | |||
| 121 | mArtistText = qobject_cast<HbLabel *>(widget); | |||
| 122 | TRACE2("MpDetailsView() <artist> widget found mArtistText:%x", mArtistText); | |||
| 122 | while ( 0 ) | |||
| 123 | ||||
| 124 | widget = mDocumentLoader->findWidget( QString("albumName") ); | |||
| 125 | mAlbumText = qobject_cast<HbLabel *>(widget); | |||
| 126 | TRACE2("MpDetailsView() <albumName> widget found mAlbumText:%x", mAlbumText); | |||
| 126 | while ( 0 ) | |||
| 127 | ||||
| 128 | widget = mDocumentLoader->findWidget( QString("albumArt") ); | |||
| 129 | mAlbumArt = qobject_cast<HbLabel *>(widget); | |||
| 130 | TRACE2("MpDetailsView() <albumArt> widget found mAlbumArt:%x", mAlbumArt); | |||
| 130 | while ( 0 ) | |||
| 131 | ||||
| 132 | widget = mDocumentLoader->findWidget( QString("songDetails") ); | |||
| 133 | mSongDetailsGroupBox = qobject_cast<HbGroupBox *>(widget); | |||
| 134 | TRACE2("MpDetailsView() <songDetails> widget found mSongDetailsGroupBox:%x", mSongDetailsGroupBox); | |||
| 134 | while ( 0 ) | |||
| 135 | ||||
| 136 | widget = mDocumentLoader->findWidget( QString("songDetailsListWidget") ); | |||
| 137 | mDetailList = qobject_cast<HbListWidget *>(widget); | |||
| 138 | TRACE2("MpDetailsView() <songDetailsListWidget> widget found mDetailList:%x", mDetailList); | |||
| 138 | while ( 0 ) | |||
| 139 | ||||
| 140 | widget = mDocumentLoader->findWidget( QString("inspireMeGroupBox") ); | |||
| 141 | mInspireMeGroupBox = qobject_cast<HbGroupBox *>(widget); | |||
| 142 | TRACE2("MpDetailsView() <inspireMeGroupBox> widget found mInspireMeGroupBox:%x", mInspireMeGroupBox); | |||
| 142 | while ( 0 ) | |||
| 143 | ||||
| 144 | widget = mDocumentLoader->findWidget( QString("inspireListWidget") ); | |||
| 145 | mInspireList = qobject_cast<HbListWidget *>(widget); | |||
| 146 | TRACE2("MpDetailsView() <inspireListWidget> widget found mInspireList:%x", mInspireList); | |||
| 146 | while ( 0 ) | |||
| 147 | ||||
| 148 | widget = mDocumentLoader->findWidget( QString("inspireMeProgressBar") ); | |||
| 149 | mInspireMeProgressBar = qobject_cast<HbProgressBar *>(widget); | |||
| 150 | TRACE2("MpDetailsView() <inspireMeProgressBar> widget found mInspireMeProgressBar:%x", mInspireMeProgressBar); | |||
| 150 | while ( 0 ) | |||
| 151 | ||||
| 152 | TX_EXIT | |||
| 153 | } | |||
| 154 | ||||
| 155 | /*! | |||
| 156 | Destructs the details view. | |||
| 157 | */ | |||
| Top | ||||
| 4 | 4 | 158 | MpDetailsView::~MpDetailsView() | |
| 159 | { | |||
| 160 | TX_ENTRY | |||
| 4 | 0 | - | 161 | if ( mSoftKeyBack ) { |
| 162 | delete mSoftKeyBack; | |||
| 163 | } | |||
| 4 | 0 | - | 164 | if ( mDocumentLoader ) { |
| 165 | delete mDocumentLoader; | |||
| 166 | } | |||
| 4 | 0 | - | 167 | if( mThumbnailManager ) { |
| 168 | delete mThumbnailManager; | |||
| 169 | } | |||
| 170 | delete mMpTranslator; | |||
| 171 | delete mCommonTranslator; | |||
| 172 | delete mSharePopup; | |||
| 173 | delete mMpQueryManager; | |||
| 174 | ||||
| 175 | TX_EXIT | |||
| 176 | } | |||
| 177 | ||||
| 178 | /*! | |||
| 179 | Initializes the details view. Allocates all resources needed by the view. | |||
| 180 | */ | |||
| Top | ||||
| 4 | 4 | 181 | void MpDetailsView::initializeView() | |
| 182 | { | |||
| 183 | TX_ENTRY | |||
| 184 | ||||
| 185 | //Load musicplayer and common translators | |||
| 186 | QString lang = QLocale::system().name(); | |||
| 187 | QString path = QString( "z:/resource/qt/translations/" ); | |||
| 188 | bool translatorLoaded = false; | |||
| 189 | ||||
| 190 | mMpTranslator = new QTranslator( this ); | |||
| 191 | translatorLoaded = mMpTranslator->load( path + "musicplayer_" + lang ); | |||
| 192 | TX_LOG_ARGS( "Loading translator ok=" << translatorLoaded ); | |||
| 4 | 0 | - | 193 | if ( translatorLoaded ) { |
| 194 | qApp->installTranslator( mMpTranslator ); | |||
| 195 | } | |||
| 196 | ||||
| 197 | mCommonTranslator = new QTranslator( this ); | |||
| 198 | translatorLoaded = mCommonTranslator->load( path + "common_" + lang ); | |||
| 199 | TX_LOG_ARGS( "Loading common translator ok=" << translatorLoaded ); | |||
| 0 | 4 | - | 200 | if ( translatorLoaded ) { |
| 201 | qApp->installTranslator( mCommonTranslator ); | |||
| 202 | } | |||
| 203 | ||||
| 204 | // TODO: Hkn: Remove this once ELCE-844GBS is fixed | |||
| 205 | mInspireMeProgressBar->hide(); | |||
| 206 | ||||
| 207 | mWindow = mainWindow(); | |||
| 208 | mSoftKeyBack = new HbAction( Hb::BackAction, this ); | |||
| 209 | ||||
| 210 | mMpEngine = MpEngineFactory::sharedEngine(); | |||
| 211 | mSongData = mMpEngine->songData(); | |||
| 212 | ||||
| 213 | // TODO: Remove this once Orbit bug ELCE-843HFJ is fixed | |||
| 214 | mInspireList->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); | |||
| 215 | ||||
| 216 | ||||
| 217 | ||||
| 218 | ||||
| 219 | mThumbnailManager = new ThumbnailManager( this ); | |||
| 220 | mThumbnailManager->setQualityPreference( ThumbnailManager::OptimizeForQuality ); | |||
| 221 | mThumbnailManager->setThumbnailSize( ThumbnailManager::ThumbnailSmall ); | |||
| 222 | QObject::connect( mThumbnailManager, SIGNAL( thumbnailReady( QPixmap , void * , int , int ) ), | |||
| 223 | this, SLOT( thumbnailReady( QPixmap , void * , int , int ) ) ); | |||
| 224 | // TODO: Use the album art in provided by 10.1 wk16 platform. Current one is in the binary | |||
| 225 | mDefaultRecommendationAlbumArt = QPixmap( ":/mpdetailsviewicons/qtg_large_music_album.svg" ); | |||
| 226 | ||||
| 227 | // TODO: might need later | |||
| 228 | setupMenu(); | |||
| 229 | mMpQueryManager = new MpQueryManager(); | |||
| 230 | ||||
| 231 | connect( mSoftKeyBack, SIGNAL( triggered() ), this, SLOT( back() ) ); | |||
| 232 | connect( mSongData, SIGNAL( albumArtReady() ), this, SLOT( albumArtChanged() ) ); | |||
| 233 | connect( mSongData, SIGNAL( playbackInfoChanged() ), this, SLOT( handlePlaybackInfoChanged() ) ); | |||
| 234 | connect( mSongData, SIGNAL( songDetailInfoChanged() ), this, SLOT( songDetailInfoChanged() ) ); | |||
| 235 | connect( mSongDetailsGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleDetailsGroupBoxToggled( bool ) ) ); | |||
| 236 | connect( mInspireMeGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleInspireMeGroupBoxToggled( bool ) ) ); | |||
| 237 | connect( mMpQueryManager, SIGNAL(onlineStatusChanged(bool)), this ,SLOT(onlineStateChanged(bool))); | |||
| 238 | connect( mMpQueryManager, SIGNAL(setAlbumArt(const QString &, const QString &) ), this ,SLOT(setAlbumArtUri(const QString &, const QString & ))); | |||
| 239 | #ifdef SHARE_FUNC_ENABLED | |||
| 240 | connect( mShareButton, SIGNAL( clicked() ), this, SLOT( share() ) ); | |||
| 241 | ||||
| 242 | // Preload the share popup | |||
| 243 | mSharePopup = new MpDetailsShareDialog( mSongData ); | |||
| 244 | #endif | |||
| 245 | TX_EXIT | |||
| 246 | } | |||
| 247 | ||||
| 248 | /*! | |||
| 249 | Activates the details view. | |||
| 250 | */ | |||
| Top | ||||
| 1 | 1 | 251 | void MpDetailsView::activateView() | |
| 252 | { | |||
| 253 | TX_ENTRY | |||
| 254 | setNavigationAction( mSoftKeyBack ); | |||
| 255 | mMpEngine->retrieveSong(); | |||
| 256 | ||||
| 257 | mActivated = true; | |||
| 258 | mInspireMeOpen = MpSettingsManager::inspireMe(); | |||
| 259 | mSongDetailsGbOpen = MpSettingsManager::songDetailsGb(); | |||
| 260 | TX_LOG_ARGS( "InspireMeVal: " << mInspireMeOpen ); | |||
| 261 | TX_LOG_ARGS( "SongDetailsGbVal: " << mSongDetailsGbOpen ); | |||
| 262 | mInspireMeGroupBox->setCollapsed(!mInspireMeOpen); | |||
| 263 | mSongDetailsGroupBox->setCollapsed(!mSongDetailsGbOpen); | |||
| 264 | TX_EXIT | |||
| 265 | } | |||
| 266 | ||||
| 267 | /*! | |||
| 268 | Deactivates the details view. | |||
| 269 | */ | |||
| Top | ||||
| 1 | 1 | 270 | void MpDetailsView::deactivateView() | |
| 271 | { | |||
| 272 | TX_ENTRY | |||
| 273 | setNavigationAction( 0 ); | |||
| 274 | mActivated = false; | |||
| 275 | TX_EXIT | |||
| 276 | } | |||
| 277 | ||||
| 278 | /*! | |||
| 279 | Setup the menu. | |||
| 280 | */ | |||
| Top | ||||
| 4 | 4 | 281 | void MpDetailsView::setupMenu() | |
| 282 | { | |||
| 283 | TX_ENTRY | |||
| 284 | ||||
| 285 | TX_EXIT | |||
| 286 | } | |||
| 287 | ||||
| 288 | /*! | |||
| 289 | Slot to handle back command from softkey. | |||
| 290 | */ | |||
| Top | ||||
| 1 | 1 | 291 | void MpDetailsView::back() | |
| 292 | { | |||
| 293 | TX_ENTRY | |||
| 0 | 1 | - | 294 | if (mInspireMeGroupBox->isCollapsed() ) { |
| 295 | MpSettingsManager::setInspireMe(false); | |||
| 296 | } else { | |||
| 297 | MpSettingsManager::setInspireMe(true); | |||
| 298 | } | |||
| 299 | ||||
| 0 | 1 | - | 300 | if (mSongDetailsGroupBox->isCollapsed() ) { |
| 301 | MpSettingsManager::setSongDetailsGb(false); | |||
| 302 | } else { | |||
| 303 | MpSettingsManager::setSongDetailsGb(true); | |||
| 304 | } | |||
| 305 | ||||
| 306 | emit command( MpCommon::ActivatePlaybackView ); | |||
| 307 | TX_EXIT | |||
| 308 | } | |||
| 309 | ||||
| 310 | /*! | |||
| 311 | Slot to be called when share button is clicked | |||
| 312 | */ | |||
| Top | ||||
| 0 | 0 | - | 313 | void MpDetailsView::share() |
| 314 | { | |||
| 315 | TX_ENTRY | |||
| 316 | // TODO: Fix the layout issue in idex.html then enable this | |||
| 0 | 0 | - | 317 | if ( !mSharePopup ) |
| 318 | { | |||
| 319 | mSharePopup = new MpDetailsShareDialog( mSongData ); | |||
| 320 | } | |||
| 0 | 0 | - | 321 | if ( mSharePopup ) |
| 322 | { | |||
| 323 | mSharePopup->show(); | |||
| 324 | } | |||
| 0 | 0 | - | 325 | if (canQuerySharePlayerLink() ) { |
| 326 | mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title() ); | |||
| 327 | } | |||
| 328 | TX_EXIT | |||
| 329 | } | |||
| 330 | ||||
| 331 | /*! | |||
| 332 | Slot to handle Album art changed. | |||
| 333 | */ | |||
| Top | ||||
| 0 | 0 | - | 334 | void MpDetailsView::albumArtChanged( ) |
| 335 | { | |||
| 336 | TX_ENTRY | |||
| 337 | HbIcon icon; | |||
| 338 | mSongData->albumArt( icon ); | |||
| 339 | mAlbumArt->setIcon( icon ); | |||
| 340 | TX_EXIT | |||
| 341 | } | |||
| 342 | ||||
| 343 | /*! | |||
| 344 | Slot to handle Connection changes. | |||
| 345 | */ | |||
| Top | ||||
| 0 | 0 | - | 346 | void MpDetailsView::onlineStateChanged(bool state) |
| 347 | { | |||
| 348 | TX_ENTRY | |||
| 349 | mOnline = state; | |||
| 350 | TX_EXIT | |||
| 351 | } | |||
| 352 | ||||
| 353 | /*! | |||
| 354 | Sets recommendation album art | |||
| 355 | */ | |||
| Top | ||||
| 0 | 0 | - | 356 | void MpDetailsView::setAlbumArtUri( const QString &albumArtUri, const QString &albumArtName ) |
| 357 | { | |||
| 358 | TX_ENTRY_ARGS( "albumArtUri = " << albumArtUri ) | |||
| 359 | TX_LOG_ARGS( "albumArtName = " << albumArtName ) | |||
| 0 | 0 | - | 360 | if ( !albumArtUri.isEmpty() ) { |
| 361 | int id = mThumbnailManager->getThumbnail( albumArtName, reinterpret_cast<void *>( const_cast<QString *>( &albumArtUri ) ) ); | |||
| 0 | 0 | - | 362 | if ( id == KUndefined ) { |
| 363 | // Request failed. Set default album art. | |||
| 364 | mMpQueryManager->insertMapItem( albumArtUri, mDefaultRecommendationAlbumArt ); | |||
| 365 | recommendationAlbumArtReady(); | |||
| 366 | } | |||
| 367 | } | |||
| 368 | else { | |||
| 369 | // No album art uri. Set default album art. | |||
| 370 | mMpQueryManager->insertMapItem( albumArtUri, mDefaultRecommendationAlbumArt ); | |||
| 371 | recommendationAlbumArtReady(); | |||
| 372 | } | |||
| 373 | TX_EXIT | |||
| 374 | } | |||
| 375 | ||||
| 376 | /*! | |||
| 377 | Render inspireme groupbox after album arts downloaded | |||
| 378 | */ | |||
| Top | ||||
| 0 | 0 | - | 379 | void MpDetailsView::RenderInspireMeGroupBox() |
| 380 | { | |||
| 381 | TX_ENTRY | |||
| 382 | ||||
| 0 | 0 | - | 383 | if( mMpQueryManager->recommendationAlbumArtsMap().count() ) { |
| 384 | // we have recommendations | |||
| 0 | 0 | - | 385 | for ( int i = 0; i < KRecommendationNum; i++ ) { |
| 386 | // configure the layout properties | |||
| 0 | 0 | - | 387 | if(!mInspireList->count()) { |
| 388 | // we havent configured the prototype before | |||
| 389 | HbListViewItem *prototype = mInspireList->listItemPrototype(); | |||
| 390 | prototype->setGraphicsSize( HbListViewItem::LargeIcon ); | |||
| 391 | } | |||
| 392 | // create the item | |||
| 393 | HbListWidgetItem *inspireMeItem = new HbListWidgetItem(); | |||
| 394 | HbIcon icon( QIcon( mMpQueryManager->recommendationAlbumArtsMap().value(mMpQueryManager->recommendationAlbumArtsLink().at( i ) ) ) ); | |||
| 395 | inspireMeItem->setIcon( icon ); | |||
| 396 | inspireMeItem->setText( mMpQueryManager->recommendationSongs().at( i ) ); | |||
| 397 | inspireMeItem->setSecondaryText( mMpQueryManager->recommendationArtists().at( i ) ); | |||
| 398 | mInspireList->addItem( inspireMeItem ); | |||
| 399 | } | |||
| 400 | } | |||
| 401 | else { | |||
| 402 | // we dont have recommendations | |||
| 403 | // we havent configured the prototype before | |||
| 404 | HbListViewItem *prototype = mInspireList->listItemPrototype(); | |||
| 405 | const int maxTextRowCount = 20; | |||
| 406 | const int minTextRowCount = 1; | |||
| 407 | prototype->setSecondaryTextRowCount(minTextRowCount,maxTextRowCount); | |||
| 408 | ||||
| 409 | HbListWidgetItem *inspireMeItem = new HbListWidgetItem(); | |||
| 410 | QString info(tr("There are no recommendations for this track, but you can always discover new music on Ovi")); | |||
| 411 | inspireMeItem->setSecondaryText(info); | |||
| 412 | mInspireList->addItem( inspireMeItem ); | |||
| 413 | } | |||
| 414 | ||||
| 415 | TX_EXIT | |||
| 416 | } | |||
| 417 | ||||
| Top | ||||
| 0 | 0 | - | 418 | void MpDetailsView::recommendationAlbumArtReady() |
| 419 | { | |||
| 420 | TX_ENTRY_ARGS( "mAlbumArtsReadyCount = " << mMpQueryManager->albumArtsReadyCount() ) | |||
| 421 | ( mMpQueryManager->albumArtsReadyCount() )++; | |||
| 0 | 0 | - | 422 | if ( mMpQueryManager->albumArtsReadyCount() == KRecommendationNum ) { |
| 423 | mInspireMeProgressBar->hide(); | |||
| 424 | RenderInspireMeGroupBox(); | |||
| 425 | } | |||
| 426 | TX_EXIT | |||
| 427 | } | |||
| 428 | ||||
| 429 | ||||
| 430 | ||||
| Top | ||||
| 0 | 0 | - | 431 | bool MpDetailsView::canQueryRecommendations() const |
| 432 | { | |||
| 433 | bool result = (!(mAlbumText->isEmpty()) || !(mArtistText->isEmpty()) ) && !(mInspireMeGroupBox->isCollapsed()); | |||
| 434 | TX_LOG_ARGS(" result:" << result); | |||
| 0 | - | 435 | return result; | |
| 436 | } | |||
| 437 | ||||
| Top | ||||
| 0 | 0 | - | 438 | bool MpDetailsView::canQuerySharePlayerLink() const |
| 439 | { | |||
| 440 | bool result = !(mSongText->isEmpty()) && !(mArtistText->isEmpty()); | |||
| 441 | TX_LOG_ARGS(" result:" << result); | |||
| 0 | - | 442 | return result; | |
| 443 | } | |||
| 444 | ||||
| 445 | /*! | |||
| 446 | Slot to handle basic song information | |||
| 447 | */ | |||
| Top | ||||
| 0 | 0 | - | 448 | void MpDetailsView::handlePlaybackInfoChanged() |
| 449 | { | |||
| 450 | TX_ENTRY | |||
| 451 | ||||
| 452 | mMpQueryManager->clearNetworkReplies(); | |||
| 453 | clearInspireMe(); | |||
| 454 | ||||
| 0 | 0 | - | 455 | if ( !mSongData->title().isEmpty () ) { |
| 456 | mSongText->setPlainText( mSongData->title() ); | |||
| 457 | } else { | |||
| 458 | mSongText->setPlainText( mSongData->fileName() ); | |||
| 459 | } | |||
| 460 | ||||
| 0 | 0 | - | 461 | if ( !mSongData->album().isEmpty () ) { |
| 462 | mAlbumText->setPlainText( mSongData->album() ); | |||
| 463 | } else { | |||
| 464 | mAlbumText->setPlainText( tr( "Unknown ") ); | |||
| 465 | } | |||
| 466 | ||||
| 0 | 0 | - | 467 | if ( !mSongData->artist().isEmpty() ) { |
| 468 | mArtistText->setPlainText( mSongData->artist() ); | |||
| 469 | } else { | |||
| 470 | mArtistText->setPlainText( tr( "Unknown ") ); | |||
| 471 | } | |||
| 472 | ||||
| 0 | 0 | - | 473 | if (canQueryRecommendations()) { |
| 474 | // start inspire me area progress bar | |||
| 475 | // TODO: currently, till we get to this callback from MPX the bar not shown | |||
| 476 | // TODO: check if inspireMe is ON, if not, dont show | |||
| 477 | mInspireMeProgressBar->show(); | |||
| 0 | 0 | - | 478 | if (canQuerySharePlayerLink() ) { |
| 479 | mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title()); | |||
| 480 | } | |||
| 481 | mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title()); | |||
| 482 | } | |||
| 483 | else { | |||
| 484 | // metadata to query for inspire me items not available | |||
| 485 | // show information note | |||
| 0 | 0 | - | 486 | if (!mInspireMeGroupBox->isCollapsed()) |
| 487 | RenderInspireMeGroupBox(); | |||
| 488 | } | |||
| 489 | TX_EXIT | |||
| 490 | } | |||
| 491 | ||||
| Top | ||||
| 0 | 0 | - | 492 | void MpDetailsView::clearInspireMe() |
| 493 | { | |||
| 494 | TX_ENTRY | |||
| 495 | mInspireList->clear(); | |||
| 496 | mMpQueryManager->clearRecommendations(); | |||
| 497 | TX_EXIT | |||
| 498 | } | |||
| 499 | /*! | |||
| 500 | Slot to handle detail song information | |||
| 501 | */ | |||
| Top | ||||
| 0 | 0 | - | 502 | void MpDetailsView::songDetailInfoChanged() |
| 503 | { | |||
| 504 | TX_ENTRY | |||
| 505 | mDetailList->clear(); | |||
| 506 | ||||
| 0 | 0 | - | 507 | if ( !mSongData->albumTrack().isNull() ) { |
| 508 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 509 | item->setText( tr( "Song number" ) ); | |||
| 510 | item->setSecondaryText( mSongData->albumTrack() ); | |||
| 511 | item->setEnabled( false ); | |||
| 512 | mDetailList->addItem( item ); | |||
| 513 | } | |||
| 514 | ||||
| 0 | 0 | - | 515 | if ( !mSongData->year().isNull() ) { |
| 516 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 517 | item->setText( tr( "Year" ) ); | |||
| 518 | item->setSecondaryText( mSongData->year() ); | |||
| 519 | item->setEnabled( false ); | |||
| 520 | mDetailList->addItem( item ); | |||
| 521 | } | |||
| 522 | ||||
| 0 | 0 | - | 523 | if ( !mSongData->genre().isNull() ) { |
| 524 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 525 | item->setText( tr( "Genre" ) ); | |||
| 526 | item->setSecondaryText( mSongData->genre() ); | |||
| 527 | item->setEnabled( false ); | |||
| 528 | mDetailList->addItem( item ); | |||
| 529 | } | |||
| 530 | ||||
| 0 | 0 | - | 531 | if ( !mSongData->composer().isNull() ) { |
| 532 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 533 | item->setText( tr( "Composer" ) ); | |||
| 534 | item->setSecondaryText( mSongData->composer() ); | |||
| 535 | item->setEnabled( false ); | |||
| 536 | mDetailList->addItem( item ); | |||
| 537 | } | |||
| 538 | ||||
| 0 | 0 | - | 539 | if ( !mSongData->fileName().isNull() ) { |
| 540 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 541 | item->setText( tr( "File name" ) ); | |||
| 542 | item->setSecondaryText( mSongData->fileName() ); | |||
| 543 | item->setEnabled( false ); | |||
| 544 | mDetailList->addItem( item ); | |||
| 545 | } | |||
| 546 | ||||
| 0 | 0 | - | 547 | if ( !mSongData->mimeType().isNull() ) { |
| 548 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 549 | item->setText( tr( "Format" ) ); | |||
| 550 | item->setSecondaryText( mSongData->mimeType() ); | |||
| 551 | item->setEnabled( false ); | |||
| 552 | mDetailList->addItem( item ); | |||
| 553 | } | |||
| 554 | ||||
| 0 | 0 | - | 555 | if ( !mSongData->duration().isNull() ) { |
| 556 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 557 | item->setText( tr( "Duration" ) ); | |||
| 558 | item->setSecondaryText( mSongData->duration() ); | |||
| 559 | item->setEnabled( false ); | |||
| 560 | mDetailList->addItem( item ); | |||
| 561 | } | |||
| 562 | ||||
| 0 | 0 | - | 563 | if ( !mSongData->bitRate().isNull() ) { |
| 564 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 565 | item->setText( tr( "Bitrate" ) ); | |||
| 566 | item->setSecondaryText( mSongData->bitRate().append( " Kbps" ) ); | |||
| 567 | item->setEnabled( false ); | |||
| 568 | mDetailList->addItem( item ); | |||
| 569 | } | |||
| 570 | ||||
| 0 | 0 | - | 571 | if ( !mSongData->sampleRate().isNull() ) { |
| 572 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 573 | item->setText( tr( "Sampling rate" ) ); | |||
| 574 | item->setSecondaryText( mSongData->sampleRate().append( " hz" ) ); | |||
| 575 | item->setEnabled( false ); | |||
| 576 | mDetailList->addItem( item ); | |||
| 577 | } | |||
| 578 | ||||
| 0 | 0 | - | 579 | if ( !mSongData->size().isNull() ) { |
| 580 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 581 | item->setText( tr( "Size" ) ); | |||
| 582 | item->setSecondaryText( mSongData->size() ); | |||
| 583 | item->setEnabled( false ); | |||
| 584 | mDetailList->addItem( item ); | |||
| 585 | } | |||
| 586 | ||||
| 0 | 0 | - | 587 | if ( !mSongData->modified().isNull() ) { |
| 588 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 589 | item->setText( tr( "Modified" ) ); | |||
| 590 | item->setSecondaryText( mSongData->modified() ); | |||
| 591 | item->setEnabled( false ); | |||
| 592 | mDetailList->addItem( item ); | |||
| 593 | } | |||
| 594 | ||||
| 0 | 0 | - | 595 | if ( !mSongData->copyright().isNull() ) { |
| 596 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 597 | item->setText( tr( "Copyright" ) ); | |||
| 598 | item->setSecondaryText( mSongData->copyright() ); | |||
| 599 | item->setEnabled( false ); | |||
| 600 | mDetailList->addItem( item ); | |||
| 601 | } | |||
| 602 | ||||
| 0 | 0 | - | 603 | if ( !mSongData->musicURL().isNull() ) { |
| 604 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
| 605 | item->setText( tr( "Web site" ) ); | |||
| 606 | item->setSecondaryText( mSongData->musicURL() ); | |||
| 607 | item->setEnabled( true ); | |||
| 608 | mDetailList->addItem( item ); | |||
| 609 | } | |||
| 610 | TX_EXIT | |||
| 611 | } | |||
| 612 | ||||
| Top | ||||
| 1 | 1 | 613 | void MpDetailsView::handleDetailsGroupBoxToggled(bool state) | |
| 614 | { | |||
| 615 | TX_ENTRY | |||
| 0 | 1 | - | 616 | if ( !mSongDetailsGroupBox->isCollapsed() ) { |
| 617 | mInspireMeGroupBox->setCollapsed( true ); | |||
| 618 | } | |||
| 619 | TX_EXIT | |||
| 620 | } | |||
| 621 | ||||
| Top | ||||
| 0 | 0 | - | 622 | void MpDetailsView::handleInspireMeGroupBoxToggled(bool /*state*/) |
| 623 | { | |||
| 624 | TX_ENTRY | |||
| 0 | 0 | - | 625 | if ( !mInspireMeGroupBox->isCollapsed() ) { |
| 626 | mSongDetailsGroupBox->setCollapsed( true ); | |||
| 627 | } | |||
| 628 | TX_LOG_ARGS("count" << mInspireList->count()); | |||
| 0 | 0 | - | 629 | if ( (mInspireList->count() == 0 ) && canQueryRecommendations() ) { |
| 630 | mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title()); | |||
| 0 | 0 | - | 631 | } else if (mInspireList->count() == 0 && !canQueryRecommendations()) { |
| 632 | RenderInspireMeGroupBox(); | |||
| 633 | } | |||
| 634 | TX_EXIT | |||
| 635 | } | |||
| 636 | ||||
| 637 | /*! | |||
| 638 | Slot to handle the recommendation album art | |||
| 639 | */ | |||
| Top | ||||
| 0 | 0 | - | 640 | void MpDetailsView::thumbnailReady( |
| 641 | const QPixmap& pixmap, | |||
| 642 | void *data, | |||
| 643 | int /*id*/, | |||
| 644 | int error ) | |||
| 645 | { | |||
| 646 | TX_ENTRY | |||
| 647 | // TODO: Hkn: use qobject_cast | |||
| 648 | QString uri = *( reinterpret_cast<QString *>( data ) ); | |||
| 649 | TX_LOG_ARGS( "Uri: " << uri ); | |||
| 650 | ||||
| 0 | 0 | - | 651 | if ( error == 0 ) { |
| 652 | TX_LOG_ARGS( "album art link: " << uri ); | |||
| 653 | mMpQueryManager->insertMapItem( uri, pixmap ); | |||
| 654 | } else { | |||
| 655 | mMpQueryManager->insertMapItem( uri, mDefaultRecommendationAlbumArt ); | |||
| 656 | } | |||
| 657 | recommendationAlbumArtReady(); | |||
| 658 | TX_EXIT | |||
| 659 | } | |||
| ***TER 17% (18/109) of SOURCE FILE mpdetailsview.cpp | ||||