From 5ac26cff397836222eb8d51d866890f96321c601 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@4f64403b-2f21-0410-a795-97e2b3489a10> Date: Sun, 25 Apr 2010 15:57:51 +0000 Subject: Optimizations, removed redundant code, better compatibility with popup+ git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@512 4f64403b-2f21-0410-a795-97e2b3489a10 --- yapp/services.cpp | 202 ++++++++++++++++++++++++++---------------------------- 1 file changed, 96 insertions(+), 106 deletions(-) (limited to 'yapp/services.cpp') 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 -#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); -- cgit v1.2.3