homesync/contentmanager/cmserver/cmstoremanager/src/cmsmvideoandimagemngr.cpp
author hgs
Fri, 03 Sep 2010 15:38:36 +0300
changeset 30 5ec426854821
parent 0 7f85d04be362
permissions -rw-r--r--
201035

/*
* Copyright (c) 2008 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:  Store image ja video file processing
*
*/


#include <mdesession.h>
#include <mdeconstants.h>
#include "upnpfileutility.h"
#include <f32file.h>
#include "cmstorelistitem.h"
#include "cmsmfilemngr.h"
#include "cmsmvideoandimagemngr.h"
#include "msdebug.h"


// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::NewL
// ---------------------------------------------------------------------------
// 
CCmSmVideoAndImageMngr* CCmSmVideoAndImageMngr::NewL( 
    MCmSmVideoAndImageMngrObserver& aObserver, CCmSmFileMngr& aFileMngr,
    CMdESession& aSession, RPointerArray<CCmStoreListItem>& aItems )
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::NewL() start"));    
    CCmSmVideoAndImageMngr* self = CCmSmVideoAndImageMngr::NewLC( aObserver,
        aFileMngr, aSession, aItems );
    CleanupStack::Pop( self );
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::NewL() end")); 
    return self;
    }

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::NewLC
// ---------------------------------------------------------------------------
//     
CCmSmVideoAndImageMngr* CCmSmVideoAndImageMngr::NewLC( 
    MCmSmVideoAndImageMngrObserver& aObserver, CCmSmFileMngr& aFileMngr, 
    CMdESession& aSession, RPointerArray<CCmStoreListItem>& aItems )
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::NewLC() start"));     
    CCmSmVideoAndImageMngr* self = new ( ELeave ) CCmSmVideoAndImageMngr(
        aObserver, aFileMngr, aSession, aItems );
    CleanupStack::PushL( self );
    self->ConstructL();
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::NewLC() end"));     
    return self;  
    }    

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::~CCmSmVideoAndImageMngr
// ---------------------------------------------------------------------------
// 
CCmSmVideoAndImageMngr::~CCmSmVideoAndImageMngr()
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::\
        ~CCmSmVideoAndImageMngr() start"));
    Cancel();
    delete iTitleDef;
    delete iSizeDef;
    delete iDateDef;    
    delete iQuery;
    delete iMediaTypeDef;        
    delete iObjectDef;
    delete iNamespace;
    iObjects.ResetAndDestroy();
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::\
        ~CCmSmVideoAndImageMngr() end"));            
    }

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::CCmSmVideoAndImageMngr
// ---------------------------------------------------------------------------
//            
CCmSmVideoAndImageMngr::CCmSmVideoAndImageMngr( 
    MCmSmVideoAndImageMngrObserver& aObserver, CCmSmFileMngr& aFileMngr,
    CMdESession& aSession, RPointerArray<CCmStoreListItem>& aItems )
    :CActive( EPriorityStandard ), iObserver( aObserver ), 
    iFileMngr( aFileMngr ), iSession( aSession ), iItems( aItems )
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::CCmSmVideoAndImageMngr"));    
    CActiveScheduler::Add( this );
    }

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::ConstructL
// ---------------------------------------------------------------------------
//  
void CCmSmVideoAndImageMngr::ConstructL()
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::ConstructL()"));
    }    

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::ProcessMedia
// ---------------------------------------------------------------------------
// 
void CCmSmVideoAndImageMngr::ProcessMedia( TCmMediaType aType )
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::ProcessMedia"));    
    
    TRAPD( err, SetQueryAndStartFindL( aType ) );
    iQueriedMedia = aType;
    if( err )
        {
        TRACE(Print(_L("SetQueryAndStartFindL err = %d"), err ));
        iObserver.ImagesAndVideosReady( err );
        }
    }
            
// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::CancelListRefresh
// ---------------------------------------------------------------------------
//
void CCmSmVideoAndImageMngr::CancelListRefresh()
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::CancelListRefresh()"));
    ResetQuery();              
    }

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::CancelOperation
// ---------------------------------------------------------------------------
//    
void CCmSmVideoAndImageMngr::CancelOperation()
    {   
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::CancelOperation"));    
    
    Cancel();    
    CancelListRefresh();
    iFileMngr.ResetArrays();    
    }

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::HandleQueryNewResults
// ---------------------------------------------------------------------------
// 
void CCmSmVideoAndImageMngr::HandleQueryNewResults(CMdEQuery& aQuery,
                                       TInt aFirstNewItemIndex,
                                       TInt aNewItemCount)
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::HandleQueryNewResults"));
    
    CMdEObjectQuery& query = (CMdEObjectQuery &) aQuery;
    TRACE(Print(_L("[FILL MNGR]\t aNewItemCount %d"), aNewItemCount ));
    if( &query ) 
        {
        for ( TInt i=aFirstNewItemIndex; 
              i < aFirstNewItemIndex+aNewItemCount; 
              i++ ) 
            {
            CMdEObject* object = (CMdEObject*)query.TakeOwnershipOfResult(i);
            iObjects.AppendL(object);         
            }   
        }
                   
    }
          
// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::HandleQueryCompleted
// ---------------------------------------------------------------------------
// 
void CCmSmVideoAndImageMngr::HandleQueryCompleted( CMdEQuery& aQuery, 
                                        TInt aError )
    {    
    TRACE(Print(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::\
    HandleQueryCompleted error = %d"), aError ));
    if (aError == KErrNone) 
        {
        if( &aQuery )
            {
            CompleteRequest( ECmSmQueryCompleted );                                          
            }
        else
            {
            CompleteRequest( ECmSmQueryFailed );
            }                      
        }
    else if ( aError == KErrCancel )
        {
        // Query canceled
        }
    else
        {
        CompleteRequest( ECmSmQueryFailed );
        }     
    }
       
// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::FilterItems
// ---------------------------------------------------------------------------
//    
void CCmSmVideoAndImageMngr::FilterItems()
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::FilterItems"));
    
    TInt err( KErrNone );
    RArray<TInt> ids;
    
    TRAP( err, iFileMngr.MediaTypesL( ids, iQueriedMedia ) );
    TRACE(Print(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::FilterItems \
         mediatypes err = %d"), err ));
    TRAP( err, FilterNewItemsL( ids, iQueriedMedia ) );
    TRACE(Print(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::FilterItems \
          filter new items err = %d"), err ));
    ids.Reset();
         
    CompleteRequest( ECmSmFilteringReady );
    }

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::FilterNewItemsL
// ---------------------------------------------------------------------------
//
void CCmSmVideoAndImageMngr::FilterNewItemsL( RArray<TInt>aDeviceIds, 
    TCmMediaType aType )
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::FilterNewItemsL"));
    
    RArray<TInt>storeIds;
    RArray<TInt>storedIds;

    
    // Collecting mde object propertys into CCmFillListItem package         
    for( TInt i = 0; i < iObjects.Count(); i++ )
        {
        // Copy ids into temporary array
        for( TInt ll = 0; ll < aDeviceIds.Count(); ll++ )
            {
            storeIds.Append(aDeviceIds[ll]);
            }          
        
        if ( !UPnPFileUtility::IsFileProtectedL( iObjects[i]->Uri( ) ) )
            {
            if( iFileMngr.CheckIsFilledFileL(  iObjects[i]->Uri( ) ) )
                {
                storeIds.Reset();              
                storeIds.Close();
                }
            iFileMngr.IsAlreadyStoreL( iObjects[i]->Uri(),
                                       storedIds,
                                       storeIds );
            if( KErrNone < storeIds.Count() )
                {        
                TCmListItemStatus status;
                CCmStoreListItem* item = CCmStoreListItem::NewL();
                CleanupStack::PushL( item );
                item->SetPathL( iObjects[i]->Uri( ) );
                item->SetListId( iFileMngr.RetrieveListId( aType ) );
                // Ms id values are binded with file status values 
                iFileMngr.RetrieveListStatusValues( aType, status );    
                CMdEProperty* prop;
                CMdETextProperty* textprop;
                TInt propIndex = iObjects[i]->Property( *iTitleDef, prop );
                if( propIndex != KErrNotFound )
                    {
                    textprop = (CMdETextProperty*) prop;
                    item->SetPrimaryTextL( textprop->Value() );
                    }
                else
                    {
                    TParsePtrC parser( iObjects[i]->Uri());                  
                    item->SetPrimaryTextL( parser.Name() );
                    LOG(_L("[STORE MNGR]\t Title not found file name used"));
                    }
                            
                propIndex = iObjects[i]->Property( *iSizeDef, prop );
                if( propIndex != KErrNotFound )
                    {
                    item->SetSize( prop->Uint32ValueL() );
                    }
                else
                    {
                    LOG(_L("[STORE MNGR]\t Size not found"));
                    }                            
                propIndex = iObjects[i]->Property( *iDateDef, prop );
                if( propIndex != KErrNotFound )
                    {
                    CMdETimeProperty* dateprop = (CMdETimeProperty*)prop;
                    item->SetDate( dateprop->Value() );
                    }
                else
                    {
                    LOG(_L("[STORE MNGR]\t Date not found"));
                    }
                // Where item will be stored 
                for( TInt s = 0 ; s < storeIds.Count(); s++ )
                    {
                    item->SetDevId( storeIds[s], status );    
                    }
                // Where item has already been stored
                for( TInt d = 0; d < storedIds.Count(); d++ )
                    {
                    item->SetDevId( storedIds[d], ECmStored );
                    }                                                              
                iItems.AppendL( item );
                CleanupStack::Pop( item );
                }            
            }
        storedIds.Reset();
        storedIds.Close();
        storeIds.Reset();
        storeIds.Close();
        }
    }
    
// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::SetQueryAndStartFindL
// ---------------------------------------------------------------------------
//
void CCmSmVideoAndImageMngr::SetQueryAndStartFindL( TCmMediaType aType )
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::SetQueryAndStartFindL"));
    
    ResetQuery();
    if( !iNamespace )
        {
        iNamespace = &iSession.GetDefaultNamespaceDefL();
        }
    if( iNamespace )
        {
        iObjectDef = 
           &iNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject );
        }
    if( ECmImage == aType || ECmOtherImage == aType )
        {
        TRACE(Print(_L("ECmImage == aType")));
        iMediaTypeDef = 
           &iNamespace->GetObjectDefL( MdeConstants::Image::KImageObject );
        }
    else if( ECmVideo == aType || ECmOtherVideo == aType )
        {
        TRACE(Print(_L("ECmVideo == aType")));
        iMediaTypeDef = 
           &iNamespace->GetObjectDefL( MdeConstants::Video::KVideoObject );
        }
    else
        {
        User::Leave( KErrArgument );
        }        
    if( !iObjectDef )
        {
        User::Leave( KErrArgument );
        }
    if( !iMediaTypeDef )
        {
        User::Leave( KErrArgument );
        }        
        
    iQuery = iSession.NewObjectQueryL( *iNamespace, *iMediaTypeDef, this );
    if( !iQuery )
        {
        User::Leave( KErrArgument );
        }
    /** Set logic condition */
    SetLogicConditionL( aType );  
    /** Set property filters */
    SetPropertyFiltersL();
    iQuery->SetResultMode( EQueryResultModeItem );
    /** Start query */ 
    iQuery->FindL();   
    }

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::SetPropertyFiltersL
// ---------------------------------------------------------------------------
//    
void CCmSmVideoAndImageMngr::SetPropertyFiltersL( )
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::SetPropertyFiltersL"));
    
    iTitleDef = &iObjectDef->GetPropertyDefL( 
        MdeConstants::Object::KTitleProperty );
    iSizeDef = &iObjectDef->GetPropertyDefL( 
        MdeConstants::Object::KSizeProperty );
    iDateDef = &iObjectDef->GetPropertyDefL(  
        MdeConstants::Object::KCreationDateProperty );    
    iQuery->AddPropertyFilterL( iTitleDef );      
    iQuery->AddPropertyFilterL( iSizeDef );      
    iQuery->AddPropertyFilterL( iDateDef ); 
    }

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::SetLogicConditionL
// ---------------------------------------------------------------------------
// 
void CCmSmVideoAndImageMngr::SetLogicConditionL( TCmMediaType aType )
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::SetLogicConditionL"));
           
    CMdELogicCondition& rootCondition = iQuery->Conditions();
    CMdELogicCondition* contentCondition = &rootCondition;
    CMdELogicCondition& logicCondition = 
        contentCondition->AddLogicConditionL( ELogicConditionOperatorOr );
    logicCondition.AddObjectConditionL( *iMediaTypeDef );
    
    CMdEPropertyDef* originProperty = NULL;
    if( aType == ECmOtherVideo || aType == ECmOtherImage )
        {
        originProperty = &iObjectDef->GetPropertyDefL( _L("Origin") );
        if( originProperty )
            {
            CMdELogicCondition& origLogicCondition = 
                contentCondition->AddLogicConditionL( 
                ELogicConditionOperatorAnd );            
            origLogicCondition.AddPropertyConditionL( 
                *originProperty, TMdEUintNotEqual( 
                MdeConstants::Object::ECamera ));
            }        
        }
    if( aType == ECmVideo || aType == ECmImage )
        {
        originProperty = &iObjectDef->GetPropertyDefL( _L("Origin") );
        if( originProperty )
            {
            CMdELogicCondition& origLogicCondition = 
                contentCondition->AddLogicConditionL( 
                ELogicConditionOperatorAnd );            
            origLogicCondition.AddPropertyConditionL( 
                *originProperty, TMdEUintEqual( 
                MdeConstants::Object::ECamera ));
            }         
        }
               
    }
    
