diff -r f5de49b27caf -r f067cee22e48 engine/src/FeedParser.cpp --- a/engine/src/FeedParser.cpp Fri Nov 19 00:16:55 2010 +0000 +++ b/engine/src/FeedParser.cpp Fri Nov 19 01:08:10 2010 +0000 @@ -54,6 +54,11 @@ iMaxItems = aMaxItems; iStoppedParsing = EFalse; iEncoding = ELatin1; + if (iNewestShow) + delete iNewestShow; + iNewestShow = 0; + + iNewFeed = (iActiveFeed->LastUpdated() == 0) ? ETrue : EFalse; TEntry entry; User::LeaveIfError(iRfs.Entry(feedFileName, entry)); @@ -89,6 +94,18 @@ void CFeedParser::OnEndDocumentL(TInt /*aErrorCode*/) { //DP("OnEndDocumentL()"); + if (iNewFeed) + { + // if the feed adds at bottom, this + if (iNewestShow) + { + iNewestShow->SetPlayState(ENeverPlayed); + iCallbacks.ParserShowUpdatedL(*iNewestShow); + delete iNewestShow; + iNewestShow = 0; + } + } + iCallbacks.ParsingCompleteL(iActiveFeed); } @@ -321,12 +338,25 @@ iPreviousPubDate = iActiveShow->PubDate(); } - if (iUid) { iActiveShow->SetUid(iUid); } + + if (iNewFeed) + { + // set all played, except for the newest one + iActiveShow->SetPlayState(EPlayed); + + if (!iNewestShow || iActiveShow->PubDate() > iNewestShow->PubDate()) + { + if (iNewestShow) + delete iNewestShow; + iNewestShow = new CShowInfo(iActiveShow); + } + } + iCallbacks.NewShowL(*iActiveShow); delete iActiveShow;