videocollection/mpxmyvideoscollection/inc/vcxmyvideosasyncfilecopy.h
changeset 35 3738fe97f027
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/inc/vcxmyvideosasyncfilecopy.h	Thu Apr 01 23:32:44 2010 +0300
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:    Asynchronous file copy, implemented with several small sync block copies.*
+*/
+
+
+
+
+#ifndef VCXMYVIDEOSASYNCFILECOPY_H
+#define VCXMYVIDEOSASYNCFILECOPY_H
+
+// INCLUDES
+
+// FORWARD DECLARATIONS
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+* @lib mpxmyvideoscollectionplugin.lib
+*/
+NONSHARABLE_CLASS(CVcxMyVideosAsyncFileCopy) :
+    public CBase
+    {    
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor
+        * @return object constructed
+        */
+        static CVcxMyVideosAsyncFileCopy* NewL( RFs& aFs );
+
+        /**
+        * Destructor
+        */
+        virtual ~CVcxMyVideosAsyncFileCopy();
+
+    public:
+        /**
+        * Copies aSourceFileName to aSourceFileName. Leaves with KErrNotReady
+        * if there is already copy operation going on.
+        *
+        * @param aSourceFileName  Full path and name of the source file.
+        * @param aTargetFileName  Full path and name of the target file.
+        * @return                 ETrue if copy was finished. If EFalse, then
+        *                         user must do DoNextBlockCopyL calls to
+        *                         continue copying.
+        */
+        TBool CopyL( const TDesC& aSourceFileName, const TDesC& aTargetFileName );
+        
+        /**
+        * Checks if there is copy going on.
+        *
+        * @return ETrue if copy is going on, EFalse otherwise.
+        */
+        TBool CopyIsOngoing();
+        
+        /**
+        * Copies next block from the current copy operation.
+        *
+        * @return System wide error code.
+        */
+        TInt DoNextBlockCopy();
+
+        /**
+        * Cancels current copy operation (if any). Does nothing if copy
+        * operation is not going on. Cancel removes the possible target file
+        * which has been created during the current copy operation.
+        */
+        void Cancel();
+        
+    private:
+        /**
+        * Constructor
+        */
+        CVcxMyVideosAsyncFileCopy( RFs& aFs );
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL ();
+        
+        /**
+        * Allocates buffer from RAM (iFileBlockBuffer) for a file block.
+        * 
+        * @param aFileSize  Size of the file to be copied.
+        */
+        void AllocateFileBlockBufferL( TInt aFileSize );
+        
+        /**
+        * Closes file handles and resets variables.
+        *
+        * @param aRemoveTargetFile If ETrue then the target file is removed.
+        */
+        void EndCopy( TBool aRemoveTargetFile );
+                
+    private:
+
+        /**
+        * File server session.
+        */
+        RFs& iFs;
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+        /**
+        * File in which we are copying from.
+        */ 
+        RFile64 iSourceFile;
+        
+        /**
+        * File which is being copied to.
+        */ 
+        RFile64 iTargetFile;
+
+        /**
+        * How much data is left for copying.
+        */
+        TInt64 iDataRemaining;
+        
+        /**
+        * Current read position in source file. 
+        */
+        TInt64 iReadPos;                      
+#else
+
+        /**
+        * File in which we are copying from.
+        */ 
+        RFile iSourceFile;
+        
+        /**
+        * File which is being copied to.
+        */ 
+        RFile iTargetFile;
+
+        /**
+        * How much data is left for copying.
+        */
+        TInt iDataRemaining;
+        
+        /**
+        * Current read position in source file. 
+        */
+        TInt iReadPos;                      
+
+#endif
+        /**
+        * Set to ETrue when copy starts and EFalse when copying ends.
+        */
+        TBool iIsCopying;
+        
+        /**
+        * Space for the one file block. Own
+        */
+        HBufC8* iFileBlockBuffer;
+
+#ifdef _DEBUG
+        /**
+        * Used to calculate copying speed.
+        */
+        TTime iStartTime;
+#endif        
+    };
+
+#endif   // VCXMYVIDEOSASYNCFILECOPY_H
+
+