From 8473fb7c85680042038cc0ad40d4e22bb6a639e7 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Fri, 12 Oct 2012 11:29:22 +0000 Subject: FTPFileYM: folders restructurization git-svn-id: http://svn.miranda-ng.org/main/trunk@1885 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/FTPFileYM/src/job_generic.cpp | 253 ++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 plugins/FTPFileYM/src/job_generic.cpp (limited to 'plugins/FTPFileYM/src/job_generic.cpp') diff --git a/plugins/FTPFileYM/src/job_generic.cpp b/plugins/FTPFileYM/src/job_generic.cpp new file mode 100644 index 0000000000..ea199ea4db --- /dev/null +++ b/plugins/FTPFileYM/src/job_generic.cpp @@ -0,0 +1,253 @@ +/* +FTP File YM plugin +Copyright (C) 2007-2010 Jan Holub + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation version 2 +of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "common.h" + +extern UploadDialog *uDlg; +extern ServerList &ftpList; + +GenericJob::GenericJob(HANDLE _hContact, int _iFtpNum, EMode _mode) +:hContact(_hContact),iFtpNum(_iFtpNum),mode(_mode),status(STATUS_CREATED),ftp(ftpList[iFtpNum]) +{ + this->stzFilePath[0] = 0; + this->stzFileName[0] = 0; + this->szSafeFileName[0] = 0; +} + +GenericJob::GenericJob(GenericJob *job) +:hContact(job->hContact),iFtpNum(job->iFtpNum),mode(job->mode),status(job->status),ftp(job->ftp),tab(job->tab) +{ + _tcscpy(this->stzFilePath, job->stzFilePath); + _tcscpy(this->stzFileName, job->stzFileName); + strcpy(this->szSafeFileName, job->szSafeFileName); +} + +GenericJob::~GenericJob() +{ + for (UINT i = 0; i < this->files.size(); i++) + mir_free(this->files[i]); +} + +int GenericJob::openFileDialog() +{ + OPENFILENAME ofn = {0}; + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = 0; + ofn.lpstrFilter = _T("All Files (*.*)\0*.*\0"); + ofn.nFilterIndex = 1; + ofn.lpstrFile = this->stzFilePath; + ofn.lpstrTitle = TranslateT("FTP File - Select files"); + ofn.nMaxFile = SIZEOF(this->stzFilePath); + ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_NOCHANGEDIR; + return GetOpenFileName(&ofn); +} + +int GenericJob::openFolderDialog() +{ + BROWSEINFO bi = {0}; + bi.lpszTitle = TranslateT("FTP File - Select a folder"); + bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_NONEWFOLDERBUTTON | BIF_DONTGOBELOWDOMAIN; + LPITEMIDLIST pidl = SHBrowseForFolder(&bi); + if (pidl != 0) + { + SHGetPathFromIDList(pidl, this->stzFilePath); + CoTaskMemFree(pidl); + return 1; + } + + return 0; +} + +void GenericJob::getFilesFromOpenDialog() +{ + TCHAR stzFile[MAX_PATH]; + + size_t length = _tcslen(this->stzFilePath); + if (this->stzFilePath[0] && this->stzFilePath[length+1]) // multiple files + { + TCHAR *ptr = this->stzFilePath + length + 1; + while (ptr[0]) + { + mir_sntprintf(stzFile, MAX_PATH, _T("%s\\%s"), this->stzFilePath, ptr); + this->addFile(stzFile); + ptr += _tcslen(ptr) + 1; + } + } + else + { + this->addFile(this->stzFilePath); + } +} + +int GenericJob::getFilesFromFolder(TCHAR *stzFolder) +{ + TCHAR stzFile[MAX_PATH], stzDirSave[MAX_PATH]; + + GetCurrentDirectory(MAX_PATH, stzDirSave); + if (!SetCurrentDirectory(stzFolder)) + { + Utils::msgBox(TranslateT("Folder not found!"), MB_OK | MB_ICONERROR); + return 0; + } + + WIN32_FIND_DATA ffd; + HANDLE hFind = FindFirstFile(_T("*.*"), &ffd); + while (hFind != INVALID_HANDLE_VALUE) + { + if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + mir_sntprintf(stzFile, MAX_PATH, _T("%s\\%s"), stzFolder, ffd.cFileName); + this->addFile(stzFile); + } + + if (!FindNextFile(hFind, &ffd)) + break; + } + + FindClose(hFind); + SetCurrentDirectory(stzDirSave); + + if (this->files.size() == 0) + { + Utils::msgBox(TranslateT("The selected folder does not contain any files.\nFTP File sends files only from the selected folder, not from subfolders."), MB_OK | MB_ICONERROR); + return 0; + } + + return 1; +} + +int GenericJob::getFiles() +{ + if (this->mode == FTP_ZIPFOLDER) + { + if (!openFolderDialog()) return 0; + return getFilesFromFolder(this->stzFilePath); + } + else + { + if (!openFileDialog()) return 0; + getFilesFromOpenDialog(); + } + + return 1; +} + +int GenericJob::getFiles(void **objects, int objCount, DWORD flags) +{ + if (this->mode == FTP_ZIPFOLDER) + { + TCHAR *folder; + if (flags & FUPL_UNICODE) + folder = mir_u2t((wchar_t *)objects[0]); + else + folder = mir_a2t((char *)objects[0]); + + int result = getFilesFromFolder(folder); + FREE(folder); + return result; + } + else + { + for (int i = 0; i < objCount; i++) + { + TCHAR *fileName; + if (flags & FUPL_UNICODE) + fileName = mir_u2t((wchar_t *)objects[i]); + else + fileName = mir_a2t((char *)objects[i]); + + addFile(fileName); + FREE(fileName); + } + } + + return (this->files.size() == 0) ? 0 : 1; +} + +void GenericJob::addFile(TCHAR *fileName) +{ + TCHAR *buff = mir_tstrdup(fileName); + this->files.push_back(buff); +} + +void GenericJob::setStatus(EStatus status) +{ + this->status = status; + this->refreshTab(true); +} + +bool GenericJob::isCompleted() +{ + return this->status == STATUS_COMPLETED; +} + +bool GenericJob::isPaused() +{ + return this->status == STATUS_PAUSED; +} + +bool GenericJob::isWaitting() +{ + return this->status == STATUS_WAITING; +} + +bool GenericJob::isCanceled() +{ + return this->status == STATUS_CANCELED; +} + +bool GenericJob::isConnecting() +{ + return (this->status == STATUS_CONNECTING || this->status == STATUS_CREATED); +} + +TCHAR *GenericJob::getStatusString() +{ + switch (this->status) + { + case STATUS_CANCELED: return TranslateT("CANCELED"); + case STATUS_COMPLETED: return TranslateT("COMPLETED"); + case STATUS_CONNECTING: return TranslateT("CONNECTING..."); + case STATUS_CREATED: return TranslateT("CREATED"); + case STATUS_PACKING: return TranslateT("PACKING..."); + case STATUS_PAUSED: return TranslateT("PAUSED"); + case STATUS_UPLOADING: return TranslateT("UPLOADING..."); + case STATUS_WAITING: return TranslateT("WAITING..."); + default: return TranslateT("UNKNOWN"); + } +} + +void GenericJob::refreshTab(bool bTabChanged) +{ + if (bTabChanged) + { + if (this->hContact != NULL) + { + SendDlgItemMessage(uDlg->hwnd, IDC_BTN_PROTO, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadSkinnedProtoIcon(DB::getProto(this->hContact), ID_STATUS_ONLINE)); + SetDlgItemText(uDlg->hwnd, IDC_UP_CONTACT, (TCHAR *)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)this->hContact, GCDNF_TCHAR)); + } + else + { + SendDlgItemMessage(uDlg->hwnd, IDC_BTN_PROTO, BM_SETIMAGE, IMAGE_ICON, (LPARAM)Utils::loadIconEx("main")); + SetDlgItemTextA(uDlg->hwnd, IDC_UP_CONTACT, this->ftp->szServer); + } + + SetDlgItemText(uDlg->hwnd, IDC_UP_FILE, this->stzFileName); + SetDlgItemTextA(uDlg->hwnd, IDC_UP_SERVER, this->ftp->szServer); + } +} \ No newline at end of file -- cgit v1.2.3