|
// OIMOBOXWatchDirDlg.cpp : implementation file
|
//
|
|
#include "stdafx.h"
|
#include "OIMOBOXWatchDir.h"
|
#include "OIMOBOXWatchDirDlg.h"
|
#include "HighTime.h"
|
#include "Toolhelp.h"
|
#include "NetDiskWebCMgr.h"
|
#ifdef _DEBUG
|
#define new DEBUG_NEW
|
#endif
|
|
|
#if defined DEBUG || defined _DEBUG
|
const TCHAR g_MainProcess[] = _T("mbcUD.exe");
|
#else
|
const TCHAR g_MainProcess[] = _T("mbcU.exe");
|
#endif
|
|
// COIMOBOXWatchDirDlg dialog
|
|
#define TIMER_DEAL_WATCHINGDIRITEM 1
|
#define TIME_DEAL_WATCHINGDIRITEM 2000
|
|
|
#define TIMER_CHECK_MOBOXWATCHUSER_CHANGE 2
|
#define TIME_CHECK_MOBOXWATCHUSER_CHANGE 10 * 1000
|
|
#define TIMER_CHECK_MOBOXWATCHFILE_CHANGE 3
|
#define TIME_CHECK_MOBOXWATCHFILE_CHANGE 30 * 1000
|
|
#define TIMER_FIRSTCHECK_NETDISKCRUN 4
|
#define TIME_FIRSTCHECK_NETDISKCRUN 60 * 1000
|
#define TIMER_CHECK_NETDISKCRUN 5
|
#define TIME_CHECK_NETDISKCRUN 5 *60 * 1000
|
|
COIMOBOXWatchDirDlg::COIMOBOXWatchDirDlg(CWnd* pParent /*=NULL*/)
|
: CDialogEx(COIMOBOXWatchDirDlg::IDD, pParent)
|
{
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
m_strLoginName = _T("");
|
m_strServerID = _T("");
|
m_hMoboxCheckChangeThread= INVALID_HANDLE_VALUE;
|
m_hExitEvent = NULL;
|
m_bFirstUnlockDMSDocs = true;
|
}
|
|
void COIMOBOXWatchDirDlg::DoDataExchange(CDataExchange* pDX)
|
{
|
CDialogEx::DoDataExchange(pDX);
|
}
|
|
BEGIN_MESSAGE_MAP(COIMOBOXWatchDirDlg, CDialogEx)
|
ON_WM_PAINT()
|
ON_WM_QUERYDRAGICON()
|
ON_WM_TIMER()
|
ON_WM_DESTROY()
|
END_MESSAGE_MAP()
|
|
|
// COIMOBOXWatchDirDlg message handlers
|
|
BOOL COIMOBOXWatchDirDlg::OnInitDialog()
|
{
|
CDialogEx::OnInitDialog();
|
|
// Set the icon for this dialog. The framework does this automatically
|
// when the application's main window is not a dialog
|
SetIcon(m_hIcon, TRUE); // Set big icon
|
SetIcon(m_hIcon, FALSE); // Set small icon
|
|
// TODO: Add extra initialization here
|
m_dirChangeHandler.m_pServiceMOBOX = this;
|
m_mapMoboxWatchingDir.RemoveAll();
|
m_bFirstUnlockDMSDocs = true;
|
CString strUser;
|
CString strServerID;
|
GetBackupDirWatchInfo(strUser, strServerID);
|
if(strServerID.IsEmpty() ||strUser.IsEmpty() )
|
{
|
IsReloadBackupDirWatchInfo();
|
SetTimer(TIMER_CHECK_MOBOXWATCHUSER_CHANGE, TIME_CHECK_MOBOXWATCHUSER_CHANGE, NULL);
|
return FALSE;
|
}
|
m_strLoginName = strUser;
|
m_strServerID = strServerID;
|
m_arBackupDir.RemoveAll();
|
if (!m_mgrDirectoryChange.OpenDB(m_strLoginName,_T(""), m_strServerID))
|
{
|
IsReloadBackupDirWatchInfo();
|
SetTimer(TIMER_CHECK_MOBOXWATCHUSER_CHANGE, TIME_CHECK_MOBOXWATCHUSER_CHANGE, NULL);
|
return FALSE;
|
}
|
BOOL bSynchronizeDir = FALSE;
|
|
m_arBackupDir.RemoveAll();
|
CString strDir = _T( "" );
|
CString strFilter = _T( "*.*" );
|
m_mgrDirectoryChange.GetBackupDir(m_arBackupDir );
|
|
|
//m_arBackupDir.Add(_T("F:\\mbcWatch"));
|
|
for(int i = 0; i < m_arBackupDir.GetCount(); i++)
|
{
|
strDir = m_arBackupDir.GetAt(i);
|
if ( ERROR_INVALID_PARAMETER != m_dirWatcher.WatchDirectory( strDir,
|
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_FILE_NAME ,
|
&m_dirChangeHandler,
|
TRUE,
|
strFilter ) )
|
{
|
bSynchronizeDir = TRUE;
|
}
|
}
|
if(bSynchronizeDir)
|
{
|
SetTimer(TIMER_DEAL_WATCHINGDIRITEM, TIME_DEAL_WATCHINGDIRITEM, NULL);
|
}
|
if(m_hExitEvent == NULL)
|
{
|
m_hExitEvent = CreateEvent(NULL, TRUE, FALSE, _T("MOBOXWatchDir_Exit"));
|
}
|
else
|
::ResetEvent( m_hExitEvent );
|
IsReloadBackupDirWatchInfo();
|
SetTimer(TIMER_CHECK_MOBOXWATCHUSER_CHANGE, TIME_CHECK_MOBOXWATCHUSER_CHANGE, NULL);
|
unsigned int nThreadID;
|
m_hMoboxCheckChangeThread = (HANDLE)::_beginthreadex(0, 0, ThreadFunctionCheckChangeInfo, (void*)this, 0, &nThreadID);
|
return TRUE; // return TRUE unless you set the focus to a control
|
}
|
|
// If you add a minimize button to your dialog, you will need the code below
|
// to draw the icon. For MFC applications using the document/view model,
|
// this is automatically done for you by the framework.
|
|
void COIMOBOXWatchDirDlg::OnPaint()
|
{
|
if (IsIconic())
|
{
|
CPaintDC dc(this); // device context for painting
|
|
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
|
|
// Center icon in client rectangle
|
int cxIcon = GetSystemMetrics(SM_CXICON);
|
int cyIcon = GetSystemMetrics(SM_CYICON);
|
CRect rect;
|
GetClientRect(&rect);
|
int x = (rect.Width() - cxIcon + 1) / 2;
|
int y = (rect.Height() - cyIcon + 1) / 2;
|
|
// Draw the icon
|
dc.DrawIcon(x, y, m_hIcon);
|
}
|
else
|
{
|
CDialogEx::OnPaint();
|
}
|
}
|
|
// The system calls this function to obtain the cursor to display while the user drags
|
// the minimized window.
|
HCURSOR COIMOBOXWatchDirDlg::OnQueryDragIcon()
|
{
|
return static_cast<HCURSOR>(m_hIcon);
|
}
|
CString COIMOBOXWatchDirDlg::GetFileType( CString strFileName )
|
{
|
CString strExt;
|
int nPos;
|
|
strExt.Empty( );
|
nPos = strFileName.ReverseFind( _T( '.' ) );
|
if ( -1 != nPos )
|
strExt = strFileName.Mid( nPos + 1 );
|
|
return strExt;
|
}
|
CString COIMOBOXWatchDirDlg::GetFileName( CString strFilePathName )
|
{
|
int nPos;
|
CString strFileTitle;
|
BOOL bIsFolder = false;
|
|
strFilePathName.Replace( '/' , '\\' );
|
if ( strFilePathName.IsEmpty() )
|
return _T( "" );
|
|
strFileTitle = strFilePathName;
|
if ( strFileTitle.Right( 1 ) == _T( "\\" ) )
|
{
|
bIsFolder = true;
|
strFileTitle.TrimRight( _T("\\") );
|
}
|
nPos = strFileTitle.ReverseFind( '\\' );
|
if ( nPos >= 0 )
|
strFileTitle = strFileTitle.Mid( nPos + 1 );
|
if ( bIsFolder )
|
strFileTitle += _T( "\\" );
|
return strFileTitle;
|
}
|
BOOL COIMOBOXWatchDirDlg::On_FileAdded(CString strFilePath)
|
{
|
WATCHINGDIR_ITEM item;
|
CString strLog;
|
strLog.Format(_T("On_FileAdded:%s"),strFilePath);
|
WriteLog(strLog);
|
item.dwFileActionTickCount = ::GetTickCount();
|
item.nFileActionType = FILE_ACTION_ADDED;
|
m_mapMoboxWatchingDir.SetAt(strFilePath,item );
|
return TRUE;
|
}
|
BOOL COIMOBOXWatchDirDlg::On_FileRemoved(CString strFilePath)
|
{
|
CString strLog;
|
strLog.Format(_T("On_FileRemoved:%s"), strFilePath);
|
WriteLog(strLog);
|
WATCHINGDIR_ITEM item;
|
if( m_mapMoboxWatchingDir.Lookup(strFilePath, item))
|
{
|
m_mapMoboxWatchingDir.RemoveKey(strFilePath);
|
}
|
else
|
{
|
WATCHINGDIR_ITEM item;
|
item.dwFileActionTickCount = ::GetTickCount();
|
item.nFileActionType = FILE_ACTION_REMOVED;
|
m_mapMoboxWatchingDir.SetAt(strFilePath,item );
|
}
|
return TRUE;
|
}
|
BOOL COIMOBOXWatchDirDlg::On_FileNameChanged(CString strOldFileName, CString strNewFileName )
|
{
|
WATCHINGDIR_ITEM item;
|
CString strParGUID;
|
CString strGUID;
|
bool bIsModify = false;
|
bool bIsNew = false;
|
|
CString strLog;
|
strLog.Format(_T("On_FileNameChanged:%s -- %s"), strOldFileName, strNewFileName);
|
WriteLog(strLog);
|
|
if( m_mapMoboxWatchingDir.Lookup(strOldFileName, item))
|
{
|
if ( item.nFileActionType == FILE_ACTION_MODIFIED)
|
{
|
bIsModify = true;
|
}
|
if ( item.nFileActionType == FILE_ACTION_ADDED)
|
{
|
bIsNew = true;
|
}
|
m_mapMoboxWatchingDir.RemoveKey(strOldFileName);
|
}
|
CString strFileTime;
|
CHighTime dtFileTime;
|
CFileStatus statusFile;
|
CHighTime dtCurrentTime = CHighTime::GetPresentTime();;
|
CFile::GetStatus( strNewFileName, statusFile );
|
strFileTime = statusFile.m_mtime.Format( _T("%Y-%m-%d %H:%M:%S"));
|
BOOL bNeedUpload = TRUE;
|
CString strFileExt = GetFileType( strNewFileName );
|
strFileExt.MakeLower();
|
strFileExt.TrimLeft(_T("."));
|
if(strFileExt.Compare(_T("xls")) == 0 || strFileExt.Compare(_T("xlsx")) == 0 )
|
{
|
CHighTime dtModifyTime;
|
CHighTime dtAccessTime;
|
CHighTime dtCreateTime;
|
CHighTimeSpan htsTemp(0,0,0,5);
|
dtAccessTime = statusFile.m_atime;
|
dtModifyTime = statusFile.m_mtime;
|
dtCreateTime = statusFile.m_ctime;
|
if(dtModifyTime > dtAccessTime)
|
{
|
if(dtAccessTime < dtModifyTime - htsTemp)
|
bNeedUpload = FALSE;
|
else
|
{
|
if( dtModifyTime< dtCurrentTime - htsTemp)
|
bNeedUpload = FALSE;
|
else
|
{
|
if( dtCreateTime > dtAccessTime - htsTemp)
|
bNeedUpload = FALSE;
|
}
|
}
|
}
|
else
|
{
|
if(dtModifyTime < dtAccessTime - htsTemp)
|
bNeedUpload = FALSE;
|
else
|
{
|
if( dtAccessTime< dtCurrentTime - htsTemp)
|
bNeedUpload = FALSE;
|
else
|
{
|
if( dtCreateTime > dtModifyTime - htsTemp)
|
bNeedUpload = FALSE;
|
}
|
}
|
}
|
if ( bNeedUpload )
|
{
|
if ( statusFile.m_size > 0)
|
{
|
m_mgrDirectoryChange.InsertChangeDir(strNewFileName,CMD_BACKUPDIR_MODIFY);
|
}
|
}
|
else
|
{
|
if ( m_mapMoboxWatchingDir.Lookup(strOldFileName,item) )
|
{
|
if(item.nFileActionType == FILE_ACTION_RENAMED_NEW_NAME)
|
{
|
m_mapMoboxWatchingDir.RemoveKey(strOldFileName);
|
m_mgrDirectoryChange.InsertChangeDir(item.strParam,CMD_BACKUPDIR_RENAME,strNewFileName);
|
return TRUE;
|
}
|
}
|
item.dwFileActionTickCount = ::GetTickCount();
|
item.nFileActionType = FILE_ACTION_RENAMED_OLD_NAME;
|
item.strParam = strNewFileName;
|
m_mapMoboxWatchingDir.SetAt(strOldFileName,item );
|
}
|
}
|
else
|
{
|
//CHighTime dtModifyTime;
|
//CHighTimeSpan htsTemp(0,0,0,5);
|
//dtModifyTime = statusFile.m_mtime;
|
//if( dtModifyTime < dtCurrentTime - htsTemp)
|
//{
|
// bNeedUpload = FALSE;
|
// m_mgrDirectoryChange.InsertChangeDir(strOldFileName,CMD_BACKUPDIR_RENAME,strNewFileName);
|
//}
|
//else
|
//{
|
CString strFileExt2 = GetFileType( strOldFileName );
|
strFileExt2.MakeLower();
|
strFileExt2.TrimLeft(_T("."));
|
if(strFileExt2.Compare(_T("xls")) == 0 || strFileExt2.Compare(_T("xlsx")) == 0 )
|
{
|
item.dwFileActionTickCount = ::GetTickCount();
|
item.nFileActionType = FILE_ACTION_RENAMED_NEW_NAME;
|
item.strParam = strOldFileName;
|
m_mapMoboxWatchingDir.SetAt(strNewFileName,item );
|
}
|
else
|
{
|
CString strOldName = GetFileName(strOldFileName);
|
CString strNewName = GetFileName(strNewFileName);
|
CString strNewFileExt = GetFileType( strNewFileName );
|
strNewFileExt.MakeLower();
|
strNewFileExt.TrimLeft(_T("."));
|
if( !(strNewName.Find(_T("~")) == 0 && strNewFileExt == _T("tmp") ))
|
{
|
if(bIsNew)
|
{
|
item.dwFileActionTickCount = ::GetTickCount();
|
item.nFileActionType = FILE_ACTION_ADDED;
|
item.strParam = strNewFileName;
|
m_mapMoboxWatchingDir.SetAt(strNewFileName,item );
|
}
|
else if(bIsModify)
|
{
|
m_mgrDirectoryChange.InsertChangeDir(strOldFileName,CMD_BACKUPDIR_RENAME,strNewFileName);
|
item.dwFileActionTickCount = ::GetTickCount();
|
item.nFileActionType = FILE_ACTION_MODIFIED;
|
item.strParam = strNewFileName;
|
m_mapMoboxWatchingDir.SetAt(strNewFileName,item );
|
}
|
else
|
m_mgrDirectoryChange.InsertChangeDir(strOldFileName,CMD_BACKUPDIR_RENAME,strNewFileName);
|
}
|
}
|
//}
|
}
|
return TRUE;
|
}
|
BOOL COIMOBOXWatchDirDlg::On_FileModified(CString strFilePath)
|
{
|
CString strLog;
|
strLog.Format(_T("On_FileModified:%s"), strFilePath);
|
WriteLog(strLog);
|
|
DWORD dwAttr= ::GetFileAttributes(strFilePath);
|
if( (dwAttr != INVALID_FILE_ATTRIBUTES ) && (dwAttr & FILE_ATTRIBUTE_DIRECTORY) )
|
{
|
return TRUE;
|
}
|
WATCHINGDIR_ITEM item;
|
if( !m_mapMoboxWatchingDir.Lookup(strFilePath, item))
|
{
|
item.dwFileActionTickCount = ::GetTickCount();
|
item.nFileActionType = FILE_ACTION_MODIFIED;
|
m_mapMoboxWatchingDir.SetAt(strFilePath,item );
|
}
|
else
|
{
|
if(item.nFileActionType != FILE_ACTION_ADDED)
|
{
|
item.dwFileActionTickCount = ::GetTickCount();
|
item.nFileActionType = FILE_ACTION_MODIFIED;
|
m_mapMoboxWatchingDir.SetAt(strFilePath,item );
|
}
|
}
|
return TRUE;
|
}
|
|
|
void COIMOBOXWatchDirDlg::GetBackupDirWatchInfo(CString &strUser, CString &strServerID)
|
{
|
CString strInitFile;
|
CString strValue;
|
TCHAR szValue[1204] = { 0 };
|
|
strUser = _T("");
|
strServerID = _T("");
|
strInitFile.Format( _T("%s\\Data\\%s"), m_mgrDirectoryChange.GetModulePath() , INI_MOBOX_WATCHINGFILE );
|
GetPrivateProfileString(MOBOX_BACKUPATTR_SECTION, MOBOX_BACKUPATTR_SECTION_BACKUPDIRWATCH,_T(""),szValue,1204, strInitFile );
|
strValue = szValue;
|
if ( GetElementItem(strValue,strServerID, _T(";")))
|
{
|
strUser = strValue;
|
}
|
}
|
|
BOOL COIMOBOXWatchDirDlg::IsReloadBackupDirWatchInfo()
|
{
|
CString strInitFile;
|
CString strValue;
|
|
strInitFile.Format( _T("%s\\Data\\%s"), m_mgrDirectoryChange.GetModulePath() , INI_MOBOX_WATCHINGFILE );
|
int nFlag = GetPrivateProfileInt(MOBOX_BACKUPATTR_SECTION, MOBOX_BACKUPATTR_SECTION_RELOADBACKUPDIR,0,strInitFile );
|
if(nFlag > 0 )
|
{
|
strValue = _T("0");
|
WritePrivateProfileString( MOBOX_BACKUPATTR_SECTION, MOBOX_BACKUPATTR_SECTION_RELOADBACKUPDIR, strValue ,strInitFile );
|
return TRUE;
|
}
|
return FALSE;
|
}
|
|
|
BOOL COIMOBOXWatchDirDlg::GetBackupDirWatchLastTime(CString &strTime)
|
{
|
CString strInitFile;
|
TCHAR szValue[1204] = { 0 };
|
|
strInitFile.Format( _T("%s\\Data\\%s"), m_mgrDirectoryChange.GetModulePath() , INI_MOBOX_WATCHINGFILE );
|
GetPrivateProfileString(MOBOX_BACKUPATTR_SECTION, MOBOX_BACKUPATTR_SECTION_WATCHLASTTIME,_T(""),szValue,1204, strInitFile );
|
strTime = szValue;
|
if(strTime.IsEmpty())
|
{
|
CString strKey;
|
strKey.Format(_T("%s_%s"),m_strServerID,m_strLoginName);
|
GetPrivateProfileString(MOBOX_BACKUPWATCHTIME_SECTION, strKey,_T(""),szValue,1204, strInitFile );
|
strTime = szValue;
|
}
|
return TRUE;
|
}
|
|
void COIMOBOXWatchDirDlg::SetBackupDirWatchLastTime(CString strTime)
|
{
|
CString strInitFile;
|
CString strKey;
|
strKey.Format(_T("%s_%s"),m_strServerID,m_strLoginName);
|
strInitFile.Format( _T("%s\\Data\\%s"), m_mgrDirectoryChange.GetModulePath() , INI_MOBOX_WATCHINGFILE );
|
WritePrivateProfileString( MOBOX_BACKUPATTR_SECTION, MOBOX_BACKUPATTR_SECTION_WATCHLASTTIME, strTime ,strInitFile );
|
WritePrivateProfileString( MOBOX_BACKUPWATCHTIME_SECTION, strKey, strTime ,strInitFile );
|
}
|
|
BOOL COIMOBOXWatchDirDlg::GetElementItem(CString &strStuff, CString &strItem,CString strApart)
|
{
|
if( strStuff.GetLength() == 0 )
|
{
|
strItem = _T("");
|
return FALSE;
|
}
|
int pos = strStuff.Find(strApart);
|
if( pos >= 0 )
|
{
|
strItem = strStuff.Left(pos);
|
strStuff = strStuff.Right( strStuff.GetLength() - pos - strApart.GetLength() );
|
}
|
else
|
{
|
strItem = strStuff;
|
strStuff = _T("");
|
}
|
return TRUE;
|
}
|
|
void COIMOBOXWatchDirDlg::OnTimer(UINT_PTR nIDEvent)
|
{
|
// TODO: Add your message handler code here and/or call default
|
if ( nIDEvent == TIMER_DEAL_WATCHINGDIRITEM )
|
{
|
bool bDirIsNew = false;
|
CString strParGUID;
|
CString strGUID;
|
POSITION pos;
|
CString strFileName;
|
WATCHINGDIR_ITEM item;
|
DWORD dwTickCount;
|
|
for(pos = m_mapMoboxWatchingDir.GetStartPosition(); pos;)
|
{
|
m_mapMoboxWatchingDir.GetNextAssoc(pos, strFileName, item);
|
dwTickCount = ::GetTickCount();
|
if(dwTickCount - item.dwFileActionTickCount > 2000)
|
{
|
m_mapMoboxWatchingDir.RemoveKey(strFileName);
|
if ( item.nFileActionType == FILE_ACTION_ADDED)
|
{
|
CString strName = GetFileName(strFileName);
|
CString strFileExt = GetFileType(strFileName);
|
strFileExt.TrimLeft(_T("."));
|
strFileExt.MakeLower();
|
if( !(strName.Find(_T("~$")) == 0 || (strName.Find(_T("~")) == 0 && strFileExt == _T("tmp"))))
|
{
|
m_mgrDirectoryChange.InsertChangeDir(strFileName,CMD_BACKUPDIR_NEW);
|
}
|
}
|
else if ( item.nFileActionType == FILE_ACTION_MODIFIED)
|
{
|
CString strName = GetFileName(strFileName);
|
CString strFileExt = GetFileType(strFileName);
|
strFileExt.TrimLeft(_T("."));
|
strFileExt.MakeLower();
|
if( !(strName.Find(_T("~$")) == 0 || (strName.Find(_T("~")) == 0 && strFileExt == _T("tmp"))))
|
{
|
CString strFileTime;
|
CHighTime dtFileTime;
|
CFileStatus statusFile;
|
CHighTime dtCurrentTime = CHighTime::GetPresentTime();;
|
CFile::GetStatus(strFileName, statusFile );
|
strFileTime = statusFile.m_mtime.Format( _T("%Y-%m-%d %H:%M:%S"));
|
dtFileTime = statusFile.m_mtime;
|
|
/*BOOL bNeedUpload = TRUE;
|
CString strFileExt = GetFileType( strFileName );
|
strFileExt.MakeLower();
|
strFileExt.TrimLeft(_T("."));
|
if(strFileExt.Compare(_T("xls")) == 0 )
|
{
|
CHighTime dtModifyTime;
|
CHighTime dtAccessTime;
|
CHighTime dtCreateTime;
|
CHighTimeSpan htsTemp(0,0,0,5);
|
dtAccessTime = statusFile.m_atime;
|
dtModifyTime = statusFile.m_mtime;
|
dtCreateTime = statusFile.m_ctime;
|
CString strCurrentTime = dtCurrentTime.Format(_T("%Y-%m-%d %H:%M:%S"));
|
if(dtModifyTime > dtAccessTime)
|
{
|
if(dtAccessTime < dtModifyTime - htsTemp)
|
{
|
if(dtAccessTime)
|
bNeedUpload = FALSE;
|
}
|
else
|
{
|
if( dtModifyTime< dtCurrentTime - htsTemp)
|
bNeedUpload = FALSE;
|
else
|
{
|
if( dtCreateTime > dtAccessTime - htsTemp)
|
bNeedUpload = FALSE;
|
}
|
}
|
}
|
else
|
{
|
if(dtModifyTime < dtAccessTime - htsTemp)
|
bNeedUpload = FALSE;
|
else
|
{
|
if( dtAccessTime< dtCurrentTime - htsTemp)
|
bNeedUpload = FALSE;
|
else
|
{
|
if( dtCreateTime > dtModifyTime - htsTemp)
|
bNeedUpload = FALSE;
|
}
|
}
|
}
|
|
}
|
else
|
{
|
|
}*/
|
//if ( bNeedUpload )
|
{
|
m_mgrDirectoryChange.InsertChangeDir(strFileName,CMD_BACKUPDIR_MODIFY);
|
}
|
}
|
}
|
else if ( item.nFileActionType == FILE_ACTION_RENAMED_OLD_NAME)
|
{
|
CString strName = GetFileName(strFileName);
|
CString strFileExt = GetFileType(strFileName);
|
strFileExt.TrimLeft(_T("."));
|
strFileExt.MakeLower();
|
if( !(strName.Find(_T("~$")) == 0 || (strName.Find(_T("~")) == 0 && strFileExt == _T("tmp"))))
|
{
|
m_mgrDirectoryChange.InsertChangeDir(strFileName,CMD_BACKUPDIR_RENAME,item.strParam);
|
}
|
}
|
else if ( item.nFileActionType == FILE_ACTION_RENAMED_NEW_NAME)
|
{
|
CString strName = GetFileName(strFileName);
|
CString strFileExt = GetFileType(strFileName);
|
strFileExt.TrimLeft(_T("."));
|
strFileExt.MakeLower();
|
if( !(strName.Find(_T("~$")) == 0 || (strName.Find(_T("~")) == 0 && strFileExt == _T("tmp"))))
|
{
|
m_mgrDirectoryChange.InsertChangeDir(item.strParam,CMD_BACKUPDIR_RENAME,strFileName);
|
}
|
}
|
else if ( item.nFileActionType == FILE_ACTION_REMOVED)
|
{
|
CString strName = GetFileName(strFileName);
|
CString strFileExt = GetFileType(strFileName);
|
strFileExt.TrimLeft(_T("."));
|
strFileExt.MakeLower();
|
if( !(strName.Find(_T("~$")) == 0 || (strName.Find(_T("~")) == 0 && strFileExt == _T("tmp"))))
|
{
|
m_mgrDirectoryChange.InsertChangeDir(strFileName,CMD_BACKUPDIR_DELETE);
|
}
|
}
|
}
|
}
|
|
}
|
else if( TIMER_CHECK_MOBOXWATCHUSER_CHANGE == nIDEvent )
|
{
|
if(IsReloadBackupDirWatchInfo())
|
{
|
CString strUser;
|
CString strServerID;
|
GetBackupDirWatchInfo(strUser, strServerID);
|
if(strServerID.IsEmpty() ||strUser.IsEmpty() )
|
{
|
m_mgrDirectoryChange.CloseDB();
|
m_mapMoboxWatchingDir.RemoveAll();
|
m_dirWatcher.UnwatchAllDirectories();
|
m_strLoginName = strUser;
|
m_strServerID = strServerID;
|
WriteLog(_T("ûÓз¢ÏÖÒª¼à¿ØµÄÓû§ÐÅÏ¢"));
|
return;
|
}
|
|
BOOL bSynchronizeDir = FALSE;
|
m_arBackupDir.RemoveAll();
|
if(m_strLoginName.CompareNoCase(strUser) == 0 && m_strServerID.CompareNoCase(strServerID) == 0)
|
{
|
if( !m_mgrDirectoryChange.IsDBOpen())
|
{
|
if (!m_mgrDirectoryChange.OpenDB(m_strLoginName,_T(""), m_strServerID))
|
{
|
CString strLog;
|
strLog.Format(_T("´ò¿ª%sµÄÊý¾Ý¿âʧ°Ü"),m_strLoginName);
|
WriteLog(strLog);
|
return;
|
}
|
}
|
m_dirWatcher.UnwatchAllDirectories();
|
CString strDir = _T( "" );
|
CString strFilter = _T( "*.*" );
|
m_mgrDirectoryChange.GetBackupDir(m_arBackupDir );
|
for(int i = 0; i < m_arBackupDir.GetCount(); i++)
|
{
|
strDir = m_arBackupDir.GetAt(i);
|
if ( ERROR_INVALID_PARAMETER != m_dirWatcher.WatchDirectory( strDir,
|
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_FILE_NAME ,
|
&m_dirChangeHandler,
|
TRUE,
|
strFilter ) )
|
{
|
bSynchronizeDir = TRUE;
|
}
|
}
|
if(bSynchronizeDir)
|
{
|
KillTimer(TIMER_DEAL_WATCHINGDIRITEM);
|
SetTimer(TIMER_DEAL_WATCHINGDIRITEM, TIME_DEAL_WATCHINGDIRITEM, NULL);
|
}
|
else
|
{
|
KillTimer(TIMER_DEAL_WATCHINGDIRITEM);
|
}
|
}
|
else
|
{
|
::SetEvent( m_hExitEvent );
|
m_mgrDirectoryChange.CloseDB();
|
m_mapMoboxWatchingDir.RemoveAll();
|
m_dirWatcher.UnwatchAllDirectories();
|
m_strLoginName = strUser;
|
m_strServerID = strServerID;
|
if (!m_mgrDirectoryChange.OpenDB(m_strLoginName,_T(""), m_strServerID))
|
{
|
CString strLog;
|
strLog.Format(_T("´ò¿ª%sµÄÊý¾Ý¿âʧ°Ü"),m_strLoginName);
|
WriteLog(strLog);
|
return;
|
}
|
CString strDir = _T( "" );
|
CString strFilter = _T( "*.*" );
|
m_mgrDirectoryChange.GetBackupDir(m_arBackupDir );
|
for(int i = 0; i < m_arBackupDir.GetCount(); i++)
|
{
|
strDir = m_arBackupDir.GetAt(i);
|
if ( ERROR_INVALID_PARAMETER != m_dirWatcher.WatchDirectory( strDir,
|
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_FILE_NAME,
|
&m_dirChangeHandler,
|
TRUE,
|
strFilter ) )
|
{
|
bSynchronizeDir = TRUE;
|
}
|
}
|
|
if(bSynchronizeDir)
|
{
|
KillTimer(TIMER_DEAL_WATCHINGDIRITEM);
|
SetTimer(TIMER_DEAL_WATCHINGDIRITEM, TIME_DEAL_WATCHINGDIRITEM, NULL);
|
}
|
else
|
{
|
KillTimer(TIMER_DEAL_WATCHINGDIRITEM);
|
}
|
if(m_hMoboxCheckChangeThread != INVALID_HANDLE_VALUE)
|
{
|
WaitForSingleObject( m_hMoboxCheckChangeThread, INFINITE );
|
CloseHandle( m_hMoboxCheckChangeThread );
|
m_hMoboxCheckChangeThread = INVALID_HANDLE_VALUE;
|
}
|
::ResetEvent( m_hExitEvent );
|
unsigned int nThreadID;
|
m_hMoboxCheckChangeThread = (HANDLE)::_beginthreadex(0, 0, ThreadFunctionCheckChangeInfo, (void*)this, 0, &nThreadID);
|
}
|
|
}
|
}
|
else if( TIMER_CHECK_MOBOXWATCHFILE_CHANGE == nIDEvent )
|
{
|
CHighTime dtTime = CHighTime::GetPresentTime();
|
SetBackupDirWatchLastTime(dtTime.Format(_T("%Y-%m-%d %H:%M:%S")));
|
}
|
else if( TIMER_FIRSTCHECK_NETDISKCRUN == nIDEvent )
|
{
|
KillTimer(nIDEvent);
|
SetTimer(TIMER_CHECK_NETDISKCRUN,TIME_CHECK_NETDISKCRUN,NULL);
|
if(CheckProcessExist(g_MainProcess))
|
{
|
m_bFirstUnlockDMSDocs = false;
|
return;
|
}
|
unsigned int nThreadID;
|
::_beginthreadex(0, 0, ThreadFunctionUnlockDMSDocs, (void*)this, 0, &nThreadID);
|
|
}
|
else if( TIMER_CHECK_NETDISKCRUN == nIDEvent )
|
{
|
if(CheckProcessExist(g_MainProcess))
|
{
|
return;
|
}
|
unsigned int nThreadID;
|
::_beginthreadex(0, 0, ThreadFunctionUnlockDMSDocs, (void*)this, 0, &nThreadID);
|
}
|
|
CDialogEx::OnTimer(nIDEvent);
|
}
|
void COIMOBOXWatchDirDlg::OnDestroy()
|
{
|
KillTimer(TIMER_DEAL_WATCHINGDIRITEM);
|
KillTimer(TIMER_CHECK_MOBOXWATCHUSER_CHANGE);
|
KillTimer(TIMER_CHECK_MOBOXWATCHFILE_CHANGE);
|
if ( m_hExitEvent )
|
{
|
::SetEvent( m_hExitEvent );
|
::CloseHandle( m_hExitEvent );
|
m_hExitEvent = NULL;
|
}
|
if(m_hMoboxCheckChangeThread != INVALID_HANDLE_VALUE)
|
{
|
WaitForSingleObject( m_hMoboxCheckChangeThread, INFINITE );
|
CloseHandle( m_hMoboxCheckChangeThread );
|
m_hMoboxCheckChangeThread = INVALID_HANDLE_VALUE;
|
}
|
//SetEvent( m_hSvcStopEvent );
|
CDialog::OnDestroy();
|
|
// TODO: Add your message handler code here
|
}
|
|
bool COIMOBOXWatchDirDlg::CStringToAnsi( LPCTSTR pszT, LPSTR *ppszA )
|
{
|
ULONG cbAnsi, cCharacters;
|
|
if ( pszT == NULL )
|
{
|
*ppszA= NULL;
|
return false;
|
}
|
#ifdef _UNICODE
|
cCharacters = wcslen(pszT);
|
cbAnsi = ::WideCharToMultiByte( CP_ACP, 0, pszT, -1, NULL, 0, NULL, NULL );
|
*ppszA = (LPSTR) CoTaskMemAlloc(cbAnsi+1);
|
if ( NULL == *ppszA )
|
return false;
|
ZeroMemory(*ppszA,cbAnsi+1);
|
// Convert to ANSI.
|
if (0 == WideCharToMultiByte(CP_ACP, 0, pszT, cCharacters, *ppszA,
|
cbAnsi, NULL, NULL))
|
{
|
CoTaskMemFree(*ppszA);
|
*ppszA = NULL;
|
return false;
|
}
|
#else
|
cCharacters = strlen(pszT);
|
*ppszA = (LPSTR) CoTaskMemAlloc(cCharacters+1);
|
if ( NULL == *ppszA )
|
return false;
|
ZeroMemory(*ppszA,cCharacters+1);
|
memcpy(*ppszA,pszT,cCharacters);
|
#endif
|
return true;
|
}
|
|
// дÈÕÖ¾
|
void COIMOBOXWatchDirDlg::WriteLog( CString strLog )
|
{
|
//return;
|
CTime tmCurrent = CTime::GetCurrentTime();
|
CString strTime = tmCurrent.Format( _T(" %Y-%m-%d %H:%M:%S = ") );
|
CString strEnter = _T(" \r\n ");
|
CString strBuff;
|
LPSTR pDest ;
|
CFile file;
|
CString strLogFile;
|
CString strLogDir;
|
DWORD dwAttributes = DWORD(-1);
|
|
strLogDir.Format( _T("%s\\Log"),m_mgrDirectoryChange.GetModulePath());
|
dwAttributes = GetFileAttributes( strLogDir) ;
|
if(dwAttributes == DWORD(-1) || (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 )
|
::CreateDirectory( strLogDir, NULL );
|
strLogFile.Format( _T("%s\\MOBOXWatchDir.log"), strLogDir );
|
if ( !file.Open( strLogFile, CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate) )
|
{
|
return ;
|
}
|
file.Seek( 0, CFile::end );
|
|
strBuff.Format( _T("%s%s%s"), strTime, strLog,strEnter );
|
if ( CStringToAnsi(strBuff, &pDest))
|
{
|
file.Write( (void*)pDest, strlen(pDest));
|
CoTaskMemFree(pDest);
|
}
|
file.Close();
|
}
|
BOOL COIMOBOXWatchDirDlg::WatchBackupDirChange(CString strDir,CString strLastTime)
|
{
|
CString strTmpTime;
|
CString strTmpPath;
|
WIN32_FIND_DATA wfd;
|
CHighTime dtModifyTime;
|
CHighTime dtCreateTime;
|
CHighTime dtLastTime;
|
CHighTimeSpan dtSpanTime(0,8,0,0);
|
BOOL bRet = TRUE;
|
if( !strLastTime.IsEmpty())
|
dtLastTime.ParseDateTime(strLastTime);
|
strTmpPath.Format(_T("%s\\*.*"), strDir);
|
HANDLE hFind = FindFirstFile(strTmpPath,&wfd);
|
if(hFind == INVALID_HANDLE_VALUE)
|
{
|
return TRUE;
|
}
|
do
|
{
|
if ( m_hExitEvent == NULL )
|
{
|
bRet = FALSE;
|
break;
|
}
|
DWORD waitResult = ::WaitForSingleObject( m_hExitEvent, 200 );
|
if ( waitResult == WAIT_OBJECT_0 )
|
{
|
bRet = FALSE;
|
break;
|
}
|
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
{
|
if ( _tcscmp( wfd.cFileName, _T( ".." ) ) == 0
|
|| _tcscmp( wfd.cFileName, _T( "." ) ) == 0 )
|
continue ;
|
strTmpPath.Format(_T("%s\\%s"), strDir, wfd.cFileName);
|
dtCreateTime = wfd.ftCreationTime;
|
dtCreateTime += dtSpanTime;
|
strTmpTime = dtCreateTime.Format(_T("%Y-%m-%d %H:%M:%S"));
|
if(strLastTime.IsEmpty())
|
{
|
m_mgrDirectoryChange.InsertChangeDir(strTmpPath,CMD_BACKUPDIR_NEW);
|
}
|
else
|
{
|
if(dtLastTime < dtCreateTime)
|
{
|
m_mgrDirectoryChange.InsertChangeDir(strTmpPath,CMD_BACKUPDIR_NEW);
|
}
|
else
|
{
|
bRet = WatchBackupDirChange(strTmpPath,strLastTime);
|
if ( !bRet)
|
{
|
break;
|
}
|
}
|
}
|
}
|
else
|
{
|
dtCreateTime = wfd.ftCreationTime;
|
dtCreateTime += dtSpanTime;
|
dtModifyTime = wfd.ftLastWriteTime;
|
dtModifyTime += dtSpanTime;
|
strTmpTime = dtCreateTime.Format(_T("%Y-%m-%d %H:%M:%S"));
|
strTmpTime = dtModifyTime.Format(_T("%Y-%m-%d %H:%M:%S"));
|
strTmpPath.Format(_T("%s\\%s"), strDir, wfd.cFileName);
|
if(strLastTime.IsEmpty())
|
{
|
m_mgrDirectoryChange.InsertChangeDir(strTmpPath,CMD_BACKUPDIR_MODIFY);
|
}
|
else
|
{
|
if(dtLastTime < dtCreateTime || dtLastTime < dtModifyTime)
|
{
|
m_mgrDirectoryChange.InsertChangeDir(strTmpPath,CMD_BACKUPDIR_MODIFY);
|
}
|
}
|
}
|
}
|
while(FindNextFile(hFind,&wfd));
|
FindClose(hFind);
|
return bRet;
|
}
|
BOOL COIMOBOXWatchDirDlg::WatchBackupDirChange()
|
{
|
BOOL bRet = TRUE;
|
CString strLastTime;
|
CString strDir = _T( "" );
|
GetBackupDirWatchLastTime(strLastTime);
|
for(int i = 0; i < m_arBackupDir.GetCount(); i++)
|
{
|
if ( m_hExitEvent == NULL )
|
{
|
bRet = FALSE;
|
break;
|
}
|
DWORD waitResult = ::WaitForSingleObject( m_hExitEvent, 200 );
|
if ( waitResult == WAIT_OBJECT_0 )
|
{
|
bRet = FALSE;
|
break;
|
}
|
strDir = m_arBackupDir.GetAt(i);
|
bRet = WatchBackupDirChange(strDir, strLastTime);
|
if ( !bRet)
|
{
|
break;
|
}
|
}
|
CHighTime dtTime = CHighTime::GetPresentTime();
|
SetBackupDirWatchLastTime(dtTime.Format(_T("%Y-%m-%d %H:%M:%S")));
|
if(bRet)
|
{
|
KillTimer(TIMER_CHECK_MOBOXWATCHFILE_CHANGE);
|
SetTimer(TIMER_CHECK_MOBOXWATCHFILE_CHANGE, TIME_CHECK_MOBOXWATCHFILE_CHANGE, NULL);
|
}
|
return bRet;
|
}
|
unsigned int _stdcall COIMOBOXWatchDirDlg::ThreadFunctionCheckChangeInfo(void *pV)
|
{
|
COIMOBOXWatchDirDlg *pItem = NULL;
|
pItem = (COIMOBOXWatchDirDlg*)pV;
|
if ( pItem )
|
{
|
try
|
{
|
while( 1 )
|
{
|
pItem->WatchBackupDirChange();
|
break;
|
}
|
}
|
catch(...)
|
{
|
|
}
|
}
|
_endthreadex( 0 );
|
return 0;
|
}
|
BOOL COIMOBOXWatchDirDlg::CheckProcessExist( CString strProcess)
|
{
|
CToolhelp::EnableDebugPrivilege(TRUE);
|
|
CToolhelp toolhelp(TH32CS_SNAPPROCESS);
|
PROCESSENTRY32 pe = {sizeof(PROCESSENTRY32)};
|
BOOL bProcessExist = FALSE;
|
if( !toolhelp.ProcessFirst( &pe ) )
|
{
|
CToolhelp::EnableDebugPrivilege(FALSE);
|
return bProcessExist;
|
}
|
while( toolhelp.ProcessNext( &pe ) )
|
{
|
CString strExeFile = pe.szExeFile;
|
|
if( strProcess.CompareNoCase( strExeFile ) == 0 )
|
{
|
bProcessExist = TRUE;
|
break;
|
}
|
}
|
CToolhelp::EnableDebugPrivilege(FALSE);
|
return bProcessExist;
|
}
|
|
unsigned int _stdcall COIMOBOXWatchDirDlg::ThreadFunctionUnlockDMSDocs(void *pV)
|
{
|
COIMOBOXWatchDirDlg *pItem = NULL;
|
pItem = (COIMOBOXWatchDirDlg*)pV;
|
if ( pItem )
|
{
|
try
|
{
|
while( 1 )
|
{
|
pItem->UnlockUserDMSDocs();
|
break;
|
}
|
}
|
catch(...)
|
{
|
|
}
|
}
|
_endthreadex( 0 );
|
return 0;
|
}
|
void COIMOBOXWatchDirDlg::UnlockUserDMSDocs( )
|
{
|
CMapLoginInfo mapLoginUser;
|
if(m_bFirstUnlockDMSDocs)
|
{
|
m_bFirstUnlockDMSDocs = false;
|
GetLoginUserInfo(mapLoginUser);
|
EmptyLoginUserInfo();
|
}
|
CString strDBFile;
|
POSITION pos,pos2;
|
CString strKey;
|
CString strValue;
|
LGOINUSER_INFO item;
|
for(pos2 = mapLoginUser.GetStartPosition(); pos2; )
|
{
|
mapLoginUser.GetNextAssoc(pos2,strKey, item );
|
CDBConnect aConnect;
|
CMapStrToStr mapLockDoc;
|
strDBFile.Format( _T("%s\\%s\\%s_mb_watch.db"), CDirectoryChangeMgr::GetNetDiskDBWorkDir(),item.strLoginName, item.strServerID );
|
if( !CDirectoryChangeMgr::ExistFile( strDBFile ))
|
continue;
|
if ( !aConnect.Open( strDBFile ,_T("") ) )
|
continue;
|
GetBDLockDocs(&aConnect,mapLockDoc);
|
if(mapLockDoc.GetCount() > 0)
|
{
|
CNetDiskWebCMgr mgrNetDiskC;
|
mgrNetDiskC.SetServerInfo(item.strServerIp, item.nServerPort );
|
mgrNetDiskC.SetUserInfo(item.strLoginName, item.strLoginName,item.strSessionID );
|
mgrNetDiskC.SetUserSessionID(item.strSessionID );
|
mgrNetDiskC.SetAppType(APPFLAG_NETDISK);
|
for(pos = mapLockDoc.GetStartPosition(); pos; )
|
{
|
mapLockDoc.GetNextAssoc(pos,strKey, strValue );
|
mgrNetDiskC.DMS_UnlockDoc(strKey,_T("³ÌÐòÍ˳ö£¬Í³Ò»½âËø"));
|
}
|
RemoveLockDocsInfo(&aConnect);
|
}
|
}
|
}
|
|
void COIMOBOXWatchDirDlg::EmptyLoginUserInfo()
|
{
|
CString strInitFile;
|
CString strValue;
|
strInitFile.Format( _T("%s\\Data\\%s"), m_mgrDirectoryChange.GetModulePath() , INI_MOBOX_WATCHINGFILE );
|
WritePrivateProfileString( MOBOX_LOGININFO_SECTION, MOBOX_LOGININFO_SECTION_USERSERVER, _T("") ,strInitFile );
|
|
}
|
|
void COIMOBOXWatchDirDlg::GetLoginUserInfo(CMapLoginInfo &mapLoginUser)
|
{
|
CString strInitFile;
|
CString strValue;
|
CString strTemp;
|
CString strLoginInfo;
|
CString strKey;
|
TCHAR szValue[1024] = { 0 };
|
|
mapLoginUser.RemoveAll();
|
strInitFile.Format( _T("%s\\Data\\%s"), m_mgrDirectoryChange.GetModulePath() , INI_MOBOX_WATCHINGFILE );
|
GetPrivateProfileString(MOBOX_LOGININFO_SECTION, MOBOX_LOGININFO_SECTION_USERSERVER,_T(""),szValue,1024, strInitFile );
|
strValue = szValue;
|
if(strValue.IsEmpty())
|
return ;
|
while( !strValue.IsEmpty())
|
{
|
LGOINUSER_INFO item;
|
GetElementItem(strValue,strLoginInfo, _T("|"));
|
GetElementItem(strLoginInfo,strTemp, _T(";"));
|
if(strTemp.IsEmpty())
|
{
|
continue;
|
}
|
item.strServerIp = strTemp;
|
GetElementItem(strLoginInfo,strTemp, _T(";"));
|
if(strTemp.IsEmpty())
|
{
|
continue;
|
}
|
item.nServerPort = _tstol(strTemp);
|
if(item.nServerPort < 1)
|
{
|
continue;
|
}
|
GetElementItem(strLoginInfo,strTemp, _T(";"));
|
if(strTemp.IsEmpty())
|
{
|
continue;
|
}
|
item.strServerID = strTemp;
|
GetElementItem(strLoginInfo,strTemp, _T(";"));
|
if(strTemp.IsEmpty())
|
{
|
continue;
|
}
|
item.strLoginName = strTemp;
|
GetElementItem(strLoginInfo,strTemp, _T(";"));
|
if(strTemp.IsEmpty())
|
{
|
continue;
|
}
|
item.strSessionID = strTemp;
|
strKey.Format(_T("%s;%s"),item.strServerID,item.strLoginName);
|
strKey.MakeLower();
|
mapLoginUser.SetAt(strKey,item);
|
}
|
|
|
}
|
|
BOOL COIMOBOXWatchDirDlg::GetBDLockDocs(CDBConnect *pDBConnect,CMapStrToStr &mapLockDoc )
|
{
|
CString strSQL;
|
long nCount = 0;
|
CDBRecord ARecordSet;
|
CString strTempValue;
|
CString strPropClass;
|
CString strPropName;
|
CString strTemp;
|
mapLockDoc.RemoveAll();
|
if( !pDBConnect)
|
return FALSE;
|
strPropClass = _T("_DMSLOCKDOCS");
|
strPropName = _T("_DMSLOCKDOCS");
|
strSQL.Format( _T("SELECT CN_S_C4 FROM TN_ND_PROPERTY WHERE CN_S_C1='%s' AND CN_S_C2='%s'"),strPropClass,strPropName);
|
try
|
{
|
ARecordSet.Close( );
|
ARecordSet.Open( pDBConnect,strSQL );
|
while ( S_OK == ARecordSet.MoveNext() )
|
{
|
ARecordSet.GetValue( 1, strTempValue, true );
|
while( !strTempValue.IsEmpty())
|
{
|
GetElementItem(strTempValue,strTemp, _T(";") );
|
if( !strTemp.IsEmpty())
|
{
|
mapLockDoc.SetAt(strTemp,strTemp);
|
}
|
}
|
break;
|
}
|
}
|
catch ( CDBSQliteException ex )
|
{
|
CString strError = ex.GetErrInfo();
|
CString strErrInfo;
|
}
|
return TRUE;
|
}
|
|
BOOL COIMOBOXWatchDirDlg::RemoveLockDocsInfo( CDBConnect *pDBConnect )
|
{
|
BOOL bReturn;
|
CString strSQL;
|
CDBRecord ARecordSet;
|
CString strPropClass;
|
CString strPropName;
|
CString strLockDocs = _T("");
|
strPropClass = _T("_DMSLOCKDOCS");
|
strPropName = _T("_DMSLOCKDOCS");
|
if( !pDBConnect)
|
return FALSE;
|
strSQL.Format( _T("SELECT CN_S_C4 FROM TN_ND_PROPERTY WHERE CN_S_C1='%s' AND CN_S_C2='%s'"),strPropClass,strPropName);
|
try
|
{
|
ARecordSet.Close( );
|
ARecordSet.Open( pDBConnect,strSQL );
|
strSQL = _T("");
|
while ( S_OK == ARecordSet.MoveNext() )
|
{
|
strSQL.Format(_T("UPDATE TN_ND_PROPERTY SET CN_S_C4= '%s' WHERE CN_S_C1='%s' AND CN_S_C2='%s'"),strLockDocs,strPropClass,strPropName);
|
break;
|
}
|
ARecordSet.Close( );
|
if( !strSQL.IsEmpty())
|
bReturn = CDBSQLiteCommFun::RunSQL( strSQL, pDBConnect);
|
else
|
bReturn = TRUE;
|
}
|
catch ( CDBSQliteException ex )
|
{
|
CString strError = ex.GetErrInfo();
|
CString strErrInfo;
|
return FALSE;
|
}
|
return bReturn;
|
}
|