summaryrefslogtreecommitdiff
path: root/plugins/NewEventNotify/popup.c
diff options
context:
space:
mode:
authorKirill Volinsky <mataes2007@gmail.com>2012-06-27 19:56:40 +0000
committerKirill Volinsky <mataes2007@gmail.com>2012-06-27 19:56:40 +0000
commit3b0c1d088b26331fe171699abf3669c99cc5b0f1 (patch)
tree75068f8b07f13192ca7257a43f74874553090446 /plugins/NewEventNotify/popup.c
parentf9eb107520e9dad37b06eb5c737b39d7bc15c751 (diff)
NewEventNotify:
renamed to .cpp git-svn-id: http://svn.miranda-ng.org/main/trunk@656 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/NewEventNotify/popup.c')
-rw-r--r--plugins/NewEventNotify/popup.c754
1 files changed, 0 insertions, 754 deletions
diff --git a/plugins/NewEventNotify/popup.c b/plugins/NewEventNotify/popup.c
deleted file mode 100644
index 966b0630fe..0000000000
--- a/plugins/NewEventNotify/popup.c
+++ /dev/null
@@ -1,754 +0,0 @@
-/*
- Name: NewEventNotify - Plugin for Miranda IM
- File: popup.c - Displays a popup using the popup-plugin by hrk
- Version: 2.2.3
- Description: Notifies you about some events
- Author: icebreaker, <icebreaker@newmail.net>
- Date: 21.07.02 15:46 / Update: 16.09.02 17:45
- Copyright: (C) 2002 Starzinger Michael
-
- 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 "neweventnotify.h"
-#include <m_skin.h>
-#include <m_clist.h>
-#include <m_system.h>
-#include <m_protocols.h>
-//needed for ICQEVENTTYPE_* (Webpager & Emailexpress)
-#include <m_protosvc.h>
-#include <m_icq.h>
-//needed for reply instead of read
-#include <m_message.h>
-#include <m_popup.h>
-#include <string.h>
-#include <time.h>
-
-#define SIZEOF(X) (sizeof(X)/(g_UnicodeCore?sizeof(WCHAR):sizeof(char)))
-
-extern int g_IsServiceAvail;
-
-static int PopupCount = 0;
-
-PLUGIN_DATA* PopUpList[MAX_POPUPS];
-
-/*
-TIME NowTime()
-{
- time_t actTime;
- TIME endTime;
- time(&actTime);
- strftime(endTime.time,sizeof(endTime.time), "%H:%M", localtime(&actTime));
- strftime(endTime.date,sizeof(endTime.date), "%Y.%m.%d", localtime(&actTime));
- strftime(endTime.all,sizeof(endTime.all), "%Y.%m.%d %H:%M", localtime(&actTime));
- return endTime;
-}
-*/
-
-int NumberPopupData(HANDLE hContact, int eventType)
-{
- int n;
-
- for (n=0;n<MAX_POPUPS;n++)
- {
- if (!PopUpList[n] && !hContact && eventType == -1)
- return n;
-
- if (PopUpList[n] && (PopUpList[n]->hContact == hContact) && (PopUpList[n]->iLock == 0) && (eventType == -1 || PopUpList[n]->eventType == (UINT)eventType))
- return n;
- }
- return -1;
-}
-
-
-
-static int FindPopupData(PLUGIN_DATA* pdata)
-{
- int n;
-
- for (n=0;n<MAX_POPUPS;n++)
- {
- if (PopUpList[n] == pdata)
- return n;
- }
- return -1;
-}
-
-
-
-static void FreePopupEventData(PLUGIN_DATA* pdata)
-{
- EVENT_DATA_EX* eventData;
-
- pdata->iLock = 1;
- eventData = pdata->firstEventData;
- while (eventData)
- {
- if (eventData->next)
- {
- eventData = eventData->next;
- mir_free(eventData->prev);
- eventData->prev = NULL;
- }
- else
- {
- mir_free(eventData);
- eventData = NULL;
- }
- }
- pdata->lastEventData = pdata->firstEventData = pdata->firstShowEventData = NULL;
- // remove from popup list if present
- if (FindPopupData(pdata) != -1)
- PopUpList[FindPopupData(pdata)] = NULL;
-}
-
-
-
-int PopupAct(HWND hWnd, UINT mask, PLUGIN_DATA* pdata)
-{
- EVENT_DATA_EX* eventData;
-
- if (mask & MASK_OPEN)
- {
- if (pdata)
- {
- // do MS_MSG_SENDMESSAGE instead if wanted to reply and not read!
- if (pdata->pluginOptions->bMsgReplyWindow && pdata->eventType == EVENTTYPE_MESSAGE)
- {
- CallServiceSync(MS_MSG_SENDMESSAGE, (WPARAM)pdata->hContact, (LPARAM)NULL); // JK, use core (since 0.3.3+)
- }
- else
- {
- CLISTEVENT* cle;
- int idx = 0;
-
- eventData = pdata->firstEventData;
- if (eventData)
- {
- do { //try to find the correct clist event //JK
- cle = (CLISTEVENT*)CallService(MS_CLIST_GETEVENT, (WPARAM)pdata->hContact, idx);
- if (cle && cle->hDbEvent == eventData->hEvent)
- {
- if (ServiceExists(cle->pszService))
- CallServiceSync(cle->pszService, (WPARAM)NULL, (LPARAM)cle); // JK, use core (since 0.3.3+)
- break;
- }
- idx++;
- } while (cle);
- }
- }
- }
- }
-
- if (mask & MASK_REMOVE)
- {
- if (pdata)
- {
- eventData = pdata->firstEventData;
- pdata->iLock = 1;
- while (eventData)
- {
- CallService(MS_CLIST_REMOVEEVENT, (WPARAM)pdata->hContact, (LPARAM)eventData->hEvent);
- CallService(MS_DB_EVENT_MARKREAD, (WPARAM)pdata->hContact, (LPARAM)eventData->hEvent);
- eventData = eventData->next;
- }
- FreePopupEventData(pdata);
- }
- }
-
- if (mask & MASK_DISMISS)
- {
- KillTimer(hWnd, TIMER_TO_ACTION);
- FreePopupEventData(pdata);
- PUDeletePopUp(hWnd);
- }
-
- return 0;
-}
-
-static BOOL CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- PLUGIN_DATA* pdata = NULL;
-
- pdata = (PLUGIN_DATA*)CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd, (LPARAM)pdata);
- if (!pdata) return FALSE;
-
- switch (message)
- {
- case WM_COMMAND:
- PopupAct(hWnd, pdata->pluginOptions->maskActL, pdata);
- break;
- case WM_CONTEXTMENU:
- PopupAct(hWnd, pdata->pluginOptions->maskActR, pdata);
- break;
- case UM_FREEPLUGINDATA:
- PopupCount--;
- mir_free(pdata);
- return TRUE;
- case UM_INITPOPUP:
- pdata->hWnd = hWnd;
- SetTimer(hWnd, TIMER_TO_ACTION, pdata->iSeconds * 1000, NULL);
- break;
- case WM_MOUSEWHEEL:
- if ((short)HIWORD(wParam) > 0 && pdata->firstShowEventData->prev &&
- (pdata->pluginOptions->bShowON || pdata->firstShowEventData->number >= pdata->pluginOptions->iNumberMsg))
- {
- pdata->firstShowEventData = pdata->firstShowEventData->prev;
- PopupUpdate(pdata->hContact, NULL);
- }
- if ((short)HIWORD(wParam) < 0 && pdata->firstShowEventData->next &&
- (!pdata->pluginOptions->bShowON || pdata->countEvent - pdata->firstShowEventData->number >= pdata->pluginOptions->iNumberMsg))
- {
- pdata->firstShowEventData = pdata->firstShowEventData->next;
- PopupUpdate(pdata->hContact, NULL);
- }
- break;
- case WM_SETCURSOR:
- SetFocus(hWnd);
- break;
- case WM_TIMER:
- if (wParam != TIMER_TO_ACTION)
- break;
- PopupAct(hWnd, pdata->pluginOptions->maskActTE, pdata);
- break;
- default:
- break;
- }
- if (g_UnicodeCore)
- return DefWindowProcW(hWnd, message, wParam, lParam);
- else
- return DefWindowProcA(hWnd, message, wParam, lParam);
-}
-
-static TCHAR* event_to_tchar(char* pBlob, DWORD flags)
-{
-// if (flags & DBEF_UTF)
-// return utf8_to_tchar(pBlob);
-// else
- return ansi_to_tchar(pBlob);
-}
-
-static TCHAR* GetEventPreview(DBEVENTINFO *dbei)
-{
- TCHAR* comment1 = NULL;
- TCHAR* comment2 = NULL;
- TCHAR* commentFix = NULL;
-
- //now get text
- switch (dbei->eventType)
- {
- case EVENTTYPE_MESSAGE:
- {
- if (dbei->pBlob)
- {
- if (dbei->flags & DBEF_UTF)
- { // utf-8 in blob
- comment1 = utf8_to_tchar(dbei->pBlob);
- }
- else if (dbei->cbBlob == (strlennull((char *)dbei->pBlob)+1)*(sizeof(WCHAR)+1))
- { // wchar in blob (the old hack)
- if (g_UnicodeCore)
- comment1 = strdupT((TCHAR*)(dbei->pBlob + strlennull((char *)dbei->pBlob) + 1));
- else
- comment1 = strdupT((TCHAR*)dbei->pBlob);
- }
- else
- comment1 = (TCHAR *)(dbei->pBlob);
- }
- commentFix = POPUP_COMMENT_MESSAGE;
- break;
- }
-
- case EVENTTYPE_URL:
- // url
- if (dbei->pBlob) comment2 = (TCHAR *)(dbei->pBlob);
- // comment
- if (dbei->pBlob) comment1 = (TCHAR *)(dbei->pBlob + strlennull((char *)dbei->pBlob) + 1);
- commentFix = POPUP_COMMENT_URL;
- break;
-
- case EVENTTYPE_FILE:
- // filenames
- if (dbei->pBlob) comment2 = event_to_tchar((char *)dbei->pBlob + 4, dbei->flags);
- // description
- if (dbei->pBlob) comment1 = event_to_tchar((char *)dbei->pBlob + strlennull((char *)dbei->pBlob + 4) + 1, dbei->flags);
- commentFix = POPUP_COMMENT_FILE;
- break;
-
-//blob format is:
-//ASCIIZ nick
-//ASCIIZ UID
- case EVENTTYPE_CONTACTS:
- if (dbei->pBlob)
- { // count contacts in event
- char* pcBlob = (char *)dbei->pBlob;
- char* pcEnd = (char *)dbei->pBlob + dbei->cbBlob;
- int nContacts;
- TCHAR szBuf[512];
- WCHAR szTmp[512];
-
- for (nContacts = 1; ; nContacts++)
- { // Nick
- pcBlob += strlennull(pcBlob) + 1;
- // UIN
- pcBlob += strlennull(pcBlob) + 1;
- // check for end of contacts
- if (pcBlob >= pcEnd)
- break;
- }
- if (g_UnicodeCore)
- {
- _sntprintf((WCHAR*)szBuf, SIZEOF(szBuf), (WCHAR*)NENTranslateT("Received %d contacts.", szTmp), nContacts);
- ((WCHAR*)szBuf)[255] = 0;
- }
- else
- _snprintfT(szBuf, SIZEOF(szBuf), (char *)NENTranslateT("Received %d contacts.", szTmp), nContacts);
- comment1 = strdupT(szBuf);
- }
- commentFix = POPUP_COMMENT_CONTACTS;
- break;
-
-//blob format is:
-//DWORD numeric uin (ICQ only afaik)
-//DWORD HANDLE to contact
-//ASCIIZ nick (or text UID)
-//ASCIIZ first name
-//ASCIIZ last name
-//ASCIIZ email (or YID)
- case EVENTTYPE_ADDED:
- if (dbei->pBlob)
- {
- TCHAR szUin[16];
- TCHAR szBuf[2048];
- TCHAR* szNick = NULL;
- TCHAR *pszNick = (TCHAR *)dbei->pBlob + 8;
- TCHAR *pszFirst = pszNick + strlennull((char *)pszNick) + 1;
- TCHAR *pszLast = pszFirst + strlennull((char *)pszFirst) + 1;
- TCHAR *pszEmail = pszLast + strlennull((char *)pszLast) + 1;
-
- _sntprintf(szUin, 16, _T("%d"), *((DWORD*)dbei->pBlob));
- if (strlennull((char *)pszNick) > 0)
- szNick = pszNick;
- else if (strlennull((char *)pszEmail) > 0)
- szNick = pszEmail;
- else if (*((DWORD*)dbei->pBlob) > 0)
- szNick = szUin;
-
- if (szNick)
- {
- strcpyT(szBuf, szNick);
- strcatT(szBuf, NENTranslateT(" added you to the contact list", (WCHAR*)szBuf + strlenT(szBuf) + 1));
- mir_free(szNick);
- comment1 = strdupT(szBuf);
- }
- }
- commentFix = POPUP_COMMENT_ADDED;
- break;
-
- case EVENTTYPE_AUTHREQUEST:
- if (dbei->pBlob)
- {
- TCHAR szUin[16];
- TCHAR szBuf[2048];
- TCHAR* szNick = NULL;
- TCHAR *pszNick = (TCHAR *)dbei->pBlob + 8;
- TCHAR *pszFirst = pszNick + strlennull((char *)pszNick) + 1;
- TCHAR *pszLast = pszFirst + strlennull((char *)pszFirst) + 1;
- TCHAR *pszEmail = pszLast + strlennull((char *)pszLast) + 1;
-
- _snwprintf(szUin, 16, _T("%d"), *((DWORD*)dbei->pBlob));
- if (strlennull((char *)pszNick) > 0)
- szNick = pszNick;
- else if (strlennull((char *)pszEmail) > 0)
- szNick = pszEmail;
- else if (*((DWORD*)dbei->pBlob) > 0)
- szNick = szUin;
-
- if (szNick)
- {
- strcpyT(szBuf, szNick);
- strcatT(szBuf, NENTranslateT(" requested authorization", (WCHAR*)szBuf + strlenT(szBuf) + 1));
- mir_free(szNick);
- comment1 = strdupT(szBuf);
- }
- }
- commentFix = POPUP_COMMENT_AUTH;
- break;
-
-//blob format is:
-//ASCIIZ text, usually "Sender IP: xxx.xxx.xxx.xxx\r\n%s"
-//ASCIIZ from name
-//ASCIIZ from e-mail
- case ICQEVENTTYPE_WEBPAGER:
- if (dbei->pBlob) comment1 = (TCHAR *)(dbei->pBlob);
-// if (dbei->pBlob) comment1 = dbei->pBlob + strlennull(comment2) + 1;
- commentFix = POPUP_COMMENT_WEBPAGER;
- break;
-
-//blob format is:
-//ASCIIZ text, usually of the form "Subject: %s\r\n%s"
-//ASCIIZ from name
-//ASCIIZ from e-mail
- case ICQEVENTTYPE_EMAILEXPRESS:
- if (dbei->pBlob) comment1 = (TCHAR *)(dbei->pBlob);
-// if (dbei->pBlob) comment1 = dbei->pBlob + strlennull(comment2) + 1;
- commentFix = POPUP_COMMENT_EMAILEXP;
- break;
-
- default:
- {
- if (ServiceExists(MS_DB_EVENT_GETTYPE))
- {
- DBEVENTTYPEDESCR *pei = (DBEVENTTYPEDESCR *)CallService(MS_DB_EVENT_GETTYPE, (WPARAM)dbei->szModule, (LPARAM)dbei->eventType);
- if ((pei && pei->cbSize) >= DBEVENTTYPEDESCR_SIZE)
- { // support for custom database event types
- if (dbei->pBlob)
- { // preview requested
- DBEVENTGETTEXT svc = {dbei, g_UnicodeCore ? DBVT_WCHAR : DBVT_ASCIIZ, CP_ACP};
- char *pet = (char *)CallService(MS_DB_EVENT_GETTEXT, 0, (LPARAM)&svc);
- if (pet)
- { // we've got event text, move to our memory space
- comment1 = strdupT((TCHAR *)pet);
- mir_free(&pet);
- }
- }
- commentFix = (TCHAR *)pei->descr;
- }
- else
- commentFix = POPUP_COMMENT_OTHER;
-
- break;
- }
- // else
- // commentFix = POPUP_COMMENT_OTHER;
-
-
- }
- }
-
- if (strlenT(comment1) > 0)
- {
- mir_free(comment2);
- return comment1;
- }
- if (strlenT(comment2) > 0)
- {
- mir_free(comment1);
- return comment2;
- }
- mir_free(comment1);
- mir_free(comment2);
-
- {
- WCHAR tmp[MAX_PATH];
-
- return strdupT(NENTranslateT((char *)commentFix, tmp));
- }
-}
-
-int PopupShow(PLUGIN_OPTIONS* pluginOptions, HANDLE hContact, HANDLE hEvent, UINT eventType)
-{
- POPUPDATAEX puda;
- POPUPDATAW pudw;
- PLUGIN_DATA* pdata;
- DBEVENTINFO dbe = {0};
- EVENT_DATA_EX* eventData;
- char* sampleEvent;
- long iSeconds;
-
- //there has to be a maximum number of popups shown at the same time
- if (PopupCount >= MAX_POPUPS)
- return 2;
-
- //check if we should report this kind of event
- //get the prefered icon as well
- //CHANGE: iSeconds is -1 because I use my timer to hide popup
- pudw.iSeconds = -1;
-
- switch (eventType)
- {
- case EVENTTYPE_MESSAGE:
- if (!(pluginOptions->maskNotify&MASK_MESSAGE)) return 1;
- pudw.lchIcon = LoadSkinnedIcon(SKINICON_EVENT_MESSAGE);
- pudw.colorBack = pluginOptions->bDefaultColorMsg ? 0 : pluginOptions->colBackMsg;
- pudw.colorText = pluginOptions->bDefaultColorMsg ? 0 : pluginOptions->colTextMsg;
- iSeconds = pluginOptions->iDelayMsg;
- sampleEvent = LPGEN("This is a sample message event :-)");
- break;
- case EVENTTYPE_URL:
- if (!(pluginOptions->maskNotify&MASK_URL)) return 1;
- pudw.lchIcon = LoadSkinnedIcon(SKINICON_EVENT_URL);
- pudw.colorBack = pluginOptions->bDefaultColorUrl ? 0 : pluginOptions->colBackUrl;
- pudw.colorText = pluginOptions->bDefaultColorUrl ? 0 : pluginOptions->colTextUrl;
- iSeconds = pluginOptions->iDelayUrl;
- sampleEvent = LPGEN("This is a sample URL event ;-)");
- break;
- case EVENTTYPE_FILE:
- if (!(pluginOptions->maskNotify&MASK_FILE)) return 1;
- pudw.lchIcon = LoadSkinnedIcon(SKINICON_EVENT_FILE);
- pudw.colorBack = pluginOptions->bDefaultColorFile ? 0 : pluginOptions->colBackFile;
- pudw.colorText = pluginOptions->bDefaultColorFile ? 0 : pluginOptions->colTextFile;
- iSeconds = pluginOptions->iDelayFile;
- sampleEvent = LPGEN("This is a sample file event :-D");
- break;
- default:
- if (!(pluginOptions->maskNotify&MASK_OTHER)) return 1;
- pudw.lchIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA);
- pudw.colorBack = pluginOptions->bDefaultColorOthers ? 0 : pluginOptions->colBackOthers;
- pudw.colorText = pluginOptions->bDefaultColorOthers ? 0 : pluginOptions->colTextOthers;
- iSeconds = pluginOptions->iDelayOthers;
- sampleEvent = LPGEN("This is a sample other event ;-D");
- break;
- }
-
- //get DBEVENTINFO with pBlob if preview is needed (when is test then is off)
- dbe.cbSize = sizeof(dbe);
-
- if ((pluginOptions->bPreview || eventType == EVENTTYPE_ADDED || eventType == EVENTTYPE_AUTHREQUEST) && hEvent)
- {
- dbe.cbBlob = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)hEvent, 0);
- dbe.pBlob = (PBYTE)malloc(dbe.cbBlob);
- }
- if (hEvent)
- CallService(MS_DB_EVENT_GET, (WPARAM)hEvent, (LPARAM)&dbe);
-
- eventData = (EVENT_DATA_EX*)malloc(sizeof(EVENT_DATA_EX));
- eventData->hEvent = hEvent;
- eventData->number = 1;
- eventData->next = NULL;
- eventData->prev = NULL;
-
- // retrieve correct hContact for AUTH events
- if (dbe.pBlob && (eventType == EVENTTYPE_ADDED || eventType == EVENTTYPE_AUTHREQUEST))
- hContact = *((PHANDLE)(dbe.pBlob + sizeof(DWORD)));
-
- // set plugin_data ... will be usable within PopupDlgProc
- pdata = (PLUGIN_DATA*)malloc(sizeof(PLUGIN_DATA));
- pdata->eventType = eventType;
- pdata->hContact = hContact;
- pdata->pluginOptions = pluginOptions;
- pdata->countEvent = 1;
- pdata->iLock = 0;
- pdata->iSeconds = (iSeconds > 0) ? iSeconds : pluginOptions->iDelayDefault;
- pdata->firstEventData = pdata->firstShowEventData = pdata->lastEventData = eventData;
-
- // finally create the popup
- pudw.lchContact = hContact;
- pudw.PluginWindowProc = (WNDPROC)PopupDlgProc;
- pudw.PluginData = pdata;
-
- // if hContact is NULL, && hEvent is NULL then popup is only Test
- if ((hContact == NULL) && (hEvent == NULL))
- {
- strncpyT((TCHAR*)pudw.lptzContactName, NENTranslateT("Plugin Test", pudw.lpwzContactName), MAX_CONTACTNAME);
- strncpyT((TCHAR*)pudw.lptzText, NENTranslateT((char *)sampleEvent, pudw.lpwzText), MAX_SECONDLINE);
- }
- else
- { // get the needed event data
- TCHAR* szEventPreview;
-
- strncpyT((TCHAR*)pudw.lptzContactName, (TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hContact, g_UnicodeCore ? GCDNF_UNICODE : 0), MAX_CONTACTNAME);
- szEventPreview = GetEventPreview(&dbe);
- strncpyT((TCHAR*)pudw.lptzText, szEventPreview, MAX_SECONDLINE);
- mir_free(szEventPreview);
- }
-
- PopupCount++;
-
- PopUpList[NumberPopupData(NULL, -1)] = pdata;
- // send data to popup plugin
-
- if (g_UnicodeCore && ServiceExists(MS_POPUP_ADDPOPUPW))
- {
- pdata->isUnicode = 1;
- if (CallService(MS_POPUP_ADDPOPUPW, (WPARAM)&pudw, 0) < 0)
- { // popup creation failed, release popupdata
- FreePopupEventData(pdata);
- mir_free(pdata);
- }
- }
- else // convert to ansi
- {
- pdata->isUnicode = 0;
- puda.iSeconds = pudw.iSeconds;
- puda.lchIcon = pudw.lchIcon;
- puda.colorBack = pudw.colorBack;
- puda.colorText = pudw.colorText;
- puda.lchContact = pudw.lchContact;
- puda.PluginWindowProc = pudw.PluginWindowProc;
- puda.PluginData = pudw.PluginData;
- {
- char* szAnsi;
-
- szAnsi = tchar_to_ansi((TCHAR*)pudw.lptzContactName);
- if (szAnsi)
- strncpy(puda.lpzContactName, szAnsi, MAX_CONTACTNAME);
- else
- strcpy(puda.lpzContactName, "");
- mir_free(szAnsi);
- szAnsi = tchar_to_ansi((TCHAR*)pudw.lptzText);
- if (szAnsi)
- strncpy(puda.lpzText, szAnsi, MAX_SECONDLINE);
- else
- strcpy(puda.lpzText, "");
- mir_free(szAnsi);
- }
- if (CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&puda, 0) < 0)
- { // popup creation failed, release popupdata
- FreePopupEventData(pdata);
- mir_free(pdata);
- }
- }
- if (dbe.pBlob)
- mir_free(dbe.pBlob);
-
- return 0;
-}
-
-
-int PopupUpdate(HANDLE hContact, HANDLE hEvent)
-{
- PLUGIN_DATA* pdata;
- DBEVENTINFO dbe = {0};
- EVENT_DATA_EX* eventData;
- TCHAR lpzText[MAX_SECONDLINE*2] = _T("\0\0");
- char timestamp[MAX_DATASIZE] = "";
- char formatTime[MAX_DATASIZE] = "";
- int iEvent = 0;
- int doReverse = 0;
-
- // merge only message popups
- pdata = (PLUGIN_DATA*)PopUpList[NumberPopupData(hContact, EVENTTYPE_MESSAGE)];
-
- if (hEvent)
- {
- pdata->countEvent++;
-
- pdata->lastEventData->next = malloc(sizeof(EVENT_DATA_EX));
- pdata->lastEventData->next->prev = pdata->lastEventData;
- pdata->lastEventData = pdata->lastEventData->next;
- pdata->lastEventData->hEvent = hEvent;
- pdata->lastEventData->number = pdata->lastEventData->prev->number + 1;
- pdata->lastEventData->next = NULL;
- if (!pdata->pluginOptions->bShowON && pdata->countEvent > pdata->pluginOptions->iNumberMsg && pdata->pluginOptions->iNumberMsg)
- pdata->firstShowEventData = pdata->firstShowEventData->next;
- //re-init timer delay
- KillTimer(pdata->hWnd, TIMER_TO_ACTION);
- SetTimer(pdata->hWnd, TIMER_TO_ACTION, pdata->iSeconds * 1000, NULL);
- }
-
- if (pdata->pluginOptions->bShowHeaders)
- {
- WCHAR tmp[MAX_PATH];
-
- _snprintfT(lpzText, SIZEOF(lpzText), "[b]%s %d[/b]\n", NENTranslateT("Number of new message: ", tmp), pdata->countEvent);
- }
-
- doReverse = pdata->pluginOptions->bShowON;
-
- if ((pdata->firstShowEventData != pdata->firstEventData && doReverse) ||
- (pdata->firstShowEventData != pdata->lastEventData && !doReverse))
- _snprintfT(lpzText, SIZEOF(lpzText), "%s...\n", lpzText);
-
-
- //take the active event as starting one
- eventData = pdata->firstShowEventData;
-
- while (TRUE)
- {
- if (iEvent)
- {
- if (doReverse)
- {
- eventData = eventData->next;
- }
- else
- {
- eventData = eventData->prev;
- }
- }
- iEvent++;
- //get DBEVENTINFO with pBlob if preview is needed (when is test then is off)
- dbe.cbSize = sizeof(dbe);
- dbe.pBlob = NULL;
- dbe.cbBlob = 0;
- if (pdata->pluginOptions->bPreview && eventData->hEvent)
- {
- dbe.cbBlob = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)eventData->hEvent, 0);
- dbe.pBlob = (PBYTE)malloc(dbe.cbBlob);
- }
- if (eventData->hEvent)
- CallService(MS_DB_EVENT_GET, (WPARAM)eventData->hEvent, (LPARAM)&dbe);
- if (pdata->pluginOptions->bShowDate || pdata->pluginOptions->bShowTime)
- {
- strncpy(formatTime,"",sizeof(formatTime));
- if (pdata->pluginOptions->bShowDate)
- strncpy(formatTime, "%Y.%m.%d ", sizeof(formatTime));
- if (pdata->pluginOptions->bShowTime)
- strncat(formatTime, "%H:%M", sizeof(formatTime));
- strftime(timestamp,sizeof(timestamp), formatTime, localtime((time_t *)&dbe.timestamp));
- if (g_UnicodeCore)
- _snprintfT(lpzText, SIZEOF(lpzText), "%s[b][i]%S[/i][/b]\n", lpzText, timestamp);
- else
- _snprintfT(lpzText, SIZEOF(lpzText), "%s[b][i]%s[/i][/b]\n", lpzText, timestamp);
- }
- { // prepare event preview
- TCHAR* szEventPreview = GetEventPreview(&dbe);
-
- _snprintfT(lpzText, SIZEOF(lpzText), "%s%s", lpzText, szEventPreview);
- mir_free(szEventPreview);
- }
- if (dbe.pBlob)
- mir_free(dbe.pBlob);
- if (doReverse)
- {
- if ((iEvent >= pdata->pluginOptions->iNumberMsg && pdata->pluginOptions->iNumberMsg) || !eventData->next)
- break;
- }
- else
- {
- if ((iEvent >= pdata->pluginOptions->iNumberMsg && pdata->pluginOptions->iNumberMsg) || !eventData->prev)
- break;
- }
-
- _snprintfT(lpzText, SIZEOF(lpzText), "%s\n", lpzText);
- }
- if ((doReverse && eventData->next) || (!doReverse && eventData->prev))
- {
- _snprintfT(lpzText, SIZEOF(lpzText), "%s\n...", lpzText);
- }
- if (pdata->isUnicode)
- {
- CallService(MS_POPUP_CHANGETEXTW, (WPARAM)pdata->hWnd, (LPARAM)lpzText);
- }
- else
- {
- char* szAnsi = tchar_to_ansi(lpzText);
- CallService(MS_POPUP_CHANGETEXT, (WPARAM)pdata->hWnd, (LPARAM)szAnsi);
- mir_free(szAnsi);
- }
- return 0;
-}
-
-int PopupPreview(PLUGIN_OPTIONS* pluginOptions)
-{
- PopupShow(pluginOptions, NULL, NULL, EVENTTYPE_MESSAGE);
- PopupShow(pluginOptions, NULL, NULL, EVENTTYPE_URL);
- PopupShow(pluginOptions, NULL, NULL, EVENTTYPE_FILE);
- PopupShow(pluginOptions, NULL, NULL, -1);
-
- return 0;
-}
-