diff options
Diffstat (limited to 'yapp/services.cpp')
-rw-r--r-- | yapp/services.cpp | 202 |
1 files changed, 96 insertions, 106 deletions
diff --git a/yapp/services.cpp b/yapp/services.cpp index 9cda824..84213ab 100644 --- a/yapp/services.cpp +++ b/yapp/services.cpp @@ -4,8 +4,6 @@ #include "message_pump.h"
#include "resource.h"
#include "popup_history.h"
-#include <time.h>
-#include "str_utils.h"
#define NUM_SERVICES 20
HANDLE hService[NUM_SERVICES];
@@ -48,13 +46,12 @@ void StripBBCodesInPlace(wchar_t *text) { INT_PTR OldCreatePopupA(WPARAM wParam, LPARAM lParam) {
POPUPDATA *pd_in = (POPUPDATA *)wParam;
- PopupData *pd_out = (PopupData *)malloc(sizeof(PopupData));
- ZeroMemory(pd_out, sizeof(PopupData));
+ PopupData *pd_out = (PopupData *)mir_calloc(sizeof(PopupData));
pd_out->cbSize = sizeof(PopupData);
pd_out->flags = PDF_UNICODE;
- pd_out->pwzTitle = a2w(pd_in->lpzContactName);
- pd_out->pwzText = a2w(pd_in->lpzText);
+ pd_out->pwzTitle = mir_a2u(pd_in->lpzContactName);
+ pd_out->pwzText = mir_a2u(pd_in->lpzText);
StripBBCodesInPlace(pd_out->pwzTitle);
StripBBCodesInPlace(pd_out->pwzText);
@@ -73,9 +70,9 @@ INT_PTR OldCreatePopupA(WPARAM wParam, LPARAM lParam) { lstPopupHistory.Add(pd_out->pwzTitle, pd_out->pwzText, time(0));
if(!DBGetContactSettingByte(0, MODULE, "Enabled", 1)) {
- free(pd_out->pwzTitle);
- free(pd_out->pwzText);
- free(pd_out);
+ mir_free(pd_out->pwzTitle);
+ mir_free(pd_out->pwzText);
+ mir_free(pd_out);
return -1;
}
@@ -87,12 +84,12 @@ INT_PTR OldCreatePopupA(WPARAM wParam, LPARAM lParam) { INT_PTR OldCreatePopupExA(WPARAM wParam, LPARAM lParam) {
POPUPDATAEX *pd_in = (POPUPDATAEX *)wParam;
- PopupData *pd_out = (PopupData *)malloc(sizeof(PopupData));
- ZeroMemory(pd_out, sizeof(PopupData));
+ PopupData *pd_out = (PopupData *)mir_calloc(sizeof(PopupData));
+
pd_out->cbSize = sizeof(PopupData);
pd_out->flags = PDF_UNICODE;
- pd_out->pwzTitle = a2w(pd_in->lpzContactName);
- pd_out->pwzText = a2w(pd_in->lpzText);
+ pd_out->pwzTitle = mir_a2u(pd_in->lpzContactName);
+ pd_out->pwzText = mir_a2u(pd_in->lpzText);
StripBBCodesInPlace(pd_out->pwzTitle);
StripBBCodesInPlace(pd_out->pwzText);
@@ -105,14 +102,14 @@ INT_PTR OldCreatePopupExA(WPARAM wParam, LPARAM lParam) { pd_out->colorText = pd_in->colorText & 0xFFFFFF;
}
pd_out->windowProc = pd_in->PluginWindowProc;
- pd_out->opaque= pd_in->PluginData;
+ pd_out->opaque = pd_in->PluginData;
pd_out->timeout = pd_in->iSeconds;
lstPopupHistory.Add(pd_out->pwzTitle, pd_out->pwzText, time(0));
if(!DBGetContactSettingByte(0, MODULE, "Enabled", 1)) {
- free(pd_out->pwzTitle);
- free(pd_out->pwzText);
- free(pd_out);
+ mir_free(pd_out->pwzTitle);
+ mir_free(pd_out->pwzText);
+ mir_free(pd_out);
return -1;
}
@@ -124,12 +121,12 @@ INT_PTR OldCreatePopupExA(WPARAM wParam, LPARAM lParam) { INT_PTR OldCreatePopupW(WPARAM wParam, LPARAM lParam) {
POPUPDATAW *pd_in = (POPUPDATAW *)wParam;
- PopupData *pd_out = (PopupData *)malloc(sizeof(PopupData));
- ZeroMemory(pd_out, sizeof(PopupData));
+ PopupData *pd_out = (PopupData *)mir_calloc(sizeof(PopupData));
+
pd_out->cbSize = sizeof(PopupData);
pd_out->flags = PDF_UNICODE;
- pd_out->pwzTitle = wcsdup(pd_in->lpwzContactName);
- pd_out->pwzText = wcsdup(pd_in->lpwzText);
+ pd_out->pwzTitle = mir_wstrdup(pd_in->lpwzContactName);
+ pd_out->pwzText = mir_wstrdup(pd_in->lpwzText);
StripBBCodesInPlace(pd_out->pwzTitle);
StripBBCodesInPlace(pd_out->pwzText);
@@ -142,14 +139,14 @@ INT_PTR OldCreatePopupW(WPARAM wParam, LPARAM lParam) { pd_out->colorText = pd_in->colorText & 0xFFFFFF;
}
pd_out->windowProc = pd_in->PluginWindowProc;
- pd_out->opaque= pd_in->PluginData;
+ pd_out->opaque = pd_in->PluginData;
pd_out->timeout = pd_in->iSeconds;
lstPopupHistory.Add(pd_out->pwzTitle, pd_out->pwzText, time(0));
if(!DBGetContactSettingByte(0, MODULE, "Enabled", 1)) {
- free(pd_out->pwzTitle);
- free(pd_out->pwzText);
- free(pd_out);
+ mir_free(pd_out->pwzTitle);
+ mir_free(pd_out->pwzText);
+ mir_free(pd_out);
return -1;
}
@@ -160,52 +157,54 @@ INT_PTR OldCreatePopupW(WPARAM wParam, LPARAM lParam) { INT_PTR ChangeTextW(WPARAM wParam, LPARAM lParam) {
HWND hwndPop = (HWND)wParam;
- wchar_t *newText = wcsdup((wchar_t *)lParam);
+ wchar_t *newText = mir_wstrdup((wchar_t *)lParam);
StripBBCodesInPlace(newText);
if(IsWindow(hwndPop))
PostMessage(hwndPop, PUM_SETTEXT, 0, (LPARAM)newText);
+ else
+ mir_free(newText);
return 0;
}
INT_PTR ChangeTextA(WPARAM wParam, LPARAM lParam) {
HWND hwndPop = (HWND)wParam;
char *newText = (char *)lParam;
- wchar_t buff[MAX_SECONDLINE];
- a2w(newText, buff, MAX_SECONDLINE);
+ wchar_t* buff = mir_a2u(newText);
StripBBCodesInPlace(buff);
if(IsWindow(hwndPop))
- PostMessage(hwndPop, PUM_SETTEXT, 0, (LPARAM)wcsdup(buff));
+ PostMessage(hwndPop, PUM_SETTEXT, 0, (LPARAM)buff);
+ else
+ mir_free(buff);
return 0;
}
-INT_PTR ShowPopup(WPARAM wParam, LPARAM lParam) {
- PopupData *pd_in = (PopupData *)wParam;
- PopupData *pd_out = (PopupData *)malloc(sizeof(PopupData));
- *pd_out = *pd_in;
- if(pd_in->flags & PDF_UNICODE) {
- if(pd_in->pwzTitle) pd_out->pwzTitle = wcsdup(pd_in->pwzTitle);
- if(pd_in->pwzText) pd_out->pwzText = wcsdup(pd_in->pwzText);
+void ShowPopup(PopupData &pd_in)
+{
+ PopupData *pd_out = (PopupData *)mir_alloc(sizeof(PopupData));
+ *pd_out = pd_in;
+ if (pd_in.flags & PDF_UNICODE) {
+ pd_out->pwzTitle = mir_wstrdup(pd_in.pwzTitle);
+ pd_out->pwzText = mir_wstrdup(pd_in.pwzText);
} else {
pd_out->flags |= PDF_UNICODE;
- if(pd_in->pszTitle) pd_out->pwzTitle = a2w(pd_in->pszTitle);
- if(pd_in->pszText) pd_out->pwzText = a2w(pd_in->pszText);
+ pd_out->pwzTitle = mir_a2u(pd_in.pszTitle);
+ pd_out->pwzText = mir_a2u(pd_in.pszText);
}
StripBBCodesInPlace(pd_out->pwzTitle);
StripBBCodesInPlace(pd_out->pwzText);
lstPopupHistory.Add(pd_out->pwzTitle, pd_out->pwzText, time(0));
- if(!DBGetContactSettingByte(0, MODULE, "Enabled", 1)) {
- if(pd_out->pwzTitle) free(pd_out->pwzTitle);
- if(pd_out->pwzText) free(pd_out->pwzText);
- free(pd_out);
- return -1;
- }
- //MessageBox(0, pd_out->lpwzContactName, _T("CreatePopupW"), MB_OK);
- PostMPMessage(MUM_CREATEPOPUP, 0, (LPARAM)pd_out);
- return 0;
+ if(!DBGetContactSettingByte(0, MODULE, "Enabled", 1))
+ {
+ mir_free(pd_out->pwzTitle);
+ mir_free(pd_out->pwzText);
+ mir_free(pd_out);
+ }
+ else
+ PostMPMessage(MUM_CREATEPOPUP, 0, (LPARAM)pd_out);
}
INT_PTR GetContact(WPARAM wParam, LPARAM lParam) {
@@ -254,17 +253,16 @@ INT_PTR PopupQuery(WPARAM wParam, LPARAM lParam) { switch(wParam) {
case PUQS_ENABLEPOPUPS:
{
- bool enabled = (DBGetContactSettingByte(0, MODULE, "Enabled", 1) == 1);
- if(!enabled) DBWriteContactSettingByte(0, MODULE, "Enabled", 1);
- return enabled ? 0: 1;
+ bool enabled = DBGetContactSettingByte(0, MODULE, "Enabled", 1) != 0;
+ if (!enabled) DBWriteContactSettingByte(0, MODULE, "Enabled", 1);
+ return !enabled;
}
break;
case PUQS_DISABLEPOPUPS:
{
- bool enabled = (DBGetContactSettingByte(0, MODULE, "Enabled", 1) == 1);
- if(enabled) DBWriteContactSettingByte(0, MODULE, "Enabled", 0);
- DBWriteContactSettingByte(0, MODULE, "Enabled", 0);
- return enabled ? 1 : 0;
+ bool enabled = DBGetContactSettingByte(0, MODULE, "Enabled", 1) != 0;
+ if (enabled) DBWriteContactSettingByte(0, MODULE, "Enabled", 0);
+ return enabled;
}
break;
case PUQS_GETSTATUS:
@@ -277,11 +275,8 @@ INT_PTR PopupQuery(WPARAM wParam, LPARAM lParam) { }
INT_PTR TogglePopups(WPARAM wParam, LPARAM lParam) {
- if(DBGetContactSettingByte(0, MODULE, "Enabled", 1)) {
- DBWriteContactSettingByte(0, MODULE, "Enabled", 0);
- } else {
- DBWriteContactSettingByte(0, MODULE, "Enabled", 1);
- }
+ BYTE val = DBGetContactSettingByte(0, MODULE, "Enabled", 1);
+ DBWriteContactSettingByte(0, MODULE, "Enabled", !val);
UpdateMenu();
return 0;
}
@@ -291,12 +286,12 @@ INT_PTR PopupChangeA(WPARAM wParam, LPARAM lParam) { POPUPDATAEX *pd_in = (POPUPDATAEX *)lParam;
if(IsWindow(hwndPop)) {
- PopupData *pd_out = (PopupData *)malloc(sizeof(PopupData));
+ PopupData *pd_out = (PopupData *)mir_alloc(sizeof(PopupData));
pd_out->cbSize = sizeof(PopupData);
pd_out->flags = PDF_UNICODE;
- pd_out->pwzTitle = a2w(pd_in->lpzContactName);
- pd_out->pwzText = a2w(pd_in->lpzText);
+ pd_out->pwzTitle = mir_a2u(pd_in->lpzContactName);
+ pd_out->pwzText = mir_a2u(pd_in->lpzText);
StripBBCodesInPlace(pd_out->pwzTitle);
StripBBCodesInPlace(pd_out->pwzText);
@@ -326,12 +321,12 @@ INT_PTR PopupChangeW(WPARAM wParam, LPARAM lParam) { POPUPDATAW *pd_in = (POPUPDATAW *)lParam;
if(IsWindow(hwndPop)) {
- PopupData *pd_out = (PopupData *)malloc(sizeof(PopupData));
+ PopupData *pd_out = (PopupData *)mir_alloc(sizeof(PopupData));
pd_out->cbSize = sizeof(PopupData);
pd_out->flags = PDF_UNICODE;
- pd_out->pwzTitle = wcsdup(pd_in->lpwzContactName);
- pd_out->pwzText = wcsdup(pd_in->lpwzText);
+ pd_out->pwzTitle = mir_wstrdup(pd_in->lpwzContactName);
+ pd_out->pwzText = mir_wstrdup(pd_in->lpwzText);
StripBBCodesInPlace(pd_out->pwzTitle);
StripBBCodesInPlace(pd_out->pwzText);
@@ -362,9 +357,9 @@ INT_PTR ShowMessage(WPARAM wParam, LPARAM lParam) { POPUPDATAT pd = {0};
_tcscpy(pd.lptzContactName, lParam == SM_WARNING ? _T("Warning") : _T("Notification"));
pd.lchIcon = LoadIcon(0, lParam == SM_WARNING ? IDI_WARNING : IDI_INFORMATION);
- TCHAR buff[MAX_SECONDLINE];
- a2t((char *)wParam, buff, MAX_SECONDLINE);
- _tcscpy(pd.lptzText, buff);
+ TCHAR *buff = mir_a2t((char *)wParam);
+ _tcscpy(pd.lptzText, buff); pd.lptzText[MAX_SECONDLINE-1] = 0;
+ mir_free(buff);
CallService(MS_POPUP_ADDPOPUPT, (WPARAM)&pd, 0);
@@ -396,37 +391,40 @@ INT_PTR PopUp_ShowHistory(WPARAM wParam, LPARAM lParam) }
int num_classes = 0;
-PopupClass *classes = 0;
+POPUPCLASS *classes = 0;
-INT_PTR RegisterPopupClass(WPARAM wParam, LPARAM lParam) {
- PopupClass *pc = (PopupClass *)lParam;
- pc->pszName = strdup(pc->pszName);
+INT_PTR RegisterPopupClass(WPARAM wParam, LPARAM lParam)
+{
+ POPUPCLASS *pc = (POPUPCLASS *)lParam;
+ pc->pszName = mir_strdup(pc->pszName);
if(pc->flags & PCF_UNICODE)
- pc->pwszDescription = wcsdup(pc->pwszDescription);
+ pc->pwszDescription = mir_wstrdup(pc->pwszDescription);
else
- pc->pszDescription = strdup(pc->pszDescription);
+ pc->pszDescription = mir_strdup(pc->pszDescription);
char setting[256];
mir_snprintf(setting, 256, "%s/Timeout", pc->pszName);
- pc->timeout = DBGetContactSettingWord(0, MODULE, setting, pc->timeout);
- if(pc->timeout == (WORD)-1) pc->timeout = -1;
+ pc->iSeconds = DBGetContactSettingWord(0, MODULE, setting, pc->iSeconds);
+ if(pc->iSeconds == (WORD)-1) pc->iSeconds = -1;
mir_snprintf(setting, 256, "%s/TextCol", pc->pszName);
pc->colorText = (COLORREF)DBGetContactSettingDword(0, MODULE, setting, (DWORD)pc->colorText);
mir_snprintf(setting, 256, "%s/BgCol", pc->pszName);
pc->colorBack = (COLORREF)DBGetContactSettingDword(0, MODULE, setting, (DWORD)pc->colorBack);
- classes = (PopupClass *)realloc(classes, sizeof(PopupClass) * (num_classes + 1));
- memcpy(classes + num_classes, pc, sizeof(PopupClass));
+ classes = (POPUPCLASS *)mir_realloc(classes, sizeof(POPUPCLASS) * (num_classes + 1));
+ memcpy(classes + num_classes, pc, sizeof(POPUPCLASS));
num_classes++;
return 0;
}
-INT_PTR CreateClassPopup(WPARAM wParam, LPARAM lParam) {
- PopupClassInstance *pdc = (PopupClassInstance *)lParam;
- if(pdc->cbSize != sizeof(PopupClassInstance)) return 1;
+INT_PTR CreateClassPopup(WPARAM wParam, LPARAM lParam)
+{
+ POPUPDATACLASS *pdc = (POPUPDATACLASS *)lParam;
+ if(pdc->cbSize < sizeof(POPUPDATACLASS)) return 1;
- PopupClass *pc = 0;
- if(wParam) pc = (PopupClass *)wParam;
+ POPUPCLASS *pc = 0;
+ if(wParam)
+ pc = (POPUPCLASS *)wParam;
else {
for(int i = 0; i < num_classes; i++) {
if(strcmp(classes[i].pszName, pdc->pszClassName) == 0) {
@@ -441,15 +439,15 @@ INT_PTR CreateClassPopup(WPARAM wParam, LPARAM lParam) { pd.colorBack = pc->colorBack;
pd.colorText = pc->colorText;
pd.hIcon = pc->hIcon;
- pd.timeout = pc->timeout;
- pd.windowProc = pc->windowProc;
+ pd.timeout = pc->iSeconds;
+ pd.windowProc = pc->PluginWindowProc;
pd.hContact = pdc->hContact;
- pd.opaque = pdc->opaque;
+ pd.opaque = pdc->PluginData;
pd.pszTitle = (char *)pdc->pszTitle;
pd.pszText = (char *)pdc->pszText;
- CallService(MS_YAPP_SHOWPOPUP, (WPARAM)&pd, 0);
+ ShowPopup(pd);
}
return 0;
}
@@ -462,13 +460,8 @@ HANDLE hEventBuildMenu; void InitServices() {
int i = 0;
- hService[i++] = CreateServiceFunction(MS_YAPP_SHOWPOPUP, ShowPopup);
hService[i++] = CreateServiceFunction(MS_POPUP_REGISTERCLASS, RegisterPopupClass);
hService[i++] = CreateServiceFunction(MS_POPUP_ADDPOPUPCLASS, CreateClassPopup);
- hService[i++] = CreateServiceFunction(MS_YAPP_GETCONTACT, GetContact);
- hService[i++] = CreateServiceFunction(MS_YAPP_GETOPAQUE, GetOpaque);
-
- // legacy support
hService[i++] = CreateServiceFunction(MS_POPUP_ADDPOPUP, OldCreatePopupA);
hService[i++] = CreateServiceFunction(MS_POPUP_ADDPOPUPEX, OldCreatePopupExA);
hService[i++] = CreateServiceFunction(MS_POPUP_ADDPOPUPW, OldCreatePopupW);
@@ -490,37 +483,34 @@ void InitServices() { CLISTMENUITEM menu = {0};
- menu.cbSize=sizeof(menu);
+ menu.cbSize = sizeof(menu);
menu.flags = CMIM_ALL;
- menu.hIcon=0;
menu.position = 500010000;
- menu.pszPopupName = "PopUps";
+ menu.pszPopupName = LPGEN("PopUps");
hiPopupHistory = LoadIcon(hInst, MAKEINTRESOURCE(IDI_POPUP_HISTORY));
menu.hIcon = hiPopupHistory;
menu.pszService= MS_POPUP_SHOWHISTORY;
- menu.pszName = "Popup History";
+ menu.pszName = LPGEN("Popup History");
hMenuShowHistory = (HANDLE)CallService(MS_CLIST_ADDMAINMENUITEM, 0, (LPARAM)&menu);
- menu.hIcon = 0;
-
- menu.pszService= "PopUp/ToggleEnabled";
- menu.pszName = (DBGetContactSettingByte(0, MODULE, "Enabled", 1) == 1 ? "Disable Popups" : "Enable Popups");
+
+ menu.hIcon = NULL;
+ menu.pszService = "PopUp/ToggleEnabled";
+ menu.pszName = DBGetContactSettingByte(0, MODULE, "Enabled", 1) ?
+ LPGEN("Disable Popups") : LPGEN("Enable Popups");
hMenuToggleOnOff = (HANDLE)CallService(MS_CLIST_ADDMAINMENUITEM, 0, (LPARAM)&menu);
hEventBuildMenu = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, PrebuildMenu);
-
- if(ServiceExists(MS_LANGPACK_GETCODEPAGE))
- code_page = CallService(MS_LANGPACK_GETCODEPAGE, 0, 0);
}
void DeinitServices() {
int i;
for(i = 0; i < num_classes; i++) {
- free(classes[i].pszName);
- free(classes[i].pszDescription);
+ mir_free(classes[i].pszName);
+ mir_free(classes[i].pszDescription);
}
- free(classes); num_classes = 0;
+ mir_free(classes); num_classes = 0;
UnhookEvent(hEventBuildMenu);
|