--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/livetvutils/inc/CIptvEpgFileSwapper.h Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,152 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+
+#ifndef __CIPTVEPGFILESWAPPER_H
+#define __CIPTVEPGFILESWAPPER_H
+
+// System includes
+#include <e32base.h> // For CActive
+#include <f32file.h> // For RFs
+//#include <babackup.h> // F
+
+// Forward declarations
+class CBaBackupSessionWrapper;
+class MIptvEpgFileSwapObserver;
+
+/**
+* Class to replace given old file with given new file.
+* This class takes care of requesting to close affected files by
+* using CBaBackupSessionWrapper and monitors the state of those two files.
+* When both files are not open by any other instance anymore this class
+* performs the file switching in it's RunL method and after that signalizes
+* the observers via CBaBackupSessionWrapper that they are allowed to re-open
+* the files for reading and writing.
+*/
+class CIptvEpgFileSwapper : public CActive
+ {
+ public:
+ /**
+ * Symbian two phace constructor.
+ * @param aOldFileName Name of the file to be replaced
+ * @param aNewFileName Name of the file to be used to replace aOldFileName
+ * @return Pointer to newly created instance of CIptvEpgFileSwapper object
+ */
+ IMPORT_C static CIptvEpgFileSwapper* NewL( const TFileName& aOldFileName,
+ const TFileName& aNewFileName,
+ MIptvEpgFileSwapObserver& aSwapObserver );
+
+ /**
+ * Destructor
+ */
+ virtual ~CIptvEpgFileSwapper();
+
+ public:
+ /**
+ * Method to initiate file swapping process. This method signalizes the
+ * backupwrapper to ask all the backup observers for aOldFileName and aNewFilename
+ * to release their handles to the files and sets this object to active state.
+ * @param None
+ * @return None
+ */
+ IMPORT_C void SwapFilesL();
+
+ private:
+ /**
+ * Default constructor
+ * @param aOldFileName Name of the file to be replaced
+ * @param aNewFileName Name of the file to be used to replace aOldFileName
+ * @param aSwapObserver Reference to a class that observes the file swapping
+ * @return None
+ */
+ CIptvEpgFileSwapper( const TFileName& aOldFileName,
+ const TFileName& aNewFileName,
+ MIptvEpgFileSwapObserver& aSwapObserver );
+
+ /**
+ * Symbian second phase constructor containing the code that might leave
+ * during instantiation of this class.
+ * @param None
+ * @return None
+ */
+ void ConstructL();
+
+ /**
+ * Method that calls RestartFile method of CBaBackupSessionWrapper to allow
+ * observers to re-establish the connections to the files.
+ * @param None
+ * @return None
+ */
+ void ReleaseFileLocks();
+
+ private: // From CActive
+ /**
+ * Overwritten error handling method to get called when active scheduler catches
+ * leave in this active object.
+ * @param aError Symbian error code for the occured error
+ * @return KErrNone if error was handled by this method. If return value is
+ * something else but KErrNone, active scheduler will panic.
+ */
+ TInt RunError( TInt aError );
+
+ /**
+ * Method to get called when active object request has been completed.
+ * @param None
+ * @return None
+ */
+ void RunL();
+
+ /**
+ * Method to handle actual actions required after Cancel-method has been called.
+ */
+ void DoCancel();
+
+ private: // instance variables
+ /**
+ * Handle to the file server session
+ */
+ RFs iFs;
+ /**
+ * Timer to use when monitoring open files
+ */
+ RTimer iTimeWaster;
+
+ /**
+ * Name of the old file that is to be replaced
+ */
+ TFileName iOldFileName;
+
+ /**
+ * Name of the file to be used to replace iOldFileName
+ */
+ TFileName iNewFileName;
+
+ /**
+ * Backup session to signalize all observers to release handle to
+ * iOldFileName and iNewFileName
+ */
+ CBaBackupSessionWrapper* iBackupWrapper;
+
+ /**
+ * Reference to the class that observes the file swapping
+ */
+ MIptvEpgFileSwapObserver& iSwapObserver;
+
+ TInt iSwapTriesAmount;
+ };
+
+#endif // __CIPTVEPGFILESWAPPER_H