summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDennis Syrovatsky <dennis@tightvnc.com>2005-11-28 08:14:18 +0000
committerDennis Syrovatsky <dennis@tightvnc.com>2005-11-28 08:14:18 +0000
commit13b4d4ce5659274e04028129e36be5516776fa74 (patch)
tree68e54ce714a5731e8cf8f2f58900425412166180
parentc4ed9b72cb742d3da82190de1af1f3f513c372d7 (diff)
downloadtigervnc-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.cxx206
-rw-r--r--vncviewer/FTDialog.cxx54
-rw-r--r--vncviewer/FTDialog.h13
-rw-r--r--vncviewer/FileTransfer.cxx87
-rw-r--r--vncviewer/FileTransfer.h15
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;
-
+
};
}
}