palm-os-sdk/PalmOne/Samples/Conduit/MLConduit/MLConduitBackupMgr.cpp

245 lines
7.4 KiB
C++

/*****************************************************************************
*
* Generic Conduit CMLConduitBackupMgr Src File
*
****************************************************************************/
#define ASSERT(f) ((void)0)
#define TRACE0(sz)
#include <windows.h>
#include <string.h>
#include <stdio.h>
#ifdef METROWERKS_WIN
#include <wmem.h>
#else
#include <memory.h>
#endif
#include <sys/stat.h>
#include <TCHAR.H>
#include <syncmgr.h>
#include "MLConduitBackupMgr.h"
#include <Pgenerr.h>
/******************************************************************************
*
* Class: CMLConduitBackupMgr
*
* Method: Constructor
*
* Description: This method initial class data. This class is used to
* backup the main database. This backup copy is used during
* slow syncs to determine which records have been modified
* on the Palm organizer.
*
* Parameter(s): szDbName - a pointer to a character buffer specifying the name
* of the database associated with this archive.
* pFileName - a pointer to a character buffer specifying the name
* of the database to save to.
* pDirName - a pointer to a character buffer specifying the name
* of the directory where the database is stored.
* syncType - a enum value specifying what type of synchronization
* is to be performed.
*
* Return Value(s): None.
*
* Revision History:
*
* Date Name Description
* ----------------------------------------------------------
* 03/25/98 KRM initial revision
*
*****************************************************************************/
CMLConduitBackupMgr::CMLConduitBackupMgr(CPLogging *pLogging, DWORD dwGenericFlags, char *szDbName, TCHAR *pFileName, TCHAR *pDirName, eSyncTypes syncType)
: CMLConduitPCMgr(pLogging, dwGenericFlags, szDbName, pFileName, pDirName, syncType)
{
TRACE0("CMLConduitBackupMgr Constructor\n");
// change the name of the file to the name of the backup file.
//
_tcscpy(m_szRealDb, m_szDataFile);
char *pDot = _tcsrchr(m_szDataFile, '.');
if (!pDot){
_tcscat(m_szDataFile, ".BAK");
} else {
char *pSlash = _tcsrchr(m_szDataFile, '\\');
if ((pSlash) && (pSlash > pDot)) // just tack on the extension
_tcscat(m_szDataFile, ".BAK");
else { // set the dot to null and cat on the extension.
*pDot = '\0';
_tcscat(m_szDataFile, ".BAK");
}
}
}
/******************************************************************************
*
* Class: CMLConduitBackupMgr
*
* Method: Destructor
*
* Description: This method frees any allocated objects
*
* Parameter(s): None.
*
* Return Value(s): None.
*
* Revision History:
*
* Date Name Description
* ----------------------------------------------------------
* 03/25/98 KRM initial revision
*
*****************************************************************************/
CMLConduitBackupMgr::~CMLConduitBackupMgr()
{
TRACE0("CMLConduitBackupMgr Destructor\n");
}
/******************************************************************************
*
* Class: CMLConduitBackupMgr
*
* Method: Close()
*
* Description: This method closes the backup database. Since the PostSync()
* method just copies the normal database, there is no reason
* to update the backup database here.
*
* Parameter(s): bDontUpdate - an ignored boolean.
*
* Return Value(s): 0 - no error
* <0 - error code.
*
* Revision History:
*
* Date Name Description
* ----------------------------------------------------------
* 03/25/98 KRM initial revision
*
*****************************************************************************/
long CMLConduitBackupMgr::Close(BOOL bDontUpdate)
{
long retval = CloseDB(TRUE);
return retval;
}
/******************************************************************************
*
* Class: CMLConduitBackupMgr
*
* Method: PostSync()
*
* Description: This method does closing type functions on the backup
* Database. In this case, it closes the current open database
* and then File copies the real database on top of the
* old backup file.
*
* Parameter(s): None.
*
* Return Value(s): 0 - no error
* <0 - error code.
*
* Revision History:
*
* Date Name Description
* ----------------------------------------------------------
* 03/25/98 KRM initial revision
*
*****************************************************************************/
long CMLConduitBackupMgr::PostSync(void)
{
long retval = CloseDB(TRUE);
if (retval)
return retval;
// copy the PC DB to the bak file.
BOOL bSuccess = CopyFile(m_szRealDb, m_szDataFile, FALSE);
if (bSuccess)
return 0;
return GEN_ERR_UNABLE_TO_SAVE_BACKUP;
}
/******************************************************************************
*
* Class: CMLConduitBackupMgr
*
* Method: OpenDB()
*
* Description: This protected method is used to retrieve the database from
* its storage medium. For backup database, this retrieval is
* only performed on the start of a slow sync.
* In all over cases, the database is not retrieved.
*
* Parameter(s): None.
*
* Return Value(s): 0 - no error
* <0 - error code.
*
* Revision History:
*
* Date Name Description
* ----------------------------------------------------------
* 03/25/98 KRM initial revision
*
*****************************************************************************/
long CMLConduitBackupMgr::OpenDB(void)
{
long retval = 0;
// only open and read the backup file in a slow sync.
if ((m_SyncType == eSlow) && (m_bStartSync)) {
retval = Open(eRead);
if ((retval) && (retval == GEN_ERR_UNABLE_TO_OPEN_FILE)) {
// if there is no backup file, don't worry about it
return 0;
}
if (!retval){ // Fixed 3/25/99 KRM
retval = PreSync();
}
}
return retval;
}
/******************************************************************************
*
* Class: CMLConduitBackupMgr
*
* Method: PreSync()
*
* Description: This method does initialization actions with the Backup DB. If a database
* is access in memory, this method will load the database into memory. For backup
* database, this retrieval is only performed on the
* start of a slow sync.
*
* Parameter(s): None.
*
* Return Value(s): 0 - no error
* <0 - error code.
*
* Revision History:
*
* Date Name Description
* ----------------------------------------------------------
* 03/25/98 KRM initial revision
*
*****************************************************************************/
long CMLConduitBackupMgr::PreSync(void)
{
long retval = 0;
if (m_bAlreadyLoaded)
return 0;
m_bAlreadyLoaded = TRUE;
// only open and read the backup file in a slow sync.
if (m_SyncType == eSlow) {
retval = RetrieveDB();
if ((retval ) && (retval == GEN_ERR_INVALID_DB)){
// if there is no backup file, don't worry about it
retval = 0;
}
}
return retval;
}