videocollection/mpxmyvideoscollection/src/vcxmyvideosalbums.cpp
changeset 36 8aed59de29f9
parent 35 3738fe97f027
child 38 ff53afa8ad05
equal deleted inserted replaced
35:3738fe97f027 36:8aed59de29f9
   164 // Command from MPX client.
   164 // Command from MPX client.
   165 // ----------------------------------------------------------------------------
   165 // ----------------------------------------------------------------------------
   166 //
   166 //
   167 void CVcxMyVideosAlbums::AddVideosToAlbumL( CMPXMedia* aCmd )
   167 void CVcxMyVideosAlbums::AddVideosToAlbumL( CMPXMedia* aCmd )
   168     {    
   168     {    
       
   169     TInt albumId = TVcxMyVideosCollectionUtil::Uint32ValueL( *aCmd );
       
   170     CVcxMyVideosAlbum* album = Album( albumId );
       
   171     if ( album )
       
   172         {
       
   173         CMPXMediaArray* mediaArray = TVcxMyVideosCollectionUtil::MediaArrayL( *aCmd );
       
   174         TInt count = mediaArray->Count();
       
   175         CMPXMedia* video;
       
   176         TInt mdsId;
       
   177         RArray<TUint32> uniqueVideoIds;
       
   178         uniqueVideoIds.Reset();
       
   179         CleanupClosePushL( uniqueVideoIds );
       
   180         
       
   181         for ( TInt i = 0; i < count; i++ )
       
   182             {
       
   183             video = mediaArray->AtL( i );
       
   184             mdsId = TVcxMyVideosCollectionUtil::IdL( *video ).iId1;
       
   185 
       
   186             // Mark duplicates as failed to aCmd (KErrAlreadyExists)
       
   187             if ( uniqueVideoIds.Find( mdsId ) == KErrNotFound )
       
   188                 {
       
   189                 uniqueVideoIds.AppendL( mdsId );
       
   190 
       
   191                 // Mark videos which are already in album as failed to aCmd (KErrAlreadyExists)
       
   192                 if ( album->BelongsToAlbum( mdsId ) )
       
   193                     {
       
   194                     MPX_DEBUG3("CVcxMyVideosAlbums:: %d already belongs to %d album",
       
   195                             mdsId, albumId );
       
   196                     video->SetTObjectValueL<TInt32>( KVcxMediaMyVideosInt32Value, KErrAlreadyExists );
       
   197                     }
       
   198                 else
       
   199                     {
       
   200                     video->SetTObjectValueL<TInt32>( KVcxMediaMyVideosInt32Value, KErrNone );
       
   201                     }
       
   202                 }
       
   203             else
       
   204                 {
       
   205                 MPX_DEBUG2("CVcxMyVideosAlbums:: %d already present in the aCmd, marking as KErrAlreadyExists", mdsId);
       
   206                 video->SetTObjectValueL<TInt32>( KVcxMediaMyVideosInt32Value, KErrAlreadyExists );
       
   207                 }
       
   208 
       
   209             }
       
   210         
       
   211         CleanupStack::PopAndDestroy( &uniqueVideoIds );
       
   212         }
       
   213     
   169     iCollection.iMyVideosMdsDb->iAlbums->AddVideosToAlbumL( aCmd, *this );
   214     iCollection.iMyVideosMdsDb->iAlbums->AddVideosToAlbumL( aCmd, *this );
   170     }
   215     }
   171 
   216 
   172 // ----------------------------------------------------------------------------
   217 // ----------------------------------------------------------------------------
   173 // CVcxMyVideosAlbums::RemoveVideosFromAlbumL
   218 // CVcxMyVideosAlbums::RemoveVideosFromAlbumL
   215 // CVcxMyVideosAlbums::AddAlbumL
   260 // CVcxMyVideosAlbums::AddAlbumL
   216 // ----------------------------------------------------------------------------
   261 // ----------------------------------------------------------------------------
   217 //
   262 //
   218 void CVcxMyVideosAlbums::AddAlbumL( CMPXMedia& aCmd )
   263 void CVcxMyVideosAlbums::AddAlbumL( CMPXMedia& aCmd )
   219     {
   264     {
       
   265     if ( TVcxMyVideosCollectionUtil::Title( aCmd ).Length() > 255 )
       
   266         {
       
   267         User::Leave( KErrArgument );
       
   268         }
       
   269     
   220     iCollection.iMyVideosMdsDb->iAlbums->AddAlbumL( aCmd );
   270     iCollection.iMyVideosMdsDb->iAlbums->AddAlbumL( aCmd );
   221     
   271     
   222     TUint32 mdsId = TVcxMyVideosCollectionUtil::IdL( aCmd ).iId1;
   272     TUint32 mdsId = TVcxMyVideosCollectionUtil::IdL( aCmd ).iId1;
   223     if ( !Album( mdsId ) )
   273     if ( !Album( mdsId ) )
   224         {
   274         {
   241 // CVcxMyVideosAlbums::RemoveAlbumsFromMdsOnlyL
   291 // CVcxMyVideosAlbums::RemoveAlbumsFromMdsOnlyL
   242 // ----------------------------------------------------------------------------
   292 // ----------------------------------------------------------------------------
   243 //
   293 //
   244 void CVcxMyVideosAlbums::RemoveAlbumsFromMdsOnlyL( CMPXMedia* aCmd )
   294 void CVcxMyVideosAlbums::RemoveAlbumsFromMdsOnlyL( CMPXMedia* aCmd )
   245     {
   295     {
   246     //TODO: find out what happens to relations, do we have to clean them out
       
   247     iCollection.iMyVideosMdsDb->iAlbums->RemoveAlbumsL( aCmd, *this );
   296     iCollection.iMyVideosMdsDb->iAlbums->RemoveAlbumsL( aCmd, *this );
   248     }
   297     }
   249 
   298 
   250 // ----------------------------------------------------------------------------
   299 // ----------------------------------------------------------------------------
   251 // CVcxMyVideosAlbums::RemoveAlbumsL
   300 // CVcxMyVideosAlbums::RemoveAlbumsL
   292         iCollection.iMessageList->AddEventL( TMPXItemId( aMdsId, KVcxMvcMediaTypeAlbum ),
   341         iCollection.iMessageList->AddEventL( TMPXItemId( aMdsId, KVcxMvcMediaTypeAlbum ),
   293                 EMPXItemDeleted, EVcxMyVideosListNoInfo );
   342                 EMPXItemDeleted, EVcxMyVideosListNoInfo );
   294         return ETrue;
   343         return ETrue;
   295         }
   344         }
   296     return EFalse;
   345     return EFalse;
       
   346     }
       
   347 
       
   348 // ----------------------------------------------------------------------------
       
   349 // CVcxMyVideosAlbums::CalculateAttributesL
       
   350 // ----------------------------------------------------------------------------
       
   351 //
       
   352 void CVcxMyVideosAlbums::CalculateAttributesL()
       
   353     {
       
   354     TInt count = iAlbums.Count();
       
   355     for ( TInt i = 0; i < count; i++ )
       
   356         {
       
   357         iAlbums[i]->CalculateAttributesL();
       
   358         }
   297     }
   359     }
   298 
   360 
   299 // ----------------------------------------------------------------------------
   361 // ----------------------------------------------------------------------------
   300 // CVcxMyVideosAlbums::AddAlbumsFromMdsL
   362 // CVcxMyVideosAlbums::AddAlbumsFromMdsL
   301 // From MDS insert event, no need to fetch content since the album was just
   363 // From MDS insert event, no need to fetch content since the album was just
   427 void CVcxMyVideosAlbums::DoHandleAddVideosToAlbumRespL( CMPXMedia* aCmd,
   489 void CVcxMyVideosAlbums::DoHandleAddVideosToAlbumRespL( CMPXMedia* aCmd,
   428         RPointerArray<CMdEInstanceItem>& aItemArray )
   490         RPointerArray<CMdEInstanceItem>& aItemArray )
   429     {
   491     {
   430     MPX_DEBUG1("CVcxMyVideosAlbums::DoHandleAddVideosToAlbumResp() start");
   492     MPX_DEBUG1("CVcxMyVideosAlbums::DoHandleAddVideosToAlbumResp() start");
   431 
   493 
       
   494     TUint32 albumId = TVcxMyVideosCollectionUtil::Uint32ValueL( *aCmd );
       
   495     CVcxMyVideosAlbum* album = Album( albumId );
       
   496 
   432     CMPXMediaArray* mediaArray = TVcxMyVideosCollectionUtil::MediaArrayL( *aCmd );
   497     CMPXMediaArray* mediaArray = TVcxMyVideosCollectionUtil::MediaArrayL( *aCmd );
   433     
   498     
   434     TVcxMyVideosAlbumVideo video;
   499     TVcxMyVideosAlbumVideo video;
   435     TUint albumId;
   500     RArray<CVcxMyVideosAlbum*> modifiedAlbums;
   436     CVcxMyVideosAlbum* album;
   501     modifiedAlbums.Reset();
   437     
   502     CleanupClosePushL( modifiedAlbums );
   438     TInt count = aItemArray.Count();
   503 
   439     for ( TInt i = 0; i < count; i++ )
   504     TInt mediaArrayCount  = mediaArray->Count();
   440         {
   505     TInt resultArrayCount = aItemArray.Count();
   441         video.iRelationMdsId = aItemArray[i]->Id(); 
   506     CMPXMedia* media;
   442         MPX_DEBUG3( "CVcxMyVideosAlbums:: item result[%d] = %d (id)", i, video.iRelationMdsId );
   507     TInt j = 0;
   443         if ( video.iRelationMdsId == KNoId )
   508     for ( TInt i = 0; i < mediaArrayCount; i++ )
   444             {
   509         {
   445             mediaArray->AtL( i )->SetTObjectValueL<TInt>( KVcxMediaMyVideosInt32Value,
   510         if ( j > resultArrayCount - 1 )
   446                     KErrGeneral );
   511             {
       
   512             MPX_DEBUG1("CVcxMyVideosAlbums:: result array already at end, skipping the rest");
       
   513             break; //break from for loop
       
   514             }
       
   515 
       
   516         media = mediaArray->AtL( i );
       
   517 
       
   518         // Skip items which were already failed (KErrAlreadyExists)
       
   519         if ( TVcxMyVideosCollectionUtil::Int32ValueL( *media ) != KErrAlreadyExists )
       
   520             {
       
   521             video.iRelationMdsId = aItemArray[j]->Id(); 
       
   522             MPX_DEBUG3( "CVcxMyVideosAlbums:: item result[%d] = %d (id)", j, video.iRelationMdsId );
       
   523             if ( video.iRelationMdsId == KNoId )
       
   524                 {
       
   525                 media->SetTObjectValueL<TInt>( KVcxMediaMyVideosInt32Value,
       
   526                         KErrGeneral );
       
   527                 }
       
   528             else
       
   529                 {
       
   530                 media->SetTObjectValueL<TInt>( KVcxMediaMyVideosInt32Value, KErrNone );
       
   531                 video.iMdsId = TVcxMyVideosCollectionUtil::IdL( *media ).iId1;
       
   532                 if ( album )
       
   533                     {
       
   534                     album->AddL( video );
       
   535                     if ( modifiedAlbums.Find( album ) == KErrNotFound )
       
   536                         {
       
   537                         modifiedAlbums.AppendL( album );
       
   538                         }
       
   539                     iCollection.iMessageList->AddEventL( TMPXItemId( albumId, KVcxMvcMediaTypeAlbum ),
       
   540                             EMPXItemModified, EVcxMyVideosVideoListOrderChanged );
       
   541                     }
       
   542                 }
       
   543             j++;
   447             }
   544             }
   448         else
   545         else
   449             {
   546             {
   450             mediaArray->AtL( i )->SetTObjectValueL<TInt>( KVcxMediaMyVideosInt32Value, KErrNone );
   547             MPX_DEBUG2("CVcxMyVideosAlbums:: skipping already failed %d(KErrAlreadyExists) media array item",
   451             video.iMdsId = TVcxMyVideosCollectionUtil::IdL( *mediaArray->AtL( i ) ).iId1;
   548                     TVcxMyVideosCollectionUtil::IdL( *media ).iId1 );
   452             albumId      = TVcxMyVideosCollectionUtil::Uint32ValueL( *aCmd );
   549             }
   453             album = Album( albumId );
   550         }
   454             if ( album )
   551 
   455                 {
   552     TInt count = modifiedAlbums.Count();
   456                 album->AddL( video );
   553     for ( TInt i = 0; i < count; i++ )
   457                 iCollection.iMessageList->AddEventL( TMPXItemId( albumId, KVcxMvcMediaTypeAlbum ),
   554         {
   458                         EMPXItemModified, EVcxMyVideosVideoListOrderChanged );
   555         modifiedAlbums[i]->CalculateAttributesL();
   459                 }
   556         }
   460             }
   557     
   461         }
   558     CleanupStack::PopAndDestroy( &modifiedAlbums );
   462     
   559     
   463     iCollection.iActiveTask->Done();
   560     iCollection.iActiveTask->Done();
   464     iCollection.iMessageList->SendL();
   561     iCollection.iMessageList->SendL();
   465     
   562     
   466     MPX_DEBUG1("CVcxMyVideosAlbums::DoHandleAddVideosToAlbumResp() exit");
   563     MPX_DEBUG1("CVcxMyVideosAlbums::DoHandleAddVideosToAlbumResp() exit");
   547 //
   644 //
   548 void CVcxMyVideosAlbums::HandleRelationEvent( TObserverNotificationType /*aType*/,
   645 void CVcxMyVideosAlbums::HandleRelationEvent( TObserverNotificationType /*aType*/,
   549         const RArray<TMdERelation>& aRelationArray )
   646         const RArray<TMdERelation>& aRelationArray )
   550     {    
   647     {    
   551     TRAP_IGNORE(
   648     TRAP_IGNORE(
   552     
   649 
       
   650     RArray<CVcxMyVideosAlbum*> modifiedAlbums;
       
   651     modifiedAlbums.Reset();
       
   652     CleanupClosePushL( modifiedAlbums );
       
   653 
   553     TUint albumId;
   654     TUint albumId;
   554     CVcxMyVideosAlbum* album;
   655     CVcxMyVideosAlbum* album;
   555     TInt count = aRelationArray.Count();
   656     TInt count = aRelationArray.Count();
       
   657     
       
   658     
   556     for ( TInt i = 0; i < count; i++ )
   659     for ( TInt i = 0; i < count; i++ )
   557         {
   660         {
   558         albumId = aRelationArray[i].LeftObjectId();
   661         albumId = aRelationArray[i].LeftObjectId();
       
   662         
       
   663         MPX_DEBUG3("CVcxMyVideosAlbums:: relation (%d,%d) deleted from MDS",
       
   664                 aRelationArray[i].LeftObjectId(), aRelationArray[i].RightObjectId() );
   559         
   665         
   560         if ( iAlbumListIsComplete )
   666         if ( iAlbumListIsComplete )
   561             {
   667             {
   562             album = Album( albumId );
   668             album = Album( albumId );
   563             if ( album )
   669             if ( album )
   564                 {
   670                 {
   565                 album->Remove( aRelationArray[i].RightObjectId(), ETrue /* compress */ );                
   671                 if ( modifiedAlbums.Find( album ) == KErrNotFound )
       
   672                     {
       
   673                     modifiedAlbums.AppendL( album );
       
   674                     }
       
   675                 album->Remove( aRelationArray[i].RightObjectId(), ETrue /* compress */ );
   566                 iCollection.iMessageList->AddEventL( TMPXItemId( albumId, KVcxMvcMediaTypeAlbum ),
   676                 iCollection.iMessageList->AddEventL( TMPXItemId( albumId, KVcxMvcMediaTypeAlbum ),
   567                         EMPXItemModified, EVcxMyVideosVideoListOrderChanged );
   677                         EMPXItemModified, EVcxMyVideosVideoListOrderChanged );
   568                 }
   678                 }
   569             }
   679             }
   570         else
   680         else
   572             //We are fetching albums already, we assume that it will be up to date.
   682             //We are fetching albums already, we assume that it will be up to date.
   573             //If that is not the case, then we should set some flag here and restart
   683             //If that is not the case, then we should set some flag here and restart
   574             //album fetching from scratch.
   684             //album fetching from scratch.
   575             }
   685             }
   576         }
   686         }
       
   687     
       
   688     count = modifiedAlbums.Count();
       
   689     for ( TInt i = 0; i < count; i++ )
       
   690         {
       
   691         modifiedAlbums[i]->CalculateAttributesL();
       
   692         }
       
   693     
       
   694     CleanupStack::PopAndDestroy( &modifiedAlbums );
       
   695     
   577     iCollection.iMessageList->SendL();
   696     iCollection.iMessageList->SendL();
   578     
   697     
   579     );
   698     );
   580     }
   699     }
       
   700 
       
   701 //HandleRelationIdEvent
   581 
   702 
   582 // ----------------------------------------------------------------------------
   703 // ----------------------------------------------------------------------------
   583 // CVcxMyVideosAlbums::UpdateAlbumL
   704 // CVcxMyVideosAlbums::UpdateAlbumL
   584 // Updates album attributes from aAlbum, if album is not found from memory,
   705 // Updates album attributes from aAlbum, if album is not found from memory,
   585 // nothing is done (no fetching from MDS).
   706 // nothing is done (no fetching from MDS).
       
   707 // This func is also called (by MDS modified event) when items are added or
       
   708 // removed from album.
   586 // ----------------------------------------------------------------------------
   709 // ----------------------------------------------------------------------------
   587 //
   710 //
   588 TBool CVcxMyVideosAlbums::UpdateAlbumL( const CMPXMedia& aAlbum )
   711 TBool CVcxMyVideosAlbums::UpdateAlbumL( const CMPXMedia& aAlbum )
   589     {
   712     {
   590     TBool changed = EFalse;
   713     TBool changed = EFalse;
   606                 media->SetTextValueL( KMPXMediaGeneralTitle, newTitle );
   729                 media->SetTextValueL( KMPXMediaGeneralTitle, newTitle );
   607                 iCollection.iMessageList->AddEventL( mpxId, EMPXItemModified );
   730                 iCollection.iMessageList->AddEventL( mpxId, EMPXItemModified );
   608                 changed = ETrue;
   731                 changed = ETrue;
   609                 }
   732                 }
   610             }
   733             }
   611         }
   734         // calculate attributes, in case that videos were removed or added to this album
       
   735         album->CalculateAttributesL();
       
   736         }
       
   737         
   612     return changed;
   738     return changed;
   613     }
   739     }
       
   740 
       
   741 // ----------------------------------------------------------------------------
       
   742 // CVcxMyVideosAlbums::NewVideoFlagChangedL
       
   743 // ----------------------------------------------------------------------------
       
   744 //
       
   745 void CVcxMyVideosAlbums::NewVideoFlagChangedL( TUint32 aMdsId )
       
   746     {    
       
   747     TInt count = iAlbums.Count();
       
   748     for ( TInt i = 0; i < count; i++ )
       
   749         {
       
   750         if ( iAlbums[i]->BelongsToAlbum( aMdsId ) )
       
   751             {
       
   752             iAlbums[i]->CalculateAttributesL();
       
   753             iCollection.iMessageList->AddEventL(
       
   754                     TMPXItemId( iAlbums[i]->iMdsId, KVcxMvcMediaTypeAlbum ),
       
   755                     EMPXItemModified, EVcxMyVideosListNoInfo );
       
   756             }
       
   757         }
       
   758     }
       
   759 
       
   760 // ----------------------------------------------------------------------------
       
   761 // CVcxMyVideosAlbums::VideoTitleChangedL
       
   762 // ----------------------------------------------------------------------------
       
   763 //
       
   764 void CVcxMyVideosAlbums::VideoTitleChangedL( TUint32 aMdsId )
       
   765     {    
       
   766     NewVideoFlagChangedL( aMdsId ); // same calculation works for this
       
   767     }
       
   768 
   614 // END OF FILE
   769 // END OF FILE