ui/uiengine/medialistwrapper/src/glxtitlefetcher.cpp
author hgs
Fri, 25 Jun 2010 15:41:33 +0530
changeset 45 863223ea6961
parent 42 5e1df1b52eb3
permissions -rw-r--r--
201025
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
    
45
hgs
parents: 42
diff changeset
    62
    if( iPath->Levels() <= 0 )
42
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    63
        {
45
hgs
parents: 42
diff changeset
    64
        //For This Level, Opening a collection is nothing but open EGlxCollectionPluginShowInMainListView
hgs
parents: 42
diff changeset
    65
        //We dont need this in 10.1
42
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    66
        return;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    67
        }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    68
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    69
    iBackMediaList = MGlxMediaList::InstanceL(*iPath);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    70
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    71
    /// @todo: This idSpaceId must be calculated properly
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    72
    TGlxIdSpaceId idSpaceId = iBackMediaList->IdSpaceId(0);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    73
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    74
    TGlxMediaId id(iPathId);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    75
    TBool requestAttributes = ETrue;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    76
    TInt index = iBackMediaList->Index(idSpaceId, id);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    77
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    78
    if ( index != KErrNotFound )
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    79
        {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    80
        const TGlxMedia& item = iBackMediaList->Item(index);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    81
    	const CGlxMedia* media = item.Properties();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    82
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    83
    	// get the Title from the attribute if it is already present
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    84
    	if (media && media->IsSupported(KMPXMediaGeneralTitle)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    85
    	    && index != KErrNotFound)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    86
    		{
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    87
            const TDesC&  title = media->ValueText(KMPXMediaGeneralTitle);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    88
            // notify the observer		
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    89
            iObserver.HandleTitleAvailableL(title); 
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    90
            requestAttributes = EFalse;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    91
    		}
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    92
    	}
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    93
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    94
    if ( requestAttributes )
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    95
	    {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    96
        // Otherwise add a context setting range to cover all items
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    97
        iContext = CGlxDefaultAttributeContext::NewL();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    98
        iContext->SetRangeOffsets(10000,10000);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
    99
        iContext->AddAttributeL(KMPXMediaGeneralTitle);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   100
        // Add the context at a high priority
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   101
        iBackMediaList->AddContextL( iContext,
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   102
                                     KGlxFetchContextPriorityTitleFetcher );
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   103
        // Set self as observer
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   104
        iBackMediaList->AddMediaListObserverL(this);
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
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   109
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   110
// Two-phased constructor.
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   111
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   112
//
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   113
CGlxTitleFetcher* CGlxTitleFetcher::NewL(MGlxTitleFetcherObserver& aObserver,
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   114
                        CMPXCollectionPath* aPath)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   115
    {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   116
    CGlxTitleFetcher* self = new (ELeave) CGlxTitleFetcher(aObserver, aPath);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   117
    CleanupStack::PushL(self);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   118
    self->ConstructL();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   119
    CleanupStack::Pop(self);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   120
    return self;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   121
    }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   122
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   123
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   124
// Destructor
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   125
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   126
//
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   127
CGlxTitleFetcher::~CGlxTitleFetcher()
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   128
    {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   129
    TRACER("CGlxTitleFetcher::~CGlxTitleFetcher ()");
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   130
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   131
    if(iBackMediaList)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   132
        {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   133
        if(iContext)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   134
            {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   135
            iBackMediaList->RemoveContext(iContext);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   136
            delete iContext;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   137
            }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   138
        iBackMediaList->RemoveMediaListObserver(this);           
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   139
		iBackMediaList->Close();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   140
        }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   141
    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   142
    }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   143
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   144
// CGlxTitleFetcher::HandleItemAddedL
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   145
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   146
//
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   147
void CGlxTitleFetcher::HandleItemAddedL(TInt aStartIndex, TInt aEndIndex,
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   148
        MGlxMediaList* aList)  
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   149
    {    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   150
    TRACER("CGlxTitleFetcher::HandleItemAddedL ()");
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   151
    if(aList == iBackMediaList)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   152
           {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   153
           for(TInt index = aStartIndex;index <= aEndIndex;index++)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   154
           // Is it the item (path) that we want
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   155
               {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   156
               if(aList->Item(index).Id().Value() == (TUint32)iPathId)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   157
                       {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   158
                       const TGlxMedia& item = aList->Item(index);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   159
                       const CGlxMedia* media = item.Properties();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   160
                       // get the Title from the attribute
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   161
                       if (media && media->IsSupported(KMPXMediaGeneralTitle))
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   162
                           {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   163
                           const TDesC&  title = media->ValueText(KMPXMediaGeneralTitle);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   164
                           // notify the observer      
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   165
                           iObserver.HandleTitleAvailableL(title); 
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   166
                           iBackMediaList->RemoveContext(iContext);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   167
                           delete iContext;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   168
                           iContext = NULL;                
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
    }
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   174
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   175
// CGlxTitleFetcher::HandleAttributesAvailableL
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   176
// ---------------------------------------------------------------------------
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   177
//
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   178
void CGlxTitleFetcher::HandleAttributesAvailableL(TInt aItemIndex, 	
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   179
		const RArray<TMPXAttribute>& /*aAttributes*/, MGlxMediaList* aList)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   180
    {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   181
    TRACER("CGlxTitleFetcher::HandleAttributesAvailableL ()");
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   182
    // Is it the list that we want    
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   183
    if(aList == iBackMediaList)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   184
        {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   185
        // Is it the item (path) that we want
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   186
        if(aList->Item(aItemIndex).Id().Value() == (TUint32)iPathId)
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   187
            {
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   188
            const TGlxMedia& item = aList->Item(aItemIndex);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   189
			const CGlxMedia* media = item.Properties();
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   190
			// get the Title from the attribute
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   191
			if (media && media->IsSupported(KMPXMediaGeneralTitle))
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   192
				{
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   193
                const TDesC&  title = media->ValueText(KMPXMediaGeneralTitle);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   194
	            // notify the observer		
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   195
                iObserver.HandleTitleAvailableL(title); 
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   196
                iBackMediaList->RemoveContext(iContext);
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   197
                delete iContext;
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   198
                iContext = NULL;
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
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   206
5e1df1b52eb3 201019_01
hgs
parents:
diff changeset
   207
//  End of File