Added new methods to the class FolderManager for delete operation.
Added delete queue and some methods for making delete operation
to the FileTransfer class.
Code improvements.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@432 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/rfb_win32/FolderManager.cxx b/rfb_win32/FolderManager.cxx
index 7eec8f9..cbae7d9 100644
--- a/rfb_win32/FolderManager.cxx
+++ b/rfb_win32/FolderManager.cxx
@@ -62,31 +62,47 @@
fileInfo.add(&FIStruct);
- unsigned int num = fileInfo.getNumEntries();
+ return deleteIt(&fileInfo);
+}
+
+bool
+FolderManager::deleteIt(char *pPrefix, FileInfo *pFI)
+{
+ char buf[FT_FILENAME_SIZE];
+ for (unsigned int i = 0; i < pFI->getNumEntries(); i++) {
+ sprintf(buf, "%s\\%s", pPrefix, pFI->getNameAt(i));
+ pFI->setNameAt(i,buf);
+ }
+ return deleteIt(pFI);
+}
+
+bool
+FolderManager::deleteIt(FileInfo *pFI)
+{
+ unsigned int num = pFI->getNumEntries();
unsigned int last = num - 1;
while (num > 0) {
- if (fileInfo.getFlagsAt(last) & FT_ATTR_DIR) {
- if (RemoveDirectory(fileInfo.getNameAt(last)) == 0) {
+ if (pFI->getFlagsAt(last) & FT_ATTR_DIR) {
+ if (RemoveDirectory(pFI->getNameAt(last)) == 0) {
if (GetLastError() == ERROR_DIR_NOT_EMPTY) {
- if (!getFolderInfoWithPrefix(fileInfo.getNameAt(last), &fileInfo)) {
- fileInfo.free();
+ if (!getFolderInfoWithPrefix(pFI->getNameAt(last), pFI)) {
+ pFI->free();
return false;
}
}
} else {
- fileInfo.deleteAt(last);
+ pFI->deleteAt(last);
}
} else {
- if (DeleteFile(fileInfo.getNameAt(last)) == 0) {
- fileInfo.free();
+ if (DeleteFile(pFI->getNameAt(last)) == 0) {
+ pFI->free();
return false;
} else {
- fileInfo.deleteAt(last);
+ pFI->deleteAt(last);
}
}
-
- num = fileInfo.getNumEntries();
+ num = pFI->getNumEntries();
last = num - 1;
}
diff --git a/rfb_win32/FolderManager.h b/rfb_win32/FolderManager.h
index c7c086b..55f352d 100644
--- a/rfb_win32/FolderManager.h
+++ b/rfb_win32/FolderManager.h
@@ -39,7 +39,10 @@
bool createDir(char *pFullPath);
bool renameIt(char *pOldName, char *pNewName);
+
+ bool deleteIt(char *pPrefix, FileInfo *pFI);
bool deleteIt(char *pFullPath);
+ bool deleteIt(FileInfo *pFI);
bool getInfo(char *pFullPath, FILEINFO *pFIStruct);
diff --git a/vncviewer/FTDialog.cxx b/vncviewer/FTDialog.cxx
index 4045470..8734060 100644
--- a/vncviewer/FTDialog.cxx
+++ b/vncviewer/FTDialog.cxx
@@ -431,15 +431,19 @@
void
FTDialog::onLocalDelete()
{
- MessageBox(NULL, "onLocalDelete", "FTDialog", MB_OK);
-
+ FileInfo fi;
+ if (m_pLocalLV->getSelectedItems(&fi) > 0) {
+ m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
+ }
}
void
FTDialog::onRemoteDelete()
{
- MessageBox(NULL, "onRemoteDelete", "FTDialog", MB_OK);
-
+ FileInfo fi;
+ if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
+ m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
+ }
}
void
diff --git a/vncviewer/FileTransfer.cxx b/vncviewer/FileTransfer.cxx
index fe08dd8..a9c4738 100644
--- a/vncviewer/FileTransfer.cxx
+++ b/vncviewer/FileTransfer.cxx
@@ -46,6 +46,8 @@
delete m_pFTDialog;
m_pFTDialog = NULL;
}
+
+ freeQueues();
}
bool
@@ -56,7 +58,7 @@
m_pReader = new FTMsgReader(pIS);
m_pWriter = new FTMsgWriter(pOS);
- m_TransferQueue.free();
+ freeQueues();
m_bInitialized = true;
return true;
@@ -103,6 +105,20 @@
}
void
+FileTransfer::addDeleteQueue(char *pPathPrefix, FileInfo *pFI, unsigned int flags)
+{
+ m_DeleteQueue.add(pPathPrefix, "", pFI, flags);
+
+ checkDeleteQueue();
+}
+
+void
+FileTransfer::checkDeleteQueue()
+{
+
+}
+
+void
FileTransfer::addTransferQueue(char *pLocalPath, char *pRemotePath,
FileInfo *pFI, unsigned int flags)
{
@@ -388,10 +404,17 @@
int
FileTransfer::isExistName(FileInfo *pFI, char *pName)
{
- for (int i = 0; i < pFI->getNumEntries(); i++) {
+ for (unsigned int i = 0; i < pFI->getNumEntries(); i++) {
if (strcmp(pFI->getNameAt(i), pName) == 0) {
return i;
}
}
return -1;
}
+
+void
+FileTransfer::freeQueues()
+{
+ m_TransferQueue.free();
+ m_DeleteQueue.free();
+}
diff --git a/vncviewer/FileTransfer.h b/vncviewer/FileTransfer.h
index dcc78c7..7652edb 100644
--- a/vncviewer/FileTransfer.h
+++ b/vncviewer/FileTransfer.h
@@ -53,9 +53,14 @@
void addTransferQueue(char *pLocalPath, char *pRemotePath,
FileInfo *pFI, unsigned int flags);
+ void addDeleteQueue(char *pPathPrefix, FileInfo *pFI,
+ unsigned int flags);
bool isTransferEnable();
+
void checkTransferQueue();
+ void checkDeleteQueue();
+
void uploadFilePortion();
void downloadFilePortion();
@@ -74,12 +79,14 @@
FileInfo m_queueFileListRqst;
TransferQueue m_TransferQueue;
+ TransferQueue m_DeleteQueue;
bool resizeSending();
bool uploadFile();
bool downloadFile();
- int isExistName(FileInfo *pFI, char *pName);
+ int isExistName(FileInfo *pFI, char *pName);
+ void freeQueues();
bool procFileListDataMsg();
bool procFileDownloadDataMsg();