243 //DP("LastBuildDate END"); |
252 //DP("LastBuildDate END"); |
244 TInternetDate internetDate; |
253 TInternetDate internetDate; |
245 TBuf8<128> temp; |
254 TBuf8<128> temp; |
246 temp.Copy(iBuffer); |
255 temp.Copy(iBuffer); |
247 |
256 |
|
257 DP2("iFileSize=%d, iActiveFeed->FeedFileSize()=%d", iFileSize, iActiveFeed->FeedFileSize()); |
|
258 |
248 TRAPD(parseError, internetDate.SetDateL(temp)); |
259 TRAPD(parseError, internetDate.SetDateL(temp)); |
249 if(parseError == KErrNone) { |
260 if(parseError == KErrNone) { |
250 if (TTime(internetDate.DateTime()) > iActiveFeed->BuildDate()) { |
261 if (TTime(internetDate.DateTime()) > iActiveFeed->BuildDate()) { |
251 DP("Successfully parsed build date"); |
262 DP("Successfully parsed build date"); |
252 iActiveFeed->SetBuildDate(TTime(internetDate.DateTime())); |
263 iActiveFeed->SetBuildDate(TTime(internetDate.DateTime())); |
253 } else { |
264 } else if (iFileSize == iActiveFeed->FeedFileSize()){ |
254 DP("*** Nothing new, aborting parsing"); |
265 DP("*** Nothing new, aborting parsing"); |
255 iStoppedParsing = ETrue; |
266 iStoppedParsing = ETrue; |
256 } |
267 } |
257 } else { |
268 } else { |
258 DP("Failed to parse last build date"); |
269 DP("Failed to parse last build date"); |
259 } |
270 } |
|
271 iActiveFeed->SetFeedFileSize(iFileSize); |
260 iFeedState = EStateChannel; |
272 iFeedState = EStateChannel; |
261 } |
273 } |
262 break; |
274 break; |
263 case EStateChannelImageUrl: |
275 case EStateChannelImageUrl: |
264 //DP1("Image url: %S", &iBuffer); |
276 //DP1("Image url: %S", &iBuffer); |
290 now -= delta; |
300 now -= delta; |
291 |
301 |
292 iActiveShow->SetPubDate(now); |
302 iActiveShow->SetPubDate(now); |
293 } |
303 } |
294 |
304 |
|
305 if (iUid) |
|
306 { |
|
307 iActiveShow->SetUid(iUid); |
|
308 } |
295 |
309 |
296 iCallbacks.NewShowL(*iActiveShow); |
310 iCallbacks.NewShowL(*iActiveShow); |
297 |
311 |
298 delete iActiveShow; |
312 delete iActiveShow; |
299 |
313 |
300 // We should now be finished with the show. |
314 // We should now be finished with the show. |
301 iActiveShow = NULL; |
315 iActiveShow = NULL; |
302 |
316 |
303 iItemsParsed++; |
317 iItemsParsed++; |
304 DP2("iItemsParsed: %d, iMaxItems: %d", iItemsParsed, iMaxItems); |
318 DP2("iItemsParsed: %d, iMaxItems: %d", iItemsParsed, iMaxItems); |
305 // if (iItemsParsed >= iMaxItems) |
319 if (iItemsParsed >= iMaxItems) |
306 // { |
320 { |
307 // iStoppedParsing = ETrue; |
321 iStoppedParsing = ETrue; |
308 // DP("*** Too many items, aborting parsing"); |
322 DP("*** Too many items, aborting parsing"); |
309 // } |
323 } |
310 |
324 |
311 iFeedState=EStateChannel; |
325 iFeedState=EStateChannel; |
312 } |
326 } |
313 break; |
327 break; |
314 case EStateItemPubDate: |
328 case EStateItemPubDate: |
315 DP1("PubDate END: iBuffer='%S'", &iBuffer); |
329 DP1("PubDate END: iBuffer='%S'", &iBuffer); |
316 if (str.CompareF(KTagPubDate) == 0) { |
330 if (str.CompareF(KTagPubDate) == 0) { |
317 // hack for feeds that don't always write day as two digits |
331 DP1("iBuffer.Length()=%d", iBuffer.Length()); |
318 TChar five(iBuffer[5]); |
332 |
319 TChar six(iBuffer[6]); |
333 if (iBuffer.Length() > 6) |
320 |
334 { |
321 if (five.IsDigit() && !six.IsDigit()) { |
335 // hack for feeds that don't always write day as two digits |
322 TBuf<KMaxStringBuffer> fix; |
336 TChar five(iBuffer[5]); |
323 fix.Copy(iBuffer.Left(4)); |
337 TChar six(iBuffer[6]); |
324 fix.Append(_L(" 0")); |
338 |
325 fix.Append(iBuffer.Mid(5)); |
339 if (five.IsDigit() && !six.IsDigit()) { |
326 iBuffer.Copy(fix); |
340 TBuf<KMaxStringBuffer> fix; |
327 } |
341 fix.Copy(iBuffer.Left(4)); |
328 // end hack |
342 fix.Append(_L(" 0")); |
329 |
343 fix.Append(iBuffer.Mid(5)); |
330 // hack for feeds that write out months in full |
344 iBuffer.Copy(fix); |
331 |
345 } |
332 if (iBuffer[11] != ' ') { |
346 // end hack |
333 TPtrC midPtr = iBuffer.Mid(8); |
347 } |
334 |
348 |
335 int spacePos = midPtr.Find(_L(" ")); |
349 if (iBuffer.Length() > 11) |
336 |
350 { |
337 if (spacePos != KErrNotFound) { |
351 // hack for feeds that write out months in full |
338 //DP1("Month: %S", &midPtr.Left(spacePos)); |
352 |
|
353 if (iBuffer[11] != ' ') { |
|
354 TPtrC midPtr = iBuffer.Mid(8); |
339 |
355 |
340 TBuf16<KBufferLength> newBuffer; |
356 int spacePos = midPtr.Find(_L(" ")); |
341 newBuffer.Copy(iBuffer.Left(11)); |
357 |
342 newBuffer.Append(_L(" ")); |
358 if (spacePos != KErrNotFound) { |
343 newBuffer.Append(iBuffer.Mid(11+spacePos)); |
359 //DP1("Month: %S", &midPtr.Left(spacePos)); |
344 //DP1("newBuffer: %S", &newBuffer); |
360 |
345 iBuffer.Copy(newBuffer); |
361 TBuf16<KBufferLength> newBuffer; |
346 } |
362 newBuffer.Copy(iBuffer.Left(11)); |
347 } |
363 newBuffer.Append(_L(" ")); |
348 |
364 newBuffer.Append(iBuffer.Mid(11+spacePos)); |
349 // hack for feeds that write days and months as UPPERCASE |
365 //DP1("newBuffer: %S", &newBuffer); |
350 TChar one(iBuffer[1]); |
366 iBuffer.Copy(newBuffer); |
351 TChar two(iBuffer[2]); |
367 } |
352 TChar nine(iBuffer[9]); |
368 } |
353 TChar ten(iBuffer[10]); |
369 |
354 |
370 // hack for feeds that write days and months as UPPERCASE |
355 one.LowerCase(); |
371 TChar one(iBuffer[1]); |
356 two.LowerCase(); |
372 TChar two(iBuffer[2]); |
357 nine.LowerCase(); |
373 TChar nine(iBuffer[9]); |
358 ten.LowerCase(); |
374 TChar ten(iBuffer[10]); |
359 |
375 |
360 iBuffer[1] = one; |
376 one.LowerCase(); |
361 iBuffer[2] = two; |
377 two.LowerCase(); |
362 iBuffer[9] = nine; |
378 nine.LowerCase(); |
363 iBuffer[10] = ten; |
379 ten.LowerCase(); |
364 |
380 |
|
381 iBuffer[1] = one; |
|
382 iBuffer[2] = two; |
|
383 iBuffer[9] = nine; |
|
384 iBuffer[10] = ten; |
|
385 } |
|
386 |
365 TBuf8<128> temp; |
387 TBuf8<128> temp; |
366 temp.Copy(iBuffer); |
388 temp.Copy(iBuffer); |
367 |
|
368 TInternetDate internetDate; |
389 TInternetDate internetDate; |
369 TRAPD(parseError, internetDate.SetDateL(temp)); |
390 TRAPD(parseError, internetDate.SetDateL(temp)); |
370 if(parseError == KErrNone) { |
391 if(parseError == KErrNone) { |
371 //DP1("PubDate parse success: '%S'", &iBuffer); |
392 //DP1("PubDate parse success: '%S'", &iBuffer); |
372 iActiveShow->SetPubDate(TTime(internetDate.DateTime())); |
393 iActiveShow->SetPubDate(TTime(internetDate.DateTime())); |