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 |