summaryrefslogtreecommitdiff
path: root/plugins/DbEditorPP/src/modules.cpp
blob: 603b601307cb76e4191672459f10ffda8be5e1f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "headers.h"

void renameModule(char* oldName, char* newName, HANDLE hContact)
{
	DBVARIANT dbv;
	ModuleSettingLL settinglist;
	ModSetLinkLinkItem *setting;

	if (!EnumSettings(hContact, oldName, &settinglist)) { msg(Translate("Error Loading Setting List"), modFullname); return; }

	setting = settinglist.first;
	while (setting) {
		if (!GetSetting(hContact, oldName, setting->name, &dbv)) {
			switch (dbv.type) {
			case DBVT_BYTE:
				db_set_b(hContact, newName, setting->name, dbv.bVal);
				break;
			case DBVT_WORD:
				db_set_w(hContact, newName, setting->name, dbv.wVal);
				break;
			case DBVT_DWORD:
				db_set_dw(hContact, newName, setting->name, dbv.dVal);
				break;
			case DBVT_ASCIIZ:
				db_set_s(hContact, newName, setting->name, dbv.pszVal);
				break;
			case DBVT_UTF8:
				db_set_utf(hContact, newName, setting->name, dbv.pszVal);
				break;
			case DBVT_BLOB:
				db_set_blob(hContact, newName, setting->name, dbv.pbVal, dbv.cpbVal);
				break;

			}
			db_unset(hContact, oldName, setting->name);
		}
		db_free(&dbv);
		setting = (ModSetLinkLinkItem *)setting->next;
	}
	FreeModuleSettingLL(&settinglist);
}

INT_PTR CALLBACK AddModDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	if (msg == WM_INITDIALOG) {
		SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam);
		TranslateDialogDefault(hwnd);
	}

	if (msg == WM_COMMAND) {
		switch (LOWORD(wParam)) {
		case IDOK:
			if (GetWindowTextLength(GetDlgItem(hwnd, IDC_MODNAME))) {
				char modulename[256];
				GetDlgItemText(hwnd, IDC_MODNAME, modulename, 256);
				if (IsDlgButtonChecked(hwnd, CHK_ADD2ALL)) {
					// null contact
					db_set_b(NULL, modulename, "(Default)", 0);
					for (HANDLE hContact = db_find_first(); hContact; hContact = db_find_next(hContact))
						db_set_b(hContact, modulename, "(Default)", 0);
				}
				else db_set_b((HANDLE)GetWindowLongPtr(hwnd, GWLP_USERDATA), modulename, "(Default)", 0);

				refreshTree(1);
			}
			// fall through
		case IDCANCEL:
			DestroyWindow(hwnd);
			break;
		}
	}
	return 0;
}

int CloneContact(HANDLE hContact)
{
	HANDLE newContact = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0);
	if (!newContact)
		return 0;

	// enum all the modules
	ModuleSettingLL modlist;
	if (!EnumModules(&modlist)) {
		msg(Translate("Error Loading Module List"), modFullname);
		return 0;
	}

	ModSetLinkLinkItem *mod = modlist.first;
	while (mod) {
		copyModule(mod->name, hContact, newContact);
		mod = (ModSetLinkLinkItem *)mod->next;
	}
	FreeModuleSettingLL(&modlist);
	return 1;
}