diff options
author | George Hazan <george.hazan@gmail.com> | 2015-04-29 20:52:29 +0000 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2015-04-29 20:52:29 +0000 |
commit | b4b636802237461d78dd0b8d33d5bedfd72a1025 (patch) | |
tree | 27d38756a1984d2ee30eae7831f1d930026ba54e /protocols/IcqOscarJ/src/db.cpp | |
parent | 5e5c4b32550cf60e9385333f95e0b801ed34123f (diff) |
unified project for ICQ protocol
git-svn-id: http://svn.miranda-ng.org/main/trunk@13256 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/IcqOscarJ/src/db.cpp')
-rw-r--r-- | protocols/IcqOscarJ/src/db.cpp | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/protocols/IcqOscarJ/src/db.cpp b/protocols/IcqOscarJ/src/db.cpp new file mode 100644 index 0000000000..4080b800ff --- /dev/null +++ b/protocols/IcqOscarJ/src/db.cpp @@ -0,0 +1,220 @@ +// ---------------------------------------------------------------------------80
+// ICQ plugin for Miranda Instant Messenger
+// ________________________________________
+//
+// Copyright © 2001-2004 Richard Hughes, Martin Öberg
+// Copyright © 2004-2009 Joe Kucera, Bio
+// Copyright © 2012-2014 Miranda NG Team
+//
+// 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; either version 2
+// of the License, or (at your option) any later version.
+//
+// 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, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+// -----------------------------------------------------------------------------
+// DESCRIPTION:
+//
+// ChangeInfo Plugin stuff
+// -----------------------------------------------------------------------------
+
+#include "stdafx.h"
+
+void ChangeInfoData::LoadSettingsFromDb(int keepChanged)
+{
+ for (int i = 0; i < settingCount; i++) {
+ const SettingItem &si = setting[i];
+ if (si.displayType == LI_DIVIDER)
+ continue;
+
+ SettingItemData &sid = settingData[i];
+ if (keepChanged && sid.changed)
+ continue;
+
+ if (si.dbType == DBVT_ASCIIZ || si.dbType == DBVT_UTF8)
+ SAFE_FREE((void**)(char**)&sid.value);
+ else if (!keepChanged)
+ sid.value = 0;
+
+ sid.changed = 0;
+
+ if (si.displayType & LIF_PASSWORD)
+ continue;
+
+ DBVARIANT dbv = { DBVT_DELETED };
+ if (!ppro->getSetting(NULL, si.szDbSetting, &dbv)) {
+ switch (dbv.type) {
+ case DBVT_ASCIIZ:
+ sid.value = (LPARAM)ppro->getSettingStringUtf(NULL, si.szDbSetting, NULL);
+ break;
+
+ case DBVT_UTF8:
+ sid.value = (LPARAM)null_strdup(dbv.pszVal);
+ break;
+
+ case DBVT_WORD:
+ if (si.displayType & LIF_SIGNED)
+ sid.value = dbv.sVal;
+ else
+ sid.value = dbv.wVal;
+ break;
+
+ case DBVT_BYTE:
+ if (si.displayType & LIF_SIGNED)
+ sid.value = dbv.cVal;
+ else
+ sid.value = dbv.bVal;
+ break;
+
+#ifdef _DEBUG
+ default:
+ MessageBoxA(NULL, "That's not supposed to happen either", "Huh?", MB_OK);
+ break;
+#endif
+ }
+ db_free(&dbv);
+ }
+
+ char buf[MAX_PATH];
+ TCHAR tbuf[MAX_PATH];
+
+ if (utf8_to_tchar_static(GetItemSettingText(i, buf, SIZEOF(buf)), tbuf, SIZEOF(tbuf)))
+ ListView_SetItemText(hwndList, i, 1, tbuf);
+ }
+}
+
+void ChangeInfoData::FreeStoredDbSettings(void)
+{
+ for (int i = 0; i < settingCount; i++)
+ if (setting[i].dbType == DBVT_ASCIIZ || setting[i].dbType == DBVT_UTF8)
+ SAFE_FREE((void**)&settingData[i].value);
+}
+
+int ChangeInfoData::ChangesMade(void)
+{
+ for (int i = 0; i < settingCount; i++)
+ if (settingData[i].changed)
+ return 1;
+ return 0;
+}
+
+void ChangeInfoData::ClearChangeFlags(void)
+{
+ for (int i = 0; i < settingCount; i++)
+ settingData[i].changed = 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+struct PwConfirmDlgParam
+{
+ CIcqProto* ppro;
+ char* Pass;
+};
+
+static INT_PTR CALLBACK PwConfirmDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ PwConfirmDlgParam* dat = (PwConfirmDlgParam*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+
+ switch (msg) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam);
+ SendDlgItemMessage(hwndDlg, IDC_PASSWORD, EM_LIMITTEXT, 15, 0);
+ return TRUE;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam)) {
+ case IDOK:
+ {
+ char szTest[16];
+
+ GetDlgItemTextA(hwndDlg, IDC_OLDPASS, szTest, SIZEOF(szTest));
+
+ if (strcmpnull(szTest, dat->ppro->GetUserPassword(TRUE))) {
+ MessageBox(hwndDlg, TranslateT("The password does not match your current password. Check Caps Lock and try again."), TranslateT("Change ICQ Details"), MB_OK);
+ SendDlgItemMessage(hwndDlg, IDC_OLDPASS, EM_SETSEL, 0, (LPARAM)-1);
+ SetFocus(GetDlgItem(hwndDlg, IDC_OLDPASS));
+ break;
+ }
+
+ GetDlgItemTextA(hwndDlg, IDC_PASSWORD, szTest, SIZEOF(szTest));
+ if (strcmpnull(szTest, dat->Pass)) {
+ MessageBox(hwndDlg, TranslateT("The password does not match the password you originally entered. Check Caps Lock and try again."), TranslateT("Change ICQ Details"), MB_OK);
+ SendDlgItemMessage(hwndDlg, IDC_PASSWORD, EM_SETSEL, 0, (LPARAM)-1);
+ SetFocus(GetDlgItem(hwndDlg, IDC_PASSWORD));
+ break;
+ }
+ }
+ case IDCANCEL:
+ EndDialog(hwndDlg, wParam);
+ break;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+int ChangeInfoData::SaveSettingsToDb(HWND hwndDlg)
+{
+ int ret = 1;
+
+ for (int i = 0; i < settingCount; i++) {
+ SettingItemData &sid = settingData[i];
+ if (!sid.changed)
+ continue;
+
+ const SettingItem &si = setting[i];
+ if (!(si.displayType & LIF_ZEROISVALID) && sid.value == 0) {
+ ppro->delSetting(si.szDbSetting);
+ continue;
+ }
+ switch (si.dbType) {
+ case DBVT_ASCIIZ:
+ if (si.displayType & LIF_PASSWORD) {
+ size_t nSettingLen = mir_strlen((char*)sid.value);
+ if (nSettingLen > 8 || nSettingLen < 1) {
+ MessageBox(hwndDlg, TranslateT("The ICQ server does not support passwords longer than 8 characters. Please use a shorter password."), TranslateT("Change ICQ Details"), MB_OK);
+ ret = 0;
+ break;
+ }
+ PwConfirmDlgParam param = { ppro, (char*)sid.value };
+ if (IDOK != DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_PWCONFIRM), hwndDlg, PwConfirmDlgProc, (LPARAM)¶m)) {
+ ret = 0;
+ break;
+ }
+ strcpy(ppro->m_szPassword, (char*)sid.value);
+ }
+ else {
+ if (*(char*)sid.value)
+ db_set_utf(NULL, ppro->m_szModuleName, si.szDbSetting, (char*)sid.value);
+ else
+ ppro->delSetting(si.szDbSetting);
+ }
+ break;
+
+ case DBVT_UTF8:
+ if (*(char*)sid.value)
+ db_set_utf(NULL, ppro->m_szModuleName, si.szDbSetting, (char*)sid.value);
+ else
+ ppro->delSetting(si.szDbSetting);
+ break;
+
+ case DBVT_WORD:
+ ppro->setWord(si.szDbSetting, (WORD)sid.value);
+ break;
+
+ case DBVT_BYTE:
+ ppro->setByte(si.szDbSetting, (BYTE)sid.value);
+ break;
+ }
+ }
+ return ret;
+}
|