ui/uiengine/medialistwrapper/src/glxtitlefetcher.cpp
author hgs
Mon, 17 May 2010 13:35:26 +0530
changeset 42 5e1df1b52eb3
child 45 863223ea6961
permissions -rw-r--r--
201019_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
     1
/*
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
     2
* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). 
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
     3
* All rights reserved.
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
     8
*
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
     9
* Initial Contributors:
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    11
*
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    12
* Contributors:
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    13
*
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    14
* Description:    Title fetcher
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    15
*
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    16
*/
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    17
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    18
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    19
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    20
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    21
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    22
// INCLUDE FILES
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    23
#include "glxtitlefetcher.h"
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    24
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    25
#include <mpxcollectionpath.h>
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    26
#include <mpxmediageneraldefs.h>
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    27
#include <mglxmedialist.h>
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    28
#include <glxattributecontext.h>
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    29
#include <glxuistd.h>
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    30
#include "glxlog.h"
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    31
#include "glxtracer.h"
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    32
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    33
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    34
// ======== MEMBER FUNCTIONS ========
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    35
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    37
// C++ default constructor can NOT contain any code, that
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    38
// might leave.
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    39
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    40
//
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    41
CGlxTitleFetcher::CGlxTitleFetcher(MGlxTitleFetcherObserver& aObserver,
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    42
                        CMPXCollectionPath* aPath) :
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    43
   iObserver(aObserver), iPath(aPath)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    44
    {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    45
    TRACER("CGlxTitleFetcher::CGlxTitleFetcher");
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    46
    }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    47
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    48
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    49
// Symbian 2nd phase constructor can leave.
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    50
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    51
// 
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    52
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    53
void CGlxTitleFetcher::ConstructL()
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    54
    {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    55
    TRACER("CGlxTitleFetcher::ConstructL");
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    56
    // Go back one level to obtain the ID
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    57
    iPathId = iPath->Id();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    58
    // Go back another level from which to create a media list containing 
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    59
    // this path
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    60
    iPath->Back();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    61
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    62
    if( iPath->Levels() < 0 )
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    63
        {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    64
        return;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    65
        }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    66
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    67
    iBackMediaList = MGlxMediaList::InstanceL(*iPath);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    68
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    69
    /// @todo: This idSpaceId must be calculated properly
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    70
    TGlxIdSpaceId idSpaceId = iBackMediaList->IdSpaceId(0);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    71
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    72
    TGlxMediaId id(iPathId);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    73
    TBool requestAttributes = ETrue;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    74
    TInt index = iBackMediaList->Index(idSpaceId, id);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    75
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    76
    if ( index != KErrNotFound )
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    77
        {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    78
        const TGlxMedia& item = iBackMediaList->Item(index);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    79
    	const CGlxMedia* media = item.Properties();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    80
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    81
    	// get the Title from the attribute if it is already present
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    82
    	if (media && media->IsSupported(KMPXMediaGeneralTitle)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    83
    	    && index != KErrNotFound)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    84
    		{
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    85
            const TDesC&  title = media->ValueText(KMPXMediaGeneralTitle);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    86
            // notify the observer		
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    87
            iObserver.HandleTitleAvailableL(title); 
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    88
            requestAttributes = EFalse;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    89
    		}
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    90
    	}
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    91
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    92
    if ( requestAttributes )
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    93
	    {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    94
        // Otherwise add a context setting range to cover all items
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    95
        iContext = CGlxDefaultAttributeContext::NewL();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    96
        iContext->SetRangeOffsets(10000,10000);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    97
        iContext->AddAttributeL(KMPXMediaGeneralTitle);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    98
        // Add the context at a high priority
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    99
        iBackMediaList->AddContextL( iContext,
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   100
                                     KGlxFetchContextPriorityTitleFetcher );
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   101
        // Set self as observer
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   102
        iBackMediaList->AddMediaListObserverL(this);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   103
	    }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   104
	}
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   105
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   106
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   107
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   108
// Two-phased constructor.
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   109
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   110
//
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   111
CGlxTitleFetcher* CGlxTitleFetcher::NewL(MGlxTitleFetcherObserver& aObserver,
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   112
                        CMPXCollectionPath* aPath)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   113
    {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   114
    CGlxTitleFetcher* self = new (ELeave) CGlxTitleFetcher(aObserver, aPath);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   115
    CleanupStack::PushL(self);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   116
    self->ConstructL();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   117
    CleanupStack::Pop(self);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   118
    return self;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   119
    }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   120
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   121
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   122
// Destructor
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   123
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   124
//
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   125
CGlxTitleFetcher::~CGlxTitleFetcher()
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   126
    {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   127
    TRACER("CGlxTitleFetcher::~CGlxTitleFetcher ()");
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   128
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   129
    if(iBackMediaList)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   130
        {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   131
        if(iContext)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   132
            {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   133
            iBackMediaList->RemoveContext(iContext);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   134
            delete iContext;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   135
            }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   136
        iBackMediaList->RemoveMediaListObserver(this);           
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   137
		iBackMediaList->Close();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   138
        }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   139
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   140
    }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   141
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   142
// CGlxTitleFetcher::HandleItemAddedL
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   143
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   144
//
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   145
void CGlxTitleFetcher::HandleItemAddedL(TInt aStartIndex, TInt aEndIndex,
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   146
        MGlxMediaList* aList)  
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   147
    {    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   148
    TRACER("CGlxTitleFetcher::HandleItemAddedL ()");
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   149
    if(aList == iBackMediaList)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   150
           {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   151
           for(TInt index = aStartIndex;index <= aEndIndex;index++)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   152
           // Is it the item (path) that we want
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   153
               {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   154
               if(aList->Item(index).Id().Value() == (TUint32)iPathId)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   155
                       {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   156
                       const TGlxMedia& item = aList->Item(index);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   157
                       const CGlxMedia* media = item.Properties();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   158
                       // get the Title from the attribute
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   159
                       if (media && media->IsSupported(KMPXMediaGeneralTitle))
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   160
                           {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   161
                           const TDesC&  title = media->ValueText(KMPXMediaGeneralTitle);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   162
                           // notify the observer      
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   163
                           iObserver.HandleTitleAvailableL(title); 
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   164
                           iBackMediaList->RemoveContext(iContext);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   165
                           delete iContext;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   166
                           iContext = NULL;                
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   167
                           }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   168
                       }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   169
                }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   170
           }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   171
    }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   172
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   173
// CGlxTitleFetcher::HandleAttributesAvailableL
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   174
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   175
//
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   176
void CGlxTitleFetcher::HandleAttributesAvailableL(TInt aItemIndex, 	
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   177
		const RArray<TMPXAttribute>& /*aAttributes*/, MGlxMediaList* aList)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   178
    {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   179
    TRACER("CGlxTitleFetcher::HandleAttributesAvailableL ()");
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   180
    // Is it the list that we want    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   181
    if(aList == iBackMediaList)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   182
        {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   183
        // Is it the item (path) that we want
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   184
        if(aList->Item(aItemIndex).Id().Value() == (TUint32)iPathId)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   185
            {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   186
            const TGlxMedia& item = aList->Item(aItemIndex);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   187
			const CGlxMedia* media = item.Properties();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   188
			// get the Title from the attribute
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   189
			if (media && media->IsSupported(KMPXMediaGeneralTitle))
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   190
				{
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   191
                const TDesC&  title = media->ValueText(KMPXMediaGeneralTitle);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   192
	            // notify the observer		
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   193
                iObserver.HandleTitleAvailableL(title); 
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   194
                iBackMediaList->RemoveContext(iContext);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   195
                delete iContext;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   196
                iContext = NULL;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   197
		        
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   198
				}
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   199
            }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   200
        }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   201
    }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   202
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   203
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   204
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   205
//  End of File