--- a/engine/src/FeedParser.cpp Sat Nov 13 15:05:16 2010 +0000
+++ b/engine/src/FeedParser.cpp Mon Nov 22 15:41:41 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));
@@ -73,6 +78,8 @@
HBufC* charset = HBufC::NewLC(KMaxParseBuffer);
charset->Des().Copy(aDocParam.CharacterSetName().DesC());
iEncoding = EUtf8;
+ iFeedDirection = EFeedUnknown;
+ iPreviousPubDate = 0;
if (charset->CompareF(_L("utf-8")) == 0) {
DP("setting UTF8");
iEncoding = EUtf8;
@@ -87,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);
}
@@ -302,11 +321,42 @@
iActiveShow->SetPubDate(now);
}
+ if (iFeedDirection == EFeedUnknown)
+ {
+ if (iPreviousPubDate.Int64() != 0) {
+ if (iActiveShow->PubDate() > iPreviousPubDate)
+ {
+ DP("Feed adds at bottom");
+ iFeedDirection = EFeedAddsAtBottom;
+ }
+ else
+ {
+ DP("Feed adds at top");
+ iFeedDirection = EFeedAddsAtTop;
+ }
+ }
+ 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;
@@ -316,7 +366,8 @@
iItemsParsed++;
DP2("iItemsParsed: %d, iMaxItems: %d", iItemsParsed, iMaxItems);
- if (iItemsParsed >= iMaxItems)
+ // we stop parsing after iMaxItems, but not if feed builds at bottom
+ if (iItemsParsed >= iMaxItems && iFeedDirection != EFeedAddsAtBottom)
{
iStoppedParsing = ETrue;
DP("*** Too many items, aborting parsing");