diff options
author | Dennis Syrovatsky <dennis@tightvnc.com> | 2005-11-28 08:14:18 +0000 |
---|---|---|
committer | Dennis Syrovatsky <dennis@tightvnc.com> | 2005-11-28 08:14:18 +0000 |
commit | 13b4d4ce5659274e04028129e36be5516776fa74 (patch) | |
tree | 68e54ce714a5731e8cf8f2f58900425412166180 | |
parent | c4ed9b72cb742d3da82190de1af1f3f513c372d7 (diff) | |
download | tigervnc-13b4d4ce5659274e04028129e36be5516776fa74.tar.gz tigervnc-13b4d4ce5659274e04028129e36be5516776fa74.zip |
Added window messages to FTDialog
for operating upload, download and transfer queue.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@420 3789f03b-4d11-0410-bbf8-ca57d06f2519
-rw-r--r-- | rfb/FileInfo.cxx | 206 | ||||
-rw-r--r-- | vncviewer/FTDialog.cxx | 54 | ||||
-rw-r--r-- | vncviewer/FTDialog.h | 13 | ||||
-rw-r--r-- | vncviewer/FileTransfer.cxx | 87 | ||||
-rw-r--r-- | vncviewer/FileTransfer.h | 15 |
5 files changed, 223 insertions, 152 deletions
diff --git a/rfb/FileInfo.cxx b/rfb/FileInfo.cxx index 8d3429f8..08e5654d 100644 --- a/rfb/FileInfo.cxx +++ b/rfb/FileInfo.cxx @@ -30,107 +30,103 @@ using namespace rfb; int CompareFileInfo(const void *F, const void *S) { - FILEINFO *pF = (FILEINFO *) F; - FILEINFO *pS = (FILEINFO *) S; - if (pF->info.flags == pS->info.flags) { - return strcasecmp(pF->name, pS->name); - } else { - if (pF->info.flags == FT_ATTR_DIR) return -1; - if (pS->info.flags == FT_ATTR_DIR) - return 1; - else - return strcasecmp(pF->name, pS->name); - } - return 0; + FILEINFO *pF = (FILEINFO *) F; + FILEINFO *pS = (FILEINFO *) S; + if (pF->info.flags == pS->info.flags) { + return strcasecmp(pF->name, pS->name); + } else { + if (pF->info.flags == FT_ATTR_DIR) return -1; + if (pS->info.flags == FT_ATTR_DIR) + return 1; + else + return strcasecmp(pF->name, pS->name); + } + + return 0; } FileInfo::FileInfo() { - m_numEntries = 0; - m_pEntries = NULL; + m_numEntries = 0; + m_pEntries = NULL; } FileInfo::~FileInfo() { - free(); + free(); } void FileInfo::add(FileInfo *pFI) { - m_numEntries = pFI->getNumEntries(); - FILEINFO *pTemporary = new FILEINFO[m_numEntries]; - memcpy(pTemporary, pFI->getNameAt(0), m_numEntries * sizeof(FILEINFO)); - - m_pEntries = pTemporary; - pTemporary = NULL; + m_numEntries = pFI->getNumEntries(); + FILEINFO *pTemporary = new FILEINFO[m_numEntries]; + memcpy(pTemporary, pFI->getNameAt(0), m_numEntries * sizeof(FILEINFO)); + + m_pEntries = pTemporary; + pTemporary = NULL; } void FileInfo::add(FILEINFO *pFIStruct) { - add(pFIStruct->name, pFIStruct->info.size, pFIStruct->info.data, pFIStruct->info.flags); + add(pFIStruct->name, pFIStruct->info.size, pFIStruct->info.data, pFIStruct->info.flags); } void FileInfo::add(char *pName, unsigned int size, unsigned int data, unsigned int flags) { - FILEINFO *pTemporary = new FILEINFO[m_numEntries + 1]; - if (m_numEntries != 0) - memcpy(pTemporary, m_pEntries, m_numEntries * sizeof(FILEINFO)); - - strcpy(pTemporary[m_numEntries].name, pName); - - pTemporary[m_numEntries].info.size = size; - pTemporary[m_numEntries].info.data = data; - pTemporary[m_numEntries].info.flags = flags; - - if (m_pEntries != NULL) { - delete [] m_pEntries; - m_pEntries = NULL; - } - - m_pEntries = pTemporary; - pTemporary = NULL; - m_numEntries++; + FILEINFO *pTemporary = new FILEINFO[m_numEntries + 1]; + if (m_numEntries != 0) + memcpy(pTemporary, m_pEntries, m_numEntries * sizeof(FILEINFO)); + strcpy(pTemporary[m_numEntries].name, pName); + pTemporary[m_numEntries].info.size = size; + pTemporary[m_numEntries].info.data = data; + pTemporary[m_numEntries].info.flags = flags; + if (m_pEntries != NULL) { + delete [] m_pEntries; + m_pEntries = NULL; + } + m_pEntries = pTemporary; + pTemporary = NULL; + m_numEntries++; } - char * FileInfo::getNameAt(unsigned int number) { - if ((number >= 0) && (number < m_numEntries)) { - return m_pEntries[number].name; - } - return NULL; + if ((number >= 0) && (number < m_numEntries)) { + return m_pEntries[number].name; + } + return NULL; } bool FileInfo::setNameAt(unsigned int number, char *pName) { - if ((number >= 0) && (number < m_numEntries)) { - strcpy(m_pEntries[number].name, pName); - return true; - } - return false; + if ((number >= 0) && (number < m_numEntries)) { + strcpy(m_pEntries[number].name, pName); + return true; + } + return false; } unsigned int FileInfo::getSizeAt(unsigned int number) { - if ((number >= 0) && (number < m_numEntries)) { - return m_pEntries[number].info.size; - } - return 0; + if ((number >= 0) && (number < m_numEntries)) { + return m_pEntries[number].info.size; + } + return 0; } unsigned int FileInfo::getDataAt(unsigned int number) { - if ((number >= 0) && (number < m_numEntries)) { - return m_pEntries[number].info.data; - } - return 0; + if ((number >= 0) && (number < m_numEntries)) { + return m_pEntries[number].info.data; + } + return 0; } unsigned int @@ -145,85 +141,85 @@ FileInfo::getFlagsAt(unsigned int number) FILEINFO * FileInfo::getFullDataAt(unsigned int number) { - if ((number >= 0) && (number < m_numEntries)) { - return &m_pEntries[number]; - } - return NULL; + if ((number >= 0) && (number < m_numEntries)) { + return &m_pEntries[number]; + } + return NULL; } bool FileInfo::setSizeAt(unsigned int number, unsigned int value) { - if ((number >= 0) && (number < m_numEntries)) { - m_pEntries[number].info.size = value; - return true; - } - return false; + if ((number >= 0) && (number < m_numEntries)) { + m_pEntries[number].info.size = value; + return true; + } + return false; } bool FileInfo::setDataAt(unsigned int number, unsigned int value) { - if ((number >= 0) && (number < m_numEntries)) { - m_pEntries[number].info.data = value; - return true; - } - return false; + if ((number >= 0) && (number < m_numEntries)) { + m_pEntries[number].info.data = value; + return true; + } + return false; } bool FileInfo::setFlagsAt(unsigned int number, unsigned int value) { - if ((number >= 0) && (number < m_numEntries)) { - m_pEntries[number].info.flags = value; - return true; - } - return false; + if ((number >= 0) && (number < m_numEntries)) { + m_pEntries[number].info.flags = value; + return true; + } + return false; } bool FileInfo::deleteAt(unsigned int number) { - if ((number >= m_numEntries) || (number < 0)) return false; - - FILEINFO *pTemporary = new FILEINFO[m_numEntries - 1]; - - if (number == 0) { - memcpy(pTemporary, &m_pEntries[1], (m_numEntries - 1) * sizeof(FILEINFO)); - } else { - memcpy(pTemporary, m_pEntries, number * sizeof(FILEINFO)); - if (number != (m_numEntries - 1)) - memcpy(&pTemporary[number], &m_pEntries[number + 1], (m_numEntries - number - 1) * sizeof(FILEINFO)); - } - - if (m_pEntries != NULL) { - delete [] m_pEntries; - m_pEntries = NULL; - } - m_pEntries = pTemporary; - pTemporary = NULL; - m_numEntries--; - return true; + if ((number >= m_numEntries) || (number < 0)) return false; + + FILEINFO *pTemporary = new FILEINFO[m_numEntries - 1]; + + if (number == 0) { + memcpy(pTemporary, &m_pEntries[1], (m_numEntries - 1) * sizeof(FILEINFO)); + } else { + memcpy(pTemporary, m_pEntries, number * sizeof(FILEINFO)); + if (number != (m_numEntries - 1)) + memcpy(&pTemporary[number], &m_pEntries[number + 1], (m_numEntries - number - 1) * sizeof(FILEINFO)); + } + + if (m_pEntries != NULL) { + delete [] m_pEntries; + m_pEntries = NULL; + } + m_pEntries = pTemporary; + pTemporary = NULL; + m_numEntries--; + return true; } - + unsigned int FileInfo::getNumEntries() { - return m_numEntries; + return m_numEntries; } void FileInfo::sort() { - qsort(m_pEntries, m_numEntries, sizeof(FILEINFO), CompareFileInfo); + qsort(m_pEntries, m_numEntries, sizeof(FILEINFO), CompareFileInfo); } void FileInfo::free() { - if (m_pEntries != NULL) { - delete [] m_pEntries; - m_pEntries = NULL; - } - m_numEntries = 0; + if (m_pEntries != NULL) { + delete [] m_pEntries; + m_pEntries = NULL; + } + m_numEntries = 0; } diff --git a/vncviewer/FTDialog.cxx b/vncviewer/FTDialog.cxx index 164de967..8acebd40 100644 --- a/vncviewer/FTDialog.cxx +++ b/vncviewer/FTDialog.cxx @@ -26,6 +26,10 @@ using namespace rfb; using namespace rfb::win32; +const char FTDialog::szCheckTransferQueueText[] = "TightVNC.Viewer.CheckTransferQueue.Msg"; +const char FTDialog::szDownloadFilePortionText[] = "TightVNC.Viewer.DownloadFilePortion.Msg"; +const char FTDialog::szUploadFilePortionText[] = "TightVNC.Viewer.UploadFilePortion.Msg"; + FTDialog::FTDialog(HINSTANCE hInst, FileTransfer *pFT) { m_pFileTransfer = pFT; @@ -69,6 +73,8 @@ FTDialog::createFTDialog(HWND hwndParent) (LONG) this); if (m_hwndFTDialog == NULL) return false; + + if (!initFTWndMsgs()) return false; HWND hwndLocalList = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALLIST); HWND hwndRemoteList = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTELIST); @@ -117,6 +123,20 @@ FTDialog::initFTDialog() } bool +FTDialog::initFTWndMsgs() +{ + m_msgCheckTransferQueue = RegisterWindowMessage(szCheckTransferQueueText); + m_msgUploadFilePortion = RegisterWindowMessage(szUploadFilePortionText); + m_msgDownloadFilePortion = RegisterWindowMessage(szDownloadFilePortionText); + + if ((m_msgCheckTransferQueue) && + (m_msgUploadFilePortion) && + (m_msgDownloadFilePortion)) return true; + + return false; +} + +bool FTDialog::closeFTDialog() { ShowWindow(m_hwndFTDialog, SW_HIDE); @@ -257,6 +277,16 @@ FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) _this->closeFTDialog(); return FALSE; } + + if (uMsg == _this->m_msgCheckTransferQueue) + _this->m_pFileTransfer->checkTransferQueue(); + + if (uMsg == _this->m_msgDownloadFilePortion) + _this->m_pFileTransfer->downloadFilePortion(); + + if (uMsg == _this->m_msgUploadFilePortion) + _this->m_pFileTransfer->uploadFilePortion(); + return FALSE; } @@ -366,7 +396,11 @@ FTDialog::makeOneUpFolder(char *pPath) void FTDialog::onUpload() { - MessageBox(NULL, "onUpload", "FTDialog", MB_OK); + FileInfo fi; + TransferQueue tq; + if (m_pLocalLV->getSelectedItems(&fi) > 0) { + m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD); + } } void @@ -630,3 +664,21 @@ FTDialog::setStatusText(LPCSTR format,...) int nSize = _vsnprintf(text, sizeof(text), format, args); SetDlgItemText(m_hwndFTDialog, IDC_FTSTATUS, text); } + +void +FTDialog::postCheckTransferQueueMsg() +{ + PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0); +} + +void +FTDialog::postUploadFilePortionMsg() +{ + PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0); +} + +void +FTDialog::postDownloadFilePortionMsg() +{ + PostMessage(m_hwndFTDialog, m_msgDownloadFilePortion, 0, 0); +} diff --git a/vncviewer/FTDialog.h b/vncviewer/FTDialog.h index 2e70db30..82e75367 100644 --- a/vncviewer/FTDialog.h +++ b/vncviewer/FTDialog.h @@ -56,6 +56,10 @@ namespace rfb { HWND getWndHandle() { return m_hwndFTDialog; } + void postCheckTransferQueueMsg(); + void postUploadFilePortionMsg(); + void postDownloadFilePortionMsg(); + FTProgress *m_pProgress; private: @@ -95,6 +99,7 @@ namespace rfb { void setIcon(int dest, int idIcon); bool initFTDialog(); + bool initFTWndMsgs(); void onLocalOneUpFolder(); void onRemoteOneUpFolder(); @@ -105,6 +110,10 @@ namespace rfb { bool m_bDlgShown; + UINT m_msgCheckTransferQueue; + UINT m_msgUploadFilePortion; + UINT m_msgDownloadFilePortion; + FTListView *m_pLocalLV; FTListView *m_pRemoteLV; @@ -115,6 +124,10 @@ namespace rfb { char m_szLocalPathTmp[FT_FILENAME_SIZE]; char m_szRemotePathTmp[FT_FILENAME_SIZE]; + static const char szCheckTransferQueueText[]; + static const char szUploadFilePortionText[]; + static const char szDownloadFilePortionText[]; + typedef struct tagFTBUTTONSSTATE { bool uploadBtn; diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx index 5b013340..0a3009a9 100644 --- a/vncviewer/FileTransfer.cxx +++ b/vncviewer/FileTransfer.cxx @@ -102,29 +102,46 @@ FileTransfer::isTransferEnable() } void -FileTransfer::upload(TransferQueue *pTransQueue) +FileTransfer::addTransferQueue(char *pLocalPath, char *pRemotePath, + FileInfo *pFI, unsigned int flags) { if ((m_bFTDlgShown) && (!isTransferEnable())) m_pFTDialog->setStatusText("Starting Copy Operation"); - pTransQueue->setFlagToAll(FT_ATTR_RESIZE_NEEDED); - - m_TransferQueue.add(pTransQueue); - - resizeSending(); + m_TransferQueue.add(pLocalPath, pRemotePath, pFI, (flags | FT_ATTR_RESIZE_NEEDED)); checkTransferQueue(); } -void -FileTransfer::download(TransferQueue *pTransQueue) -{ - -} - -void +bool FileTransfer::resizeSending() { - + for (unsigned int i = 0; i < m_TransferQueue.getNumEntries(); i++) { + unsigned int flags = m_TransferQueue.getFlagsAt(i); + if (flags & FT_ATTR_RESIZE_NEEDED) { + if (flags & FT_ATTR_FILE) { + m_dw64SizeSending += m_TransferQueue.getSizeAt(i); + m_TransferQueue.clearFlagAt(i, FT_ATTR_RESIZE_NEEDED); + } else { + if (flags & FT_ATTR_DIR) { + if (flags & FT_ATTR_COPY_DOWNLOAD) { + char *pPath = m_TransferQueue.getFullRemPathAt(i); + m_dirSizeRqstNum = i; + m_pWriter->writeFileDirSizeRqst(strlen(pPath), pPath); + return false; + } else { + if (flags & FT_ATTR_COPY_UPLOAD) { + FolderManager fm; + DWORD64 dw64Size; + fm.getDirSize(m_TransferQueue.getFullLocPathAt(i), &dw64Size); + m_dw64SizeSending += dw64Size; + m_TransferQueue.clearFlagAt(i, FT_ATTR_RESIZE_NEEDED); + } + } // if (flags & FT_ATTR_COPY_DOWNLOAD) + } // if (flags & FT_ATTR_FOLDER) + } // if (flags & FT_ATTR_FILE) + } // if (flags & FT_ATTR_NEEDED_RESIZE) + } // for (unsigned int i = 0; i < m_TransferQueue.getNumEntries(); i++) + return true; } void @@ -138,35 +155,10 @@ FileTransfer::checkTransferQueue() return; } } else { - for (unsigned int i = 0; i < m_TransferQueue.getNumEntries(); i++) { - unsigned int flags = m_TransferQueue.getFlagsAt(i); - if (flags & FT_ATTR_RESIZE_NEEDED) { - if (flags & FT_ATTR_FILE) { - m_dw64SizeSending += m_TransferQueue.getSizeAt(i); - m_TransferQueue.clearFlagAt(i, FT_ATTR_RESIZE_NEEDED); - } else { - if (flags & FT_ATTR_DIR) { - if (flags & FT_ATTR_COPY_DOWNLOAD) { - char *pPath = m_TransferQueue.getFullRemPathAt(i); - m_dirSizeRqstNum = i; - m_pWriter->writeFileDirSizeRqst(strlen(pPath), pPath); - return; - } else { - if (flags & FT_ATTR_COPY_UPLOAD) { - FolderManager fm; - DWORD64 dw64Size; - fm.getDirSize(m_TransferQueue.getFullLocPathAt(i), &dw64Size); - m_dw64SizeSending += dw64Size; - m_TransferQueue.clearFlagAt(i, FT_ATTR_RESIZE_NEEDED); - } - } // if (flags & FT_ATTR_COPY_DOWNLOAD) - } // if (flags & FT_ATTR_FOLDER) - } // if (flags & FT_ATTR_FILE) - } // if (flags & FT_ATTR_NEEDED_RESIZE) - } // for (unsigned int i = 0; i < m_TransferQueue.getNumEntries(); i++) + if (!resizeSending()) return; unsigned int flag0 = m_TransferQueue.getFlagsAt(0); - + if (flag0 & FT_ATTR_COPY_UPLOAD) { if (flag0 & FT_ATTR_FILE) { uploadFile(); @@ -208,6 +200,18 @@ FileTransfer::downloadFile() return false; } +void +FileTransfer::uploadFilePortion() +{ + +} + +void +FileTransfer::downloadFilePortion() +{ + +} + bool FileTransfer::procFileListDataMsg() { @@ -271,6 +275,7 @@ FileTransfer::procFileDirSizeDataMsg() DWORD64 dw64DirSize = 0; m_pReader->readFileDirSizeData(&dw64DirSize); m_TransferQueue.clearFlagAt(m_dirSizeRqstNum, FT_ATTR_RESIZE_NEEDED); + checkTransferQueue(); return true; } diff --git a/vncviewer/FileTransfer.h b/vncviewer/FileTransfer.h index 53ebbb7b..a81a2efe 100644 --- a/vncviewer/FileTransfer.h +++ b/vncviewer/FileTransfer.h @@ -49,11 +49,13 @@ namespace rfb { void requestFileList(char *pPath, int dest, bool bDirOnly); - void upload(TransferQueue *pTransQueue); - void download(TransferQueue *pTransQueue); + void addTransferQueue(char *pLocalPath, char *pRemotePath, + FileInfo *pFI, unsigned int flags); bool isTransferEnable(); - void resizeSending(); + void checkTransferQueue(); + void uploadFilePortion(); + void downloadFilePortion(); private: bool m_bFTDlgShown; @@ -64,11 +66,14 @@ namespace rfb { FTMsgReader *m_pReader; FTMsgWriter *m_pWriter; + FileReader m_fileReader; + FileWriter m_fileWriter; + FileInfo m_queueFileListRqst; TransferQueue m_TransferQueue; - void checkTransferQueue(); + bool resizeSending(); bool uploadFile(); bool downloadFile(); @@ -88,7 +93,7 @@ namespace rfb { DWORD64 m_dw64SizeSending; unsigned int m_dirSizeRqstNum; - + }; } } |