]> source.dussan.org Git - tigervnc.git/commitdiff
Added window messages to FTDialog
authorDennis Syrovatsky <dennis@tightvnc.com>
Mon, 28 Nov 2005 08:14:18 +0000 (08:14 +0000)
committerDennis Syrovatsky <dennis@tightvnc.com>
Mon, 28 Nov 2005 08:14:18 +0000 (08:14 +0000)
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

rfb/FileInfo.cxx
vncviewer/FTDialog.cxx
vncviewer/FTDialog.h
vncviewer/FileTransfer.cxx
vncviewer/FileTransfer.h

index 8d3429f895ca2d9933b430703a3f66281c14fe67..08e5654d578c49a56903ff1a648ba6601678d430 100644 (file)
@@ -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;
 }
index 164de9678d499ec7841fb4d3e02bb78e05a8fafd..8acebd402ce14c419655b29ac5d9064aa88413ee 100644 (file)
 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);
@@ -116,6 +122,20 @@ FTDialog::initFTDialog()
   return true;
 }
 
+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()
 {
@@ -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);
+}
index 2e70db30c606b2debb0ec88d3410071ceedb212b..82e7536776f7c054635c3ec74c60d228a08f9386 100644 (file)
@@ -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;
index 5b01334070d153d885594940f697139731ba0022..0a3009a98f11daed8843011df4000d95ff39811c 100644 (file)
@@ -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;
 }
 
index 53ebbb7b68ef06d6c416087e17df73b876a4e5e5..a81a2efe3f15b1fa3ef3cb830a3f326b7a597d6f 100644 (file)
@@ -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;
-      
+
     };
   }
 }