filemanager/bkupengine/src/CMMCScBkupIndexPublicDataFiles.cpp
changeset 0 6a9f87576119
--- /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 );
+        }
+    }
+
+
+
+