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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
/*
former MetaContacts Plugin for Miranda IM.
Copyright © 2014 Miranda NG Team
Copyright © 2004-07 Scott Ellis
Copyright © 2004 Universite Louis PASTEUR, STRASBOURG.
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.
*/
#include "..\..\core\commonheaders.h"
#include "metacontacts.h"
BOOL os_unicode_enabled = FALSE;
/////////////////////////////////////////////////////////////////////////////////////////
// icolib support
static IconItem iconList[] = {
{ LPGEN("Toggle Off"), "off", IDI_MCMENUOFF },
{ LPGEN("Toggle On"), "on", IDI_MCMENU },
{ LPGEN("Convert to MetaContact"), "convert", IDI_MCCONVERT },
{ LPGEN("Add to Existing"), "add", IDI_MCADD },
{ LPGEN("Edit"), "edit", IDI_MCEDIT },
{ LPGEN("Set to Default"), "default", IDI_MCSETDEFAULT },
{ LPGEN("Remove"), "remove", IDI_MCREMOVE },
};
HANDLE GetIconHandle(IconIndex i)
{
return iconList[i].hIcolib;
}
HICON LoadIconEx(IconIndex i)
{
return Skin_GetIcon(iconList[i].szName);
}
/** Prepare the plugin to stop
* Called by Miranda when it will exit or when the plugin gets deselected
*/
int UnloadMetacontacts(void)
{
// see also meta_services.c, Meta_PreShutdown
Meta_CloseHandles();
return 0;
}
/** Initializes the services provided and the link to those needed
* Called when the plugin is loaded into Miranda
*/
int LoadMetacontacts(void)
{
Icon_Register(hInst, META_PROTO, iconList, SIZEOF(iconList), "mc");
db_set_resident(META_PROTO, "Status");
db_set_resident(META_PROTO, "IdleTS");
db_set_resident(META_PROTO, "ContactCountCheck");
db_set_resident(META_PROTO, "Handle");
db_set_resident(META_PROTO, "WindowOpen");
//set all contacts to 'offline', and initialize subcontact counter for db consistency check
for (MCONTACT hContact = db_find_first(META_PROTO); hContact; hContact = db_find_next(hContact, META_PROTO)) {
db_set_w(hContact, META_PROTO, "Status", ID_STATUS_OFFLINE);
db_set_dw(hContact, META_PROTO, "IdleTS", 0);
db_set_b(hContact, META_PROTO, "ContactCountCheck", 0);
// restore any saved defaults that might have remained if miranda was closed or crashed while a convo was happening
if (db_get_dw(hContact, META_PROTO, "SavedDefault", (DWORD)-1) != (DWORD)-1) {
db_set_dw(hContact, META_PROTO, "Default", db_get_dw(hContact, META_PROTO, "SavedDefault", 0));
db_set_dw(hContact, META_PROTO, "SavedDefault", (DWORD)-1);
}
}
Meta_ReadOptions(&options);
// sets subcontact handles to metacontacts, and metacontact handles to subcontacts
// (since these handles are not necessarily the same from run to run of miranda)
// also verifies that subcontacts: have metacontacts, and that contact numbers are reasonable,
// that metacontacts: have the correct number of subcontacts, and have reasonable defaults
if (Meta_SetHandles()) {
// error - db corruption
if ( !db_get_b(0, META_PROTO, "DisabledMessageShown", 0)) {
MessageBox(0, TranslateT("Error - Database corruption.\nPlugin disabled."), TranslateT("MetaContacts"), MB_OK | MB_ICONERROR);
db_set_b(0, META_PROTO, "DisabledMessageShown", 1);
}
//Meta_HideMetaContacts(TRUE);
return 1;
}
db_unset(0, META_PROTO, "DisabledMessageShown");
PROTOCOLDESCRIPTOR pd = { PROTOCOLDESCRIPTOR_V3_SIZE };
pd.szName = META_FILTER;
pd.type = PROTOTYPE_FILTER;
CallService(MS_PROTO_REGISTERMODULE, 0, (LPARAM)&pd);
pd.szName = META_PROTO;
pd.type = PROTOTYPE_VIRTUAL;
CallService(MS_PROTO_REGISTERMODULE, 0, (LPARAM)&pd);
// further db setup done in modules loaded (nick [protocol string required] & clist display name)
Meta_InitServices();
// moved to 'modules loaded' event handler (in meta_services.c) because we need to
// check protocol for jabber hack, and the proto modules must be loaded
//Meta_HideLinkedContactsAndSetHandles();
if ( ServiceExists(MS_MSG_GETWINDOWAPI))
message_window_api_enabled = TRUE;
// for clist_meta_mw - write hidden group name to DB
db_set_s(0, META_PROTO, "HiddenGroupName", META_HIDDEN_GROUP);
return 0;
}
|