mpviewplugins/mpcollectionviewplugin/src/mpcollectionalbumartmanager.cpp
changeset 22 ecf06a08d4d9
parent 20 82baf59ce8dd
child 23 d45f4c087764
child 25 3ec52facab4d
child 34 2c5162224003
--- a/mpviewplugins/mpcollectionviewplugin/src/mpcollectionalbumartmanager.cpp	Fri Apr 16 14:56:30 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,213 +0,0 @@
-
-
-
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Music Player collection album art manager.
-*
-*/
-
-#include <thumbnailmanager_qt.h>
-
-#include "mpcollectionalbumartmanager.h"
-#include "mpmpxcollectiondata.h"
-#include "mptrace.h"
-
-const int KInitCacheSize = 10;
-const int KMaxCacheSize = 50;
-
-/*!
-    \class MpCollectionAlbumArtManager
-    \brief Music Player collection album art manager.
-
-    Collection album art manager provides access to album art needed for
-    display in certain collection views. It hides interface to the thumbnail
-    manager and also implements a caching mechanism for performance reasons.
-*/
-
-/*!
-    \fn void albumArtReady( int index )
-
-    This signal is emitted when album art for \a index is ready.
-
-    \sa getAlbumArt()
- */
-
-/*!
-    \fn void albumCacheReady()
-
-    This signal is emitted when album art cache is ready.
-
-    \sa cacheAlbumArt()
- */
-
-/*!
- Constructs the album art manager.
- */
-MpCollectionAlbumArtManager::MpCollectionAlbumArtManager( MpMpxCollectionData *data, QObject *parent )
-    : QObject(parent),
-      mCollectionData(data),
-      mThumbnailManager(0),
-      mCachingInProgress(false),
-      mDefaultIcon(0),
-      mPendingRequest(false)
-{
-    TX_ENTRY
-    mThumbnailManager = new ThumbnailManager(this);
-    mThumbnailManager->setMode(ThumbnailManager::Default);
-    mThumbnailManager->setQualityPreference(ThumbnailManager::OptimizeForQuality);
-    mThumbnailManager->setThumbnailSize(ThumbnailManager::ThumbnailSmall);
-
-    connect( mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void *, int, int)),
-             this, SLOT(thumbnailReady(QPixmap, void *, int, int)) );
-
-    mImageCache.setMaxCost(KMaxCacheSize);
-    mDefaultIcon = new QIcon(":/icons/default_album.png");
-    TX_EXIT
-}
-
-/*!
- Destructs the album art manager.
- */
-MpCollectionAlbumArtManager::~MpCollectionAlbumArtManager()
-{
-    TX_ENTRY
-    cancel();
-    delete mThumbnailManager;
-    delete mDefaultIcon;
-    TX_EXIT
-}
-
-/*!
- Returns the album art for the given \a index. If the album art is not
- available in its cache, an asynchronous request is made to the thumbnail manager
- and default icon is returned.
-
- \sa signal albumArtReady
- */
-const QIcon* MpCollectionAlbumArtManager::albumArt( int index )
-{
-    TX_ENTRY_ARGS("index=" << index);
-    QIcon *icon = mImageCache[index];
-    if ( !icon ) {
-        icon = mDefaultIcon;
-        if ( !mRequestQueue.contains(index) ) {
-            // Icon was not found in cache. If the item has AlbumArtUri, request it
-            // through ThumbnailManager interface.
-            QString albumArtUri = mCollectionData->itemData(index, MpMpxCollectionData::AlbumArtUri);
-            if ( !albumArtUri.isEmpty() ) {
-                if ( !mPendingRequest ) {
-                    void *clientData = reinterpret_cast<void *>(index);
-                    mRequestId = mThumbnailManager->getThumbnail( albumArtUri, clientData );
-                    if ( mRequestId != -1 ) {
-                        mPendingRequest = true;
-                        TX_EXIT_ARGS("false - album art requested");
-                    }
-                    else {
-                        TX_EXIT_ARGS("Err: thumbnail manager returned (-1) for getThumbnail request!");
-                    }
-                }
-                else {
-                    mRequestQueue.append( index );
-                    TX_EXIT_ARGS("false - request queued");
-                }
-            }
-        }
-    }
-    return icon;
-}
-
-/*!
- Before providing the new data to the view (list, grid, etc.), we want
- to make sure that we have enough album arts for the first screen.
- */
-void MpCollectionAlbumArtManager::cacheFirstScreen()
-{
-    TX_ENTRY
-    int count = mCollectionData->count();
-    int initCount = ( count > KInitCacheSize ) ? KInitCacheSize : count;
-    for ( int i = 0; i < initCount; i++ ) {
-        albumArt(i);
-    }
-    if ( mPendingRequest ) {
-        mCachingInProgress = true;
-    }
-    TX_EXIT
-}
-
-/*!
- Cancels all outstanding album art requests.
-
- \sa getAlbumArt, cacheAlbumArt
- */
-void MpCollectionAlbumArtManager::cancel()
-{
-    TX_ENTRY
-    if ( mPendingRequest ) {
-        mThumbnailManager->cancelRequest(mRequestId);
-    }
-    mImageCache.clear();
-    mRequestQueue.clear();
-    mPendingRequest = false;
-    mCachingInProgress = false;
-    TX_EXIT
-}
-
-/*!
- Slot to be called when thumbnail bitmap generation or loading is complete.
- */
-void MpCollectionAlbumArtManager::thumbnailReady( QPixmap pixmap, void *data, int id, int error )
-{
-    int index = reinterpret_cast<int>(data);
-    TX_ENTRY_ARGS("index=" << index << ", id=" << id << ", error=" << error);
-    if ( !error && id == mRequestId && !pixmap.isNull() ) {
-        // Find the index
-        mImageCache.insert(index, new QIcon(pixmap));
-        TX_LOG_ARGS("Album art ready for index=" << index);
-        if ( !mCachingInProgress ) {
-            emit albumArtReady(index);
-        }
-    }
-    else {
-        TX_EXIT_ARGS("Err: thumbnail manager returned error for getThumbnail request!");
-    }
-
-    if ( mCachingInProgress ) {
-        if ( index >= (KInitCacheSize - 1) || !mRequestQueue.count() ) {
-            mCachingInProgress = false;
-            for ( int i = 0; i <= KInitCacheSize; ++i ) {
-                if ( mImageCache.contains(i) ) {
-                    emit albumArtReady(i);
-                }
-            }
-        }
-    }
-
-    mPendingRequest = false;
-    if ( mRequestQueue.count() ) {
-        int index = mRequestQueue.takeFirst();
-        QString albumArtUri = mCollectionData->itemData(index, MpMpxCollectionData::AlbumArtUri);
-        void *clientData = reinterpret_cast<void *>(index);
-        mRequestId = mThumbnailManager->getThumbnail( albumArtUri, clientData );
-        if ( mRequestId != -1 ) {
-            mPendingRequest = true;
-            TX_EXIT_ARGS("next album art requested");
-        }
-        else {
-            TX_EXIT_ARGS("Err: thumbnail manager returned (-1) for getThumbnail request!");
-        }
-    }
-    TX_EXIT
-}
-