From b880db8491271b4bd4aa87c2dd79b5e3c3dde6cf Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 17 Nov 2011 18:46:23 +0000 Subject: added: ieview, imo2sproxy, skype git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@175 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- skype/msglist.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 skype/msglist.c (limited to 'skype/msglist.c') diff --git a/skype/msglist.c b/skype/msglist.c new file mode 100644 index 0000000..113d6e5 --- /dev/null +++ b/skype/msglist.c @@ -0,0 +1,86 @@ +#define WIN32_LEAN_AND_MEAN +#include +#include "memlist.h" +#include "debug.h" +#include "msglist.h" + +#define MSGLIST_TIMEOUT 1800 // Chatmessage references will be kept for 30 minutes + +static TYP_LIST *m_hMsgList = NULL; + +static int CmpProc(const void *pstPElement,const void *pstPToFind) +{ + return (DWORD)pstPToFind - ((TYP_MSGLENTRY*)pstPElement)->uMsgNum; +} + +void MsgList_Init(void) +{ + m_hMsgList = List_Init(128); +} + +void MsgList_Exit(void) +{ + if (!m_hMsgList) return; + List_FreeElements (m_hMsgList); + List_Exit(m_hMsgList); + m_hMsgList = NULL; +} + +TYP_MSGLENTRY *MsgList_Add(DWORD uMsgNum, HANDLE hEvent) +{ + TYP_MSGLENTRY *pEntry; + int iListInd; + BOOL bFound; + + LOG (("MsgList_Add (%d, %08X)", uMsgNum, hEvent)); + if (!m_hMsgList || !hEvent) return FALSE; + bFound = List_BinarySearch(m_hMsgList,CmpProc,(void *)uMsgNum,&iListInd); + if (!bFound) pEntry = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(TYP_MSGLENTRY)); + else pEntry = List_ElementAt (m_hMsgList, iListInd); + if (!pEntry) return NULL; + pEntry->uMsgNum = uMsgNum; + pEntry->hEvent = hEvent; + pEntry->tEdited = 0; + time(&pEntry->t); + if (!bFound) return List_InsertElementAt (m_hMsgList, pEntry, iListInd)?pEntry:NULL; + return pEntry; +} + + +TYP_MSGLENTRY *MsgList_FindMessage(DWORD uMsgNum) +{ + TYP_MSGLENTRY *pEntry; + int iPos; + + LOG (("MsgList_FindEvent (%d)", uMsgNum)); + if (m_hMsgList && List_BinarySearch(m_hMsgList, CmpProc, (void*)uMsgNum, &iPos)) + { + pEntry = List_ElementAt (m_hMsgList, iPos); + time(&pEntry->t); // Touch it, so that it doesn't get thrown away too soon + LOG (("MsgList_FindEvent(%d): %08X", uMsgNum, pEntry->hEvent)); + return pEntry; + } + return NULL; +} + +void MsgList_CollectGarbage(void) +{ + unsigned int i; + TYP_MSGLENTRY *pEntry; + time_t t; + + if (!m_hMsgList) return; + time(&t); + t-=MSGLIST_TIMEOUT; + for (i=0; it < t) + { + LOG (("MsgList_CollectGarbage throwing out msg %d", pEntry->uMsgNum)); + HeapFree (GetProcessHeap(), 0, List_RemoveElementAt (m_hMsgList, i)); + i--; + } + } +} + -- cgit v1.2.3