branch | 3rded |
changeset 343 | 9c56bf585696 |
parent 219 | 3aa0b93477b5 |
child 390 | d7abecc9d189 |
281:1cae65a87b5e | 343:9c56bf585696 |
---|---|
51 iFeedTimer.ConstructL(); |
51 iFeedTimer.ConstructL(); |
52 |
52 |
53 TInt err = KErrNone; |
53 TInt err = KErrNone; |
54 TInt feedCount = 0; |
54 TInt feedCount = 0; |
55 |
55 |
56 DBEnsureFileSizeFieldExists(); |
|
57 |
|
56 TRAP(err, feedCount = DBGetFeedCountL()); |
58 TRAP(err, feedCount = DBGetFeedCountL()); |
57 if (err == KErrNone && feedCount > 0) |
59 if (err == KErrNone && feedCount > 0) |
58 { |
60 { |
59 DP("Loading feeds from DB"); |
61 DP("Loading feeds from DB"); |
60 TRAP(err, DBLoadFeedsL()); |
62 TRAP(err, DBLoadFeedsL()); |
99 { |
101 { |
100 } |
102 } |
101 |
103 |
102 CFeedEngine::~CFeedEngine() |
104 CFeedEngine::~CFeedEngine() |
103 { |
105 { |
106 DP("~CFeedEngine BEGIN"); |
|
104 iObservers.Close(); |
107 iObservers.Close(); |
105 |
108 |
106 iFeedsUpdating.Close(); |
109 iFeedsUpdating.Close(); |
107 iSortedFeeds.ResetAndDestroy(); |
110 iSortedFeeds.ResetAndDestroy(); |
108 iSearchResults.ResetAndDestroy(); |
111 iSearchResults.ResetAndDestroy(); |
110 delete iParser; |
113 delete iParser; |
111 delete iFeedClient; |
114 delete iFeedClient; |
112 delete iOpmlParser; |
115 delete iOpmlParser; |
113 // |
116 // |
114 delete iRepository; |
117 delete iRepository; |
118 DP("~CFeedEngine END"); |
|
115 } |
119 } |
116 |
120 |
117 /** |
121 /** |
118 * Returns the current internal state of the feed engine4 |
122 * Returns the current internal state of the feed engine4 |
119 */ |
123 */ |
297 } |
301 } |
298 } |
302 } |
299 |
303 |
300 void CFeedEngine::NewShowL(CShowInfo& aItem) |
304 void CFeedEngine::NewShowL(CShowInfo& aItem) |
301 { |
305 { |
306 DP1("CFeedEngine::NewShowL BEGIN, aItem.Title()=%S", &aItem.Title()); |
|
302 HBufC* description = HBufC::NewLC(KMaxDescriptionLength); |
307 HBufC* description = HBufC::NewLC(KMaxDescriptionLength); |
303 TPtr ptr(description->Des()); |
308 TPtr ptr(description->Des()); |
304 ptr.Copy(aItem.Description()); |
309 ptr.Copy(aItem.Description()); |
305 PodcastUtils::CleanHtmlL(ptr); |
310 PodcastUtils::CleanHtmlL(ptr); |
306 |
311 |
323 { |
328 { |
324 iPodcastModel.ShowEngine().AddDownloadL(aItem); |
329 iPodcastModel.ShowEngine().AddDownloadL(aItem); |
325 } |
330 } |
326 |
331 |
327 showsAdded++; |
332 showsAdded++; |
333 DP("CFeedEngine::NewShowL END"); |
|
328 } |
334 } |
329 |
335 |
330 void CFeedEngine::GetFeedImageL(CFeedInfo *aFeedInfo) |
336 void CFeedEngine::GetFeedImageL(CFeedInfo *aFeedInfo) |
331 { |
337 { |
332 DP("GetFeedImage"); |
338 DP("GetFeedImage"); |
339 relPath.Copy(aFeedInfo->Title()); |
345 relPath.Copy(aFeedInfo->Title()); |
340 relPath.Append('\\'); |
346 relPath.Append('\\'); |
341 |
347 |
342 TFileName fileName; |
348 TFileName fileName; |
343 PodcastUtils::FileNameFromUrl(aFeedInfo->ImageUrl(), fileName); |
349 PodcastUtils::FileNameFromUrl(aFeedInfo->ImageUrl(), fileName); |
350 fileName.Trim(); |
|
351 |
|
352 if (fileName.Length() == 0) |
|
353 User::Leave(KErrNotFound); |
|
354 |
|
344 relPath.Append(fileName); |
355 relPath.Append(fileName); |
345 PodcastUtils::EnsureProperPathName(relPath); |
356 PodcastUtils::EnsureProperPathName(relPath); |
346 |
357 |
347 // complete file path is base dir + rel path |
358 // complete file path is base dir + rel path |
348 filePath.Append(relPath); |
359 filePath.Append(relPath); |
399 HBufC* descBuf = HBufC::NewLC(KMaxLineLength); |
410 HBufC* descBuf = HBufC::NewLC(KMaxLineLength); |
400 TPtr descPtr(descBuf->Des()); |
411 TPtr descPtr(descBuf->Des()); |
401 descPtr.Copy(aItem.Description()); |
412 descPtr.Copy(aItem.Description()); |
402 PodcastUtils::SQLEncode(descPtr); |
413 PodcastUtils::SQLEncode(descPtr); |
403 |
414 |
404 _LIT(KSqlStatement, "insert into feeds (url, title, description, imageurl, imagefile, link, built, lastupdated, uid, feedtype, customtitle, lasterror) values (\"%S\",\"%S\", \"%S\", \"%S\", \"%S\", \"%S\", \"%Ld\", \"%Ld\", \"%u\", \"%u\", \"%u\", \"%d\")"); |
415 _LIT(KSqlStatement, "insert into feeds (url, title, description, imageurl, imagefile, link, built, lastupdated, uid, feedtype, customtitle, lasterror, filesize) values (\"%S\",\"%S\", \"%S\", \"%S\", \"%S\", \"%S\", \"%Ld\", \"%Ld\", \"%u\", \"%u\", \"%u\", \"%d\", \"%d\")"); |
405 iSqlBuffer.Format(KSqlStatement, |
416 iSqlBuffer.Format(KSqlStatement, |
406 &aItem.Url(), titleBuf, descBuf, &aItem.ImageUrl(), &aItem.ImageFileName(), &aItem.Link(), |
417 &aItem.Url(), titleBuf, descBuf, &aItem.ImageUrl(), &aItem.ImageFileName(), &aItem.Link(), |
407 aItem.BuildDate().Int64(), aItem.LastUpdated().Int64(), aItem.Uid(), EAudioPodcast, aItem.CustomTitle(), aItem.LastError()); |
418 aItem.BuildDate().Int64(), aItem.LastUpdated().Int64(), aItem.Uid(), EAudioPodcast, aItem.CustomTitle(), aItem.LastError(), aItem.FeedFileSize()); |
408 |
419 |
409 CleanupStack::PopAndDestroy(descBuf); |
420 CleanupStack::PopAndDestroy(descBuf); |
410 CleanupStack::PopAndDestroy(titleBuf); |
421 CleanupStack::PopAndDestroy(titleBuf); |
411 |
422 |
412 sqlite3_stmt *st; |
423 sqlite3_stmt *st; |
512 |
523 |
513 HBufC* descBuf = HBufC::NewLC(KMaxLineLength); |
524 HBufC* descBuf = HBufC::NewLC(KMaxLineLength); |
514 TPtr descPtr(descBuf->Des()); |
525 TPtr descPtr(descBuf->Des()); |
515 descPtr.Copy(aItem.Description()); |
526 descPtr.Copy(aItem.Description()); |
516 PodcastUtils::SQLEncode(descPtr); |
527 PodcastUtils::SQLEncode(descPtr); |
517 |
528 _LIT(KSqlStatement, "update feeds set url=\"%S\", title=\"%S\", description=\"%S\", imageurl=\"%S\", imagefile=\"%S\", link=\"%S\", built=\"%Lu\", lastupdated=\"%Lu\", feedtype=\"%u\", customtitle=\"%u\", lasterror=\"%d\", filesize=\"%d\" where uid=\"%u\""); |
518 _LIT(KSqlStatement, "update feeds set url=\"%S\", title=\"%S\", description=\"%S\", imageurl=\"%S\", imagefile=\"%S\", link=\"%S\", built=\"%Lu\", lastupdated=\"%Lu\", feedtype=\"%u\", customtitle=\"%u\", lasterror=\"%d\" where uid=\"%u\""); |
|
519 iSqlBuffer.Format(KSqlStatement, |
529 iSqlBuffer.Format(KSqlStatement, |
520 &aItem.Url(), titleBuf, descBuf, &aItem.ImageUrl(), &aItem.ImageFileName(), &aItem.Link(), |
530 &aItem.Url(), titleBuf, descBuf, &aItem.ImageUrl(), &aItem.ImageFileName(), &aItem.Link(), |
521 aItem.BuildDate().Int64(), aItem.LastUpdated().Int64(), EAudioPodcast, aItem.CustomTitle(), aItem.LastError(), aItem.Uid()); |
531 aItem.BuildDate().Int64(), aItem.LastUpdated().Int64(), EAudioPodcast, aItem.CustomTitle(), aItem.LastError(), aItem.FeedFileSize(), aItem.Uid()); |
522 |
532 |
523 CleanupStack::PopAndDestroy(descBuf); |
533 CleanupStack::PopAndDestroy(descBuf); |
524 CleanupStack::PopAndDestroy(titleBuf); |
534 CleanupStack::PopAndDestroy(titleBuf); |
525 |
535 |
526 sqlite3_stmt *st; |
536 sqlite3_stmt *st; |
719 { |
729 { |
720 } |
730 } |
721 |
731 |
722 void CFeedEngine::DownloadInfo(CHttpClient* /*aHttpClient */, int /*aTotalBytes*/) |
732 void CFeedEngine::DownloadInfo(CHttpClient* /*aHttpClient */, int /*aTotalBytes*/) |
723 { |
733 { |
734 |
|
735 } |
|
736 |
|
737 void CFeedEngine::DBEnsureFileSizeFieldExists() |
|
738 { |
|
739 DP("DBEnsureFileSizeFieldExists BEGIN"); |
|
740 sqlite3_stmt *st; |
|
741 int rc = sqlite3_prepare_v2(&iDB,"alter table feeds add column filesize int" , -1, &st, (const char**) NULL); |
|
742 DP1(" rc=%d", rc); |
|
743 |
|
744 if( rc==SQLITE_OK ) |
|
745 { |
|
746 Cleanup_sqlite3_finalize_PushL(st); |
|
747 rc = sqlite3_step(st); |
|
748 DP1(" rc=%d", rc); |
|
749 CleanupStack::PopAndDestroy(); // st |
|
750 } |
|
751 |
|
752 DP("DBEnsureFileSizeFieldExists END"); |
|
724 } |
753 } |
725 |
754 |
726 EXPORT_C void CFeedEngine::ImportFeedsL(const TDesC& aFile) |
755 EXPORT_C void CFeedEngine::ImportFeedsL(const TDesC& aFile) |
727 { |
756 { |
728 TFileName opmlPath; |
757 TFileName opmlPath; |
937 { |
966 { |
938 DP("DBLoadFeeds BEGIN"); |
967 DP("DBLoadFeeds BEGIN"); |
939 iSortedFeeds.Reset(); |
968 iSortedFeeds.Reset(); |
940 CFeedInfo *feedInfo = NULL; |
969 CFeedInfo *feedInfo = NULL; |
941 |
970 |
942 _LIT(KSqlStatement, "select url, title, description, imageurl, imagefile, link, built, lastupdated, uid, feedtype, customtitle, lasterror from feeds"); |
971 _LIT(KSqlStatement, "select url, title, description, imageurl, imagefile, link, built, lastupdated, uid, feedtype, customtitle, lasterror, filesize from feeds"); |
943 iSqlBuffer.Format(KSqlStatement); |
972 iSqlBuffer.Format(KSqlStatement); |
944 |
973 |
945 sqlite3_stmt *st; |
974 sqlite3_stmt *st; |
946 |
975 |
947 TLinearOrder<CFeedInfo> sortOrder( CFeedEngine::CompareFeedsByTitle); |
976 TLinearOrder<CFeedInfo> sortOrder( CFeedEngine::CompareFeedsByTitle); |
979 feedInfo->SetImageFileNameL(imagefile, &iPodcastModel); |
1008 feedInfo->SetImageFileNameL(imagefile, &iPodcastModel); |
980 } |
1009 } |
981 |
1010 |
982 const void *linkz = sqlite3_column_text16(st, 5); |
1011 const void *linkz = sqlite3_column_text16(st, 5); |
983 TPtrC16 link((const TUint16*)linkz); |
1012 TPtrC16 link((const TUint16*)linkz); |
984 feedInfo->SetDescriptionL(link); |
1013 feedInfo->SetLinkL(link); |
985 |
1014 |
986 sqlite3_int64 built = sqlite3_column_int64(st, 6); |
1015 sqlite3_int64 built = sqlite3_column_int64(st, 6); |
987 TTime buildtime(built); |
1016 TTime buildtime(built); |
988 feedInfo->SetBuildDate(buildtime); |
1017 feedInfo->SetBuildDate(buildtime); |
989 |
1018 |
997 feedInfo->SetCustomTitle(); |
1026 feedInfo->SetCustomTitle(); |
998 } |
1027 } |
999 |
1028 |
1000 sqlite3_int64 lasterror = sqlite3_column_int(st, 11); |
1029 sqlite3_int64 lasterror = sqlite3_column_int(st, 11); |
1001 feedInfo->SetLastError(lasterror); |
1030 feedInfo->SetLastError(lasterror); |
1002 |
1031 |
1032 TInt filesize = sqlite3_column_int(st, 12); |
|
1033 feedInfo->SetFeedFileSize(filesize); |
|
1034 |
|
1003 TLinearOrder<CFeedInfo> sortOrder( CFeedEngine::CompareFeedsByTitle); |
1035 TLinearOrder<CFeedInfo> sortOrder( CFeedEngine::CompareFeedsByTitle); |
1004 |
1036 |
1005 iSortedFeeds.InsertInOrder(feedInfo, sortOrder); |
1037 iSortedFeeds.InsertInOrder(feedInfo, sortOrder); |
1006 |
1038 |
1007 CleanupStack::Pop(feedInfo); |
1039 CleanupStack::Pop(feedInfo); |
1020 |
1052 |
1021 CFeedInfo* CFeedEngine::DBGetFeedInfoByUidL(TUint aFeedUid) |
1053 CFeedInfo* CFeedEngine::DBGetFeedInfoByUidL(TUint aFeedUid) |
1022 { |
1054 { |
1023 DP("CFeedEngine::DBGetFeedInfoByUid BEGIN"); |
1055 DP("CFeedEngine::DBGetFeedInfoByUid BEGIN"); |
1024 CFeedInfo *feedInfo = NULL; |
1056 CFeedInfo *feedInfo = NULL; |
1025 _LIT(KSqlStatement, "select url, title, description, imageurl, imagefile, link, built, lastupdated, uid, feedtype, customtitle, lasterror from feeds where uid=%u"); |
1057 _LIT(KSqlStatement, "select url, title, description, imageurl, imagefile, link, built, lastupdated, uid, feedtype, customtitle, lasterror, filesize from feeds where uid=%u"); |
1026 iSqlBuffer.Format(KSqlStatement, aFeedUid); |
1058 iSqlBuffer.Format(KSqlStatement, aFeedUid); |
1027 |
1059 |
1028 sqlite3_stmt *st; |
1060 sqlite3_stmt *st; |
1029 |
1061 |
1030 int rc = sqlite3_prepare16_v2(&iDB, (const void*)iSqlBuffer.PtrZ() , -1, &st, (const void**) NULL); |
1062 int rc = sqlite3_prepare16_v2(&iDB, (const void*)iSqlBuffer.PtrZ() , -1, &st, (const void**) NULL); |
1053 TPtrC16 image((const TUint16*)imagez); |
1085 TPtrC16 image((const TUint16*)imagez); |
1054 feedInfo->SetImageUrlL(image); |
1086 feedInfo->SetImageUrlL(image); |
1055 |
1087 |
1056 const void *imagefilez = sqlite3_column_text16(st, 4); |
1088 const void *imagefilez = sqlite3_column_text16(st, 4); |
1057 TPtrC16 imagefile((const TUint16*)imagefilez); |
1089 TPtrC16 imagefile((const TUint16*)imagefilez); |
1058 feedInfo->SetDescriptionL(imagefile); |
1090 feedInfo->SetImageFileNameL(imagefile, &iPodcastModel); |
1059 |
1091 |
1060 const void *linkz = sqlite3_column_text16(st, 5); |
1092 const void *linkz = sqlite3_column_text16(st, 5); |
1061 TPtrC16 link((const TUint16*)linkz); |
1093 TPtrC16 link((const TUint16*)linkz); |
1062 feedInfo->SetDescriptionL(link); |
1094 feedInfo->SetLinkL(link); |
1063 |
1095 |
1064 sqlite3_int64 built = sqlite3_column_int64(st, 6); |
1096 sqlite3_int64 built = sqlite3_column_int64(st, 6); |
1065 TTime buildtime(built); |
1097 TTime buildtime(built); |
1066 feedInfo->SetBuildDate(buildtime); |
1098 feedInfo->SetBuildDate(buildtime); |
1067 |
1099 |
1074 feedInfo->SetCustomTitle(); |
1106 feedInfo->SetCustomTitle(); |
1075 } |
1107 } |
1076 |
1108 |
1077 TInt lasterror = sqlite3_column_int(st, 11); |
1109 TInt lasterror = sqlite3_column_int(st, 11); |
1078 feedInfo->SetLastError(lasterror); |
1110 feedInfo->SetLastError(lasterror); |
1079 |
1111 |
1112 TInt filesize = sqlite3_column_int(st, 12); |
|
1113 feedInfo->SetFeedFileSize(filesize); |
|
1114 |
|
1080 CleanupStack::Pop(feedInfo); |
1115 CleanupStack::Pop(feedInfo); |
1081 } |
1116 } |
1082 else |
1117 else |
1083 { |
1118 { |
1084 User::Leave(KErrNotFound); |
1119 User::Leave(KErrNotFound); |