--- a/harvesterplugins/calendar/src/ccalendarplugin.cpp Tue Oct 05 13:32:14 2010 +0530
+++ b/harvesterplugins/calendar/src/ccalendarplugin.cpp Fri Oct 15 11:45:38 2010 +0530
@@ -21,7 +21,8 @@
#include <csearchdocument.h>
#include <ccpixindexer.h>
-#include <e32base.h>
+#include <s32file.h>
+#include <BAUTILS.H>
#include <calsession.h>
#include <calentry.h>
#include <caliterator.h>
@@ -40,6 +41,7 @@
/** The delay between harvesting chunks. */
const TInt KHarvestingDelay = 2000;
+_LIT(KManagerFileName, "CalendarStore.temp");
_LIT(KCalendarTimeFormat,"%04d %02d %02d %02d %02d");
_LIT(KExcerptTimeFormat,"%04d/%02d/%02d %02d:%02d");
@@ -99,6 +101,8 @@
iSession->StopChangeNotification();
}
delete iSession;
+
+ iFs.Close();
}
// ---------------------------------------------------------------------------
@@ -118,6 +122,15 @@
}
iCalIterator = CCalIter::NewL( *iSession );
iEntryView = CCalEntryView::NewL( *iSession, *this );
+
+ User::LeaveIfError(iFs.Connect());
+ TFileName pathWithoutDrive;
+ iFs.CreatePrivatePath(EDriveC);
+ iFilePath = _L("C:");
+ iFs.PrivatePath( pathWithoutDrive );
+ iFilePath.Append(pathWithoutDrive);
+ iFilePath.Append(KManagerFileName);
+
}
// ---------------------------------------------------------------------------
@@ -145,7 +158,10 @@
endTimeCal.SetTimeUtcL( endTime );
CCalChangeNotificationFilter* filter = CCalChangeNotificationFilter::NewL( MCalChangeCallBack2::EChangeEntryAll, ETrue, CalCommon::TCalTimeRange( startTimeCal, endTimeCal ) );
iSession->StartChangeNotification( *this, *filter );
- delete filter;
+ delete filter;
+
+ if( BaflUtils::FileExists(iFs,iFilePath) )
+ LoadL();
}
// ---------------------------------------------------------------------------
@@ -594,8 +610,7 @@
void CCalendarPlugin::ResumePluginL()
{
OstTraceFunctionEntry0( CCALENDARPLUGIN_RESUMEPLUGINL_ENTRY );
- iIndexState = ETrue;
-
+ iIndexState = ETrue;
if( iHarvestState == EHarvesterStartHarvest )
{
if(iAsynchronizer->CallbackPending())
@@ -640,7 +655,7 @@
void CCalendarPlugin::IndexQueuedItems()
{
OstTraceFunctionEntry0( CCALENDARPLUGIN_INDEXQUEUEDITEMS_ENTRY );
- while (iJobQueue.Count()>0)
+ while (iJobQueue.Count()>0 && iIndexState )
{
TRecord entry = iJobQueue[0];
//Let the indexer handle this object TRAP it as it can leave
@@ -650,8 +665,68 @@
iJobQueue.Remove(0);
}
}
+
+ if(iJobQueue.Count() <= 0)
+ {
+ //Check for temp file, it exists delete
+ if( BaflUtils::FileExists( iFs, iFilePath ))
+ BaflUtils::DeleteFile( iFs, iFilePath );
+
+ }
OstTraceFunctionExit0( CCALENDARPLUGIN_INDEXQUEUEDITEMS_EXIT );
}
+
+void CCalendarPlugin::LoadL()
+ {
+ // Open the stream
+ RFile file;
+ User::LeaveIfError(file.Open(iFs, iFilePath, EFileRead));
+ CleanupClosePushL(file);
+ RFileReadStream rd(file);
+ rd.PushL();
+
+ // Read harvester count
+ TInt count = rd.ReadInt32L();
+ // Read the harvesters
+ for (TInt i=0; i<count; i++)
+ {
+ TRecord record;
+ record.iLocalUid = rd.ReadUint32L();
+ record.iActionType = static_cast<TCPixActionType> ( rd.ReadInt16L());
+ OverWriteOrAddToQueueL(record.iLocalUid, record.iActionType);
+ }
+
+ if( count > 0)
+ IndexQueuedItems();
+ // Cleanup
+ CleanupStack::PopAndDestroy(2, &file);
+ }
+
+void CCalendarPlugin::SaveL()
+ {
+ if(iJobQueue.Count() <= 0)
+ return;
+
+ // Open the stream
+ RFile file;
+ User::LeaveIfError(file.Replace(iFs, iFilePath, EFileWrite));
+ CleanupClosePushL(file);
+
+ RFileWriteStream wr(file);
+ wr.PushL();
+
+ // Write harvester count
+ wr.WriteInt32L(iJobQueue.Count());
+
+ for (TInt i=0; i<iJobQueue.Count(); i++)
+ {
+ wr.WriteUint32L(iJobQueue[i].iLocalUid);
+ wr.WriteInt16L(iJobQueue[i].iActionType);
+ }
+ // Commit and cleanup
+ wr.CommitL();
+ CleanupStack::PopAndDestroy(2, &file);
+ }
// ---------------------------------------------------------------------------
// CCalendarPlugin::UpdatePerformaceDataL
// ---------------------------------------------------------------------------