30 |
30 |
31 void CServerRepository::OpenL(TUid aUid, MObserver& aObserver, TBool aFailIfNotFound) |
31 void CServerRepository::OpenL(TUid aUid, MObserver& aObserver, TBool aFailIfNotFound) |
32 { |
32 { |
33 iNotifier = &aObserver; |
33 iNotifier = &aObserver; |
34 |
34 |
35 iRepository = TServerResources::iObserver->AccessL(aUid, aFailIfNotFound); |
35 TServerResources::iObserver->iObservers.ReserveL(1); |
|
36 |
|
37 TServerResources::iObserver->AddSharedRepositoryInfoL(aUid); |
|
38 |
|
39 TRAPD( err, iRepository = TServerResources::iObserver->AccessL(aUid, aFailIfNotFound) ); |
|
40 |
36 //store uid |
41 //store uid |
37 iUid = aUid; |
42 iUid = aUid; |
38 |
43 |
39 TServerResources::iObserver->AddObserverL(aUid, this); |
44 if (err == KErrNone) |
40 TServerResources::iObserver->AddSharedRepositoryInfoL(aUid); |
45 { |
|
46 TRAP( err, TServerResources::iObserver->AddObserverL(aUid, this) ); |
|
47 } |
|
48 |
|
49 if (err != KErrNone) |
|
50 { |
|
51 TServerResources::iObserver->RemoveSharedRepositoryInfo(aUid); |
|
52 User::Leave(err); |
|
53 } |
41 } |
54 } |
42 |
55 |
43 void CServerRepository::Close() |
56 void CServerRepository::Close() |
44 { |
57 { |
45 iRepository = NULL; |
58 iRepository = NULL; |
396 } |
409 } |
397 if(err != KErrNone) |
410 if(err != KErrNone) |
398 { |
411 { |
399 if(err == KErrNoMemory) |
412 if(err == KErrNoMemory) |
400 { |
413 { |
|
414 repository->Close(); |
401 User::LeaveNoMemory(); |
415 User::LeaveNoMemory(); |
402 } |
416 } |
403 else |
417 else |
404 {//Dont stop processing the rest of the persisted repositories becos one has a problem. |
418 {//Dont stop processing the rest of the persisted repositories becos one has a problem. |
405 __CENTREP_TRACE1("CENTREP: CServerRepository::ProcessPersistsRepositoriesL - Error = %d", err); |
419 __CENTREP_TRACE1("CENTREP: CServerRepository::ProcessPersistsRepositoriesL - Error = %d", err); |
650 iRepository->FailAllTransactions(NULL); |
664 iRepository->FailAllTransactions(NULL); |
651 } |
665 } |
652 |
666 |
653 // Create install rep for merging |
667 // Create install rep for merging |
654 CSharedRepository *installRep = 0; |
668 CSharedRepository *installRep = 0; |
655 TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, installRep, CIniFileIn::EInstallOnly); |
669 TRAPD( err, TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, installRep, CIniFileIn::EInstallOnly); CleanupStack::Pop(installRep) ); |
656 |
670 |
657 // Perform merge |
671 if (err == KErrNone) |
658 iRepository->HandleUpdateMergeL(aModified, *installRep); |
672 { |
659 |
673 // Perform merge |
660 CleanupStack::PopAndDestroy(installRep); |
674 TRAP( err, iRepository->HandleUpdateMergeL(aModified, *installRep) ); |
661 Close(); |
675 } |
|
676 if (installRep!=NULL) |
|
677 { |
|
678 delete installRep; |
|
679 } |
|
680 Close(); |
|
681 User::LeaveIfError(err); |
662 } |
682 } |
663 else // No ROM or persists |
683 else // No ROM or persists |
664 { |
684 { |
665 // Create install rep for persisting |
685 // Create install rep for persisting |
666 OpenL(aUid, aNotifier); |
686 OpenL(aUid, aNotifier); |
667 |
687 TRAPD(err, iRepository->CommitChangesL()); |
668 iRepository->CommitChangesL(); |
688 Close(); |
669 Close(); |
689 User::LeaveIfError(err); |
670 } |
690 } |
671 } |
691 } |
672 |
692 |
673 |
693 |
674 // Handle install directory file delete |
694 // Handle install directory file delete |
696 iRepository->FailAllTransactions(NULL); |
716 iRepository->FailAllTransactions(NULL); |
697 } |
717 } |
698 |
718 |
699 // Create ROM rep for merging |
719 // Create ROM rep for merging |
700 CSharedRepository *romRep = 0; |
720 CSharedRepository *romRep = 0; |
701 TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, romRep, CIniFileIn::ERomOnly); |
721 TRAPD( err, TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, romRep, CIniFileIn::ERomOnly); CleanupStack::Pop(romRep) ); |
702 |
722 |
703 // Perform merge |
723 if (err == KErrNone) |
704 iRepository->HandleDeleteMergeL(*romRep); |
724 { |
705 |
725 // Perform merge |
706 CleanupStack::PopAndDestroy(romRep); |
726 TRAP( err, iRepository->HandleDeleteMergeL(*romRep) ); |
|
727 } |
|
728 if (romRep!=NULL) |
|
729 { |
|
730 delete romRep; |
|
731 } |
707 Close(); |
732 Close(); |
|
733 User::LeaveIfError(err); |
708 } |
734 } |
709 else // No ROM file, this is a complete uninstall |
735 else // No ROM file, this is a complete uninstall |
710 { |
736 { |
711 if(TServerResources::PersistsFileExistsL(aUid)) |
737 if(TServerResources::PersistsFileExistsL(aUid)) |
712 { |
738 { |