// ---------------------------------------------------------------------------
// RCCmSmVideoAndImageMngr::ResetQuery
// ---------------------------------------------------------------------------
// 
void CCmSmVideoAndImageMngr::ResetQuery()
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::ResetQuery"));
    
    iObjects.ResetAndDestroy();    

	if ( iQuery )
		{
		iQuery->Cancel();
	    delete iQuery;
    	iQuery = NULL; 
		}
    }    
    
// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::CompleteRequest
// ---------------------------------------------------------------------------
// 
void CCmSmVideoAndImageMngr::CompleteRequest( 
    TCmSmFileProcessingStatus aStatus )
    {
    LOG(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::CompleteRequest"));
    
    __ASSERT_DEBUG(!IsActive(),\
        User::Panic( KCmSmManager, KErrInUse ));          
    SetActive();        
    TRequestStatus* pStatus = &iStatus;
    User::RequestComplete( pStatus, aStatus );     
    }
    
// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::RunL
// ---------------------------------------------------------------------------
//                 
void CCmSmVideoAndImageMngr::RunL()
    {
    TRACE(Print(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::RunL\
         status = %d"), iStatus.Int() ));        
    switch( iStatus.Int() )
        {
        case ECmSmQueryCompleted:
            {
            FilterItems();
            break;
            }
        case ECmSmFilteringReady:
            {
            iObserver.ImagesAndVideosReady( KErrNone );
            break;
            }
        case ECmSmQueryFailed:
            {
            iObserver.ImagesAndVideosReady( KErrGeneral );
            break;
            }        
        default:
            {
            LOG(_L("[STORE MNGR]\t Store file processing RunL default"));
            User::Invariant();
            break;
            }
        }
    }    

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::DoCancel
// ---------------------------------------------------------------------------
//    
void CCmSmVideoAndImageMngr::DoCancel()
    {
    TRACE(Print(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::DoCancel()")));    
    }

// ---------------------------------------------------------------------------
// CCmSmVideoAndImageMngr::RunError
// ---------------------------------------------------------------------------
//
#ifdef _DEBUG
TInt CCmSmVideoAndImageMngr::RunError( TInt aError )    
    {
#else
TInt CCmSmVideoAndImageMngr::RunError( TInt /*aError*/ )    
    {    
#endif    
    TRACE(Print(_L("[STORE MNGR]\t CCmSmVideoAndImageMngr::RunError\
         aError = %d"), aError ));
    iObserver.ImagesAndVideosReady( KErrGeneral );     
    return KErrNone;     
    }
                        
// End of file