From 16b3108be10c20c54d8ad47e2dac5b7cd908e3eb Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Wed, 1 Aug 2012 13:18:09 +0000 Subject: folders renames git-svn-id: http://svn.miranda-ng.org/main/trunk@1300 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/SimpleAR/Res/Off.ico | Bin 1150 -> 0 bytes plugins/SimpleAR/Res/On.ico | Bin 1150 -> 0 bytes plugins/SimpleAR/Res/Resource.rc | 93 ----------- plugins/SimpleAR/Res/Version.rc | 42 ----- plugins/SimpleAR/Src/Common.h | 49 ------ plugins/SimpleAR/Src/Main.cpp | 350 --------------------------------------- plugins/SimpleAR/Src/Options.cpp | 160 ------------------ plugins/SimpleAR/Src/Resource.h | 25 --- plugins/SimpleAR/Src/Version.h | 21 --- plugins/SimpleAR/res/Off.ico | Bin 0 -> 1150 bytes plugins/SimpleAR/res/On.ico | Bin 0 -> 1150 bytes plugins/SimpleAR/res/Resource.rc | 93 +++++++++++ plugins/SimpleAR/res/Version.rc | 42 +++++ plugins/SimpleAR/src/Common.h | 49 ++++++ plugins/SimpleAR/src/Main.cpp | 350 +++++++++++++++++++++++++++++++++++++++ plugins/SimpleAR/src/Options.cpp | 160 ++++++++++++++++++ plugins/SimpleAR/src/Resource.h | 25 +++ plugins/SimpleAR/src/Version.h | 21 +++ 18 files changed, 740 insertions(+), 740 deletions(-) delete mode 100644 plugins/SimpleAR/Res/Off.ico delete mode 100644 plugins/SimpleAR/Res/On.ico delete mode 100644 plugins/SimpleAR/Res/Resource.rc delete mode 100644 plugins/SimpleAR/Res/Version.rc delete mode 100644 plugins/SimpleAR/Src/Common.h delete mode 100644 plugins/SimpleAR/Src/Main.cpp delete mode 100644 plugins/SimpleAR/Src/Options.cpp delete mode 100644 plugins/SimpleAR/Src/Resource.h delete mode 100644 plugins/SimpleAR/Src/Version.h create mode 100644 plugins/SimpleAR/res/Off.ico create mode 100644 plugins/SimpleAR/res/On.ico create mode 100644 plugins/SimpleAR/res/Resource.rc create mode 100644 plugins/SimpleAR/res/Version.rc create mode 100644 plugins/SimpleAR/src/Common.h create mode 100644 plugins/SimpleAR/src/Main.cpp create mode 100644 plugins/SimpleAR/src/Options.cpp create mode 100644 plugins/SimpleAR/src/Resource.h create mode 100644 plugins/SimpleAR/src/Version.h (limited to 'plugins/SimpleAR') diff --git a/plugins/SimpleAR/Res/Off.ico b/plugins/SimpleAR/Res/Off.ico deleted file mode 100644 index 51e55a8aeb..0000000000 Binary files a/plugins/SimpleAR/Res/Off.ico and /dev/null differ diff --git a/plugins/SimpleAR/Res/On.ico b/plugins/SimpleAR/Res/On.ico deleted file mode 100644 index b02d1fc828..0000000000 Binary files a/plugins/SimpleAR/Res/On.ico and /dev/null differ diff --git a/plugins/SimpleAR/Res/Resource.rc b/plugins/SimpleAR/Res/Resource.rc deleted file mode 100644 index 4a43561be7..0000000000 --- a/plugins/SimpleAR/Res/Resource.rc +++ /dev/null @@ -1,93 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "..\src\resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -//resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "..\\src\\resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_OPTION DIALOGEX 0, 0, 295, 158 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - CONTROL "Enable Auto Replier",IDC_ENABLEREPLIER,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,9,7,79,10 - LTEXT "Reply Message Heading:",IDC_STATIC,9,22,85,8 - EDITTEXT IDC_HEADING,96,21,190,12,ES_AUTOHSCROLL - LTEXT "Reply Message when",IDC_STATIC,9,42,73,8 - COMBOBOX IDC_STATUSMODE,96,40,77,30,CBS_DROPDOWNLIST | WS_VSCROLL | - WS_TABSTOP - EDITTEXT IDC_MESSAGE,9,59,277,54,ES_MULTILINE | ES_AUTOHSCROLL - LTEXT "No-repeat Interval:",IDC_STATIC,96,7,64,8 - EDITTEXT IDC_INTERVAL,163,5,36,12,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "mins",IDC_STATIC,201,7,30,9 - PUSHBUTTON "&Default",IDC_DEFAULT,226,40,60,13 -END - -#endif //resources -///////////////////////////////////////////////////////////////////////////// - -// Icon -// remains consistent on all systems. -IDI_ON ICON "On.ico" -IDI_OFF ICON "Off.ico" -///////////////////////////////////////////////////////////////////////////// - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/plugins/SimpleAR/Res/Version.rc b/plugins/SimpleAR/Res/Version.rc deleted file mode 100644 index d741488c4f..0000000000 --- a/plugins/SimpleAR/Res/Version.rc +++ /dev/null @@ -1,42 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#ifdef APSTUDIO_INVOKED -#error this file is not editable by Microsoft Visual C++ -#endif //APSTUDIO_INVOKED - -#include "afxres.h" -#include "..\src\version.h" - -#ifdef _WIN32 -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#endif //_WIN32 - -VS_VERSION_INFO VERSIONINFO - FILEVERSION __FILEVERSION_STRING - PRODUCTVERSION __FILEVERSION_STRING - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x0L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "FileDescription", __DESCRIPTION - VALUE "InternalName", __PLUGIN_NAME - VALUE "LegalCopyright", __COPYRIGHT - VALUE "OriginalFilename", __FILENAME - VALUE "ProductName", __PLUGIN_NAME - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END diff --git a/plugins/SimpleAR/Src/Common.h b/plugins/SimpleAR/Src/Common.h deleted file mode 100644 index ca873cb2ae..0000000000 --- a/plugins/SimpleAR/Src/Common.h +++ /dev/null @@ -1,49 +0,0 @@ -#define MIRANDA_VER 0x0A00 -#define _CRT_SECURE_NO_WARNINGS - -// Windows Header Files -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//Miranda SDK headers -#include "newpluginapi.h" -#include "m_clist.h" -#include "m_clui.h" -#include "m_skin.h" -#include "m_langpack.h" -#include "m_protomod.h" -#include "m_database.h" -#include "m_system.h" -#include "m_protocols.h" -#include "m_userinfo.h" -#include "m_options.h" -#include "m_protosvc.h" -#include "m_utils.h" -#include "m_ignore.h" -#include "m_clc.h" -#include - -#include "Resource.h" -#include "Version.h" - -#define protocolname "SimpleAutoReplier" //no spaces here :) - -#define KEY_ENABLED "Enabled" -#define KEY_HEADING "Heading" -#define KEY_REPEATINTERVAL "RepeatInterval" - -//General -extern HINSTANCE hinstance; -extern BOOL fEnabled; -extern INT interval; -extern TCHAR* ptszDefaultMsg[6]; - -extern INT OptInit(WPARAM wParam,LPARAM lParam); diff --git a/plugins/SimpleAR/Src/Main.cpp b/plugins/SimpleAR/Src/Main.cpp deleted file mode 100644 index 62c5a34ce6..0000000000 --- a/plugins/SimpleAR/Src/Main.cpp +++ /dev/null @@ -1,350 +0,0 @@ -/* -Plugin of miranda IM(ICQ) for Communicating with users of the baseProtocol. -Copyright (C) 2004 Daniel Savi (dss@brturbo.com) - --> Based on J. Lawler BaseProtocol <- - -Added: - - plugin option window - - make.bat (vc++) - - tinyclib http://msdn.microsoft.com/msdnmag/issues/01/01/hood/default.aspx - - C++ version - -Miranda ICQ: the free icq client for MS Windows -Copyright (C) 2000-2 Richard Hughes, Roland Rabien & Tristan Van de Vreede -*/ - -#include "Common.h" - -HINSTANCE hinstance; - -HANDLE hPreBuildHook = NULL, hAddEventHook = NULL, hOptHook = NULL, hCheckDefHook = NULL, hOnPreShutdown = NULL, hToggleEnable = NULL, hToggleAutoanswer = NULL; -HANDLE hToggle = NULL, hEnableMenu = NULL; -CLISTMENUITEM mi; -BOOL fEnabled, gbVarsServiceExist = FALSE; -INT interval; -int hLangpack; - -TCHAR* ptszDefaultMsg[]={ - _T("I am currently away. I will reply to you when I am back."), - _T("I am currently very busy and can't spare any time to talk with you. Sorry..."), - _T("I am not available right now."), - _T("I am now doing something, I will talk to you later."), - _T("I am on the phone right now. I will get back to you very soon."), - _T("I am having meal right now. I will get back to you very soon.") -}; - -PLUGININFOEX pluginInfoEx = { - sizeof(PLUGININFOEX), - __PLUGIN_NAME, - PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), - __DESCRIPTION, - __AUTHOR, - __AUTHOREMAIL, - __COPYRIGHT, - __AUTHORWEB, - UNICODE_AWARE, - // {46BF191F-8DFB-4656-88B2-4C20BE4CFA44} - {0x46bf191f, 0x8dfb, 0x4656, { 0x88, 0xb2, 0x4c, 0x20, 0xbe, 0x4c, 0xfa, 0x44}} -}; - -extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) -{ - return &pluginInfoEx; -} - -BOOL WINAPI DllMain(HINSTANCE hinst,DWORD fdwReason,LPVOID lpvReserved) -{ - hinstance=hinst; - return TRUE; -} - -INT_PTR ToggleEnable(WPARAM wParam, LPARAM lParam) -{ - mi.cbSize=sizeof(mi); - mi.flags=CMIM_NAME|CMIM_ICON|CMIF_TCHAR; - fEnabled=!fEnabled; - if (fEnabled) - { - mi.ptszName = _T("Disable Auto&reply"); - mi.hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ON)); - } - else - { - mi.ptszName = _T("Enable Auto&reply"); - mi.hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(IDI_OFF)); - } - CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hEnableMenu,(LPARAM)&mi); - return 0; -} - -INT_PTR Toggle(WPARAM w, LPARAM l) -{ - HANDLE hContact = (HANDLE)w; - BOOL on = 0; - on = !DBGetContactSettingByte(hContact, protocolname, "TurnedOn", 0); - DBWriteContactSettingByte(hContact, protocolname, "TurnedOn", on?1:0); - on = on?0:1; - mi.cbSize=sizeof(mi); - mi.flags = CMIM_NAME |CMIM_ICON | CMIF_TCHAR; - mi.ptszName=on?_T("Turn off Autoanswer"):_T("Turn on Autoanswer"); - mi.hIcon = on?LoadIcon(hinstance, MAKEINTRESOURCE(IDI_OFF)):LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ON)); - CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hToggle, (LPARAM)&mi); - return 0; -} - -INT OnPreBuildContactMenu(WPARAM w, LPARAM l) -{ - HANDLE hContact = (HANDLE)w; - mi.cbSize=sizeof(mi); - mi.flags = CMIM_NAME | CMIM_ICON | CMIF_TCHAR; - BOOL on = !DBGetContactSettingByte(hContact, protocolname, "TurnedOn", 0); - mi.ptszName = on?_T("Turn off Autoanswer"):_T("Turn on Autoanswer"); - mi.hIcon = on?LoadIcon(hinstance, MAKEINTRESOURCE(IDI_OFF)):LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ON)); - CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hToggle, (LPARAM)&mi); - return 0; -} - -INT CheckDefaults(WPARAM, LPARAM) -{ - DBVARIANT dbv; - TCHAR* ptszDefault; - char szStatus[6]={0}; - - UnhookEvent(hCheckDefHook); - - fEnabled=!DBGetContactSettingByte(NULL,protocolname,KEY_ENABLED,1)==1; - interval=DBGetContactSettingWord(NULL,protocolname,KEY_REPEATINTERVAL,300); - - if (DBGetContactSettingTString(NULL,protocolname,KEY_HEADING,&dbv)) - // Heading not set - DBWriteContactSettingTString(NULL,protocolname,KEY_HEADING,TranslateT("Dear %user%, the owner left the following message:")); - else - DBFreeVariant(&dbv); - - for (int c=ID_STATUS_ONLINE; c 40078) - ptszDefault=TranslateTS(ptszDefaultMsg[c-ID_STATUS_ONLINE-3]); - if (ptszDefault) - DBWriteContactSettingTString(NULL,protocolname,szStatus,ptszDefault); - } - else - DBFreeVariant(&dbv); - } - } - hPreBuildHook = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, OnPreBuildContactMenu); - if (ServiceExists(MS_VARS_FORMATSTRING)) - gbVarsServiceExist = TRUE; - - ToggleEnable(0,0); - return 0; -} - -TCHAR* StrReplace (TCHAR* Search, TCHAR* Replace, TCHAR* Resource) -{ - int i = 0; - int SearchLen = (int)_tcslen(Search); - TCHAR* Work = mir_tstrdup(Replace); - int ReplaceLen = (int)_tcslen(Work); - - TCHAR* Pointer = _tcsstr(Resource, Search); - - while (Pointer != NULL) - { - int PointerLen = (int)_tcslen(Pointer); - int ResourceLen = (int)_tcslen(Resource); - - TCHAR* NewText = (TCHAR*)mir_calloc((ResourceLen - SearchLen + ReplaceLen + 1)*sizeof(TCHAR)); - - _tcsncpy(NewText, Resource, ResourceLen - PointerLen); - _tcscat(NewText, Work); - _tcscat(NewText, Pointer + SearchLen); - - Resource = (TCHAR*)mir_realloc(Resource, (ResourceLen - SearchLen + ReplaceLen + 1)*sizeof(TCHAR)); - - for (i = 0; i < (ResourceLen - SearchLen + ReplaceLen); i++) - Resource[i] = NewText[i]; - Resource[i] = 0; - mir_free(NewText); - - Pointer = _tcsstr(Resource + (ResourceLen - PointerLen + ReplaceLen), Search); - } - mir_free(Work); - - return Resource; -} - -INT addEvent(WPARAM wParam, LPARAM lParam) -{ - HANDLE hContact = (HANDLE)wParam; - HANDLE hDBEvent = (HANDLE)lParam; - DBEVENTINFO dbei = {sizeof(dbei)}; - - if (!fEnabled || !hContact || !hDBEvent) - return FALSE; /// unspecifyed error - - char* pszProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - int status = CallProtoService(pszProto, PS_GETSTATUS, 0, 0); - if (status == 40072 || status == 40077 || status == 40078) - return FALSE; - - CallService(MS_DB_EVENT_GET, (WPARAM)hDBEvent, (LPARAM)&dbei); /// detect size of msg - - if ((dbei.eventType != EVENTTYPE_MESSAGE) || (dbei.flags == DBEF_READ)) - return FALSE; /// we need EVENTTYPE_MESSAGE event.. - else - { /// needed event has occured.. - DBVARIANT dbv; - - if (!dbei.cbBlob) /// invalid size - return FALSE; - - if (DBGetContactSettingTString(hContact,"Protocol","p",&dbv)) - // Contact with no protocol ?!! - return FALSE; - else - DBFreeVariant(&dbv); - - if(DBGetContactSettingByte(hContact, "CList", "NotOnList", 0)) - return FALSE; - - if(DBGetContactSettingByte(hContact, protocolname, "TurnedOn", 0)) - return FALSE; - - if (!( dbei.flags & DBEF_SENT)) - { - int timeBetween=time(NULL)-DBGetContactSettingDword(hContact,protocolname,"LastReplyTS",0); - if (timeBetween>interval || DBGetContactSettingWord(hContact,protocolname,"LastStatus",0)!=status) - { - char szStatus[6]={0}; - int msgLen=1; - int isQun=DBGetContactSettingByte(hContact,pszProto,"IsQun",0); - if (isQun) - return FALSE; - - mir_snprintf(szStatus,SIZEOF(szStatus),"%d",status); - if (!DBGetContactSettingTString(NULL,protocolname,szStatus,&dbv)) - { - if (*dbv.ptszVal) - { - DBVARIANT dbvHead={0}, dbvNick={0}; - TCHAR *ptszTemp, *ptszTemp2; - - DBGetContactSettingTString(hContact,pszProto,"Nick",&dbvNick); - if (lstrcmp(dbvNick.ptszVal, NULL) == 0) - { - DBFreeVariant(&dbvNick); - return FALSE; - } - - msgLen += (int)_tcslen(dbv.ptszVal); - if (!DBGetContactSettingTString(NULL,protocolname,KEY_HEADING,&dbvHead)) - { - ptszTemp = (TCHAR*)mir_alloc(sizeof(TCHAR) * (_tcslen(dbvHead.ptszVal)+1)); - _tcscpy(ptszTemp, dbvHead.ptszVal); - ptszTemp = StrReplace(_T("%user%"), dbvNick.ptszVal, ptszTemp); - msgLen += (int)(_tcslen(ptszTemp)); - } - ptszTemp2 = (TCHAR*)mir_alloc(sizeof(TCHAR) * (msgLen+5)); - mir_sntprintf(ptszTemp2, msgLen+5, _T("%s\r\n\r\n%s"), ptszTemp, dbv.ptszVal); - if (ServiceExists(MS_VARS_FORMATSTRING)) - { - FORMATINFO fi; - - ZeroMemory(&fi, sizeof(fi)); - fi.cbSize = sizeof(fi); - fi.flags = FIF_TCHAR; - fi.tszFormat = ptszTemp2; - ptszTemp = (TCHAR*)CallService(MS_VARS_FORMATSTRING, (WPARAM)&fi, 0); - }else - ptszTemp = Utils_ReplaceVarsT(ptszTemp2); - char* pszUtf = mir_utf8encodeT(ptszTemp); - CallContactService(hContact, PSS_MESSAGE, PREF_UTF, (LPARAM)pszUtf); - - dbei.cbSize = sizeof(dbei); - dbei.eventType = EVENTTYPE_MESSAGE; - dbei.flags = DBEF_UTF | DBEF_SENT; //DBEF_READ; - dbei.szModule = pszProto; - dbei.timestamp = time(NULL); - dbei.cbBlob = lstrlenA(pszUtf) + 1; - dbei.pBlob = (PBYTE)pszUtf; - CallService(MS_DB_EVENT_ADD, (WPARAM)hContact, (LPARAM)&dbei); - - if (ServiceExists(MS_VARS_FORMATSTRING)) - CallService(MS_VARS_FREEMEMORY, (WPARAM)ptszTemp, 0); - else - mir_free(ptszTemp); - mir_free(ptszTemp2); - mir_free(pszUtf); - if (dbvNick.ptszVal) - DBFreeVariant(&dbvNick); - if (dbvHead.ptszVal) - DBFreeVariant(&dbvHead); - } - DBFreeVariant(&dbv); - } - } - } - - DBWriteContactSettingDword(hContact,protocolname,"LastReplyTS",time(NULL)); - DBWriteContactSettingWord(hContact,protocolname,"LastStatus",status); - } - return 0; -} - -INT OnPreShutdown(WPARAM wParam, LPARAM lParam) -{ - UnhookEvent(hAddEventHook); - UnhookEvent(hPreBuildHook); - UnhookEvent(hOptHook); - UnhookEvent(hOnPreShutdown); - return 0; -} - -extern "C" int __declspec(dllexport)Load(void) -{ - - mir_getLP(&pluginInfoEx); - - hToggleEnable = CreateServiceFunction(protocolname"/ToggleEnable", ToggleEnable); - ZeroMemory(&mi, sizeof(mi)); - mi.cbSize = sizeof(mi); - mi.position = 500090000; - mi.ptszName = _T(""); - mi.pszService = protocolname"/ToggleEnable"; - hEnableMenu = Menu_AddMainMenuItem(&mi); - - hToggleAutoanswer = CreateServiceFunction(protocolname"/ToggleAutoanswer",Toggle); - ZeroMemory(&mi, sizeof(mi)); - mi.cbSize=sizeof(mi); - mi.position=-0x7FFFFFFF; - mi.ptszName=_T(""); - mi.pszService=protocolname"/ToggleAutoanswer"; - hToggle = Menu_AddContactMenuItem(&mi); - - //add hook - hOptHook = HookEvent(ME_OPT_INITIALISE, OptInit); - hAddEventHook = HookEvent(ME_DB_EVENT_ADDED, addEvent); - hCheckDefHook = HookEvent(ME_SYSTEM_MODULESLOADED, CheckDefaults); - hOnPreShutdown = HookEvent(ME_SYSTEM_PRESHUTDOWN, OnPreShutdown); - - return 0; -} - -extern "C" __declspec(dllexport)int Unload(void) -{ - DestroyServiceFunction(hToggleEnable); - DestroyServiceFunction(hToggleAutoanswer); - return 0; -} \ No newline at end of file diff --git a/plugins/SimpleAR/Src/Options.cpp b/plugins/SimpleAR/Src/Options.cpp deleted file mode 100644 index e53236d22c..0000000000 --- a/plugins/SimpleAR/Src/Options.cpp +++ /dev/null @@ -1,160 +0,0 @@ -#include "Common.h" - -TCHAR* ptszMessage[6]={0}; -INT lastIndex=-1; - -INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) - { - case WM_INITDIALOG: - { - DBVARIANT dbv; - TranslateDialogDefault(hwndDlg); - TCHAR* pszStatus; - char tszStatus[6]={0}; - - CheckDlgButton(hwndDlg,IDC_ENABLEREPLIER,DBGetContactSettingByte(NULL,protocolname,KEY_ENABLED,1)==1); - SetDlgItemInt(hwndDlg,IDC_INTERVAL,DBGetContactSettingWord(NULL,protocolname,KEY_REPEATINTERVAL,300)/60,FALSE); - - if (!DBGetContactSettingTString(NULL,protocolname,KEY_HEADING,&dbv)) - { - SetDlgItemText(hwndDlg,IDC_HEADING,dbv.ptszVal); - DBFreeVariant(&dbv); - } - - for (INT c = ID_STATUS_ONLINE; c < ID_STATUS_IDLE; c++) - { - mir_snprintf(tszStatus, SIZEOF(tszStatus), "%d", c); - pszStatus=(TCHAR*)CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION,(WPARAM)c,GSMDF_TCHAR); - if (c == 40072 || c == 40077 || c == 40078) - continue; - else - { - SendDlgItemMessage(hwndDlg,IDC_STATUSMODE,CB_ADDSTRING,0,(LPARAM)pszStatus); - - if (!DBGetContactSettingTString(NULL, protocolname, tszStatus, &dbv)) - { - if (c < 40077) - ptszMessage[c-ID_STATUS_ONLINE-1] = _tcsdup(dbv.ptszVal); - else if (c > 40078) - ptszMessage[c-ID_STATUS_ONLINE-3] = _tcsdup(dbv.ptszVal); - DBFreeVariant(&dbv); - } - } - } - - SendDlgItemMessage(hwndDlg,IDC_STATUSMODE,CB_SETCURSEL,0,0); - - lastIndex=0; - SetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex]); - - return TRUE; - } - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDC_ENABLEREPLIER: - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - case IDC_STATUSMODE: - // First, save last, then load current - if (lastIndex>-1) - { - INT size=SendDlgItemMessage(hwndDlg,IDC_MESSAGE,WM_GETTEXTLENGTH,0,0)+1; - GetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex],size); - } - lastIndex=SendDlgItemMessage(hwndDlg,IDC_STATUSMODE,CB_GETCURSEL,0,0); - SetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex]); - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - case IDC_DEFAULT: - SetDlgItemText(hwndDlg,IDC_MESSAGE,TranslateTS(ptszDefaultMsg[lastIndex])); - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - case IDC_INTERVAL: - case IDC_HEADING: - case IDC_MESSAGE: - if ((HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == EN_CHANGE) && (HWND)lParam == GetFocus()) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - } - break; - - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->code) - { - case PSN_APPLY: - { - INT size; - TCHAR ptszText[1024]; - char szStatus[6]={0}; - BOOL translated; - - fEnabled=IsDlgButtonChecked(hwndDlg,IDC_ENABLEREPLIER)==1; - DBWriteContactSettingByte(NULL,protocolname,KEY_ENABLED,(BYTE)fEnabled); - - GetDlgItemText(hwndDlg,IDC_HEADING,ptszText,SIZEOF(ptszText)); - DBWriteContactSettingTString(NULL,protocolname,KEY_HEADING,ptszText); - - size=GetDlgItemInt(hwndDlg,IDC_INTERVAL,&translated,FALSE); - if (translated) - interval=size*60; - DBWriteContactSettingWord(NULL,protocolname,KEY_REPEATINTERVAL,interval); - - size=SendDlgItemMessage(hwndDlg,IDC_MESSAGE,WM_GETTEXTLENGTH,0,0)+1; - GetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex],size); - - for (int c=ID_STATUS_ONLINE; c40078 && ptszMessage[c-ID_STATUS_ONLINE-3]) - DBWriteContactSettingTString(NULL,protocolname,szStatus,ptszMessage[c-ID_STATUS_ONLINE-3]); - else - DBDeleteContactSetting(NULL,protocolname,szStatus); - } - } - return TRUE; - } - } - break; - case WM_DESTROY: - for (int c=ID_STATUS_ONLINE; c40078) - ptszMessage[c-ID_STATUS_ONLINE-3]=NULL; - } - } - break; - } - return FALSE; -} - -INT OptInit(WPARAM wParam,LPARAM lParam) -{ - OPTIONSDIALOGPAGE odp = { 0 }; - odp.cbSize = sizeof(odp); - odp.position = -790000000; - odp.hInstance = hinstance; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTION); - odp.pszTitle = LPGEN("Simple Auto Replier"); - odp.pszGroup = LPGEN("Plugins"); - odp.flags = ODPF_BOLDGROUPS; - odp.pfnDlgProc = DlgProcOpts; - Options_AddPage(wParam, &odp); - return 0; -} \ No newline at end of file diff --git a/plugins/SimpleAR/Src/Resource.h b/plugins/SimpleAR/Src/Resource.h deleted file mode 100644 index 384930dd39..0000000000 --- a/plugins/SimpleAR/Src/Resource.h +++ /dev/null @@ -1,25 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by resource.rc -// -#define IDD_OPTION 102 -#define IDC_ENABLEREPLIER 1001 -#define IDC_HEADING 1002 -#define IDC_STATUSMODE 1004 -#define IDC_MESSAGE 1005 -#define IDC_INTERVAL 1006 -#define IDC_DEFAULT 1007 -#define IDI_ON 103 -#define IDI_OFF 104 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NO_MFC 1 -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1008 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/plugins/SimpleAR/Src/Version.h b/plugins/SimpleAR/Src/Version.h deleted file mode 100644 index 8312d378b1..0000000000 --- a/plugins/SimpleAR/Src/Version.h +++ /dev/null @@ -1,21 +0,0 @@ -#define __MAJOR_VERSION 2 -#define __MINOR_VERSION 0 -#define __RELEASE_NUM 2 -#define __BUILD_NUM 6 - -#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM -#define __FILEVERSION_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM - -#define __STRINGIFY_IMPL(x) #x -#define __STRINGIFY(x) __STRINGIFY_IMPL(x) -#define __VERSION_STRING __STRINGIFY(__FILEVERSION_DOTS) - - -#define __PLUGIN_NAME "SimpleAR" -#define __INTERNAL_NAME "Simple Auto Replier" -#define __FILENAME "SimpleAR.dll" -#define __DESCRIPTION "Simple Auto Replier." -#define __AUTHOR "Stark Wong, Mataes, Mikel-Ard-Ri" -#define __AUTHOREMAIL "mikelardri@gmail.com" -#define __AUTHORWEB "http://miranda-ng.org/" -#define __COPYRIGHT "© 2012" diff --git a/plugins/SimpleAR/res/Off.ico b/plugins/SimpleAR/res/Off.ico new file mode 100644 index 0000000000..51e55a8aeb Binary files /dev/null and b/plugins/SimpleAR/res/Off.ico differ diff --git a/plugins/SimpleAR/res/On.ico b/plugins/SimpleAR/res/On.ico new file mode 100644 index 0000000000..b02d1fc828 Binary files /dev/null and b/plugins/SimpleAR/res/On.ico differ diff --git a/plugins/SimpleAR/res/Resource.rc b/plugins/SimpleAR/res/Resource.rc new file mode 100644 index 0000000000..4a43561be7 --- /dev/null +++ b/plugins/SimpleAR/res/Resource.rc @@ -0,0 +1,93 @@ +// Microsoft Visual C++ generated resource script. +// +#include "..\src\resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +//resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "..\\src\\resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_OPTION DIALOGEX 0, 0, 295, 158 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + CONTROL "Enable Auto Replier",IDC_ENABLEREPLIER,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,9,7,79,10 + LTEXT "Reply Message Heading:",IDC_STATIC,9,22,85,8 + EDITTEXT IDC_HEADING,96,21,190,12,ES_AUTOHSCROLL + LTEXT "Reply Message when",IDC_STATIC,9,42,73,8 + COMBOBOX IDC_STATUSMODE,96,40,77,30,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + EDITTEXT IDC_MESSAGE,9,59,277,54,ES_MULTILINE | ES_AUTOHSCROLL + LTEXT "No-repeat Interval:",IDC_STATIC,96,7,64,8 + EDITTEXT IDC_INTERVAL,163,5,36,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "mins",IDC_STATIC,201,7,30,9 + PUSHBUTTON "&Default",IDC_DEFAULT,226,40,60,13 +END + +#endif //resources +///////////////////////////////////////////////////////////////////////////// + +// Icon +// remains consistent on all systems. +IDI_ON ICON "On.ico" +IDI_OFF ICON "Off.ico" +///////////////////////////////////////////////////////////////////////////// + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/plugins/SimpleAR/res/Version.rc b/plugins/SimpleAR/res/Version.rc new file mode 100644 index 0000000000..d741488c4f --- /dev/null +++ b/plugins/SimpleAR/res/Version.rc @@ -0,0 +1,42 @@ +// Microsoft Visual C++ generated resource script. +// +#ifdef APSTUDIO_INVOKED +#error this file is not editable by Microsoft Visual C++ +#endif //APSTUDIO_INVOKED + +#include "afxres.h" +#include "..\src\version.h" + +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#endif //_WIN32 + +VS_VERSION_INFO VERSIONINFO + FILEVERSION __FILEVERSION_STRING + PRODUCTVERSION __FILEVERSION_STRING + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x0L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "FileDescription", __DESCRIPTION + VALUE "InternalName", __PLUGIN_NAME + VALUE "LegalCopyright", __COPYRIGHT + VALUE "OriginalFilename", __FILENAME + VALUE "ProductName", __PLUGIN_NAME + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/plugins/SimpleAR/src/Common.h b/plugins/SimpleAR/src/Common.h new file mode 100644 index 0000000000..ca873cb2ae --- /dev/null +++ b/plugins/SimpleAR/src/Common.h @@ -0,0 +1,49 @@ +#define MIRANDA_VER 0x0A00 +#define _CRT_SECURE_NO_WARNINGS + +// Windows Header Files +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//Miranda SDK headers +#include "newpluginapi.h" +#include "m_clist.h" +#include "m_clui.h" +#include "m_skin.h" +#include "m_langpack.h" +#include "m_protomod.h" +#include "m_database.h" +#include "m_system.h" +#include "m_protocols.h" +#include "m_userinfo.h" +#include "m_options.h" +#include "m_protosvc.h" +#include "m_utils.h" +#include "m_ignore.h" +#include "m_clc.h" +#include + +#include "Resource.h" +#include "Version.h" + +#define protocolname "SimpleAutoReplier" //no spaces here :) + +#define KEY_ENABLED "Enabled" +#define KEY_HEADING "Heading" +#define KEY_REPEATINTERVAL "RepeatInterval" + +//General +extern HINSTANCE hinstance; +extern BOOL fEnabled; +extern INT interval; +extern TCHAR* ptszDefaultMsg[6]; + +extern INT OptInit(WPARAM wParam,LPARAM lParam); diff --git a/plugins/SimpleAR/src/Main.cpp b/plugins/SimpleAR/src/Main.cpp new file mode 100644 index 0000000000..62c5a34ce6 --- /dev/null +++ b/plugins/SimpleAR/src/Main.cpp @@ -0,0 +1,350 @@ +/* +Plugin of miranda IM(ICQ) for Communicating with users of the baseProtocol. +Copyright (C) 2004 Daniel Savi (dss@brturbo.com) + +-> Based on J. Lawler BaseProtocol <- + +Added: + - plugin option window + - make.bat (vc++) + - tinyclib http://msdn.microsoft.com/msdnmag/issues/01/01/hood/default.aspx + - C++ version + +Miranda ICQ: the free icq client for MS Windows +Copyright (C) 2000-2 Richard Hughes, Roland Rabien & Tristan Van de Vreede +*/ + +#include "Common.h" + +HINSTANCE hinstance; + +HANDLE hPreBuildHook = NULL, hAddEventHook = NULL, hOptHook = NULL, hCheckDefHook = NULL, hOnPreShutdown = NULL, hToggleEnable = NULL, hToggleAutoanswer = NULL; +HANDLE hToggle = NULL, hEnableMenu = NULL; +CLISTMENUITEM mi; +BOOL fEnabled, gbVarsServiceExist = FALSE; +INT interval; +int hLangpack; + +TCHAR* ptszDefaultMsg[]={ + _T("I am currently away. I will reply to you when I am back."), + _T("I am currently very busy and can't spare any time to talk with you. Sorry..."), + _T("I am not available right now."), + _T("I am now doing something, I will talk to you later."), + _T("I am on the phone right now. I will get back to you very soon."), + _T("I am having meal right now. I will get back to you very soon.") +}; + +PLUGININFOEX pluginInfoEx = { + sizeof(PLUGININFOEX), + __PLUGIN_NAME, + PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), + __DESCRIPTION, + __AUTHOR, + __AUTHOREMAIL, + __COPYRIGHT, + __AUTHORWEB, + UNICODE_AWARE, + // {46BF191F-8DFB-4656-88B2-4C20BE4CFA44} + {0x46bf191f, 0x8dfb, 0x4656, { 0x88, 0xb2, 0x4c, 0x20, 0xbe, 0x4c, 0xfa, 0x44}} +}; + +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +{ + return &pluginInfoEx; +} + +BOOL WINAPI DllMain(HINSTANCE hinst,DWORD fdwReason,LPVOID lpvReserved) +{ + hinstance=hinst; + return TRUE; +} + +INT_PTR ToggleEnable(WPARAM wParam, LPARAM lParam) +{ + mi.cbSize=sizeof(mi); + mi.flags=CMIM_NAME|CMIM_ICON|CMIF_TCHAR; + fEnabled=!fEnabled; + if (fEnabled) + { + mi.ptszName = _T("Disable Auto&reply"); + mi.hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ON)); + } + else + { + mi.ptszName = _T("Enable Auto&reply"); + mi.hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(IDI_OFF)); + } + CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hEnableMenu,(LPARAM)&mi); + return 0; +} + +INT_PTR Toggle(WPARAM w, LPARAM l) +{ + HANDLE hContact = (HANDLE)w; + BOOL on = 0; + on = !DBGetContactSettingByte(hContact, protocolname, "TurnedOn", 0); + DBWriteContactSettingByte(hContact, protocolname, "TurnedOn", on?1:0); + on = on?0:1; + mi.cbSize=sizeof(mi); + mi.flags = CMIM_NAME |CMIM_ICON | CMIF_TCHAR; + mi.ptszName=on?_T("Turn off Autoanswer"):_T("Turn on Autoanswer"); + mi.hIcon = on?LoadIcon(hinstance, MAKEINTRESOURCE(IDI_OFF)):LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ON)); + CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hToggle, (LPARAM)&mi); + return 0; +} + +INT OnPreBuildContactMenu(WPARAM w, LPARAM l) +{ + HANDLE hContact = (HANDLE)w; + mi.cbSize=sizeof(mi); + mi.flags = CMIM_NAME | CMIM_ICON | CMIF_TCHAR; + BOOL on = !DBGetContactSettingByte(hContact, protocolname, "TurnedOn", 0); + mi.ptszName = on?_T("Turn off Autoanswer"):_T("Turn on Autoanswer"); + mi.hIcon = on?LoadIcon(hinstance, MAKEINTRESOURCE(IDI_OFF)):LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ON)); + CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hToggle, (LPARAM)&mi); + return 0; +} + +INT CheckDefaults(WPARAM, LPARAM) +{ + DBVARIANT dbv; + TCHAR* ptszDefault; + char szStatus[6]={0}; + + UnhookEvent(hCheckDefHook); + + fEnabled=!DBGetContactSettingByte(NULL,protocolname,KEY_ENABLED,1)==1; + interval=DBGetContactSettingWord(NULL,protocolname,KEY_REPEATINTERVAL,300); + + if (DBGetContactSettingTString(NULL,protocolname,KEY_HEADING,&dbv)) + // Heading not set + DBWriteContactSettingTString(NULL,protocolname,KEY_HEADING,TranslateT("Dear %user%, the owner left the following message:")); + else + DBFreeVariant(&dbv); + + for (int c=ID_STATUS_ONLINE; c 40078) + ptszDefault=TranslateTS(ptszDefaultMsg[c-ID_STATUS_ONLINE-3]); + if (ptszDefault) + DBWriteContactSettingTString(NULL,protocolname,szStatus,ptszDefault); + } + else + DBFreeVariant(&dbv); + } + } + hPreBuildHook = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, OnPreBuildContactMenu); + if (ServiceExists(MS_VARS_FORMATSTRING)) + gbVarsServiceExist = TRUE; + + ToggleEnable(0,0); + return 0; +} + +TCHAR* StrReplace (TCHAR* Search, TCHAR* Replace, TCHAR* Resource) +{ + int i = 0; + int SearchLen = (int)_tcslen(Search); + TCHAR* Work = mir_tstrdup(Replace); + int ReplaceLen = (int)_tcslen(Work); + + TCHAR* Pointer = _tcsstr(Resource, Search); + + while (Pointer != NULL) + { + int PointerLen = (int)_tcslen(Pointer); + int ResourceLen = (int)_tcslen(Resource); + + TCHAR* NewText = (TCHAR*)mir_calloc((ResourceLen - SearchLen + ReplaceLen + 1)*sizeof(TCHAR)); + + _tcsncpy(NewText, Resource, ResourceLen - PointerLen); + _tcscat(NewText, Work); + _tcscat(NewText, Pointer + SearchLen); + + Resource = (TCHAR*)mir_realloc(Resource, (ResourceLen - SearchLen + ReplaceLen + 1)*sizeof(TCHAR)); + + for (i = 0; i < (ResourceLen - SearchLen + ReplaceLen); i++) + Resource[i] = NewText[i]; + Resource[i] = 0; + mir_free(NewText); + + Pointer = _tcsstr(Resource + (ResourceLen - PointerLen + ReplaceLen), Search); + } + mir_free(Work); + + return Resource; +} + +INT addEvent(WPARAM wParam, LPARAM lParam) +{ + HANDLE hContact = (HANDLE)wParam; + HANDLE hDBEvent = (HANDLE)lParam; + DBEVENTINFO dbei = {sizeof(dbei)}; + + if (!fEnabled || !hContact || !hDBEvent) + return FALSE; /// unspecifyed error + + char* pszProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + int status = CallProtoService(pszProto, PS_GETSTATUS, 0, 0); + if (status == 40072 || status == 40077 || status == 40078) + return FALSE; + + CallService(MS_DB_EVENT_GET, (WPARAM)hDBEvent, (LPARAM)&dbei); /// detect size of msg + + if ((dbei.eventType != EVENTTYPE_MESSAGE) || (dbei.flags == DBEF_READ)) + return FALSE; /// we need EVENTTYPE_MESSAGE event.. + else + { /// needed event has occured.. + DBVARIANT dbv; + + if (!dbei.cbBlob) /// invalid size + return FALSE; + + if (DBGetContactSettingTString(hContact,"Protocol","p",&dbv)) + // Contact with no protocol ?!! + return FALSE; + else + DBFreeVariant(&dbv); + + if(DBGetContactSettingByte(hContact, "CList", "NotOnList", 0)) + return FALSE; + + if(DBGetContactSettingByte(hContact, protocolname, "TurnedOn", 0)) + return FALSE; + + if (!( dbei.flags & DBEF_SENT)) + { + int timeBetween=time(NULL)-DBGetContactSettingDword(hContact,protocolname,"LastReplyTS",0); + if (timeBetween>interval || DBGetContactSettingWord(hContact,protocolname,"LastStatus",0)!=status) + { + char szStatus[6]={0}; + int msgLen=1; + int isQun=DBGetContactSettingByte(hContact,pszProto,"IsQun",0); + if (isQun) + return FALSE; + + mir_snprintf(szStatus,SIZEOF(szStatus),"%d",status); + if (!DBGetContactSettingTString(NULL,protocolname,szStatus,&dbv)) + { + if (*dbv.ptszVal) + { + DBVARIANT dbvHead={0}, dbvNick={0}; + TCHAR *ptszTemp, *ptszTemp2; + + DBGetContactSettingTString(hContact,pszProto,"Nick",&dbvNick); + if (lstrcmp(dbvNick.ptszVal, NULL) == 0) + { + DBFreeVariant(&dbvNick); + return FALSE; + } + + msgLen += (int)_tcslen(dbv.ptszVal); + if (!DBGetContactSettingTString(NULL,protocolname,KEY_HEADING,&dbvHead)) + { + ptszTemp = (TCHAR*)mir_alloc(sizeof(TCHAR) * (_tcslen(dbvHead.ptszVal)+1)); + _tcscpy(ptszTemp, dbvHead.ptszVal); + ptszTemp = StrReplace(_T("%user%"), dbvNick.ptszVal, ptszTemp); + msgLen += (int)(_tcslen(ptszTemp)); + } + ptszTemp2 = (TCHAR*)mir_alloc(sizeof(TCHAR) * (msgLen+5)); + mir_sntprintf(ptszTemp2, msgLen+5, _T("%s\r\n\r\n%s"), ptszTemp, dbv.ptszVal); + if (ServiceExists(MS_VARS_FORMATSTRING)) + { + FORMATINFO fi; + + ZeroMemory(&fi, sizeof(fi)); + fi.cbSize = sizeof(fi); + fi.flags = FIF_TCHAR; + fi.tszFormat = ptszTemp2; + ptszTemp = (TCHAR*)CallService(MS_VARS_FORMATSTRING, (WPARAM)&fi, 0); + }else + ptszTemp = Utils_ReplaceVarsT(ptszTemp2); + char* pszUtf = mir_utf8encodeT(ptszTemp); + CallContactService(hContact, PSS_MESSAGE, PREF_UTF, (LPARAM)pszUtf); + + dbei.cbSize = sizeof(dbei); + dbei.eventType = EVENTTYPE_MESSAGE; + dbei.flags = DBEF_UTF | DBEF_SENT; //DBEF_READ; + dbei.szModule = pszProto; + dbei.timestamp = time(NULL); + dbei.cbBlob = lstrlenA(pszUtf) + 1; + dbei.pBlob = (PBYTE)pszUtf; + CallService(MS_DB_EVENT_ADD, (WPARAM)hContact, (LPARAM)&dbei); + + if (ServiceExists(MS_VARS_FORMATSTRING)) + CallService(MS_VARS_FREEMEMORY, (WPARAM)ptszTemp, 0); + else + mir_free(ptszTemp); + mir_free(ptszTemp2); + mir_free(pszUtf); + if (dbvNick.ptszVal) + DBFreeVariant(&dbvNick); + if (dbvHead.ptszVal) + DBFreeVariant(&dbvHead); + } + DBFreeVariant(&dbv); + } + } + } + + DBWriteContactSettingDword(hContact,protocolname,"LastReplyTS",time(NULL)); + DBWriteContactSettingWord(hContact,protocolname,"LastStatus",status); + } + return 0; +} + +INT OnPreShutdown(WPARAM wParam, LPARAM lParam) +{ + UnhookEvent(hAddEventHook); + UnhookEvent(hPreBuildHook); + UnhookEvent(hOptHook); + UnhookEvent(hOnPreShutdown); + return 0; +} + +extern "C" int __declspec(dllexport)Load(void) +{ + + mir_getLP(&pluginInfoEx); + + hToggleEnable = CreateServiceFunction(protocolname"/ToggleEnable", ToggleEnable); + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize = sizeof(mi); + mi.position = 500090000; + mi.ptszName = _T(""); + mi.pszService = protocolname"/ToggleEnable"; + hEnableMenu = Menu_AddMainMenuItem(&mi); + + hToggleAutoanswer = CreateServiceFunction(protocolname"/ToggleAutoanswer",Toggle); + ZeroMemory(&mi, sizeof(mi)); + mi.cbSize=sizeof(mi); + mi.position=-0x7FFFFFFF; + mi.ptszName=_T(""); + mi.pszService=protocolname"/ToggleAutoanswer"; + hToggle = Menu_AddContactMenuItem(&mi); + + //add hook + hOptHook = HookEvent(ME_OPT_INITIALISE, OptInit); + hAddEventHook = HookEvent(ME_DB_EVENT_ADDED, addEvent); + hCheckDefHook = HookEvent(ME_SYSTEM_MODULESLOADED, CheckDefaults); + hOnPreShutdown = HookEvent(ME_SYSTEM_PRESHUTDOWN, OnPreShutdown); + + return 0; +} + +extern "C" __declspec(dllexport)int Unload(void) +{ + DestroyServiceFunction(hToggleEnable); + DestroyServiceFunction(hToggleAutoanswer); + return 0; +} \ No newline at end of file diff --git a/plugins/SimpleAR/src/Options.cpp b/plugins/SimpleAR/src/Options.cpp new file mode 100644 index 0000000000..e53236d22c --- /dev/null +++ b/plugins/SimpleAR/src/Options.cpp @@ -0,0 +1,160 @@ +#include "Common.h" + +TCHAR* ptszMessage[6]={0}; +INT lastIndex=-1; + +INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + { + DBVARIANT dbv; + TranslateDialogDefault(hwndDlg); + TCHAR* pszStatus; + char tszStatus[6]={0}; + + CheckDlgButton(hwndDlg,IDC_ENABLEREPLIER,DBGetContactSettingByte(NULL,protocolname,KEY_ENABLED,1)==1); + SetDlgItemInt(hwndDlg,IDC_INTERVAL,DBGetContactSettingWord(NULL,protocolname,KEY_REPEATINTERVAL,300)/60,FALSE); + + if (!DBGetContactSettingTString(NULL,protocolname,KEY_HEADING,&dbv)) + { + SetDlgItemText(hwndDlg,IDC_HEADING,dbv.ptszVal); + DBFreeVariant(&dbv); + } + + for (INT c = ID_STATUS_ONLINE; c < ID_STATUS_IDLE; c++) + { + mir_snprintf(tszStatus, SIZEOF(tszStatus), "%d", c); + pszStatus=(TCHAR*)CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION,(WPARAM)c,GSMDF_TCHAR); + if (c == 40072 || c == 40077 || c == 40078) + continue; + else + { + SendDlgItemMessage(hwndDlg,IDC_STATUSMODE,CB_ADDSTRING,0,(LPARAM)pszStatus); + + if (!DBGetContactSettingTString(NULL, protocolname, tszStatus, &dbv)) + { + if (c < 40077) + ptszMessage[c-ID_STATUS_ONLINE-1] = _tcsdup(dbv.ptszVal); + else if (c > 40078) + ptszMessage[c-ID_STATUS_ONLINE-3] = _tcsdup(dbv.ptszVal); + DBFreeVariant(&dbv); + } + } + } + + SendDlgItemMessage(hwndDlg,IDC_STATUSMODE,CB_SETCURSEL,0,0); + + lastIndex=0; + SetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex]); + + return TRUE; + } + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_ENABLEREPLIER: + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + case IDC_STATUSMODE: + // First, save last, then load current + if (lastIndex>-1) + { + INT size=SendDlgItemMessage(hwndDlg,IDC_MESSAGE,WM_GETTEXTLENGTH,0,0)+1; + GetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex],size); + } + lastIndex=SendDlgItemMessage(hwndDlg,IDC_STATUSMODE,CB_GETCURSEL,0,0); + SetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex]); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + case IDC_DEFAULT: + SetDlgItemText(hwndDlg,IDC_MESSAGE,TranslateTS(ptszDefaultMsg[lastIndex])); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + case IDC_INTERVAL: + case IDC_HEADING: + case IDC_MESSAGE: + if ((HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == EN_CHANGE) && (HWND)lParam == GetFocus()) + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + } + break; + + case WM_NOTIFY: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + { + INT size; + TCHAR ptszText[1024]; + char szStatus[6]={0}; + BOOL translated; + + fEnabled=IsDlgButtonChecked(hwndDlg,IDC_ENABLEREPLIER)==1; + DBWriteContactSettingByte(NULL,protocolname,KEY_ENABLED,(BYTE)fEnabled); + + GetDlgItemText(hwndDlg,IDC_HEADING,ptszText,SIZEOF(ptszText)); + DBWriteContactSettingTString(NULL,protocolname,KEY_HEADING,ptszText); + + size=GetDlgItemInt(hwndDlg,IDC_INTERVAL,&translated,FALSE); + if (translated) + interval=size*60; + DBWriteContactSettingWord(NULL,protocolname,KEY_REPEATINTERVAL,interval); + + size=SendDlgItemMessage(hwndDlg,IDC_MESSAGE,WM_GETTEXTLENGTH,0,0)+1; + GetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex],size); + + for (int c=ID_STATUS_ONLINE; c40078 && ptszMessage[c-ID_STATUS_ONLINE-3]) + DBWriteContactSettingTString(NULL,protocolname,szStatus,ptszMessage[c-ID_STATUS_ONLINE-3]); + else + DBDeleteContactSetting(NULL,protocolname,szStatus); + } + } + return TRUE; + } + } + break; + case WM_DESTROY: + for (int c=ID_STATUS_ONLINE; c40078) + ptszMessage[c-ID_STATUS_ONLINE-3]=NULL; + } + } + break; + } + return FALSE; +} + +INT OptInit(WPARAM wParam,LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp = { 0 }; + odp.cbSize = sizeof(odp); + odp.position = -790000000; + odp.hInstance = hinstance; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTION); + odp.pszTitle = LPGEN("Simple Auto Replier"); + odp.pszGroup = LPGEN("Plugins"); + odp.flags = ODPF_BOLDGROUPS; + odp.pfnDlgProc = DlgProcOpts; + Options_AddPage(wParam, &odp); + return 0; +} \ No newline at end of file diff --git a/plugins/SimpleAR/src/Resource.h b/plugins/SimpleAR/src/Resource.h new file mode 100644 index 0000000000..384930dd39 --- /dev/null +++ b/plugins/SimpleAR/src/Resource.h @@ -0,0 +1,25 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by resource.rc +// +#define IDD_OPTION 102 +#define IDC_ENABLEREPLIER 1001 +#define IDC_HEADING 1002 +#define IDC_STATUSMODE 1004 +#define IDC_MESSAGE 1005 +#define IDC_INTERVAL 1006 +#define IDC_DEFAULT 1007 +#define IDI_ON 103 +#define IDI_OFF 104 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1008 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/plugins/SimpleAR/src/Version.h b/plugins/SimpleAR/src/Version.h new file mode 100644 index 0000000000..8312d378b1 --- /dev/null +++ b/plugins/SimpleAR/src/Version.h @@ -0,0 +1,21 @@ +#define __MAJOR_VERSION 2 +#define __MINOR_VERSION 0 +#define __RELEASE_NUM 2 +#define __BUILD_NUM 6 + +#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM +#define __FILEVERSION_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM + +#define __STRINGIFY_IMPL(x) #x +#define __STRINGIFY(x) __STRINGIFY_IMPL(x) +#define __VERSION_STRING __STRINGIFY(__FILEVERSION_DOTS) + + +#define __PLUGIN_NAME "SimpleAR" +#define __INTERNAL_NAME "Simple Auto Replier" +#define __FILENAME "SimpleAR.dll" +#define __DESCRIPTION "Simple Auto Replier." +#define __AUTHOR "Stark Wong, Mataes, Mikel-Ard-Ri" +#define __AUTHOREMAIL "mikelardri@gmail.com" +#define __AUTHORWEB "http://miranda-ng.org/" +#define __COPYRIGHT "© 2012" -- cgit v1.2.3