--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupIndexPublicDataFiles.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,196 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CMMCScBkupIndexPublicDataFiles implementation
+*
+*
+*/
+
+#include "CMMCScBkupIndexPublicDataFiles.h"
+
+// User includes
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "CMMCScBkupFileInfo.h"
+#include "CMMCScBkupFileListCollection.h"
+
+
+ /**
+ * Public File Data
+ * ================
+ *
+ * This is the format of the data written by the
+ * CMMCScBkupStateArchiveOpPublicDataFiles object
+ *
+ * PUB FILE DATA for file 0
+ * PUB FILE DATA for file 1
+ * PUB FILE DATA for file n
+ *
+ * Public File Data Index
+ * ======================
+ *
+ * This is the format of the data written by this object.
+ * The format allows the possibility of a future partial
+ * restore (hopefully).
+ *
+ * 4 bytes = count of data owners
+ *
+ * FOR EACH PUBLIC FILE
+ * {
+ * externalised CMMCScBkupFileInfo object
+ * externalised TMMCScBkupArchiveVector (offset & compressed size) object
+ * }
+ *
+ **/
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::CMMCScBkupIndexPublicDataFiles()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexPublicDataFiles::CMMCScBkupIndexPublicDataFiles()
+: CMMCScBkupIndexBase( EMMCScBkupOwnerDataTypePublicData )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::~CMMCScBkupIndexPublicDataFiles()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexPublicDataFiles::~CMMCScBkupIndexPublicDataFiles()
+ {
+ iEntries.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexPublicDataFiles* CMMCScBkupIndexPublicDataFiles::NewLC()
+ {
+ CMMCScBkupIndexPublicDataFiles* self = new(ELeave) CMMCScBkupIndexPublicDataFiles();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::AddIndexRecordL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexPublicDataFiles::AddIndexRecordL( const TMMCScBkupArchiveVector& aInfo, const CMMCScBkupFileInfo& aFile )
+ {
+ // Create new entry
+ TMMCScBkupPublicFileEntry entry( aInfo, aFile );
+
+ // Add it to our index
+ iEntries.AppendL( entry );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::At()
+//
+//
+// ---------------------------------------------------------------------------
+const CMMCScBkupFileInfo& CMMCScBkupIndexPublicDataFiles::At( TInt aIndex, TMMCScBkupArchiveVector& aInfo ) const
+ {
+ const TMMCScBkupPublicFileEntry& entry = iEntries[ aIndex ];
+ aInfo = entry.iInfo;
+ return *entry.iFile;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::StoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexPublicDataFiles::StoreL(MMMCScBkupDriver& aDriver)
+ {
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+ RWriteStream stream(archiveDataInterface.ADIWriteStreamUncompressedLC());
+ //
+ const TInt count = iEntries.Count();
+ stream.WriteInt32L(count);
+ //
+ for(TInt i=0; i<count; i++)
+ {
+ const TMMCScBkupPublicFileEntry& entry = iEntries[i];
+ stream << *entry.iFile;
+ stream << entry.iInfo;
+ }
+ //
+ stream.CommitL();
+ CleanupStack::PopAndDestroy(); // stream
+
+ // Update our base class info with the offset to the index
+ SetVector( archiveDataInterface.ADICurrentArchiveVectorInfo() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::RestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexPublicDataFiles::RestoreL(MMMCScBkupDriver& aDriver)
+ {
+ CMMCScBkupFileListCollection& fileList = aDriver.DrvFileList();
+ //
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+ RReadStream& stream = archiveDataInterface.ADIReadStreamUncompressedLC( Vector().Offset() );
+ //
+ const TInt count = stream.ReadInt32L();
+ for(TInt i=0; i<count; i++)
+ {
+ TMMCScBkupPublicFileEntry entry;
+
+ // Reconstruct the CMMCScBkupFileInfo entry in the stream
+ CMMCScBkupFileInfo* fileInfo = CMMCScBkupFileInfo::NewLC( stream );
+
+ // Give ownership to the file list collection
+ fileList.AppendL( fileInfo );
+ CleanupStack::Pop( fileInfo );
+ entry.iFile = fileInfo;
+
+ // Then read the offset to the file...
+ stream >> entry.iInfo;
+
+ // And finally add a new record to our index, so client's can
+ // retrieve the info.
+ iEntries.AppendL( entry );
+ }
+ //
+ CleanupStack::PopAndDestroy(); // stream
+ //
+ const TMMCScBkupArchiveVector& readInfo = archiveDataInterface.ADICurrentArchiveVectorInfo();
+ if ( readInfo.Length() > Vector().Length() )
+ {
+ // We've read too much!
+ User::Leave( KErrCorrupt );
+ }
+ }
+
+
+
+