📄 progressdlg.cpp
字号:
{
bFound = FileFind.FindNextFile ();
BOOL NextFlag = FALSE;
path = FileFind.GetFilePath();
if (FileFind.MatchesMask(FILE_ATTRIBUTE_INROM || FILE_ATTRIBUTE_ROMMODULE
||FILE_ATTRIBUTE_SYSTEM))
continue;
if (FileFind.GetFilePath().Find(L"\\Backup") != -1)
continue;
if (FileFind.IsDirectory())
{
//do nothing with the Inbox dir
for (i = 0; i < 2; i++)
{
if (path.Compare(Inbox[i]) == 0)
{
NextFlag = TRUE;
break;
}
}
if (NextFlag)
continue;
path += L"\\";
GetBackupFileSize(path);
continue;
}
fnlen = FileFind.GetLength();
path = FileFind.GetFilePath();
i = j = k = 0;
while ((k = path.Find(L"\\",k+1)) != -1)
{
i = k;
j++;
if (j == 2)
break;
}
path.MakeLower();
path = path.Left(i);
if ((j == 2)&&(path.Compare(AVANTGO) == 0))
{
m_BackupFileSize[0] += fnlen;
continue;
}
ext = FileFind.GetFileName();
i = 0;
j = 0;
while ((j = ext.Find(L".",j+1)) != -1)
i = j;
if (i)
ext = ext.Right(ext.GetLength() - i -1);
ext.MakeLower();
exta.LoadString(NOTES_EXT);
if (exta.Find(ext.GetBuffer(0)) != -1)
m_BackupFileSize[1]+=fnlen;
else
{
exta.LoadString(VOICE_EXT);
if (exta.Find(ext.GetBuffer(0)) != -1)
m_BackupFileSize[2]+=fnlen;
else
{
m_BackupFileSize[3]+=fnlen;
}
}
}
FileFind.Close();
// sysp:voice:notes:channel:reg:
/* m_BackupFileSize[0]=avgoSize;
m_BackupFileSize[1]=noteSize;;
m_BackupFileSize[2]=voiceSize;
m_BackupFileSize[3]=sysprogSize;
*/
}
void CProgressDlg::GetDirSize(LPCTSTR FileName, DWORD &DirSize)
{
CCeFileFind FindFile;
if (!FindFile.FindFile(FileName))
return;
CString str(FileName);
if( str.Right(1) != "\\")
str += L"\\";
str += L"*.*";
BOOL bFound = FindFile.FindFile(str);
while (bFound)
{
bFound = FindFile.FindNextFile();
if (FindFile.IsDirectory())
GetDirSize(FindFile.GetFilePath(),DirSize);
else
DirSize += FindFile.GetLength();
}
FindFile.Close();
}
void CProgressDlg::CountKB(DWORD size, CString &str) const
{
DWORD K = 1024;
DWORD M = (1024*1024);
TCHAR buf[10];
memset(buf,0,sizeof(buf));
float kbsize = 0;
if (size >= M)
{
kbsize = (float)size / M;
swprintf(buf,L"%.2f M",kbsize);
str = buf;
}
else
if (size >= K)
{
kbsize = (float)size / K;
swprintf(buf,L"%.2f K",kbsize);
str = buf;
}
else
str.Format(L"%d B",size);
}
BOOL CProgressDlg::CountStorageSpace(DWORD ItemTotalSize)
{
CString FlashStr;
FlashStr.LoadString(FLASHROM_TXT);
if (m_StorageType.Compare(FlashStr) == 0)
{
if (ItemTotalSize > (5*1024*1024))
return FALSE;
}
else
{
DWORD DBVOLSIZE = 128000;
ULARGE_INTEGER freeSize;
ULARGE_INTEGER totalSize;
GetDiskFreeSpaceEx(m_StorageType,&freeSize,&totalSize,NULL);
if (m_BackupDBFlag)
ItemTotalSize += DBVOLSIZE;
if(ItemTotalSize > freeSize.QuadPart)
{
CString Msg,War;
Msg.LoadString(MSG_SPACEWARNNING);
War.LoadString(WARNING_TXT);
MessageBox(Msg,War,MB_OK|MB_ICONEXCLAMATION|MB_ICONERROR);
UpdateWindow();
return FALSE;
}
}
return TRUE;
}
BOOL CProgressDlg::GetSelected()
{
int i = 0,j = 0;
POSITION pos = 0;
CString StrItem,SizeStr;
BOOL MailFlag = FALSE;
// restore part of datas
m_TotalSize = 0;
BSTR ListItemStr;
CString InboxStr;
InboxStr.LoadString(INBOX_TXT);
for(i = 0; i < m_ListCtrl.GetItemCount();i++)
{
// get selected datas
if (!m_ListCtrl.GetCheckState(i))
continue;
MailFlag = FALSE;
ListItemStr = NULL;
m_ListCtrl.GetItemText(i,0,ListItemStr);
StrItem = ListItemStr;
if (StrItem.Find(InboxStr) != -1)
MailFlag = TRUE;
for (j = 0; j < m_ItemList.GetCount(); j++)
{
pos = m_ItemList.FindIndex(j);
if (MailFlag && m_ItemList.GetAt(pos).IsMail)
{
m_TotalSize+= m_ItemList.GetAt(pos).ItemSize;
m_SelectedList.AddTail(m_ItemList.GetAt(pos));
continue;
}
if (!MailFlag)
{
// get the selected item in m_Itemlist
if (wcslen(m_ItemList.GetAt(pos).ItemName) == 0)
continue;
if (StrItem.Find(m_ItemList.GetAt(pos).ItemName) != -1)
{
m_TotalSize+= m_ItemList.GetAt(pos).ItemSize;
m_SelectedList.AddTail(m_ItemList.GetAt(pos));
break;
}
}
}
}
CountKB(m_TotalSize,SizeStr);
CStatic ShowTotal;
ShowTotal.Attach(GetDlgItem(IDC_SHOWTOTALSIZE));
ShowTotal.SetWindowText(SizeStr);
UpdateWindow();
return TRUE;
}
BOOL CProgressDlg::RestoreDBinit(int &line, DWORD &MailDBSize)
{
int i,j,MailDBNum = 0;
CString SizeStr,DBStr;
BackupItem item;
POSITION pos;
BOOL FindFlag = FALSE;
CRegistry_DB RestoreDB(m_StorageType);
DWORD tagID[3] = {CONTACT_TXT,CALENDAR_TXT,TASK_TXT};
CString tag[3];// = {CONTACT,CALENDAR,TASK};
CString temp;
for( i = 0 ; i < 3 ; i++)
{
temp.LoadString(tagID[i]);
tag[i] = temp;
}
LPWSTR DB_NAME[] = {CONTACTDB,CALENDARDB,TASKDB};
PCEGUID pceguid=0;
pceguid = (PCEGUID) LocalAlloc (LPTR, sizeof (CEGUID));
// if any database exists, read it
if (MountDBVol(pceguid,OPEN_EXISTING))
{
if (RestoreDB.GetTotalRestoreDB(pceguid))
{
for(i = 0; i < RestoreDB.m_DBItemList.GetCount();i++)
{
pos = RestoreDB.m_DBItemList.FindIndex(i);
ZeroMemory(&item,sizeof(item));
item.IsDB = TRUE;
item.ItemSize = RestoreDB.m_DBItemList.GetAt(pos).ItemSize;
wcscpy(item.DBNAME_ZIPDIR,RestoreDB.m_DBItemList.GetAt(pos).ItemName);
DBStr.Format(item.DBNAME_ZIPDIR);
if ((DBStr.Find(L"pmail") != -1) || (DBStr.Find(L"fldr") != -1))
{
item.IsMail = TRUE;
MailDBSize += item.ItemSize;
m_ItemList.AddTail(item);
FindFlag = TRUE;
m_BackupMailFlag = TRUE;
continue;
}
m_TotalSize+= item.ItemSize;
for (j = 0 ;j < 3 ;j++)
if (wcscmp(item.DBNAME_ZIPDIR,DB_NAME[j]) == 0)
{
wcscpy(item.ItemName,tag[j]);
DBStr.Format(L"%d ",line +1);
m_ListCtrl.InsertItem(line,DBStr + tag[j]);
m_ListCtrl.SetCheckState(line,TRUE);
CountKB(item.ItemSize,SizeStr);
m_ListCtrl.SetItemText(line++,1,SizeStr);
break;
}
m_ItemList.AddTail(item);
FindFlag = TRUE;
}
}
else
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
CString Msg;
Msg.LoadString(MSG_DATABASE_NOTFINISHED);
SetCursor(LoadCursor(NULL, IDC_ARROW));
if (MessageBox(Msg,RESTORETITLE,MB_YESNO|MB_ICONWARNING) == IDNO)
{
CeUnmountDBVol(pceguid);
LocalFree((HLOCAL)pceguid);
return -1;
}
SetCursor(LoadCursor(NULL, IDC_WAIT));
UpdateWindow();
}
CeUnmountDBVol(pceguid);
}
LocalFree((HLOCAL)pceguid);
return FindFlag;
}
BOOL CProgressDlg::RestoreFileInit(int &line, DWORD MailDBSize)
{
int i = 0,nEofFlag = 0;
CString SizeStr;
BackupItem item;
BOOL FindFlag = FALSE;
CFile restoreFile;
CString RestorePath;
WORD wOK;
DWORD dwFileLen;
CString filename;
CFileException FileError;
LPCTSTR ZipFileName[] = {INBOXDIR,CHANNELDIR,NOTEDIR,VOICEDIR,USERAPPDIR,REGDIR};
DWORD tagID[] = {INBOX_TXT,CHANNELS_TXT,NOTES_TXT,VOICERECORDER_TXT,USERAPP_TXT};
CString tag[5];
CString temp;
for(i = 0 ;i < 5; i++)
{
temp.LoadString(tagID[i]);
tag[i] = temp;
}
for (i = 0; i < 6;i++)
{
if (restoreFile.Open(m_StorageType + ZipFileName[i],CFile::modeRead,&FileError))
{
ZeroMemory(&item,sizeof(item));
wcscpy(item.DBNAME_ZIPDIR,ZipFileName[i]);
// init registry
if (i == 5)
nEofFlag = sizeof(WORD);
else
nEofFlag = sizeof(DWORD)+sizeof(WORD);
if(nEofFlag > (int)restoreFile.GetLength())
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
filename.Format(MSG_FILENOOK,m_StorageType + ZipFileName[i]);
if (MessageBox(filename,RESTORETITLE,MB_YESNO|MB_ICONWARNING) == IDNO)
{
restoreFile.Close();
return -1;
}
SetCursor(LoadCursor(NULL, IDC_WAIT));
UpdateWindow();
restoreFile.Close();
continue;
}
restoreFile.Seek(-nEofFlag,CFile::end);
if (i == 5)
restoreFile.Read(&wOK,sizeof(WORD));
else
{
restoreFile.Read(&dwFileLen,sizeof(DWORD));
restoreFile.Read(&wOK,sizeof(WORD));
}
if(wOK != 0x4B4F)
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
filename.Format(MSG_FILENOOK,m_StorageType + ZipFileName[i]);
if (MessageBox(filename,RESTORETITLE,MB_YESNO|MB_ICONWARNING) == IDNO)
{
restoreFile.Close();
return -1;
}
SetCursor(LoadCursor(NULL, IDC_WAIT));
UpdateWindow();
restoreFile.Close();
continue;
}
FindFlag = TRUE;
if (i == 5)
{
item.IsReg = TRUE;
item.ItemSize = restoreFile.GetLength();
m_TotalSize +=item.ItemSize;
}
else
{
item.ItemSize = dwFileLen;
if (i == 0)
{
if (!m_BackupMailFlag)
{
UpdateWindow();
restoreFile.Close();
continue;
}
dwFileLen += MailDBSize;
item.IsMail = TRUE;
}
wcscpy(item.ItemName,tag[i]);
filename.Format(L"%d ",line +1);
m_ListCtrl.InsertItem(line,filename + tag[i]);
m_ListCtrl.SetCheckState(line,TRUE);
CountKB(dwFileLen,SizeStr);
m_ListCtrl.SetItemText(line++,1,SizeStr);
m_TotalSize += dwFileLen;
}
m_ItemList.AddTail(item);
restoreFile.Close();
}
else
{
// if (FileError.m_lOsError != ERROR_FILE_NOT_FOUND)
CFindFile FindFile;
if (FindFile.FindFile(m_StorageType + ZipFileName[i]))
{
FileError.ReportError();
return -1;
}
}
}
return FindFlag;
}
BOOL CProgressDlg::MountDBVol(PCEGUID &pceguid, DWORD mode)
{
CString BackupDBdir;
BackupDBdir = m_StorageType + DBDIR;
if (!CeMountDBVol(pceguid,BackupDBdir.LockBuffer(),mode))
{
BackupDBdir.UnlockBuffer();
return FALSE;
}
BackupDBdir.UnlockBuffer();
return TRUE;
}
BOOL CProgressDlg::BackupAll()
{
int i = 0,j = 0;
POSITION pos = 0;
CRegistry_DB BackupRegDB(m_StorageType);
BOOL MountFlag = FALSE;
BOOL firstFlag = TRUE;
m_CurrentStep = 0;
m_CurrentSize = 0;
PCEGUID pceguid=0;
pceguid = (PCEGUID) LocalAlloc (LPTR, sizeof (CEGUID));
int listnum = m_ItemList.GetCount();
for (i = 0 ; i < listnum ; i++)
{
pos = m_ItemList.FindIndex(i);
//backup Inbox
if (m_ItemList.GetAt(pos).IsMail)
{
if (!MountFlag)
{
// mount database volume
if (!MountDBVol(pceguid,CREATE_ALWAYS))
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
CString Msg;
Msg.LoadString(MSG_BACKUPDATABASEERROR);
MessageBox(Msg,BACKUPTITLE,MB_OK|MB_ICONERROR);
LocalFree((HLOCAL)pceguid);
return FALSE;
}
MountFlag = TRUE;
}
if (!BackupInbox(pceguid))
{
CeUnmountDBVol(pceguid);
LocalFree((HLOCAL)pceguid);
return FALSE;
}
continue;
}
//backup databases
if (m_ItemList.GetAt(pos).IsDB)
{
if (!MountFlag)
{
// mount database volume
if (!MountDBVol(pceguid,CREATE_ALWAYS))
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
CString Msg;
Msg.LoadString(MSG_BACKUPDATABASEERROR);
MessageBox(Msg,BACKUPTITLE,MB_OK|MB_ICONERROR);
LocalFree((HLOCAL)pceguid);
return FALSE;
}
MountFlag = TRUE;
}
/* if (firstFlag && (!m_BackupMailFlag) )
{
CTestDlg testDlg;
testDlg.DoModal();
UpdateWindow();
firstFlag = FALSE;
}
*/
if (!BackupRegDB.BackupDB(m_ItemList.GetAt(pos).DBNAME_ZIPDIR,pceguid))
{
SetCursor(LoadCursor(NULL,IDC_ARROW));
CString Msg;
Msg.LoadString(MSG_BACKUPDATABASEERROR);
MessageBox(Msg,BACKUPTITLE,MB_OK|MB_ICONERROR);
CeUnmountDBVol(pceguid);
LocalFree((HLOCAL)pceguid);
return FALSE;
}
SetProgressPos(BackupRegDB.GetBackupDBSize(m_ItemList.GetAt(pos).DBNAME_ZIPDIR));
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -