summaryrefslogtreecommitdiff
path: root/protocols/LotusNotify/src
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-01-26 18:39:36 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-01-26 18:39:36 +0300
commit571a42dfc1c3b3d374d0239e1f139fcfd3a5b06c (patch)
treed7c11d869677becea6291e3cd25b0f6e5c95d3b1 /protocols/LotusNotify/src
parent1a8b125e5f9859b9e99c59cf0cf946bc583ccef1 (diff)
fixes #3007 (LotusNotify: падение при выборе аккаунта)
Diffstat (limited to 'protocols/LotusNotify/src')
-rw-r--r--protocols/LotusNotify/src/LotusNotify.cpp944
-rw-r--r--protocols/LotusNotify/src/debug.h2
-rw-r--r--protocols/LotusNotify/src/options.cpp602
-rw-r--r--protocols/LotusNotify/src/stdafx.h23
-rw-r--r--protocols/LotusNotify/src/version.h2
5 files changed, 781 insertions, 792 deletions
diff --git a/protocols/LotusNotify/src/LotusNotify.cpp b/protocols/LotusNotify/src/LotusNotify.cpp
index 2f7bb85054..4c86622fa0 100644
--- a/protocols/LotusNotify/src/LotusNotify.cpp
+++ b/protocols/LotusNotify/src/LotusNotify.cpp
@@ -17,11 +17,8 @@ There is no warranty.
INT_PTR SetStatus(WPARAM wParam, LPARAM lParam);
-#define MAX_FIELD 256
-#define MAX_SETTING_STR 512
-#define STATUS_COUNT 9
+int LotusNotifyOptInit(WPARAM wParam, LPARAM);
-char MODULENAME[64] = {0}; //init at init_pluginname();
CMPlugin g_plugin;
HINSTANCE hLotusDll;
@@ -36,17 +33,17 @@ HANDLE hCheckEvent = nullptr;
static HWND hTimerWnd = (HWND)nullptr;
static UINT TID = (UINT)2006;
-char settingServer[MAX_SETTING_STR] = "", settingServerSec[MAX_SETTING_STR] = "", settingDatabase[MAX_SETTING_STR] = "",
- settingCommand[MAX_SETTING_STR] = "", settingParameters[MAX_SETTING_STR] = "", settingPassword[MAX_SETTING_STR] = "";
+char settingServer[MAX_SETTING_STR] = "", settingServerSec[MAX_SETTING_STR] = "", settingDatabase[MAX_SETTING_STR] = "";
+char settingCommand[MAX_SETTING_STR] = "", settingParameters[MAX_SETTING_STR] = "", settingPassword[MAX_SETTING_STR] = "";
wchar_t settingFilterSubject[MAX_SETTING_STR] = TEXT(""), settingFilterSender[MAX_SETTING_STR] = TEXT(""), settingFilterTo[MAX_SETTING_STR] = TEXT("");
COLORREF settingBgColor, settingFgColor;
int settingInterval = 0, settingInterval1 = 0;
uint32_t settingNewestID = 0;
-uint8_t settingSetColours = 0, settingShowError = 1, settingIniAnswer = -1, settingIniCheck = 0,
- settingOnceOnly = 0, settingNonClickedOnly = 0, settingNewest = 0, settingEvenNonClicked = 0, settingKeepConnection = 1;
+uint8_t settingSetColours = 0, settingShowError = 1, settingIniAnswer = -1, settingIniCheck = 0;
+uint8_t settingOnceOnly = 0, settingNonClickedOnly = 0, settingNewest = 0, settingEvenNonClicked = 0, settingKeepConnection = 1;
BOOL settingStatus[STATUS_COUNT];
-BOOL bMirandaCall=FALSE;
+BOOL bMirandaCall = FALSE;
struct HISTORIA *first = nullptr;
BOOL running = FALSE;
@@ -61,7 +58,7 @@ wchar_t *startuperrors[] = {
LPGENW("Unable to initialize Notes."),
LPGENW("Lotus Notes Extension Manager was not registered. Authentication function will not work properly"),
LPGENW("In notes.ini file there is no required entry EXTMGR_ADDINS=plugindllnamewithout\".dll\"")
- };
+};
/////////////////////////////////////////////////////////////////////////////////////////
@@ -90,26 +87,26 @@ extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = { MIID_PROTOC
/////////////////////////////////////////////////////////////////////////////////////////
// authentication callback futnction from extension manager called by nnotes.dll
-STATUS LNPUBLIC __stdcall EMCallBack (EMRECORD * pData)
+STATUS LNPUBLIC __stdcall EMCallBack(EMRECORD *pData)
{
VARARG_PTR pArgs;
uint32_t maxPwdLen;
- uint32_t * retLength;
- char * retPassword;
- char * fileName;
- char * ownerName;
+ uint32_t *retLength;
+ char *retPassword;
+ char *fileName;
+ char *ownerName;
if (pData->EId != EM_GETPASSWORD) return (ERR_EM_CONTINUE); //asking for password?
if (pData->Status != NOERROR) return (ERR_EM_CONTINUE);
- pArgs= pData->Ap;
- maxPwdLen = VARARG_GET (pArgs, uint32_t);
- retLength = VARARG_GET (pArgs, uint32_t *);
- retPassword = VARARG_GET (pArgs, char *);
- fileName = VARARG_GET (pArgs, char *);
- ownerName = VARARG_GET (pArgs, char *);
+ pArgs = pData->Ap;
+ maxPwdLen = VARARG_GET(pArgs, uint32_t);
+ retLength = VARARG_GET(pArgs, uint32_t *);
+ retPassword = VARARG_GET(pArgs, char *);
+ fileName = VARARG_GET(pArgs, char *);
+ ownerName = VARARG_GET(pArgs, char *);
strncpy(retPassword, settingPassword, mir_strlen(settingPassword)); //set our password
- retPassword[mir_strlen(settingPassword)]='\0';
+ retPassword[mir_strlen(settingPassword)] = '\0';
*retLength = (uint32_t)mir_strlen(retPassword);//and his length
return ERR_BSAFE_EXTERNAL_PASSWORD;
}
@@ -117,12 +114,12 @@ STATUS LNPUBLIC __stdcall EMCallBack (EMRECORD * pData)
//Main entry point for Ext Manager of Lotus API. called by nnotes.dll
//It don't work (don't know why), and Mirandas Load function is called with value 1 or 0 as parameter...
-__declspec(dllexport)STATUS LNPUBLIC MainEntryPoint (void)
+__declspec(dllexport)STATUS LNPUBLIC MainEntryPoint(void)
{
- STATUS rc = EMRegister1 (EM_GETPASSWORD, EM_REG_BEFORE | EM_REG_AFTER, EMCallBack, 0, &hLotusRegister); //Extension Manager must know that we are here
- if(rc) {
+ STATUS rc = EMRegister1(EM_GETPASSWORD, EM_REG_BEFORE | EM_REG_AFTER, EMCallBack, 0, &hLotusRegister); //Extension Manager must know that we are here
+ if (rc) {
//Extension magager don't know who we are :(
- startuperror+=8;
+ startuperror += 8;
// Get the info from the .ini file
}
return rc;
@@ -135,7 +132,8 @@ void ExtClear()
STATUS status;
if (0 != hLotusRegister) {
status = EMDeregister1(&hLotusRegister); //we was registered, so let's unregister
- } else {
+ }
+ else {
status = NOERROR;
}
log_p(L"ExtClear() status=%d", status);
@@ -144,13 +142,12 @@ void ExtClear()
//check if msg was clicked and exists on msgs list
-struct HISTORIA* getEl(uint32_t id)
+struct HISTORIA *getEl(uint32_t id)
{
- for(struct HISTORIA *cur = first; cur != nullptr; cur = cur->next)
- {
- if(cur->noteID == id)
+ for (struct HISTORIA *cur = first; cur != nullptr; cur = cur->next)
+ if (cur->noteID == id)
return cur;
- }
+
return nullptr;
}
@@ -158,7 +155,7 @@ struct HISTORIA* getEl(uint32_t id)
//creates new entry on list of msgs
void addNewId(uint32_t id)
{
- struct HISTORIA* nowy = (struct HISTORIA*)mir_alloc(sizeof(struct HISTORIA)) ;
+ struct HISTORIA *nowy = (struct HISTORIA *)mir_alloc(sizeof(struct HISTORIA));
assert(nowy);
nowy->noteID = id;
nowy->next = first;
@@ -169,9 +166,9 @@ void addNewId(uint32_t id)
//add popup handle. This queue is used to close popups with same msg
-void addPopup(uint32_t id,HWND hWnd)
+void addPopup(uint32_t id, HWND hWnd)
{
- struct POPUPSQUEUE* nowy = (struct POPUPSQUEUE*)mir_alloc(sizeof(struct POPUPSQUEUE)) ;
+ struct POPUPSQUEUE *nowy = (struct POPUPSQUEUE *)mir_alloc(sizeof(struct POPUPSQUEUE));
struct HISTORIA *elem = getEl(id);
assert(nowy);
nowy->hWnd = hWnd;
@@ -184,10 +181,10 @@ void addPopup(uint32_t id,HWND hWnd)
void deletePopupsHandles(struct POPUPSQUEUE **firstpq, BOOL closePopup)
{
struct POPUPSQUEUE *curpq = *firstpq, *delpq;
- while(curpq != nullptr) {
+ while (curpq != nullptr) {
delpq = curpq;
curpq = curpq->next;
- if(closePopup)
+ if (closePopup)
PUDeletePopup(delpq->hWnd);
mir_free(delpq);
}
@@ -199,68 +196,32 @@ void deletePopupsHandles(struct POPUPSQUEUE **firstpq, BOOL closePopup)
void deleteElements()
{
struct HISTORIA *cur = first, *del;
- while(cur != nullptr)
- {
+ while (cur != nullptr) {
del = cur;
cur = cur->next;
- deletePopupsHandles(&(del->pq),FALSE);
+ deletePopupsHandles(&(del->pq), FALSE);
mir_free(del);
first = cur;
}
first = nullptr;
}
-
-//set plugin name
-void init_pluginname()
-{
- char text[MAX_PATH], *p, *q;
- WIN32_FIND_DATAA ffd;
-
- // Try to find name of the file having original letter sizes
- GetModuleFileNameA(g_plugin.getInst(), text, sizeof(text));
-
- HANDLE hFind = FindFirstFileA(text, &ffd);
- if(hFind != INVALID_HANDLE_VALUE) {
- strncpy_s(text, _countof(text), ffd.cFileName, mir_strlen(ffd.cFileName));
- FindClose(hFind);
- }
- // Check if we have relative or full path
- if(p = strrchr(text, '\\')) {
- p++;
- } else {
- p = text;
- }
- if(q = strrchr(p, '.')) {
- *q = '\0';
- }
- if((q = strstr(p, "debug")) && mir_strlen(q) == 5) {
- *q = '\0';
- }
-
- // copy to static variable
- strncpy_s(MODULENAME, _countof(MODULENAME), p, mir_strlen(p));
- assert(mir_strlen(MODULENAME)>0);
-
-}
-
-
BOOL strrep(char *src, char *needle, char *newstring)
{
char *found, begining[MAX_SETTING_STR], tail[MAX_SETTING_STR];
//strset(begining,' ');
//strset(tail,' ');
- if(!(found=strstr(src,needle)))
+ if (!(found = strstr(src, needle)))
return FALSE;
- size_t pos = (found-src);
+ size_t pos = (found - src);
strncpy_s(begining, _countof(begining), src, pos);
- begining[pos]='\0';
+ begining[pos] = '\0';
pos += mir_strlen(needle);
- strncpy_s(tail, _countof(tail), src+pos, _countof(tail));
- begining[pos]='\0';
+ strncpy_s(tail, _countof(tail), src + pos, _countof(tail));
+ begining[pos] = '\0';
pos = sprintf(src, "%s%s%s", begining, newstring, tail); //!!!!!!!!!!!!!!!!
return TRUE;
@@ -270,11 +231,11 @@ BOOL strrep(char *src, char *needle, char *newstring)
//check if given string contain filter string
//param field= 0-sender
// 1-subject
-BOOL checkFilters(wchar_t* str, int field)
+BOOL checkFilters(wchar_t *str, int field)
{
wchar_t buff[512] = L"";
wchar_t *strptr = nullptr;
- switch(field) {
+ switch (field) {
case 0:
wcsncpy_s(buff, settingFilterSender, _TRUNCATE);
break;
@@ -286,15 +247,12 @@ BOOL checkFilters(wchar_t* str, int field)
break;
}
-
- while(strptr = wcschr(buff, ';'))
- {
+ while (strptr = wcschr(buff, ';')) {
wchar_t tmp[512] = TEXT(""), *ptr;
- wcsncpy_s(tmp, buff, (strptr-buff));
+ wcsncpy_s(tmp, buff, (strptr - buff));
wcsncpy_s(buff, strptr + 1, _TRUNCATE);
- if(wcsstr(wcslwr(ptr=wcsdup(str)),wcslwr(tmp)))
- {
+ if (wcsstr(wcslwr(ptr = wcsdup(str)), wcslwr(tmp))) {
free(ptr);
return TRUE;
}
@@ -305,20 +263,20 @@ BOOL checkFilters(wchar_t* str, int field)
//subfunction called from popup plugin callback function
-void Click(HWND hWnd,BOOL execute)
+void Click(HWND hWnd, BOOL execute)
{
- POPUPATT *pid = (POPUPATT*)PUGetPluginData(hWnd);
- if(settingOnceOnly&&settingNonClickedOnly)
- (getEl(pid->id))->clicked=TRUE;//add to msgs list
+ POPUPATT *pid = (POPUPATT *)PUGetPluginData(hWnd);
+ if (settingOnceOnly && settingNonClickedOnly)
+ (getEl(pid->id))->clicked = TRUE;//add to msgs list
- deletePopupsHandles((&(getEl(pid->id))->pq),TRUE);
+ deletePopupsHandles((&(getEl(pid->id))->pq), TRUE);
- if(settingNewest && (pid->id > settingNewestID) ){
- g_plugin.setDword("LNNewestID", settingNewestID=pid->id);
+ if (settingNewest && (pid->id > settingNewestID)) {
+ g_plugin.setDword("LNNewestID", settingNewestID = pid->id);
}
- if(execute && settingCommand[0] ) {
- char tmpcommand[2*MAX_SETTING_STR];
- char tmpparameters[2*MAX_SETTING_STR];
+ if (execute && settingCommand[0]) {
+ char tmpcommand[2 * MAX_SETTING_STR];
+ char tmpparameters[2 * MAX_SETTING_STR];
strncpy_s(tmpcommand, _countof(tmpcommand), settingCommand, _countof(tmpcommand));
strncpy_s(tmpparameters, _countof(tmpparameters), settingParameters, _countof(tmpparameters));
strrep(tmpcommand, "%OID%", pid->strNote);
@@ -332,108 +290,98 @@ void Click(HWND hWnd,BOOL execute)
//popup plugin callback function
static LRESULT CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- switch(message) {
- case WM_COMMAND:
+ switch (message) {
+ case WM_COMMAND:
+ if (HIWORD(wParam) == STN_CLICKED)//client clicked on popup with left mouse button
{
+ Click(hWnd, TRUE);
- if (HIWORD(wParam) == STN_CLICKED)//client clicked on popup with left mouse button
- {
- Click(hWnd,TRUE);
-
- //system(settingCommand);
- //if(!settingOnceOnly)
- //addNewId(noteID);
- return TRUE;
- }
-
- break;
+ //system(settingCommand);
+ //if(!settingOnceOnly)
+ //addNewId(noteID);
+ return TRUE;
}
- case WM_RBUTTONUP:
- {
- Click(hWnd,FALSE);
- break;
- }
+ break;
+
+ case WM_RBUTTONUP:
+ Click(hWnd, FALSE);
+ break;
- case UM_INITPOPUP:
+ case UM_INITPOPUP:
{
- POPUPATT *pid = (POPUPATT*)PUGetPluginData(hWnd);
- addPopup(pid->id,hWnd);
+ POPUPATT *pid = (POPUPATT *)PUGetPluginData(hWnd);
+ addPopup(pid->id, hWnd);
//PUDeletePopUp(hWnd);
- break;
}
+ break;
- case UM_FREEPLUGINDATA:
+ case UM_FREEPLUGINDATA:
{
- POPUPATT *mpd = (POPUPATT*)PUGetPluginData(hWnd);
+ POPUPATT *mpd = (POPUPATT *)PUGetPluginData(hWnd);
if (mpd > 0) free(mpd);
- return TRUE; //TRUE or FALSE is the same, it gets ignored.
}
-
- default:
- break;
+ return TRUE; //TRUE or FALSE is the same, it gets ignored.
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
-
//check notes.ini if it has entry about our plugin
//return TRUE if notes.ini is set correctly
//give bInfo=TRUE to show MsgBoxes
BOOL checkNotesIniFile(BOOL bInfo)
{
- char tmp[MAXENVVALUE+1], tmp1[MAXENVVALUE+1];
- (OSGetEnvironmentString1) ("EXTMGR_ADDINS", tmp, MAXENVVALUE);//get current setting
- strncpy_s(tmp1,_countof(tmp1),tmp,sizeof(tmp1));//copy temporary
- assert(mir_strlen(tmp1)>0);
+ char tmp[MAXENVVALUE + 1], tmp1[MAXENVVALUE + 1];
+ (OSGetEnvironmentString1)("EXTMGR_ADDINS", tmp, MAXENVVALUE);//get current setting
+ strncpy_s(tmp1, _countof(tmp1), tmp, sizeof(tmp1));//copy temporary
+ assert(mir_strlen(tmp1) > 0);
- char* PLUGINNAME_lower = _strlwr(mir_strdup(MODULENAME));
+ char *PLUGINNAME_lower = _strlwr(mir_strdup(MODULENAME));
//is there our plugin as safe?
- if(strstr(tmp1,PLUGINNAME_lower) == nullptr)
- {
- if(!settingIniCheck && !bInfo)
+ if (strstr(tmp1, PLUGINNAME_lower) == nullptr) {
+ if (!settingIniCheck && !bInfo)
return FALSE;
- if(!settingIniAnswer || bInfo){
- switch(MessageBox(nullptr, TranslateT("This utility check your notes.ini file if it's set to authenticate this plugin as safe. Plugin is not added as Lotus Extension, so plugin built-in authentication will not work properly. Do you want to add plugin as Lotus Extension (modify notes.ini by adding \"EXTMGR_ADDINS=PLUGINNAME\")?"), TranslateT("LotusNotify plugin configuration"), MB_YESNO))
- {
- case IDYES:
- {
- settingIniAnswer=1;
- break;
- }
- case IDNO:
- {
- settingIniAnswer=-1;
- break;
- }
+ if (!settingIniAnswer || bInfo) {
+ switch (MessageBox(nullptr, TranslateT("This utility check your notes.ini file if it's set to authenticate this plugin as safe. Plugin is not added as Lotus Extension, so plugin built-in authentication will not work properly. Do you want to add plugin as Lotus Extension (modify notes.ini by adding \"EXTMGR_ADDINS=PLUGINNAME\")?"), TranslateT("LotusNotify plugin configuration"), MB_YESNO)) {
+ case IDYES:
+ settingIniAnswer = 1;
+ break;
+
+ case IDNO:
+ settingIniAnswer = -1;
+ break;
}
}
- if(settingIniAnswer == 1)
- {
- if(mir_strlen(tmp) > 0) {
+ if (settingIniAnswer == 1) {
+ if (mir_strlen(tmp) > 0) {
strcat_s(tmp, _countof(tmp), ",");
strcat_s(tmp, _countof(tmp), PLUGINNAME_lower); //add our plugin to extensions
- } else {
+ }
+ else {
strncpy_s(tmp, _countof(tmp), PLUGINNAME_lower, mir_strlen(PLUGINNAME_lower)); //set our plugin as extension
}
- (OSSetEnvironmentVariable1) ("EXTMGR_ADDINS", tmp); //set notes.ini entry
- if(bInfo) {
+ (OSSetEnvironmentVariable1)("EXTMGR_ADDINS", tmp); //set notes.ini entry
+ if (bInfo) {
MessageBox(nullptr, TranslateT("notes.ini modified correctly. Miranda restart required."), TranslateT("LotusNotify plugin configuration"), MB_OK);
- } else{
+ }
+ else {
ErMsgT(TranslateT("notes.ini modified correctly. Miranda restart required."));
}
return TRUE;
- } else { if(settingIniAnswer == 0xFF)
- return FALSE;
}
- } else {
+ else {
+ if (settingIniAnswer == 0xFF)
+ return FALSE;
+ }
+ }
+ else {
//setting set already
- if(bInfo)
+ if (bInfo)
MessageBox(nullptr, TranslateT("notes.ini seem to be set correctly."), TranslateT("LotusNotify plugin configuration"), MB_OK);
return TRUE;
}
@@ -444,9 +392,9 @@ BOOL checkNotesIniFile(BOOL bInfo)
//popup plugin to show popup function
-void showMsg(wchar_t* sender,wchar_t* text, uint32_t id, char *strUID)
+void showMsg(wchar_t *sender, wchar_t *text, uint32_t id, char *strUID)
{
- POPUPATT * mpd = (POPUPATT*)malloc(sizeof(POPUPATT));
+ POPUPATT *mpd = (POPUPATT *)malloc(sizeof(POPUPATT));
mpd->id = id;
strncpy_s(mpd->strNote, _countof(mpd->strNote), strUID, mir_strlen(strUID));
@@ -454,30 +402,30 @@ void showMsg(wchar_t* sender,wchar_t* text, uint32_t id, char *strUID)
ppd.lchIcon = LoadIcon(g_plugin.getInst(), MAKEINTRESOURCE(IDI_ICON1));
wcscpy_s(ppd.lpwzContactName, _countof(ppd.lpwzContactName), sender);
wcscpy_s(ppd.lpwzText, _countof(ppd.lpwzText), text);
- if(settingSetColours) {
+ if (settingSetColours) {
ppd.colorBack = settingBgColor;
ppd.colorText = settingFgColor;
}
ppd.PluginWindowProc = PopupDlgProc;
- ppd.iSeconds=settingInterval1;
+ ppd.iSeconds = settingInterval1;
ppd.PluginData = mpd;
PUAddPopupW(&ppd);
}
//what to do with error msg
-void ErMsgW(wchar_t* msg)
+void ErMsgW(wchar_t *msg)
{
- wchar_t* msgT = mir_wstrdup(msg);
+ wchar_t *msgT = mir_wstrdup(msg);
ErMsgT(msgT);
mir_free(msgT);
}
///TODO wchar_t->wchar_t and test
-void ErMsgT(wchar_t* msg)
+void ErMsgT(wchar_t *msg)
{
log_p(L"Error: %S", msg);
- if(settingShowError && !isPopupWaiting) {
- wchar_t buffer[256+14];
+ if (settingShowError && !isPopupWaiting) {
+ wchar_t buffer[256 + 14];
wcsncpy_s(buffer, L"LotusNotify: ", _TRUNCATE);
wcscat_s(buffer, msg);
isPopupWaiting = TRUE;
@@ -493,33 +441,33 @@ void ErMsgByLotusCode(STATUS erno)
char far error_text_LMBCS[200];
char far error_text_UNICODEatCHAR[400];
wchar_t far error_text_UNICODE[200];
- uint16_t text_len;
+ uint16_t text_len;
- text_len = OSLoadString1(NULLHANDLE, erno, error_text_LMBCS, sizeof(error_text_LMBCS)-1);
- OSTranslate1(OS_TRANSLATE_LMBCS_TO_UNICODE, error_text_LMBCS, (uint16_t)mir_strlen(error_text_LMBCS), error_text_UNICODEatCHAR, sizeof(error_text_UNICODEatCHAR)-1);
+ text_len = OSLoadString1(NULLHANDLE, erno, error_text_LMBCS, sizeof(error_text_LMBCS) - 1);
+ OSTranslate1(OS_TRANSLATE_LMBCS_TO_UNICODE, error_text_LMBCS, (uint16_t)mir_strlen(error_text_LMBCS), error_text_UNICODEatCHAR, sizeof(error_text_UNICODEatCHAR) - 1);
memcpy(error_text_UNICODE, error_text_UNICODEatCHAR, sizeof(error_text_UNICODE));
ErMsgW(error_text_UNICODE);
}
-int check() {
+int check()
+{
log_p(L"check: Entering check function. running=%d", running);
- if(startuperror) {
- int cnt;
- for(cnt = 0; cnt <= 4; cnt++)
- if(startuperror >> cnt & 1)
+ if (startuperror) {
+ for (int cnt = 0; cnt <= 4; cnt++)
+ if (startuperror >> cnt & 1)
ErMsgT(TranslateW(startuperrors[cnt]));
return 1;
}
- if (Plugin_Terminated || Miranda_IsTerminated()){
+ if (Plugin_Terminated || Miranda_IsTerminated()) {
log_p(L"check: Plugin_Terminated (=%d) OR Miranda_IsTerminated()", Plugin_Terminated);
return 0;
}
- if(running) {
+ if (running) {
ErMsgT(TranslateT("Now checking Lotus, try again later"));
return 1;
}
@@ -536,24 +484,24 @@ int check() {
//before pure lotus notes api functions call
-void checkthread(void*)
+void checkthread(void *)
{
STATUS error = NOERROR;
- char fullpath[255];
+ char fullpath[255];
DBHANDLE db_handle = NULLHANDLE; /* database handle */
char UserName[MAXUSERNAME + 1];
HANDLE hTable;
uint32_t noteID = 0L;
- BOOL fFirst = TRUE;
+ BOOL fFirst = TRUE;
NOTEHANDLE note_handle;
- uint16_t field_len;
+ uint16_t field_len;
char field_date[MAXALPHATIMEDATE + 1];
char field_lotus_LMBCS[MAX_FIELD];
char field_lotus_UNICODEatCHAR[MAX_FIELD * sizeof(wchar_t)];
- wchar_t field_from_UNICODE[MAX_FIELD], field_subject_UNICODE[MAX_FIELD], field_to_UNICODE[MAX_FIELD],field_copy_UNICODE[MAX_FIELD];
+ wchar_t field_from_UNICODE[MAX_FIELD], field_subject_UNICODE[MAX_FIELD], field_to_UNICODE[MAX_FIELD], field_copy_UNICODE[MAX_FIELD];
mir_cslock lck(checkthreadCS);
log(L"checkthread: inside new check thread");
@@ -625,10 +573,10 @@ void checkthread(void*)
BLOCKID bhAttachment;
uint32_t cSize = 0;
uint32_t attSize = 0;
- OID retNoteOID;
- TIMEDATE retModified; /* modified timedate */
- uint16_t retNoteClass; /* note class */
- TIMEDATE sendDate;
+ OID retNoteOID;
+ TIMEDATE retModified; /* modified timedate */
+ uint16_t retNoteClass; /* note class */
+ TIMEDATE sendDate;
char strLink[4 * 16];
if (Plugin_Terminated || Miranda_IsTerminated()) {
@@ -675,7 +623,7 @@ void checkthread(void*)
#endif
// remember newest id depending on options set
- if (settingNewest&&settingEvenNonClicked && (noteID > settingNewestID))
+ if (settingNewest && settingEvenNonClicked && (noteID > settingNewestID))
g_plugin.setDword("LNNewestID", settingNewestID = noteID);
//if(((!settingOnceOnly||(settingOnceOnly&&settingNonClickedOnly))&&existElem(noteID))||(settingNewest&&settingNewestID>=noteID))
@@ -700,7 +648,7 @@ void checkthread(void*)
retNoteOID.File.Innards[0],
retNoteOID.Note.Innards[1],
retNoteOID.Note.Innards[0]
- );
+ );
log_p(L"checkthread: got noteInfo, built link: %S", strLink);
@@ -749,17 +697,17 @@ void checkthread(void*)
, field_copy_UNICODE
, field_subject_UNICODE
, attSize
- );
+ );
#else
//do not put private user data into log
log_p(L"checkthread: MAIL INFO (sizes): date=[%S], from=[%d], to=[%d], cc=[%d], sub=[%d], attSize=[%d]"
- ,field_date
- ,mir_wstrlen(field_from_UNICODE)
- ,mir_wstrlen(field_to_UNICODE)
- ,mir_wstrlen(field_copy_UNICODE)
- ,mir_wstrlen(field_subject_UNICODE)
- ,attSize
- );
+ , field_date
+ , mir_wstrlen(field_from_UNICODE)
+ , mir_wstrlen(field_to_UNICODE)
+ , mir_wstrlen(field_copy_UNICODE)
+ , mir_wstrlen(field_subject_UNICODE)
+ , attSize
+ );
#endif
@@ -882,607 +830,27 @@ void decodeServer(char *tmp)
}
}
-
-//fill combo in options dlgbox with all known servers
-void fillServersList(HWND hwndDlg)
-{
- HANDLE hServerList = NULLHANDLE;
- uint8_t far *pServerList; /* Pointer to start of Server List */
- uint16_t wServerCount; /* Number of servers in list. */
- uint16_t far *pwServerLength; /* Index to array of servername lens */
- uint8_t far *pServerName;
- STATUS error = NOERROR; /* Error return from API routines. */
- char ServerString[MAXPATH]; /* String to hold server names. */
- LPSTR szServerString = ServerString;
-
- if (!hLotusDll) {
- return;
- }
-
- error = NSGetServerList1(nullptr, &hServerList);
- if (error == NOERROR) {
-
- pServerList = (uint8_t far *) OSLockObject1(hServerList);
- wServerCount = (uint16_t)*pServerList;
-
- pwServerLength = (uint16_t *)(pServerList + sizeof(uint16_t));
-
- pServerName = (uint8_t far *) pServerList + sizeof(wServerCount) + ((wServerCount)* sizeof(uint16_t));
-
- for (USHORT i = 0; i < wServerCount; pServerName += pwServerLength[i], i++) {
- memmove(szServerString, pServerName, pwServerLength[i]);
- szServerString[pwServerLength[i]] = '\0';
- decodeServer(ServerString);
- SendDlgItemMessageA(hwndDlg, IDC_SERVER, CB_ADDSTRING, 0, (LPARAM)szServerString);
- }
- OSUnlockObject1(hServerList);
- OSMemFree1(hServerList);
-
- }
- else {
- ErMsgByLotusCode(error);
- }
-}
-
-
-//gets default settings from notes.ini file
-static void lookupLotusDefaultSettings(HWND hwndDlg)
-{
- char tmp[MAXENVVALUE + 1];
- // Get the info from the .ini file
- if (hLotusDll) {
- if (OSGetEnvironmentString1("MailFile", tmp, MAXENVVALUE)) //path to mail file
- SetDlgItemTextA(hwndDlg, IDC_DATABASE, tmp); //and set fields in opt. dialog
- if (OSGetEnvironmentString1("MailServer", tmp, MAXENVVALUE)) //server name
- {
- decodeServer(tmp);
- SetDlgItemTextA(hwndDlg, IDC_SERVER, tmp);
- }
- }
-
-}
-
-// get variables values stored in db.
-static void LoadSettings()
-{
- settingInterval = (INT)g_plugin.getDword("LNInterval", 15);
- settingInterval1 = (INT)g_plugin.getDword("LNInterval1", 0);
- settingKeepConnection = g_plugin.getByte("LNKeepConnection", 1);
-
- DBVARIANT dbv;
- if (!g_plugin.getString("LNDatabase", &dbv)) {
- strncpy_s(settingDatabase, _countof(settingDatabase), dbv.pszVal, _countof(settingDatabase));
- db_free(&dbv);
- }
- if (!g_plugin.getString("LNServer", &dbv)) {
- strncpy_s(settingServer, _countof(settingServer), dbv.pszVal, _countof(settingServer));
- db_free(&dbv);
- }
- if (!g_plugin.getString("LNServerSec", &dbv)) {
- strncpy_s(settingServerSec, _countof(settingServerSec), dbv.pszVal, _countof(settingServerSec));
- db_free(&dbv);
- }
- if (!g_plugin.getString("LNPassword", &dbv)) {
- strncpy_s(settingPassword, _countof(settingPassword), dbv.pszVal, _countof(settingPassword));
- db_free(&dbv);
- }
- if (!g_plugin.getString("LNCommand", &dbv)) {
- strncpy_s(settingCommand, _countof(settingCommand), dbv.pszVal, _countof(settingCommand));
- db_free(&dbv);
- }
- if (!g_plugin.getString("LNParameters", &dbv)) {
- strncpy_s(settingParameters, _countof(settingParameters), dbv.pszVal, _countof(settingParameters));
- db_free(&dbv);
- }
-
- if (!g_plugin.getWString("LNFilterSender", &dbv)) {
- wcsncpy_s(settingFilterSender, dbv.pwszVal, _TRUNCATE);
- db_free(&dbv);
- }
- if (!g_plugin.getWString("LNFilterSubject", &dbv)) {
- wcsncpy_s(settingFilterSubject, dbv.pwszVal, _TRUNCATE);
- db_free(&dbv);
- }
- if (!g_plugin.getWString("LNFilterTo", &dbv)) {
- wcsncpy_s(settingFilterTo, dbv.pwszVal, _TRUNCATE);
- db_free(&dbv);
- }
-
- settingOnceOnly = g_plugin.getByte("LNOnceOnly", 0);
-
- settingNonClickedOnly = g_plugin.getByte("LNNonClickedOnly", 1);
- settingShowError = g_plugin.getByte("LNShowError", 1);
- settingSetColours = g_plugin.getByte("LNSetColours", 0);
- settingBgColor = (COLORREF)g_plugin.getDword("LNBgColor", (uint32_t)0xFFFFFF);
- settingFgColor = (COLORREF)g_plugin.getDword("LNFgColor", (uint32_t)0x000000);
- settingNewest = g_plugin.getByte("LNNewest", 0);
- settingEvenNonClicked = g_plugin.getByte("LNEvenNonClicked", 0);
- settingNewestID = (uint32_t)g_plugin.getDword("LNNewestID", 0);
- settingIniAnswer = g_plugin.getByte("LNIniAnswer", 0);
- settingIniCheck = g_plugin.getByte("LNIniCheck", 0);
-
- for (int i = 0; i < STATUS_COUNT; i++) {
- char buff[128];
- mir_snprintf(buff, "LNStatus%d", i);
- settingStatus[i] = (g_plugin.getByte(buff, 0) == 1);
- }
- //lookupLotusDefaultSettings();
-}
-
-static void SaveSettings(HWND hwndDlg)
-{
- char buff[128];
- GetDlgItemTextA(hwndDlg, IDC_SERVER, settingServer, _countof(settingServer));
- g_plugin.setString("LNServer", settingServer);
- g_plugin.setString("LNServerSec", settingServerSec);
- g_plugin.setString("LNPassword", settingPassword);
- g_plugin.setString("LNDatabase", settingDatabase);
- g_plugin.setDword("LNInterval", settingInterval);
- g_plugin.setDword("LNInterval1", settingInterval1);
- g_plugin.setByte("LNKeepConnection", settingKeepConnection);
- g_plugin.setString("LNCommand", settingCommand);
- g_plugin.setString("LNParameters", settingParameters);
- g_plugin.setByte("LNOnceOnly", settingOnceOnly);
- g_plugin.setByte("LNNonClickedOnly", settingNonClickedOnly);
- g_plugin.setByte("LNShowError", settingShowError);
- g_plugin.setByte("LNSetColours", settingSetColours);
- g_plugin.setDword("LNBgColor", (uint32_t)settingBgColor);
- g_plugin.setDword("LNFgColor", (uint32_t)settingFgColor);
- g_plugin.setByte("LNNewest", settingNewest);
- g_plugin.setByte("LNEvenNonClicked", settingEvenNonClicked);
- g_plugin.setByte("LNIniCheck", settingIniCheck);
- g_plugin.setByte("LNIniAnswer", settingIniAnswer);
-
- for (int i = 0; i < STATUS_COUNT; i++) {
- mir_snprintf(buff, "LNStatus%d", i);
- settingStatus[i] = (ListView_GetCheckState(GetDlgItem(hwndDlg, IDC_STATUS), i) ? TRUE : FALSE);
- g_plugin.setByte(buff, settingStatus[i] ? 1 : 0);
- }
-
- settingFilterSender[0] = 0;
- for (int i = 0; i < SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_GETCOUNT, 0, 0); i++) {
- wchar_t text[512] = TEXT("");
- SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_GETLBTEXT, (WPARAM)i, (LPARAM)text);
- wcscat_s(settingFilterSender, _countof(settingFilterSender), text);
- wcscat_s(settingFilterSender, _countof(settingFilterSender), TEXT(";"));
- }
- g_plugin.setWString("LNFilterSender", settingFilterSender);
-
- settingFilterSubject[0] = 0;
- for (int i = 0; i < SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_GETCOUNT, 0, 0); i++) {
- wchar_t text[512] = TEXT("");
- SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_GETLBTEXT, (WPARAM)i, (LPARAM)text);
- wcscat_s(settingFilterSubject, _countof(settingFilterSubject), text);
- wcscat_s(settingFilterSubject, _countof(settingFilterSubject), TEXT(";"));
- }
- g_plugin.setWString("LNFilterSubject", settingFilterSubject);
-
- settingFilterTo[0] = 0;
- for (int i = 0; i < SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_GETCOUNT, 0, 0); i++) {
- wchar_t text[512] = TEXT("");
- SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_GETLBTEXT, (WPARAM)i, (LPARAM)text);
- wcscat_s(settingFilterTo, _countof(settingFilterTo), text);
- wcscat_s(settingFilterTo, _countof(settingFilterTo), TEXT(";"));
- }
- g_plugin.setWString("LNFilterTo", settingFilterTo);
-}
-
-//callback function to speak with user interactions in options page
-static INT_PTR CALLBACK DlgProcLotusNotifyConnectionOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- static bool bInit = false;
-
- switch (msg) {
- case WM_INITDIALOG://initialize dialog, so set properties from db.
- bInit = true;
- TranslateDialogDefault(hwndDlg);//translate miranda function
- LoadSettings();
- CheckDlgButton(hwndDlg, IDC_BUTTON_CHECK, settingIniCheck ? BST_CHECKED : BST_UNCHECKED);
- SetDlgItemTextA(hwndDlg, IDC_SERVER, settingServer);
- SetDlgItemTextA(hwndDlg, IDC_SERVERSEC, settingServerSec);
- SetDlgItemTextA(hwndDlg, IDC_DATABASE, settingDatabase);
- SetDlgItemTextA(hwndDlg, IDC_PASSWORD, settingPassword);
- SetDlgItemInt(hwndDlg, IDC_INTERVAL, settingInterval, FALSE);
- CheckDlgButton(hwndDlg, IDC_KEEP_CONNEXION_ON_ERROR, settingKeepConnection ? BST_CHECKED : BST_UNCHECKED);
- bInit = false;
- break;
-
- case WM_COMMAND://user changed something, so get changes to variables
- if (!bInit) {
- switch (HIWORD(wParam)) {
- case EN_CHANGE: // text is modified in an edit ctrl
- case BN_CLICKED: // a checkbox is modified
- PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
- }
- }
- switch (LOWORD(wParam)) {
- case IDC_BUTTON_DETECT:
- lookupLotusDefaultSettings(hwndDlg);
- GetDlgItemTextA(hwndDlg, IDC_SERVER, settingServer, _countof(settingServer));
- GetDlgItemTextA(hwndDlg, IDC_DATABASE, settingDatabase, _countof(settingDatabase));
- break;
- case IDC_BUTTON_CHECK:
- settingIniCheck = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_BUTTON_CHECK);
- checkNotesIniFile(TRUE);
- break;
- case IDC_DATABASE:
- GetDlgItemTextA(hwndDlg, IDC_DATABASE, settingDatabase, _countof(settingDatabase));
- break;
- case IDC_SERVER:
- switch (HIWORD(wParam)) {
- case CBN_SELCHANGE:
- {
- int i = SendDlgItemMessage(hwndDlg, IDC_SERVER, CB_GETCURSEL, 0, 0);
- char text[MAXENVVALUE];
- SendDlgItemMessageA(hwndDlg, IDC_SERVER, CB_GETLBTEXT, (WPARAM)i, (LPARAM)text);
- SetDlgItemTextA(hwndDlg, IDC_SERVER, text);
- if (!bInit) {
- PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- break;
- }
-
- case CBN_DROPDOWN:
- SendDlgItemMessage(hwndDlg, IDC_SERVER, CB_RESETCONTENT, 0, 0);
- fillServersList(hwndDlg);
- SendDlgItemMessageA(hwndDlg, IDC_SERVER, CB_ADDSTRING, 0, (LPARAM)settingServer);
- SendDlgItemMessageA(hwndDlg, IDC_SERVER, CB_SELECTSTRING, -1, (LPARAM)settingServer);
- break;
- }
- break;
- case IDC_SERVERSEC:
- GetDlgItemTextA(hwndDlg, IDC_SERVERSEC, settingServerSec, _countof(settingServerSec));
- break;
- case IDC_PASSWORD:
- GetDlgItemTextA(hwndDlg, IDC_PASSWORD, settingPassword, _countof(settingPassword));
- break;
- case IDC_INTERVAL:
- settingInterval = GetDlgItemInt(hwndDlg, IDC_INTERVAL, nullptr, FALSE);
- break;
- case IDC_KEEP_CONNEXION_ON_ERROR:
- settingKeepConnection = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_KEEP_CONNEXION_ON_ERROR);
- break;
- }
- break;
-
- case WM_NOTIFY://apply changes so write it to db
- switch (((LPNMHDR)lParam)->idFrom) {
- case 0:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_RESET:
- LoadSettings();
- return TRUE;
-
- case PSN_APPLY:
- SaveSettings(hwndDlg);
- return TRUE;
- }
- break;
- } //id from
-
- break; //switch(msg)
-
- }
- return FALSE;
-}
-
-static INT_PTR CALLBACK DlgProcLotusNotifyPopupOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- static bool bInit = false;
-
- switch (msg) {
- case WM_INITDIALOG://initialize dialog, so set properties from db.
- bInit = true;
- TranslateDialogDefault(hwndDlg);//translate miranda function
- LoadSettings();
-
- CheckDlgButton(hwndDlg, IDC_SETCOLOURS, settingSetColours ? BST_CHECKED : BST_UNCHECKED);
- SendDlgItemMessage(hwndDlg, IDC_BGCOLOR, CPM_SETCOLOUR, 0, (LPARAM)settingBgColor);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BGCOLOR), settingSetColours != 0);
- SendDlgItemMessage(hwndDlg, IDC_FGCOLOR, CPM_SETCOLOUR, 0, (LPARAM)settingFgColor);
- EnableWindow(GetDlgItem(hwndDlg, IDC_FGCOLOR), settingSetColours != 0);
-
- SetDlgItemInt(hwndDlg, IDC_INTERVAL1, settingInterval1, TRUE);
- CheckDlgButton(hwndDlg, IDC_ONCEONLY, settingOnceOnly ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_NONCLICKEDONLY, settingNonClickedOnly ? BST_CHECKED : BST_UNCHECKED);
- EnableWindow(GetDlgItem(hwndDlg, IDC_NONCLICKEDONLY), settingOnceOnly != 0);
- CheckDlgButton(hwndDlg, IDC_SHOWERROR, settingShowError ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_NEWEST, settingNewest ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_REMEMBEREVENNONCLICKED, settingEvenNonClicked ? BST_CHECKED : BST_UNCHECKED);
- EnableWindow(GetDlgItem(hwndDlg, IDC_REMEMBEREVENNONCLICKED), settingNewest != 0);
- SetDlgItemTextA(hwndDlg, IDC_COMMAND, settingCommand);
- SetDlgItemTextA(hwndDlg, IDC_PARAMETERS, settingParameters);
-
- bInit = FALSE;
- break;
-
- case WM_COMMAND://user changed something, so get changes to variables
- if (!bInit) {
- switch (HIWORD(wParam)) {
- case EN_CHANGE: // text is modified in an edit ctrl
- case BN_CLICKED: // a checkbox is modified
- case CPN_COLOURCHANGED: // a color has changed
- PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
- }
- }
- switch (LOWORD(wParam)) {
- case IDC_SETCOLOURS:
- settingSetColours = IsDlgButtonChecked(hwndDlg, IDC_SETCOLOURS);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BGCOLOR), settingSetColours);
- EnableWindow(GetDlgItem(hwndDlg, IDC_FGCOLOR), settingSetColours);
- break;
- case IDC_BGCOLOR:
- settingBgColor = (COLORREF)SendDlgItemMessage(hwndDlg, IDC_BGCOLOR, CPM_GETCOLOUR, 0, 0);
- break;
- case IDC_FGCOLOR:
- settingFgColor = (COLORREF)SendDlgItemMessage(hwndDlg, IDC_FGCOLOR, CPM_GETCOLOUR, 0, 0);
- break;
- case IDC_INTERVAL1:
- settingInterval1 = GetDlgItemInt(hwndDlg, IDC_INTERVAL1, nullptr, TRUE);
- break;
- case IDC_ONCEONLY:
- settingOnceOnly = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_ONCEONLY);
- EnableWindow(GetDlgItem(hwndDlg, IDC_NONCLICKEDONLY), settingOnceOnly);
- break;
- case IDC_NONCLICKEDONLY:
- settingNonClickedOnly = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_NONCLICKEDONLY);
- break;
- case IDC_SHOWERROR:
- settingShowError = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_SHOWERROR);
- break;
- case IDC_NEWEST:
- settingNewest = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_NEWEST);
- EnableWindow(GetDlgItem(hwndDlg, IDC_REMEMBEREVENNONCLICKED), settingNewest);
- break;
- case IDC_REMEMBEREVENNONCLICKED:
- settingEvenNonClicked = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_REMEMBEREVENNONCLICKED);
- break;
- case IDC_COMMAND:
- GetDlgItemTextA(hwndDlg, IDC_COMMAND, settingCommand, _countof(settingCommand));
- break;
- case IDC_PARAMETERS:
- GetDlgItemTextA(hwndDlg, IDC_PARAMETERS, settingParameters, _countof(settingParameters));
- break;
- case IDC_BUTTON_CLEAR:
- deleteElements();
- break;
- }
- break;
-
- case WM_NOTIFY://apply changes so write it to db
- switch (((LPNMHDR)lParam)->idFrom) {
- case 0:
- {
- switch (((LPNMHDR)lParam)->code) {
- case PSN_RESET:
- LoadSettings();
- return TRUE;
- case PSN_APPLY:
- SaveSettings(hwndDlg);
-
- return TRUE;
- break;
- }
- //KillTimer(hTimerWnd,TID);
- //if(settingInterval!=0)
- // SetTimer(hTimerWnd, TID, settingInterval*60000, (TIMERPROC)atTime);
-
- break;
- } //case 0
- } //id from
-
- break; //switch(msg)
-
- }
- return FALSE;
-}
-
-static INT_PTR CALLBACK DlgProcLotusNotifyMiscOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- static bool bInit = false;
-
- wchar_t* strptr;
- LVITEM lvI = { 0 };
- LVCOLUMN lvc = { 0 };
- switch (msg) {
- case WM_INITDIALOG://initialize dialog, so set properties from db.
- {
- wchar_t buff[512];
- bInit = true;
- TranslateDialogDefault(hwndDlg);//translate miranda function
- LoadSettings();
-
- //fill filter combos
-
- wcsncpy_s(buff, settingFilterSender, _TRUNCATE);
- while (strptr = wcschr(buff, TEXT(';'))) {
- wchar_t tmp[512] = TEXT("");
- wcsncpy_s(tmp, buff, (strptr - buff));
- SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_ADDSTRING, 0, (LPARAM)tmp);
- wcsncpy_s(buff, strptr + 1, _TRUNCATE);
- }
-
- wcsncpy_s(buff, settingFilterSubject, _TRUNCATE);
- while (strptr = wcschr(buff, TEXT(';'))) {
- wchar_t tmp[512] = TEXT("");
- wcsncpy_s(tmp, buff, (strptr - buff));
- SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_ADDSTRING, 0, (LPARAM)tmp);
- wcsncpy_s(buff, strptr + 1, _TRUNCATE);
- }
-
- wcsncpy_s(buff, settingFilterTo, _TRUNCATE);
- while (strptr = wcschr(buff, TEXT(';'))) {
- wchar_t tmp[512] = TEXT("");
- wcsncpy_s(tmp, buff, (strptr - buff));
- SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_ADDSTRING, 0, (LPARAM)tmp);
- wcsncpy_s(buff, strptr + 1, _TRUNCATE);
- }
-
- // initialise and fill listbox
- HWND hwndList = GetDlgItem(hwndDlg, IDC_STATUS);
- ListView_DeleteAllItems(hwndList);
-
- SendMessage(hwndList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);
-
- // Initialize the LVCOLUMN structure.
- // The mask specifies that the format, width, text, and
- // subitem members of the structure are valid.
- lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
- lvc.fmt = LVCFMT_LEFT;
-
- lvc.iSubItem = 0;
- lvc.pszText = TranslateT("Status");
- lvc.cx = 120; // width of column in pixels
- ListView_InsertColumn(hwndList, 0, &lvc);
-
- // Some code to create the list-view control.
- // Initialize LVITEM members that are common to all items.
- lvI.mask = LVIF_TEXT;
- for (int i = 0; i < STATUS_COUNT; i++) {
- lvI.pszText = Clist_GetStatusModeDescription(ID_STATUS_ONLINE + i, 0);
- lvI.iItem = i;
- ListView_InsertItem(hwndList, &lvI);
- ListView_SetCheckState(hwndList, i, settingStatus[i]);
- }
-
- bInit = false;
- break;
- }
- case WM_COMMAND://user changed something, so get changes to variables
- {
- if (!bInit && (HIWORD(wParam) == EN_CHANGE)) {
- PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- char tmp[255];
- int index, size;
- switch (LOWORD(wParam)) {
- case IDC_BUTTON_ADD_SENDER_FILTER:
- GetDlgItemTextA(hwndDlg, IDC_FILTER_SENDER, tmp, _countof(tmp));
- if (strlen(tmp) > 0) {
- SendDlgItemMessageA(hwndDlg, IDC_FILTER_SENDER, CB_ADDSTRING, 0, (LPARAM)tmp);
- PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- break;
- case IDC_BUTTON_REMOVE_SENDER_FILTER:
- index = SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_GETCURSEL, 0, 0);
- size = SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_DELETESTRING, index, 0);
- SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_SETCURSEL, min(index, size - 1), 0);
- PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
- case IDC_BUTTON_ADD_SUBJECT_FILTER:
- GetDlgItemTextA(hwndDlg, IDC_FILTER_SUBJECT, tmp, _countof(tmp));
- if (strlen(tmp) > 0) {
- SendDlgItemMessageA(hwndDlg, IDC_FILTER_SUBJECT, CB_ADDSTRING, 0, (LPARAM)tmp);
- PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- break;
- case IDC_BUTTON_REMOVE_SUBJECT_FILTER:
- index = SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_GETCURSEL, 0, 0);
- size = SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_DELETESTRING, index, 0);
- SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_SETCURSEL, min(index, size - 1), 0);
- PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
- case IDC_BUTTON_ADD_TO_FILTER:
- GetDlgItemTextA(hwndDlg, IDC_FILTER_TO, tmp, _countof(tmp));
- if (strlen(tmp) > 0) {
- SendDlgItemMessageA(hwndDlg, IDC_FILTER_TO, CB_ADDSTRING, 0, (LPARAM)tmp);
- PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- break;
- case IDC_BUTTON_REMOVE_TO_FILTER:
- index = SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_GETCURSEL, 0, 0);
- size = SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_DELETESTRING, index, 0);
- SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_SETCURSEL, min(index, size - 1), 0);
- PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
- }
- break;
- }
- case WM_NOTIFY://apply changes so write it to db
- if (bInit) {
- break;
- }
- switch (((LPNMHDR)lParam)->idFrom) {
- case 0:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_RESET:
- LoadSettings();
- return TRUE;
-
- case PSN_APPLY:
- SaveSettings(hwndDlg);
- return TRUE;
- }
-
- break;
- } //id from
-
- if (GetDlgItem(hwndDlg, IDC_STATUS) == ((LPNMHDR)lParam)->hwndFrom) {
- switch (((LPNMHDR)lParam)->code) {
- case LVN_ITEMCHANGED:
- {
- NMLISTVIEW *nmlv = (NMLISTVIEW *)lParam;
- if ((nmlv->uNewState ^ nmlv->uOldState) & LVIS_STATEIMAGEMASK) {
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- break;
-
- }
- break;
- }
- }
- break; //switch(msg)
-
- }
- return FALSE;
-}
-
-
-//options page on miranda called
-int LotusNotifyOptInit(WPARAM wParam, LPARAM)
-{
- OPTIONSDIALOGPAGE odp = {};
- odp.szGroup.w = LPGENW("Plugins");
- odp.szTitle.w = _A2W(__PLUGIN_NAME);
- odp.flags = ODPF_BOLDGROUPS | ODPF_UNICODE;
-
- odp.szTab.w = LPGENW("Connection");
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_LOTUS_CONECTION);
- odp.pfnDlgProc = DlgProcLotusNotifyConnectionOpts;
- g_plugin.addOptions(wParam, &odp);
-
- odp.szTab.w = LPGENW("Popup");
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_LOTUS_POPUP);
- odp.pfnDlgProc = DlgProcLotusNotifyPopupOpts;
- g_plugin.addOptions(wParam, &odp);
-
- odp.szTab.w = LPGENW("Miscellaneous");
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_LOTUS_MISC);
- odp.pfnDlgProc = DlgProcLotusNotifyMiscOpts;
- g_plugin.addOptions(wParam, &odp);
- return 0;
-}
-
-
//gives protocol avainable statuses
INT_PTR GetCaps(WPARAM wParam, LPARAM)
{
- if (wParam == PFLAGNUM_1)
+ switch (wParam) {
+ case PFLAGNUM_1:
return 0;
- if (wParam == PFLAGNUM_2)
+
+ case PFLAGNUM_2:
return PF2_ONLINE; // add the possible statuses here.
- if (wParam == PFLAGNUM_3)
+
+ case PFLAGNUM_3:
return 0;
+ }
+
return 0;
}
-
//gives name to protocol module
INT_PTR GetName(WPARAM wParam, LPARAM lParam)
{
- strncpy((char*)lParam, MODULENAME, wParam);
+ strncpy((char *)lParam, MODULENAME, wParam);
return 0;
}
@@ -1669,7 +1037,6 @@ int CMPlugin::Load()
}
bMirandaCall = TRUE;
- init_pluginname();
logRegister();
log_p(L"Load: Entering LotusNotify.dll Load() bMirandaCall=%d MODULENAME=[%S]", bMirandaCall, MODULENAME);
@@ -1678,8 +1045,7 @@ int CMPlugin::Load()
HookEvent("LotusNotify/Check", eventCheck); //hook function to menu click event
- if (!second) //if its first plugin instance
- {
+ if (!second) { //if its first plugin instance
//function that will be called on menu click
CreateServiceFunction("LotusNotify/MenuCommand", PluginMenuCommand);
diff --git a/protocols/LotusNotify/src/debug.h b/protocols/LotusNotify/src/debug.h
index 838c922564..4dc5a66b0d 100644
--- a/protocols/LotusNotify/src/debug.h
+++ b/protocols/LotusNotify/src/debug.h
@@ -1,7 +1,5 @@
#pragma once
-extern char MODULENAME[];
-
void logRegister(void);
void logUnregister(void);
void log(const wchar_t* szText);
diff --git a/protocols/LotusNotify/src/options.cpp b/protocols/LotusNotify/src/options.cpp
new file mode 100644
index 0000000000..8fd39984b3
--- /dev/null
+++ b/protocols/LotusNotify/src/options.cpp
@@ -0,0 +1,602 @@
+/*
+Miranda plugin template, originally by Richard Hughes
+http://miranda-icq.sourceforge.net/
+
+This file is placed in the public domain. Anybody is free to use or
+modify it as they wish with no restriction.
+There is no warranty.
+*/
+
+#include "stdafx.h"
+
+#include "debug.h"
+#include "resource.h"
+#include "version.h"
+#include "lotusnotes.h"
+#include "LotusNotify.h"
+
+//gets default settings from notes.ini file
+static void lookupLotusDefaultSettings(HWND hwndDlg)
+{
+ char tmp[MAXENVVALUE + 1];
+ // Get the info from the .ini file
+ if (hLotusDll) {
+ if (OSGetEnvironmentString1("MailFile", tmp, MAXENVVALUE)) //path to mail file
+ SetDlgItemTextA(hwndDlg, IDC_DATABASE, tmp); //and set fields in opt. dialog
+
+ if (OSGetEnvironmentString1("MailServer", tmp, MAXENVVALUE)) { //server name
+ decodeServer(tmp);
+ SetDlgItemTextA(hwndDlg, IDC_SERVER, tmp);
+ }
+ }
+}
+
+// get variables values stored in db.
+void LoadSettings()
+{
+ settingInterval = (INT)g_plugin.getDword("LNInterval", 15);
+ settingInterval1 = (INT)g_plugin.getDword("LNInterval1", 0);
+ settingKeepConnection = g_plugin.getByte("LNKeepConnection", 1);
+
+ DBVARIANT dbv;
+ if (!g_plugin.getString("LNDatabase", &dbv)) {
+ strncpy_s(settingDatabase, _countof(settingDatabase), dbv.pszVal, _countof(settingDatabase));
+ db_free(&dbv);
+ }
+ if (!g_plugin.getString("LNServer", &dbv)) {
+ strncpy_s(settingServer, _countof(settingServer), dbv.pszVal, _countof(settingServer));
+ db_free(&dbv);
+ }
+ if (!g_plugin.getString("LNServerSec", &dbv)) {
+ strncpy_s(settingServerSec, _countof(settingServerSec), dbv.pszVal, _countof(settingServerSec));
+ db_free(&dbv);
+ }
+ if (!g_plugin.getString("LNPassword", &dbv)) {
+ strncpy_s(settingPassword, _countof(settingPassword), dbv.pszVal, _countof(settingPassword));
+ db_free(&dbv);
+ }
+ if (!g_plugin.getString("LNCommand", &dbv)) {
+ strncpy_s(settingCommand, _countof(settingCommand), dbv.pszVal, _countof(settingCommand));
+ db_free(&dbv);
+ }
+ if (!g_plugin.getString("LNParameters", &dbv)) {
+ strncpy_s(settingParameters, _countof(settingParameters), dbv.pszVal, _countof(settingParameters));
+ db_free(&dbv);
+ }
+
+ if (!g_plugin.getWString("LNFilterSender", &dbv)) {
+ wcsncpy_s(settingFilterSender, dbv.pwszVal, _TRUNCATE);
+ db_free(&dbv);
+ }
+ if (!g_plugin.getWString("LNFilterSubject", &dbv)) {
+ wcsncpy_s(settingFilterSubject, dbv.pwszVal, _TRUNCATE);
+ db_free(&dbv);
+ }
+ if (!g_plugin.getWString("LNFilterTo", &dbv)) {
+ wcsncpy_s(settingFilterTo, dbv.pwszVal, _TRUNCATE);
+ db_free(&dbv);
+ }
+
+ settingOnceOnly = g_plugin.getByte("LNOnceOnly", 0);
+
+ settingNonClickedOnly = g_plugin.getByte("LNNonClickedOnly", 1);
+ settingShowError = g_plugin.getByte("LNShowError", 1);
+ settingSetColours = g_plugin.getByte("LNSetColours", 0);
+ settingBgColor = (COLORREF)g_plugin.getDword("LNBgColor", (uint32_t)0xFFFFFF);
+ settingFgColor = (COLORREF)g_plugin.getDword("LNFgColor", (uint32_t)0x000000);
+ settingNewest = g_plugin.getByte("LNNewest", 0);
+ settingEvenNonClicked = g_plugin.getByte("LNEvenNonClicked", 0);
+ settingNewestID = (uint32_t)g_plugin.getDword("LNNewestID", 0);
+ settingIniAnswer = g_plugin.getByte("LNIniAnswer", 0);
+ settingIniCheck = g_plugin.getByte("LNIniCheck", 0);
+
+ for (int i = 0; i < STATUS_COUNT; i++) {
+ char buff[128];
+ mir_snprintf(buff, "LNStatus%d", i);
+ settingStatus[i] = (g_plugin.getByte(buff, 0) == 1);
+ }
+}
+
+static void SaveSettings(HWND hwndDlg)
+{
+ char buff[128];
+ GetDlgItemTextA(hwndDlg, IDC_SERVER, settingServer, _countof(settingServer));
+ g_plugin.setString("LNServer", settingServer);
+ g_plugin.setString("LNServerSec", settingServerSec);
+ g_plugin.setString("LNPassword", settingPassword);
+ g_plugin.setString("LNDatabase", settingDatabase);
+ g_plugin.setDword("LNInterval", settingInterval);
+ g_plugin.setDword("LNInterval1", settingInterval1);
+ g_plugin.setByte("LNKeepConnection", settingKeepConnection);
+ g_plugin.setString("LNCommand", settingCommand);
+ g_plugin.setString("LNParameters", settingParameters);
+ g_plugin.setByte("LNOnceOnly", settingOnceOnly);
+ g_plugin.setByte("LNNonClickedOnly", settingNonClickedOnly);
+ g_plugin.setByte("LNShowError", settingShowError);
+ g_plugin.setByte("LNSetColours", settingSetColours);
+ g_plugin.setDword("LNBgColor", (uint32_t)settingBgColor);
+ g_plugin.setDword("LNFgColor", (uint32_t)settingFgColor);
+ g_plugin.setByte("LNNewest", settingNewest);
+ g_plugin.setByte("LNEvenNonClicked", settingEvenNonClicked);
+ g_plugin.setByte("LNIniCheck", settingIniCheck);
+ g_plugin.setByte("LNIniAnswer", settingIniAnswer);
+
+ for (int i = 0; i < STATUS_COUNT; i++) {
+ mir_snprintf(buff, "LNStatus%d", i);
+ settingStatus[i] = (ListView_GetCheckState(GetDlgItem(hwndDlg, IDC_STATUS), i) ? TRUE : FALSE);
+ g_plugin.setByte(buff, settingStatus[i] ? 1 : 0);
+ }
+
+ settingFilterSender[0] = 0;
+ for (int i = 0; i < SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_GETCOUNT, 0, 0); i++) {
+ wchar_t text[512] = TEXT("");
+ SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_GETLBTEXT, (WPARAM)i, (LPARAM)text);
+ wcscat_s(settingFilterSender, _countof(settingFilterSender), text);
+ wcscat_s(settingFilterSender, _countof(settingFilterSender), TEXT(";"));
+ }
+ g_plugin.setWString("LNFilterSender", settingFilterSender);
+
+ settingFilterSubject[0] = 0;
+ for (int i = 0; i < SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_GETCOUNT, 0, 0); i++) {
+ wchar_t text[512] = TEXT("");
+ SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_GETLBTEXT, (WPARAM)i, (LPARAM)text);
+ wcscat_s(settingFilterSubject, _countof(settingFilterSubject), text);
+ wcscat_s(settingFilterSubject, _countof(settingFilterSubject), TEXT(";"));
+ }
+ g_plugin.setWString("LNFilterSubject", settingFilterSubject);
+
+ settingFilterTo[0] = 0;
+ for (int i = 0; i < SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_GETCOUNT, 0, 0); i++) {
+ wchar_t text[512] = TEXT("");
+ SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_GETLBTEXT, (WPARAM)i, (LPARAM)text);
+ wcscat_s(settingFilterTo, _countof(settingFilterTo), text);
+ wcscat_s(settingFilterTo, _countof(settingFilterTo), TEXT(";"));
+ }
+ g_plugin.setWString("LNFilterTo", settingFilterTo);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+//fill combo in options dlgbox with all known servers
+
+static void fillServersList(HWND hwndDlg)
+{
+ HANDLE hServerList = NULLHANDLE;
+ uint8_t far *pServerList; /* Pointer to start of Server List */
+ uint16_t wServerCount; /* Number of servers in list. */
+ uint16_t far *pwServerLength; /* Index to array of servername lens */
+ uint8_t far *pServerName;
+ STATUS error = NOERROR; /* Error return from API routines. */
+ char ServerString[MAXPATH]; /* String to hold server names. */
+ LPSTR szServerString = ServerString;
+
+ if (!hLotusDll) {
+ return;
+ }
+
+ error = NSGetServerList1(nullptr, &hServerList);
+ if (error == NOERROR) {
+
+ pServerList = (uint8_t far *) OSLockObject1(hServerList);
+ wServerCount = (uint16_t)*pServerList;
+
+ pwServerLength = (uint16_t *)(pServerList + sizeof(uint16_t));
+
+ pServerName = (uint8_t far *) pServerList + sizeof(wServerCount) + ((wServerCount) * sizeof(uint16_t));
+
+ for (USHORT i = 0; i < wServerCount; pServerName += pwServerLength[i], i++) {
+ memmove(szServerString, pServerName, pwServerLength[i]);
+ szServerString[pwServerLength[i]] = '\0';
+ decodeServer(ServerString);
+ SendDlgItemMessageA(hwndDlg, IDC_SERVER, CB_ADDSTRING, 0, (LPARAM)szServerString);
+ }
+ OSUnlockObject1(hServerList);
+ OSMemFree1(hServerList);
+
+ }
+ else {
+ ErMsgByLotusCode(error);
+ }
+}
+
+//callback function to speak with user interactions in options page
+static INT_PTR CALLBACK DlgProcLotusNotifyConnectionOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static bool bInit = false;
+
+ switch (msg) {
+ case WM_INITDIALOG://initialize dialog, so set properties from db.
+ bInit = true;
+ TranslateDialogDefault(hwndDlg);//translate miranda function
+ LoadSettings();
+ CheckDlgButton(hwndDlg, IDC_BUTTON_CHECK, settingIniCheck ? BST_CHECKED : BST_UNCHECKED);
+ SetDlgItemTextA(hwndDlg, IDC_SERVER, settingServer);
+ SetDlgItemTextA(hwndDlg, IDC_SERVERSEC, settingServerSec);
+ SetDlgItemTextA(hwndDlg, IDC_DATABASE, settingDatabase);
+ SetDlgItemTextA(hwndDlg, IDC_PASSWORD, settingPassword);
+ SetDlgItemInt(hwndDlg, IDC_INTERVAL, settingInterval, FALSE);
+ CheckDlgButton(hwndDlg, IDC_KEEP_CONNEXION_ON_ERROR, settingKeepConnection ? BST_CHECKED : BST_UNCHECKED);
+ bInit = false;
+ break;
+
+ case WM_COMMAND://user changed something, so get changes to variables
+ if (!bInit) {
+ switch (HIWORD(wParam)) {
+ case EN_CHANGE: // text is modified in an edit ctrl
+ case BN_CLICKED: // a checkbox is modified
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ }
+ }
+ switch (LOWORD(wParam)) {
+ case IDC_BUTTON_DETECT:
+ lookupLotusDefaultSettings(hwndDlg);
+ GetDlgItemTextA(hwndDlg, IDC_SERVER, settingServer, _countof(settingServer));
+ GetDlgItemTextA(hwndDlg, IDC_DATABASE, settingDatabase, _countof(settingDatabase));
+ break;
+ case IDC_BUTTON_CHECK:
+ settingIniCheck = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_BUTTON_CHECK);
+ checkNotesIniFile(TRUE);
+ break;
+ case IDC_DATABASE:
+ GetDlgItemTextA(hwndDlg, IDC_DATABASE, settingDatabase, _countof(settingDatabase));
+ break;
+ case IDC_SERVER:
+ switch (HIWORD(wParam)) {
+ case CBN_SELCHANGE:
+ {
+ int i = SendDlgItemMessage(hwndDlg, IDC_SERVER, CB_GETCURSEL, 0, 0);
+ char text[MAXENVVALUE];
+ SendDlgItemMessageA(hwndDlg, IDC_SERVER, CB_GETLBTEXT, (WPARAM)i, (LPARAM)text);
+ SetDlgItemTextA(hwndDlg, IDC_SERVER, text);
+ if (!bInit) {
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ break;
+ }
+
+ case CBN_DROPDOWN:
+ SendDlgItemMessage(hwndDlg, IDC_SERVER, CB_RESETCONTENT, 0, 0);
+ fillServersList(hwndDlg);
+ SendDlgItemMessageA(hwndDlg, IDC_SERVER, CB_ADDSTRING, 0, (LPARAM)settingServer);
+ SendDlgItemMessageA(hwndDlg, IDC_SERVER, CB_SELECTSTRING, -1, (LPARAM)settingServer);
+ break;
+ }
+ break;
+ case IDC_SERVERSEC:
+ GetDlgItemTextA(hwndDlg, IDC_SERVERSEC, settingServerSec, _countof(settingServerSec));
+ break;
+ case IDC_PASSWORD:
+ GetDlgItemTextA(hwndDlg, IDC_PASSWORD, settingPassword, _countof(settingPassword));
+ break;
+ case IDC_INTERVAL:
+ settingInterval = GetDlgItemInt(hwndDlg, IDC_INTERVAL, nullptr, FALSE);
+ break;
+ case IDC_KEEP_CONNEXION_ON_ERROR:
+ settingKeepConnection = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_KEEP_CONNEXION_ON_ERROR);
+ break;
+ }
+ break;
+
+ case WM_NOTIFY://apply changes so write it to db
+ switch (((LPNMHDR)lParam)->idFrom) {
+ case 0:
+ switch (((LPNMHDR)lParam)->code) {
+ case PSN_RESET:
+ LoadSettings();
+ return TRUE;
+
+ case PSN_APPLY:
+ SaveSettings(hwndDlg);
+ return TRUE;
+ }
+ break;
+ } //id from
+
+ break; //switch(msg)
+
+ }
+ return FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static INT_PTR CALLBACK DlgProcLotusNotifyPopupOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static bool bInit = false;
+
+ switch (msg) {
+ case WM_INITDIALOG://initialize dialog, so set properties from db.
+ bInit = true;
+ TranslateDialogDefault(hwndDlg);//translate miranda function
+ LoadSettings();
+
+ CheckDlgButton(hwndDlg, IDC_SETCOLOURS, settingSetColours ? BST_CHECKED : BST_UNCHECKED);
+ SendDlgItemMessage(hwndDlg, IDC_BGCOLOR, CPM_SETCOLOUR, 0, (LPARAM)settingBgColor);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BGCOLOR), settingSetColours != 0);
+ SendDlgItemMessage(hwndDlg, IDC_FGCOLOR, CPM_SETCOLOUR, 0, (LPARAM)settingFgColor);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FGCOLOR), settingSetColours != 0);
+
+ SetDlgItemInt(hwndDlg, IDC_INTERVAL1, settingInterval1, TRUE);
+ CheckDlgButton(hwndDlg, IDC_ONCEONLY, settingOnceOnly ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_NONCLICKEDONLY, settingNonClickedOnly ? BST_CHECKED : BST_UNCHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_NONCLICKEDONLY), settingOnceOnly != 0);
+ CheckDlgButton(hwndDlg, IDC_SHOWERROR, settingShowError ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_NEWEST, settingNewest ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_REMEMBEREVENNONCLICKED, settingEvenNonClicked ? BST_CHECKED : BST_UNCHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REMEMBEREVENNONCLICKED), settingNewest != 0);
+ SetDlgItemTextA(hwndDlg, IDC_COMMAND, settingCommand);
+ SetDlgItemTextA(hwndDlg, IDC_PARAMETERS, settingParameters);
+
+ bInit = FALSE;
+ break;
+
+ case WM_COMMAND://user changed something, so get changes to variables
+ if (!bInit) {
+ switch (HIWORD(wParam)) {
+ case EN_CHANGE: // text is modified in an edit ctrl
+ case BN_CLICKED: // a checkbox is modified
+ case CPN_COLOURCHANGED: // a color has changed
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ }
+ }
+ switch (LOWORD(wParam)) {
+ case IDC_SETCOLOURS:
+ settingSetColours = IsDlgButtonChecked(hwndDlg, IDC_SETCOLOURS);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BGCOLOR), settingSetColours);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FGCOLOR), settingSetColours);
+ break;
+ case IDC_BGCOLOR:
+ settingBgColor = (COLORREF)SendDlgItemMessage(hwndDlg, IDC_BGCOLOR, CPM_GETCOLOUR, 0, 0);
+ break;
+ case IDC_FGCOLOR:
+ settingFgColor = (COLORREF)SendDlgItemMessage(hwndDlg, IDC_FGCOLOR, CPM_GETCOLOUR, 0, 0);
+ break;
+ case IDC_INTERVAL1:
+ settingInterval1 = GetDlgItemInt(hwndDlg, IDC_INTERVAL1, nullptr, TRUE);
+ break;
+ case IDC_ONCEONLY:
+ settingOnceOnly = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_ONCEONLY);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_NONCLICKEDONLY), settingOnceOnly);
+ break;
+ case IDC_NONCLICKEDONLY:
+ settingNonClickedOnly = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_NONCLICKEDONLY);
+ break;
+ case IDC_SHOWERROR:
+ settingShowError = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_SHOWERROR);
+ break;
+ case IDC_NEWEST:
+ settingNewest = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_NEWEST);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REMEMBEREVENNONCLICKED), settingNewest);
+ break;
+ case IDC_REMEMBEREVENNONCLICKED:
+ settingEvenNonClicked = (uint8_t)IsDlgButtonChecked(hwndDlg, IDC_REMEMBEREVENNONCLICKED);
+ break;
+ case IDC_COMMAND:
+ GetDlgItemTextA(hwndDlg, IDC_COMMAND, settingCommand, _countof(settingCommand));
+ break;
+ case IDC_PARAMETERS:
+ GetDlgItemTextA(hwndDlg, IDC_PARAMETERS, settingParameters, _countof(settingParameters));
+ break;
+ case IDC_BUTTON_CLEAR:
+ deleteElements();
+ break;
+ }
+ break;
+
+ case WM_NOTIFY://apply changes so write it to db
+ switch (((LPNMHDR)lParam)->idFrom) {
+ case 0:
+ {
+ switch (((LPNMHDR)lParam)->code) {
+ case PSN_RESET:
+ LoadSettings();
+ return TRUE;
+ case PSN_APPLY:
+ SaveSettings(hwndDlg);
+
+ return TRUE;
+ break;
+ }
+ //KillTimer(hTimerWnd,TID);
+ //if(settingInterval!=0)
+ // SetTimer(hTimerWnd, TID, settingInterval*60000, (TIMERPROC)atTime);
+
+ break;
+ } //case 0
+ } //id from
+
+ break; //switch(msg)
+
+ }
+ return FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static INT_PTR CALLBACK DlgProcLotusNotifyMiscOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static bool bInit = false;
+
+ wchar_t *strptr;
+ LVITEM lvI = { 0 };
+ LVCOLUMN lvc = { 0 };
+ switch (msg) {
+ case WM_INITDIALOG://initialize dialog, so set properties from db.
+ {
+ wchar_t buff[512];
+ bInit = true;
+ TranslateDialogDefault(hwndDlg);//translate miranda function
+ LoadSettings();
+
+ //fill filter combos
+
+ wcsncpy_s(buff, settingFilterSender, _TRUNCATE);
+ while (strptr = wcschr(buff, TEXT(';'))) {
+ wchar_t tmp[512] = TEXT("");
+ wcsncpy_s(tmp, buff, (strptr - buff));
+ SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_ADDSTRING, 0, (LPARAM)tmp);
+ wcsncpy_s(buff, strptr + 1, _TRUNCATE);
+ }
+
+ wcsncpy_s(buff, settingFilterSubject, _TRUNCATE);
+ while (strptr = wcschr(buff, TEXT(';'))) {
+ wchar_t tmp[512] = TEXT("");
+ wcsncpy_s(tmp, buff, (strptr - buff));
+ SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_ADDSTRING, 0, (LPARAM)tmp);
+ wcsncpy_s(buff, strptr + 1, _TRUNCATE);
+ }
+
+ wcsncpy_s(buff, settingFilterTo, _TRUNCATE);
+ while (strptr = wcschr(buff, TEXT(';'))) {
+ wchar_t tmp[512] = TEXT("");
+ wcsncpy_s(tmp, buff, (strptr - buff));
+ SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_ADDSTRING, 0, (LPARAM)tmp);
+ wcsncpy_s(buff, strptr + 1, _TRUNCATE);
+ }
+
+ // initialise and fill listbox
+ HWND hwndList = GetDlgItem(hwndDlg, IDC_STATUS);
+ ListView_DeleteAllItems(hwndList);
+
+ SendMessage(hwndList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);
+
+ // Initialize the LVCOLUMN structure.
+ // The mask specifies that the format, width, text, and
+ // subitem members of the structure are valid.
+ lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
+ lvc.fmt = LVCFMT_LEFT;
+
+ lvc.iSubItem = 0;
+ lvc.pszText = TranslateT("Status");
+ lvc.cx = 120; // width of column in pixels
+ ListView_InsertColumn(hwndList, 0, &lvc);
+
+ // Some code to create the list-view control.
+ // Initialize LVITEM members that are common to all items.
+ lvI.mask = LVIF_TEXT;
+ for (int i = 0; i < STATUS_COUNT; i++) {
+ lvI.pszText = Clist_GetStatusModeDescription(ID_STATUS_ONLINE + i, 0);
+ lvI.iItem = i;
+ ListView_InsertItem(hwndList, &lvI);
+ ListView_SetCheckState(hwndList, i, settingStatus[i]);
+ }
+
+ bInit = false;
+ break;
+ }
+ case WM_COMMAND://user changed something, so get changes to variables
+ {
+ if (!bInit && (HIWORD(wParam) == EN_CHANGE)) {
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ char tmp[255];
+ int index, size;
+ switch (LOWORD(wParam)) {
+ case IDC_BUTTON_ADD_SENDER_FILTER:
+ GetDlgItemTextA(hwndDlg, IDC_FILTER_SENDER, tmp, _countof(tmp));
+ if (strlen(tmp) > 0) {
+ SendDlgItemMessageA(hwndDlg, IDC_FILTER_SENDER, CB_ADDSTRING, 0, (LPARAM)tmp);
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ break;
+ case IDC_BUTTON_REMOVE_SENDER_FILTER:
+ index = SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_GETCURSEL, 0, 0);
+ size = SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_DELETESTRING, index, 0);
+ SendDlgItemMessage(hwndDlg, IDC_FILTER_SENDER, CB_SETCURSEL, min(index, size - 1), 0);
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_BUTTON_ADD_SUBJECT_FILTER:
+ GetDlgItemTextA(hwndDlg, IDC_FILTER_SUBJECT, tmp, _countof(tmp));
+ if (strlen(tmp) > 0) {
+ SendDlgItemMessageA(hwndDlg, IDC_FILTER_SUBJECT, CB_ADDSTRING, 0, (LPARAM)tmp);
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ break;
+ case IDC_BUTTON_REMOVE_SUBJECT_FILTER:
+ index = SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_GETCURSEL, 0, 0);
+ size = SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_DELETESTRING, index, 0);
+ SendDlgItemMessage(hwndDlg, IDC_FILTER_SUBJECT, CB_SETCURSEL, min(index, size - 1), 0);
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_BUTTON_ADD_TO_FILTER:
+ GetDlgItemTextA(hwndDlg, IDC_FILTER_TO, tmp, _countof(tmp));
+ if (strlen(tmp) > 0) {
+ SendDlgItemMessageA(hwndDlg, IDC_FILTER_TO, CB_ADDSTRING, 0, (LPARAM)tmp);
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ break;
+ case IDC_BUTTON_REMOVE_TO_FILTER:
+ index = SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_GETCURSEL, 0, 0);
+ size = SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_DELETESTRING, index, 0);
+ SendDlgItemMessage(hwndDlg, IDC_FILTER_TO, CB_SETCURSEL, min(index, size - 1), 0);
+ PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ }
+ break;
+ }
+ case WM_NOTIFY://apply changes so write it to db
+ if (bInit) {
+ break;
+ }
+ switch (((LPNMHDR)lParam)->idFrom) {
+ case 0:
+ switch (((LPNMHDR)lParam)->code) {
+ case PSN_RESET:
+ LoadSettings();
+ return TRUE;
+
+ case PSN_APPLY:
+ SaveSettings(hwndDlg);
+ return TRUE;
+ }
+
+ break;
+ } //id from
+
+ if (GetDlgItem(hwndDlg, IDC_STATUS) == ((LPNMHDR)lParam)->hwndFrom) {
+ switch (((LPNMHDR)lParam)->code) {
+ case LVN_ITEMCHANGED:
+ {
+ NMLISTVIEW *nmlv = (NMLISTVIEW *)lParam;
+ if ((nmlv->uNewState ^ nmlv->uOldState) & LVIS_STATEIMAGEMASK) {
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ break;
+
+ }
+ break;
+ }
+ }
+ break; //switch(msg)
+
+ }
+ return FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// options page on miranda called
+
+int LotusNotifyOptInit(WPARAM wParam, LPARAM)
+{
+ OPTIONSDIALOGPAGE odp = {};
+ odp.szGroup.w = LPGENW("Plugins");
+ odp.szTitle.w = _A2W(__PLUGIN_NAME);
+ odp.flags = ODPF_BOLDGROUPS | ODPF_UNICODE;
+
+ odp.szTab.w = LPGENW("Connection");
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_LOTUS_CONECTION);
+ odp.pfnDlgProc = DlgProcLotusNotifyConnectionOpts;
+ g_plugin.addOptions(wParam, &odp);
+
+ odp.szTab.w = LPGENW("Popup");
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_LOTUS_POPUP);
+ odp.pfnDlgProc = DlgProcLotusNotifyPopupOpts;
+ g_plugin.addOptions(wParam, &odp);
+
+ odp.szTab.w = LPGENW("Miscellaneous");
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_LOTUS_MISC);
+ odp.pfnDlgProc = DlgProcLotusNotifyMiscOpts;
+ g_plugin.addOptions(wParam, &odp);
+ return 0;
+}
diff --git a/protocols/LotusNotify/src/stdafx.h b/protocols/LotusNotify/src/stdafx.h
index 7a6bf951a8..02d1308006 100644
--- a/protocols/LotusNotify/src/stdafx.h
+++ b/protocols/LotusNotify/src/stdafx.h
@@ -35,3 +35,26 @@
#include "cnotesapi/include/extmgr.h"
#include "cnotesapi/include/bsafeerr.h"
#include "cnotesapi/include/nsferr.h"
+
+BOOL checkNotesIniFile(BOOL bInfo);
+void decodeServer(char *tmp);
+void deleteElements();
+void LoadSettings();
+void ErMsgByLotusCode(STATUS erno);
+
+#define MAX_SETTING_STR 512
+#define MAX_FIELD 256
+#define STATUS_COUNT 9
+
+#define MODULENAME "LotusNotify"
+
+extern char settingServer[MAX_SETTING_STR], settingServerSec[MAX_SETTING_STR], settingDatabase[MAX_SETTING_STR];
+extern char settingCommand[MAX_SETTING_STR], settingParameters[MAX_SETTING_STR], settingPassword[MAX_SETTING_STR];
+extern wchar_t settingFilterSubject[MAX_SETTING_STR], settingFilterSender[MAX_SETTING_STR], settingFilterTo[MAX_SETTING_STR];
+
+extern COLORREF settingBgColor, settingFgColor;
+extern int settingInterval, settingInterval1;
+extern uint32_t settingNewestID;
+extern uint8_t settingSetColours, settingShowError, settingIniAnswer, settingIniCheck;
+extern uint8_t settingOnceOnly, settingNonClickedOnly, settingNewest, settingEvenNonClicked, settingKeepConnection;
+extern BOOL settingStatus[STATUS_COUNT];
diff --git a/protocols/LotusNotify/src/version.h b/protocols/LotusNotify/src/version.h
index 96d7cf4283..44f9d3b95c 100644
--- a/protocols/LotusNotify/src/version.h
+++ b/protocols/LotusNotify/src/version.h
@@ -1,7 +1,7 @@
#define __MAJOR_VERSION 0
#define __MINOR_VERSION 1
#define __RELEASE_NUM 23
-#define __BUILD_NUM 0
+#define __BUILD_NUM 1
#include <stdver.h>