414 void CFeedsServerSession::DispatchMessageL(const RMessage2 &aMessage) |
414 void CFeedsServerSession::DispatchMessageL(const RMessage2 &aMessage) |
415 { |
415 { |
416 // Ensure the server is ready. |
416 // Ensure the server is ready. |
417 iFeedsServer.WakeupServerL(); |
417 iFeedsServer.WakeupServerL(); |
418 iCurrOp = aMessage.Function(); |
418 iCurrOp = aMessage.Function(); |
419 |
419 |
|
420 if ( (!IsSpaceAvailableL()) && ((iCurrOp != EFeedsServerGetRootFolder) || |
|
421 (iCurrOp != EFeedsServerWatchFolderList) || (iCurrOp != EFeedsServerGetSettings) || |
|
422 (iCurrOp != EFeedsServerWatchSettings) || (iCurrOp != EFeedsServerSetConnection) || |
|
423 (iCurrOp != EFeedsServerDisconnectManualUpdateConnection) || |
|
424 (iCurrOp != EFeedsServerCancelAll) || (iCurrOp != EFeedsServerGetFeed) || |
|
425 (iCurrOp != EFeedsServerPrintDBTables))) |
|
426 { |
|
427 User::Leave(KErrNoMemory); |
|
428 } |
|
429 |
420 switch (iCurrOp) |
430 switch (iCurrOp) |
421 { |
431 { |
422 case EFeedsServerGetRootFolder: |
432 case EFeedsServerGetRootFolder: |
423 GetRootFolderL(aMessage); |
433 GetRootFolderL(aMessage); |
424 break; |
434 break; |
679 // Get the corresponding feed id. If it isn't found then force |
689 // Get the corresponding feed id. If it isn't found then force |
680 // an update. |
690 // an update. |
681 //Gyanendra TODO // should create entry into database |
691 //Gyanendra TODO // should create entry into database |
682 if (!iFeedsServer.iFeedsDatabase->FeedIdFromUrlL(feedUrl, folderListId, feedId)) |
692 if (!iFeedsServer.iFeedsDatabase->FeedIdFromUrlL(feedUrl, folderListId, feedId)) |
683 { |
693 { |
|
694 |
|
695 if (!IsSpaceAvailableL()) |
|
696 { |
|
697 aMessage.Complete(KErrNoMemory); |
|
698 } |
|
699 |
684 //Find feed id from folder id |
700 //Find feed id from folder id |
685 iFeedsServer.iFeedsDatabase->SetIsFolderTableUpdateNeeded(ETrue); |
701 iFeedsServer.iFeedsDatabase->SetIsFolderTableUpdateNeeded(ETrue); |
686 TInt entryId = iFeedsServer.iFeedsDatabase->FolderItemAddL(folderListId, feedUrl, feedUrl, EFalse, KRootFolderId, KAutoUpdatingOff); |
702 TInt entryId = iFeedsServer.iFeedsDatabase->FolderItemAddL(folderListId, feedUrl, feedUrl, EFalse, KRootFolderId, KAutoUpdatingOff); |
687 iFeedsServer.iFeedsDatabase->FeedIdFromEntryId(entryId, folderListId, feedId); |
703 iFeedsServer.iFeedsDatabase->FeedIdFromEntryIdL(entryId, folderListId, feedId); |
688 updateNeeded = ETrue; |
704 updateNeeded = ETrue; |
689 } |
705 } |
690 } |
706 } |
691 else |
707 else |
692 { |
708 { |
726 } |
742 } |
727 |
743 |
728 // Otherwise create a task to update the feed. |
744 // Otherwise create a task to update the feed. |
729 else |
745 else |
730 { |
746 { |
731 |
|
732 TInt drive( EDriveC ); |
|
733 TBool isSpace( EFalse ); |
|
734 RFs rfs; |
|
735 |
|
736 User::LeaveIfError(rfs.Connect()); |
|
737 CleanupClosePushL(rfs); |
|
738 |
|
739 TRAP_IGNORE( isSpace = !SysUtil::DiskSpaceBelowCriticalLevelL( |
|
740 &rfs, |
|
741 KMinFreebytes, |
|
742 drive )); |
|
743 |
|
744 CleanupStack::PopAndDestroy(); //rfs |
|
745 |
|
746 // Abort the updation of feeds under low memory. |
747 // Abort the updation of feeds under low memory. |
747 if(isSpace) |
748 if ( IsSpaceAvailableL() ) |
748 { |
749 { |
749 |
750 |
750 // If need be clean up the previous task. |
751 // If need be clean up the previous task. |
751 delete iUpdateFeedTask; |
752 delete iUpdateFeedTask; |
752 iUpdateFeedTask = NULL; |
753 iUpdateFeedTask = NULL; |
2103 delete sessionPtr->iPackedFeed; |
2104 delete sessionPtr->iPackedFeed; |
2104 sessionPtr->iPackedFeed = NULL; |
2105 sessionPtr->iPackedFeed = NULL; |
2105 } |
2106 } |
2106 return EFalse; |
2107 return EFalse; |
2107 } |
2108 } |
|
2109 |
|
2110 // ----------------------------------------------------------------------------- |
|
2111 // CFeedsServerSession::IsSpaceAvailableL |
|
2112 // |
|
2113 // This function checks whether disk space has not gone below critical level |
|
2114 // ----------------------------------------------------------------------------- |
|
2115 // |
|
2116 TBool CFeedsServerSession::IsSpaceAvailableL() |
|
2117 { |
|
2118 TInt drive( EDriveC ); |
|
2119 RFs rfs; |
|
2120 TBool isSpaceAvailable(EFalse); |
|
2121 |
|
2122 User::LeaveIfError(rfs.Connect()); |
|
2123 CleanupClosePushL(rfs); |
|
2124 |
|
2125 TRAP_IGNORE( isSpaceAvailable = !SysUtil::DiskSpaceBelowCriticalLevelL( |
|
2126 &rfs, |
|
2127 KMinFreebytes, |
|
2128 drive )); |
|
2129 CleanupStack::PopAndDestroy(); //rfs |
|
2130 |
|
2131 return isSpaceAvailable; |
|
2132 } |