{
m_pFileTransfer = pFT;
m_hInstance = hInst;
+
m_bDlgShown = false;
+ m_bCloseDlgAfterCancel = false;
m_pLocalLV = NULL;
m_pRemoteLV = NULL;
if (m_hwndFTDialog != NULL) {
ShowWindow(m_hwndFTDialog, SW_SHOW);
m_bDlgShown = true;
+ showLocalLVItems();
+ showRemoteLVItems();
return true;
}
}
break;
case IDC_FTCLOSE:
- _this->closeFTDialog();
+ _this->onClose();
return FALSE;
case IDC_FTLOCALUP:
_this->setButtonsState();
}
break;
case WM_CLOSE:
- case WM_DESTROY:
- _this->closeFTDialog();
+ _this->onClose();
return FALSE;
}
return FALSE;
}
+void
+FTDialog::onClose()
+{
+ if (m_pFileTransfer->isTransferEnable()) {
+ m_bCloseDlgAfterCancel = true;
+ onFTCancel();
+ } else {
+ closeFTDialog();
+ }
+}
+
void
FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
{
if (m_pLocalLV->getSelectedItems(&fi) > 0) {
m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD);
}
- refreshBtnState();
+ setButtonsState();
}
void
if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_DOWNLOAD);
}
- refreshBtnState();
+ setButtonsState();
}
void
if (m_pLocalLV->getSelectedItems(&fi) > 0) {
m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
}
- refreshBtnState();
+ setButtonsState();
}
void
if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
}
- refreshBtnState();
+ setButtonsState();
}
void
m_pCancelingDlg = NULL;
}
- MessageBox(NULL, "FTDialog::cancelTransfer()", "FTDialog::cancelTransfer()", MB_OK);
+ setButtonsState();
+
+ if ((m_bCloseDlgAfterCancel) && (bResult)) {
+ m_bCloseDlgAfterCancel = false;
+ closeFTDialog();
+ }
+
+ m_pFileTransfer->m_bCancel = bResult;
+}
+
+void
+FTDialog::afterCancelTransfer()
+{
+ if (m_pCancelingDlg != NULL) {
+ delete m_pCancelingDlg;
+ m_pCancelingDlg = NULL;
+ }
}
void
case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
}
+
+ UpdateWindow(m_hwndFTDialog);
}
void
void processDlgMsgs();
void cancelTransfer(bool bResult);
+ void afterCancelTransfer();
static BOOL CALLBACK FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void showLocalLVItems();
void showRemoteLVItems();
+ void onClose();
+
void onLocalItemActivate(LPNMITEMACTIVATE lpnmia);
void onRemoteItemActivate(LPNMITEMACTIVATE lpnmia);
void setButtonsState();
bool m_bDlgShown;
+ bool m_bCloseDlgAfterCancel;
UINT m_msgCheckDeleteQueue;
UINT m_msgCheckTransferQueue;
m_bFTDlgShown = false;
m_bInitialized = false;
m_bResized = false;
+ m_bCancel = false;
m_pFTDialog = new FTDialog(GetModuleHandle(0), this);
m_dw64SizeSending = 0;
m_bResized = false;
m_pFTDialog->setStatusText("File Transfer Operation Completed Successfully");
+ m_pFTDialog->afterCancelTransfer();
PostMessage(m_pFTDialog->getWndHandle(), WM_COMMAND, MAKEWPARAM(IDC_FTLOCALRELOAD, 0), 0);
PostMessage(m_pFTDialog->getWndHandle(), WM_COMMAND, MAKEWPARAM(IDC_FTREMOTERELOAD, 0), 0);
return;
void
FileTransfer::uploadFilePortion()
{
- if (m_bFTDlgShown) m_pFTDialog->processDlgMsgs();
+ if (checkCancelOperations()) {
+ char reason[] = "The user cancel transfer";
+ m_pWriter->writeFileUploadFailed(strlen(reason), reason);
+ }
if (m_fileReader.isCreated()) {
char buf[FT_MAX_SENDING_SIZE];
void *pFile = m_pReader->readFileDownloadData(&bufSize, &modTime);
+ if (checkCancelOperations()) {
+ char reason[] = "The user cancel transfer";
+ m_pWriter->writeFileDownloadCancel(strlen(reason), reason);
+ }
+
if ((!m_fileWriter.isCreated()) || (!isTransferEnable())) {
if (pFile != NULL) delete pFile;
return false;
}
- if (m_bFTDlgShown) m_pFTDialog->processDlgMsgs();
-
if (bufSize > 0) {
unsigned int bytesWritten = 0;
m_fileWriter.write(pFile, bufSize, &bytesWritten);
return -1;
}
+bool
+FileTransfer::checkCancelOperations()
+{
+ if (m_bFTDlgShown) m_pFTDialog->processDlgMsgs();
+ if (m_bCancel) {
+ endUndoneOperation();
+ if (m_bFTDlgShown) {
+ m_pFTDialog->setStatusText("All Operations Canceled");
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void
+FileTransfer::endUndoneOperation()
+{
+ m_bCancel = false;
+ m_fileReader.close();
+ m_fileWriter.close();
+ freeQueues();
+ m_dw64SizeSending = 0;
+ m_pFTDialog->m_pProgress->clearAll();
+}
+
void
FileTransfer::freeQueues()
{
m_TransferQueue.free();
m_DeleteQueue.free();
+ m_queueFileListRqst.free();
}
void checkTransferQueue();
void checkDeleteQueue();
+ bool checkCancelOperations();
void uploadFilePortion();
+ bool m_bCancel;
+
private:
bool m_bFTDlgShown;
bool m_bInitialized;
int isExistName(FileInfo *pFI, char *pName);
void freeQueues();
+
+ void endUndoneOperation();
bool procFileListDataMsg();
bool procFileDownloadDataMsg();