diff -r 867fc277ffea -r 04c6ccce8e7e engine/src/FeedEngine.cpp --- a/engine/src/FeedEngine.cpp Sat Apr 03 10:55:45 2010 +0100 +++ b/engine/src/FeedEngine.cpp Sat Apr 03 11:47:26 2010 +0100 @@ -148,7 +148,7 @@ TInt cnt = iSortedFeeds.Count(); for (int i=0;iUid()); } UpdateNextFeedL(); @@ -168,20 +168,31 @@ { DP1("UpdateNextFeed. %d feeds left to update", iFeedsUpdating.Count()); + // reset active feed, will be set again in UpdateFeedL if needed + iActiveFeed = NULL; + if (iFeedsUpdating.Count() > 0) { - CFeedInfo *info = iFeedsUpdating[0]; + CFeedInfo *info = GetFeedInfoByUid(iFeedsUpdating[0]); iFeedsUpdating.Remove(0); - TBool result = EFalse; - //DP2("** UpdateNextFeed: %S, ID: %u", &(info->Url()), info->Uid()); - TRAPD(error, result = UpdateFeedL(info->Uid())); - if (error != KErrNone || !result) + if (info == NULL) + { + UpdateNextFeedL(); + } + else { - DP("Error while updating all feeds"); - for (TInt i=0;iUrl()), info->Uid()); + TRAPD(error, result = UpdateFeedL(info->Uid())); + + if (error != KErrNone || !result) { - TRAP_IGNORE(iObservers[i]->FeedUpdateAllCompleteL(iAutoUpdatedInitiator?MFeedEngineObserver::EFeedAutoUpdate:MFeedEngineObserver::EFeedManualUpdate)); + DP("Error while updating all feeds"); + for (TInt i=0;iFeedUpdateAllCompleteL(iAutoUpdatedInitiator?MFeedEngineObserver::EFeedAutoUpdate:MFeedEngineObserver::EFeedManualUpdate)); + } } } } @@ -198,6 +209,12 @@ EXPORT_C TBool CFeedEngine::UpdateFeedL(TUint aFeedUid) { DP("FeedEngine::UpdateFeedL BEGIN"); + + if (iActiveFeed) + { + User::Leave(KErrInUse); + } + iActiveFeed = GetFeedInfoByUid(aFeedUid); iCatchupCounter = 0; iCancelRequested = EFalse; @@ -363,6 +380,11 @@ EXPORT_C void CFeedEngine::RemoveFeedL(TUint aUid) { + if (iActiveFeed && iActiveFeed->Uid() == aUid) + { + User::Leave(KErrInUse); + } + for (int i=0;iUid() == aUid) @@ -510,16 +532,6 @@ switch(iClientState) { - default: - if(iActiveFeed != NULL) - { - TTime time; - time.HomeTime(); - iActiveFeed->SetLastUpdated(time); - iActiveFeed->SetLastError(aError); - NotifyFeedUpdateComplete(iActiveFeed->Uid(), aError); - } - break; case EUpdatingFeed: { // Parse the feed. We need to trap this call since it could leave and then @@ -633,6 +645,9 @@ BaflUtils::DeleteFile(iPodcastModel.FsSession(), iSearchResultsFileName); }break; + default: + User::Panic(_L("FeedEngine"), KErrUnknown); + break; } DP("CFeedEngine::CompleteL END"); } @@ -1020,8 +1035,13 @@ return feedInfo; } -EXPORT_C void CFeedEngine::UpdateFeedL(CFeedInfo *aItem) +EXPORT_C void CFeedEngine::UpdateFeedInfoL(CFeedInfo *aItem) { + if (iActiveFeed && iActiveFeed->Uid() == aItem->Uid()) + { + User::Leave(KErrInUse); + } + DBUpdateFeedL(*aItem); }