diff options
Diffstat (limited to 'plugins/FTPFileYM/src/utils.cpp')
-rw-r--r-- | plugins/FTPFileYM/src/utils.cpp | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/plugins/FTPFileYM/src/utils.cpp b/plugins/FTPFileYM/src/utils.cpp new file mode 100644 index 0000000000..4757a4d183 --- /dev/null +++ b/plugins/FTPFileYM/src/utils.cpp @@ -0,0 +1,235 @@ +/*
+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 <http://www.gnu.org/licenses/>.
+*/
+
+#include "common.h"
+
+extern Options &opt;
+extern UploadDialog *uDlg;
+extern LibCurl &curl;
+
+int Utils::getDeleteTimeMin()
+{
+ switch (opt.timeRange)
+ {
+ case (Options::TR_MINUTES): return (opt.iDeleteTime);
+ case (Options::TR_HOURS): return (opt.iDeleteTime * 60);
+ case (Options::TR_DAYS): return (opt.iDeleteTime * 60 * 24);
+ }
+
+ return -1;
+}
+
+int Utils::msgBox(TCHAR *stzMsg, UINT uType)
+{
+ HWND hwnd = (uDlg != NULL) ? uDlg->hwnd : 0;
+ return MessageBox(hwnd, stzMsg, TranslateT("FTP File"), uType);
+}
+
+int Utils::msgBoxA(char *szMsg, UINT uType)
+{
+ HWND hwnd = (uDlg != NULL) ? uDlg->hwnd : 0;
+ return MessageBoxA(hwnd, szMsg, Translate("FTP File"), uType);
+}
+
+HICON Utils::loadIconEx(char *szName)
+{
+ char buff[100];
+ mir_snprintf(buff, sizeof(buff), "%s_%s", MODULE, szName);
+ return (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)buff);
+}
+
+TCHAR *Utils::getFileNameFromPath(TCHAR *stzPath)
+{
+ TCHAR *pch = _tcsrchr(stzPath, '\\');
+ if (pch) return pch + 1;
+ else return _T("file.zip");
+}
+
+TCHAR *Utils::getTextFragment(TCHAR *stzText, size_t length, TCHAR *buff)
+{
+ if (_tcslen(stzText) > length)
+ {
+ _tcscpy(buff, stzText);
+ buff[length - 1] = 0;
+ _tcscat(buff, _T("..."));
+ return buff;
+ }
+
+ return stzText;
+}
+
+void Utils::copyToClipboard(char *szText)
+{
+ if (szText)
+ {
+ if (OpenClipboard(NULL))
+ {
+ EmptyClipboard();
+ HGLOBAL hClipboardData = GlobalAlloc(GMEM_DDESHARE, 1024);
+ char *pchData = (char *)GlobalLock(hClipboardData);
+ strcpy(pchData, szText);
+ GlobalUnlock(hClipboardData);
+ SetClipboardData(CF_TEXT, hClipboardData);
+ CloseClipboard();
+ }
+ }
+}
+
+const char from_chars[] = "Ɋ؎ύ #{}^~[];,";
+const char to_chars[] = "AEIOUYESCRZDTNaeeiouuyscrzdtn__________";
+
+char* Utils::makeSafeString(TCHAR *input, char *output)
+{
+ char *buff = mir_t2a(input);
+ size_t length = strlen(buff);
+
+ for (UINT i = 0; i < length; i++)
+ {
+ for (int j = 0; from_chars[j] != 0; j++)
+ {
+ if (buff[i] == from_chars[j])
+ {
+ buff[i] = to_chars[j];
+ break;
+ }
+ }
+ }
+
+ strcpy(output, buff);
+ FREE(buff);
+
+ return output;
+}
+
+void Utils::curlSetOpt(CURL *hCurl, ServerList::FTP *ftp, char *url, struct curl_slist *headerList, char *errorBuff)
+{
+ char buff[256];
+
+ curl.easy_setopt(hCurl, CURLOPT_ERRORBUFFER, errorBuff);
+
+ curl.easy_setopt(hCurl, CURLOPT_POSTQUOTE, headerList);
+ curl.easy_setopt(hCurl, CURLOPT_NOPROGRESS, 1);
+
+ curl.easy_setopt(hCurl, CURLOPT_URL, url);
+ curl.easy_setopt(hCurl, CURLOPT_PORT, ftp->iPort);
+ curl.easy_setopt(hCurl, CURLOPT_CONNECTTIMEOUT, 30);
+ curl.easy_setopt(hCurl, CURLOPT_FTP_RESPONSE_TIMEOUT, 20);
+
+ curl.easy_setopt(hCurl, CURLOPT_FTP_USE_EPRT, 0);
+ curl.easy_setopt(hCurl, CURLOPT_FTP_USE_EPSV, 0);
+
+ if (ftp->bPassive)
+ curl.easy_setopt(hCurl, CURLOPT_FTPPORT, 0);
+ else if (!DB::getAString(0, MODULE, "LocalIP", buff))
+ curl.easy_setopt(hCurl, CURLOPT_FTPPORT, buff);
+ else
+ curl.easy_setopt(hCurl, CURLOPT_FTPPORT, "-");
+
+ mir_snprintf(buff, sizeof(buff), "%s:%s", ftp->szUser, ftp->szPass);
+ curl.easy_setopt(hCurl, CURLOPT_USERPWD, buff);
+
+ if (ftp->ftpProto == ServerList::FTP::FT_SSL_EXPLICIT || ftp->ftpProto == ServerList::FTP::FT_SSL_IMPLICIT)
+ {
+ curl.easy_setopt(hCurl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
+ curl.easy_setopt(hCurl, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_DEFAULT);
+ curl.easy_setopt(hCurl, CURLOPT_SSL_VERIFYPEER, 0);
+ curl.easy_setopt(hCurl, CURLOPT_SSL_VERIFYHOST, 2);
+ }
+ else if (ftp->ftpProto == ServerList::FTP::FT_SSH)
+ {
+ curl.easy_setopt(hCurl, CURLOPT_SSH_AUTH_TYPES, CURLSSH_AUTH_PASSWORD);
+ }
+}
+
+INT_PTR CALLBACK Utils::DlgProcSetFileName(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ TCHAR *fileName = (TCHAR *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ fileName = (TCHAR *)lParam;
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)fileName);
+ SetDlgItemText(hwndDlg, IDC_NAME, fileName);
+
+ if (GetDlgCtrlID((HWND)wParam) != IDC_NAME)
+ {
+ SetFocus(GetDlgItem(hwndDlg, IDC_NAME));
+ SendDlgItemMessage(hwndDlg, IDC_NAME, EM_SETSEL, 0, _tcslen(fileName) - 4);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+ case WM_COMMAND:
+ {
+ if (HIWORD(wParam) == BN_CLICKED)
+ {
+ if (LOWORD(wParam) == IDOK)
+ {
+ GetDlgItemText(hwndDlg, IDC_NAME, fileName, 64);
+ EndDialog(hwndDlg, IDOK);
+ }
+ else if (LOWORD(wParam) == IDCANCEL)
+ {
+ EndDialog(hwndDlg, IDCANCEL);
+ }
+ }
+
+ break;
+ }
+ }
+
+ return FALSE;
+}
+
+bool Utils::setFileNameDlg(TCHAR *nameBuff)
+{
+ if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DLG_NAME), 0, DlgProcSetFileName, (LPARAM)nameBuff) == IDOK)
+ return true;
+ else
+ return false;
+}
+
+bool Utils::setFileNameDlgA(char *nameBuff)
+{
+ TCHAR buff[64];
+ TCHAR *tmp = mir_a2t(nameBuff);
+ _tcscpy(buff, tmp);
+ FREE(tmp);
+
+ bool res = setFileNameDlg(buff);
+ if (res)
+ {
+ char *p = mir_t2a(buff);
+ strcpy(nameBuff, p);
+ FREE(p);
+ }
+
+ return res;
+}
+
+void Utils::createFileDownloadLink(char *szUrl, char *fileName, char *buff, int buffSize)
+{
+ if (szUrl[strlen(szUrl) - 1] == '/')
+ mir_snprintf(buff, buffSize, "%s%s", szUrl, fileName);
+ else
+ mir_snprintf(buff, buffSize, "%s/%s", szUrl, fileName);
+}
\ No newline at end of file |