295 // C++ default constructor can NOT contain any code that |
295 // C++ default constructor can NOT contain any code that |
296 // might leave. |
296 // might leave. |
297 // ----------------------------------------------------------------------------- |
297 // ----------------------------------------------------------------------------- |
298 // |
298 // |
299 CFeedsDatabase::CFeedsDatabase(CFeedsServer* aFeedsServer): |
299 CFeedsDatabase::CFeedsDatabase(CFeedsServer* aFeedsServer): |
300 iLeakTracker(CLeakTracker::EFeedsDatabase),iFeedsServer(aFeedsServer) |
300 iLeakTracker(CLeakTracker::EFeedsDatabase),iFeedsServer(aFeedsServer),iIsFolderTableUpdateNeeded(EFalse) |
301 { |
301 { |
302 } |
302 } |
303 |
303 |
304 |
304 |
305 // ----------------------------------------------------------------------------- |
305 // ----------------------------------------------------------------------------- |
1405 TInt folderListId = 0; |
1405 TInt folderListId = 0; |
1406 if (iFolderListTable.SeekL(folderListKey)) |
1406 if (iFolderListTable.SeekL(folderListKey)) |
1407 { |
1407 { |
1408 TBool isFolder; |
1408 TBool isFolder; |
1409 // TInt folderListId; |
1409 // TInt folderListId; |
1410 |
1410 |
1411 // Update the title in the folder list table. |
1411 // Update the title in the folder list table. |
1412 iFolderListTable.GetL(); |
1412 iFolderListTable.GetL(); |
1413 iFolderListTable.UpdateL(); |
1413 iFolderListTable.UpdateL(); |
1414 |
1414 |
1415 isFolder = iFolderListTable.ColUint8(iFolderListColSet->ColNo(KIsFolder)); |
1415 isFolder = iFolderListTable.ColUint8(iFolderListColSet->ColNo(KIsFolder)); |
1429 // { |
1429 // { |
1430 // feedId = CommitFeedL(folderListId, aTitle, aUrl); |
1430 // feedId = CommitFeedL(folderListId, aTitle, aUrl); |
1431 // } |
1431 // } |
1432 |
1432 |
1433 |
1433 |
1434 UseFeedTableLC(RDbTable::EUpdatable); |
1434 UseFeedTableLC(RDbTable::EUpdatable); |
1435 TDbSeekKey seekKey((TUint16) feedId); |
1435 TDbSeekKey seekKey((TUint16) feedId); |
1436 |
1436 |
1437 if (iFeedTable.SeekL(seekKey)) |
1437 if (iFeedTable.SeekL(seekKey)) |
1438 { |
1438 { |
1439 iFeedTable.GetL(); |
1439 iFeedTable.GetL(); |
1440 iFeedTable.UpdateL(); |
1440 iFeedTable.UpdateL(); |
1441 } |
1441 } |
1442 else |
1442 else |
1443 { |
1443 { |
1444 User::Leave(KErrCorrupt); |
1444 User::Leave(KErrCorrupt); |
1445 } |
1445 } |
1446 iFeedTable.SetColL(iFeedColSet->ColNo(KTitle_100MaxLen), aTitle.Left(K100MaxLen)); |
1446 iFeedTable.SetColL(iFeedColSet->ColNo(KTitle_100MaxLen), aTitle.Left(K100MaxLen)); |
1447 WriteLongTextL(iFeedTable, iFeedColSet->ColNo(KFeedUrl), aUrl); |
1447 if (aUrl.Length() > 0) |
|
1448 { |
|
1449 WriteLongTextL(iFeedTable, iFeedColSet->ColNo(KFeedUrl), aUrl); |
|
1450 } |
1448 iFeedTable.SetColL(iFeedColSet->ColNo(KAutoUpdateFreq), aFreq); |
1451 iFeedTable.SetColL(iFeedColSet->ColNo(KAutoUpdateFreq), aFreq); |
1449 iFeedTable.PutL(); |
1452 iFeedTable.PutL(); |
1450 CleanupStack::PopAndDestroy(/*feed table*/); |
1453 CleanupStack::PopAndDestroy(/*feed table*/); |
1451 // Set the feed id. |
1454 // Set the feed id. |
1452 //iFolderListTable.SetColL(iFolderListColSet->ColNo(KFeedId), feedId); |
1455 //iFolderListTable.SetColL(iFolderListColSet->ColNo(KFeedId), feedId); |
1453 } |
1456 } |
1454 |
1457 |
1455 iFolderListTable.PutL(); |
1458 iFolderListTable.PutL(); |
1456 if(feedId != KUnassignedId) |
1459 if(feedId != KUnassignedId) |
2779 WriteLongTextL(iFeedTable, iFeedColSet->ColNo(KDescription), description); |
2782 WriteLongTextL(iFeedTable, iFeedColSet->ColNo(KDescription), description); |
2780 WriteLongTextL(iFeedTable, iFeedColSet->ColNo(KWebUrl), link); |
2783 WriteLongTextL(iFeedTable, iFeedColSet->ColNo(KWebUrl), link); |
2781 iFeedTable.SetColL(iFeedColSet->ColNo(KUnreadCount), unreadCount); |
2784 iFeedTable.SetColL(iFeedColSet->ColNo(KUnreadCount), unreadCount); |
2782 |
2785 |
2783 iFeedTable.PutL(); |
2786 iFeedTable.PutL(); |
2784 |
2787 |
|
2788 if (iIsFolderTableUpdateNeeded) |
|
2789 { |
|
2790 //update the folder table. |
|
2791 TInt entryId; |
|
2792 EntryIdFromFeedId(aFeedId, aFolderListId, entryId); |
|
2793 FolderItemUpdateL(entryId, title, KNullDesC, KAutoUpdatingOff); |
|
2794 } |
2785 } |
2795 } |
2786 |
2796 |
2787 |
2797 |
2788 // ----------------------------------------------------------------------------- |
2798 // ----------------------------------------------------------------------------- |
2789 // CFeedsDatabase::CommitFeedL |
2799 // CFeedsDatabase::CommitFeedL |
4379 } |
4389 } |
4380 |
4390 |
4381 CleanupStack::PopAndDestroy(/* iFeedTable */); |
4391 CleanupStack::PopAndDestroy(/* iFeedTable */); |
4382 } |
4392 } |
4383 |
4393 |
|
4394 // ----------------------------------------------------------------------------- |
|
4395 // CFeedsDatabase::FeedIdFromEntryId |
|
4396 // |
|
4397 // Returns the feed id of the feed with the given entry id. |
|
4398 // ----------------------------------------------------------------------------- |
|
4399 // |
|
4400 TBool CFeedsDatabase::FeedIdFromEntryId(const TInt& aEntryId, TInt aFolderListId, TInt& aFeedId) |
|
4401 { |
|
4402 RDbView view; |
|
4403 TBool found = EFalse; |
|
4404 HBufC* query = NULL; |
|
4405 |
|
4406 // Create a view given this select... |
|
4407 // SELECT FeedId FROM FeedTable WHERE FeedUrl = 'aFeedUrl' AND FolderListId = aFolderListId |
|
4408 _LIT(KQuery, "SELECT FeedId FROM FolderListTable WHERE FolderItemId = %d AND FolderListId = %d"); |
|
4409 |
|
4410 query = HBufC::NewLC( KQuery().Length() + KIntLength + KIntLength ); |
|
4411 |
|
4412 query->Des().Format( KQuery, aEntryId, aFolderListId ); |
|
4413 |
|
4414 User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(*query), RDbView::EReadOnly)); |
|
4415 CleanupClosePushL(view); |
|
4416 |
|
4417 CDbColSet* colSet = view.ColSetL(); |
|
4418 CleanupStack::PushL(colSet); |
|
4419 |
|
4420 // Search for the feed. |
|
4421 if (view.Evaluate() >= 0) |
|
4422 { |
|
4423 if (view.FirstL()) |
|
4424 { |
|
4425 // Get the feed id. |
|
4426 view.GetL(); |
|
4427 aFeedId = view.ColUint16(colSet->ColNo(KFeedId)); |
|
4428 found = ETrue; |
|
4429 } |
|
4430 } |
|
4431 |
|
4432 CleanupStack::PopAndDestroy(colSet); |
|
4433 CleanupStack::PopAndDestroy(/*view*/); |
|
4434 CleanupStack::PopAndDestroy(query); |
|
4435 |
|
4436 return found; |
|
4437 } |
|
4438 |
|
4439 // ----------------------------------------------------------------------------- |
|
4440 // CFeedsDatabase::EntryIdFromFeedId |
|
4441 // |
|
4442 // Returns the feed id of the feed with the given entry id. |
|
4443 // ----------------------------------------------------------------------------- |
|
4444 // |
|
4445 TBool CFeedsDatabase::EntryIdFromFeedId(const TInt& aFeedId, TInt aFolderListId, TInt& aEntryId) |
|
4446 { |
|
4447 RDbView view; |
|
4448 TBool found = EFalse; |
|
4449 HBufC* query = NULL; |
|
4450 |
|
4451 // Create a view given this select... |
|
4452 // SELECT FeedId FROM FeedTable WHERE FeedUrl = 'aFeedUrl' AND FolderListId = aFolderListId |
|
4453 _LIT(KQuery, "SELECT FolderItemId FROM FolderListTable WHERE FeedId = %d AND FolderListId = %d"); |
|
4454 |
|
4455 query = HBufC::NewLC( KQuery().Length() + KIntLength + KIntLength ); |
|
4456 |
|
4457 query->Des().Format( KQuery, aFeedId, aFolderListId ); |
|
4458 |
|
4459 User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(*query), RDbView::EReadOnly)); |
|
4460 CleanupClosePushL(view); |
|
4461 |
|
4462 CDbColSet* colSet = view.ColSetL(); |
|
4463 CleanupStack::PushL(colSet); |
|
4464 |
|
4465 // Search for the feed. |
|
4466 if (view.Evaluate() >= 0) |
|
4467 { |
|
4468 if (view.FirstL()) |
|
4469 { |
|
4470 // Get the feed id. |
|
4471 view.GetL(); |
|
4472 aEntryId = view.ColUint16(colSet->ColNo(KFolderItemId)); |
|
4473 found = ETrue; |
|
4474 } |
|
4475 } |
|
4476 |
|
4477 CleanupStack::PopAndDestroy(colSet); |
|
4478 CleanupStack::PopAndDestroy(/*view*/); |
|
4479 CleanupStack::PopAndDestroy(query); |
|
4480 |
|
4481 return found; |
|
4482 } |
|
4483 |
4384 #if defined(_DEBUG) |
4484 #if defined(_DEBUG) |
4385 // ----------------------------------------------------------------------------- |
4485 // ----------------------------------------------------------------------------- |
4386 // CFeedsDatabase::DebugPrintTables |
4486 // CFeedsDatabase::DebugPrintTables |
4387 // |
4487 // |
4388 // Prints the tables to the log file. |
4488 // Prints the tables to the log file. |