summaryrefslogtreecommitdiff
path: root/protocols/WebView/src/webview_alerts.cpp
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2019-03-02 12:32:44 +0300
committerGeorge Hazan <ghazan@miranda.im>2019-03-02 12:32:55 +0300
commit931a7dc1ac0dbc7e6c1083583ced915e572f5b47 (patch)
tree9fe9a6448d44030e26aa7107ce16044ed413e0d0 /protocols/WebView/src/webview_alerts.cpp
parentdd7d9954042254e66e3bbbec7195c6be8b1a0663 (diff)
all protocols (even virtual ones) moved to the Protocols folder
Diffstat (limited to 'protocols/WebView/src/webview_alerts.cpp')
-rw-r--r--protocols/WebView/src/webview_alerts.cpp839
1 files changed, 839 insertions, 0 deletions
diff --git a/protocols/WebView/src/webview_alerts.cpp b/protocols/WebView/src/webview_alerts.cpp
new file mode 100644
index 0000000000..1b068f099e
--- /dev/null
+++ b/protocols/WebView/src/webview_alerts.cpp
@@ -0,0 +1,839 @@
+/*
+* A plugin for Miranda IM which displays web page text in a window Copyright
+* (C) 2005 Vincent Joyce.
+*
+* Miranda IM: the free icq client for MS Windows Copyright (C) 2000-2
+* Richard Hughes, Roland Rabien & Tristan Van de Vreede
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the Free
+* Software Foundation; either version 2 of the License, or (at your option)
+* any later version.
+*
+* This program is distributed in the hope that it will be useful, but
+* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+* for more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program; if not, write to the Free Software Foundation, Inc., 59
+* Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "stdafx.h"
+#include "webview.h"
+
+/*****************************************************************************/
+int CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message) {
+ case WM_COMMAND:
+ case WM_CONTEXTMENU:
+ MCONTACT hContact = PUGetContact(hWnd);
+ ptrW url(g_plugin.getWStringA(hContact, URL_KEY));
+
+ if (message == WM_COMMAND) { // left click
+ if (hContact != NULL) {
+ // open data window
+ if (g_plugin.getByte(LCLK_WINDOW_KEY, 0)) {
+ NotifyEventHooks(hHookDisplayDataAlert, (int)hContact, 0);
+ mir_forkthread(GetData, (void*)hContact);
+ PUDeletePopup(hWnd);
+ }
+ // open url
+ if (g_plugin.getByte(LCLK_WEB_PGE_KEY, 0)) {
+ Utils_OpenUrlW(url);
+ PUDeletePopup(hWnd);
+ g_plugin.setWord(wParam, "Status", ID_STATUS_ONLINE);
+ }
+ // dismiss
+ if (g_plugin.getByte(LCLK_DISMISS_KEY, 1))
+ PUDeletePopup(hWnd);
+ }
+ else if (hContact == NULL)
+ PUDeletePopup(hWnd);
+ }
+ else if (message == WM_CONTEXTMENU) { // right click
+ if (hContact != NULL) {
+ // open datA window
+ if (g_plugin.getByte(RCLK_WINDOW_KEY, 0)) {
+ NotifyEventHooks(hHookDisplayDataAlert, (int)hContact, 0);
+ mir_forkthread(GetData, (void*)hContact);
+ PUDeletePopup(hWnd);
+ }
+ // open url
+ if (g_plugin.getByte(RCLK_WEB_PGE_KEY, 1)) {
+ Utils_OpenUrlW(url);
+ PUDeletePopup(hWnd);
+ g_plugin.setWord(wParam, "Status", ID_STATUS_ONLINE);
+ }
+ // dismiss
+ if (g_plugin.getByte(RCLK_DISMISS_KEY, 0))
+ PUDeletePopup(hWnd);
+ }
+ else if (hContact == NULL)
+ PUDeletePopup(hWnd);
+ }
+ break;
+ }
+
+ return DefWindowProc(hWnd, message, wParam, lParam);
+}
+
+/*****************************************************************************/
+int WDisplayDataAlert(MCONTACT hContact)
+{
+ NotifyEventHooks(hHookDisplayDataAlert, hContact, 0);
+ return 0;
+}
+
+/*****************************************************************************/
+int WAlertPopup(MCONTACT hContact, wchar_t *displaytext)
+{
+ NotifyEventHooks(hHookAlertPopup, hContact, (LPARAM)displaytext);
+ return 0;
+}
+
+/*****************************************************************************/
+int WErrorPopup(MCONTACT hContact, wchar_t *textdisplay)
+{
+ NotifyEventHooks(hHookErrorPopup, hContact, (LPARAM)textdisplay);
+ return 0;
+}
+
+/*****************************************************************************/
+int WAlertOSD(MCONTACT hContact, wchar_t *displaytext)
+{
+ NotifyEventHooks(hHookAlertOSD, hContact, (LPARAM)displaytext);
+ return 0;
+}
+
+/*****************************************************************************/
+int PopupAlert(WPARAM hContact, LPARAM lParam)
+{
+ POPUPDATAW ppd = { 0 };
+
+ if (hContact != 0)
+ mir_wstrncpy(ppd.lpwzContactName, ptrW(g_plugin.getWStringA(hContact, PRESERVE_NAME_KEY)), _countof(ppd.lpwzContactName));
+ else
+ mir_wstrcpy(ppd.lpwzContactName, _A2W(MODULENAME));
+
+ ppd.lchContact = hContact;
+ ppd.lchIcon = LoadIcon(g_plugin.getInst(), MAKEINTRESOURCE(IDI_SITE));
+
+ wchar_t *displaytext = (wchar_t*)lParam;
+ if ((mir_wstrlen(displaytext) == MAX_SECONDLINE) || (mir_wstrlen(displaytext) > MAX_SECONDLINE))
+ mir_snwprintf(ppd.lpwzText, displaytext);
+ else if (mir_wstrlen(displaytext) < MAX_SECONDLINE)
+ mir_snwprintf(ppd.lpwzText, displaytext);
+
+ if (g_plugin.getByte(POP_USECUSTCLRS_KEY, 0)) {
+ ppd.colorBack = g_plugin.getDword(POP_BG_CLR_KEY, Def_color_bg);
+ ppd.colorText = g_plugin.getDword(POP_TXT_CLR_KEY, Def_color_txt);
+ }
+ else if (g_plugin.getByte(POP_USEWINCLRS_KEY, 0)) {
+ ppd.colorBack = GetSysColor(COLOR_BTNFACE);
+ ppd.colorText = GetSysColor(COLOR_WINDOWTEXT);
+ }
+ else if (g_plugin.getByte(POP_USESAMECLRS_KEY, 1)) {
+ ppd.colorBack = BackgoundClr;
+ ppd.colorText = TextClr;
+ }
+
+ ppd.PluginWindowProc = nullptr;
+ ppd.iSeconds = g_plugin.getDword(POP_DELAY_KEY, 0);
+
+ if (ServiceExists(MS_POPUP_ADDPOPUPW))
+ CallService(MS_POPUP_ADDPOPUPW, (WPARAM)&ppd, 0);
+
+ return 0;
+}
+
+/*****************************************************************************/
+int OSDAlert(WPARAM hContact, LPARAM lParam)
+{
+ char contactname[255], newdisplaytext[2000];
+ contactname[0] = 0;
+
+ if (hContact != NULL) {
+ DBVARIANT dbv;
+ if (!g_plugin.getString(hContact, PRESERVE_NAME_KEY, &dbv)) {
+ strncpy_s(contactname, _countof(contactname), dbv.pszVal, _TRUNCATE);
+ db_free(&dbv);
+ }
+ }
+ if (contactname[0] == 0)
+ strncpy_s(contactname, _countof(contactname), MODULENAME, _TRUNCATE);
+
+ char *displaytext = (char*)lParam;
+ mir_snprintf(newdisplaytext, "%s: %s", contactname, Translate(displaytext));
+
+ if (ServiceExists("OSD/Announce"))
+ CallService("OSD/Announce", (WPARAM)newdisplaytext, 0);
+
+ return 0;
+}
+
+/*****************************************************************************/
+int ErrorMsgs(WPARAM wParam, LPARAM lParam)
+{
+ MCONTACT hContact = wParam;
+ wchar_t newdisplaytext[2000], *displaytext = (wchar_t*)lParam;
+
+ if (g_plugin.getByte(SUPPRESS_ERR_KEY, 0))
+ return 0;
+
+ wchar_t *ptszContactName = Clist_GetContactDisplayName(hContact);
+ if (ServiceExists(MS_POPUP_ADDPOPUPW) && g_plugin.getByte(ERROR_POPUP_KEY, 0)) {
+ mir_snwprintf(newdisplaytext, L"%s\n%s", ptszContactName, displaytext);
+ PUShowMessageW(newdisplaytext, SM_WARNING);
+ }
+ else if (ServiceExists("OSD/Announce") && g_plugin.getByte(ERROR_POPUP_KEY, 0)) {
+ mir_snwprintf(newdisplaytext, L"%s: %s", ptszContactName, TranslateW(displaytext));
+ CallService("OSD/Announce", (WPARAM)newdisplaytext, 0);
+ }
+
+ Clist_TrayNotifyW(nullptr, ptszContactName, TranslateW(displaytext), NIIF_ERROR, 15000);
+ return 0;
+}
+
+/*****************************************************************************/
+void SaveToFile(MCONTACT hContact, char *truncated)
+{
+ char *mode;
+ if (!g_plugin.getByte(hContact, APPEND_KEY, 0))
+ mode = "w";
+ else
+ mode = "a";
+
+ char url[300]; url[0] = '\0';
+ DBVARIANT dbv;
+ if (!g_plugin.getString(hContact, URL_KEY, &dbv)) {
+ strncpy_s(url, _countof(url), dbv.pszVal, _TRUNCATE);
+ db_free(&dbv);
+ }
+
+ if (g_plugin.getString(hContact, FILE_KEY, &dbv))
+ return;
+
+ FILE *pfile = fopen(dbv.pszVal, mode);
+ if (pfile == nullptr)
+ WErrorPopup(hContact, TranslateT("Cannot write to file"));
+ else {
+ char timestring[128], timeprefix[32];
+ char temptime1[32], temptime2[32];
+
+ time_t ftime = time(0);
+ struct tm *nTime = localtime(&ftime);
+
+ mir_snprintf(timeprefix, " %s ", Translate("Last updated on"));
+ strftime(temptime1, 32, " %a, %b %d, %Y ", nTime);
+ strftime(temptime2, 32, " %I:%M %p.", nTime);
+ mir_snprintf(timestring, "(%s)%s\n%s,%s\n", MODULENAME, url, temptime1, temptime2);
+
+ fputs(timestring, pfile);
+ fwrite(truncated, mir_strlen(truncated), 1, pfile);
+ fputs("\n\n", pfile);
+ fclose(pfile);
+ }
+
+ db_free(&dbv);
+}
+
+/*****************************************************************************/
+int ProcessAlerts(MCONTACT hContact, char *truncated, char *tstr, char *contactname, int notpresent)
+{
+ char alertstring[255];
+ wchar_t displaystring[300];
+ FILE *pcachefile;
+ DBVARIANT tdbv;
+ int wasAlert = 0;
+
+ int statalertpos = 0, disalertpos = 0, statalertposend = 0;
+ char*alertpos;
+ char Alerttempstring[300], Alerttempstring2[300];
+ static char cachecompare[MAXSIZE1];
+ static char raw[MAXSIZE1];
+
+ int alertIndex = 0, eventIndex = 0;
+
+ char tempraw[MAXSIZE1];
+ memset(&tempraw, 0, sizeof(tempraw));
+ memset(&raw, 0, sizeof(raw));
+
+ strncpy(tempraw, truncated, _countof(tempraw));
+
+ memset(&alertstring, 0, sizeof(alertstring));
+ memset(&Alerttempstring, 0, sizeof(Alerttempstring));
+ memset(&Alerttempstring2, 0, sizeof(Alerttempstring2));
+ memset(&cachecompare, 0, sizeof(cachecompare));
+
+ // alerts
+ if (g_plugin.getByte(hContact, ENABLE_ALERTS_KEY, 0)) { // ALERTS
+ alertIndex = g_plugin.getByte(hContact, ALRT_INDEX_KEY, 0);
+ eventIndex = g_plugin.getByte(hContact, EVNT_INDEX_KEY, 0);
+ if (notpresent) {
+ if (alertIndex == 0) { // Popup
+ Sleep(1000);
+ WAlertPopup(hContact, TranslateT("Start/end strings not found or strings not set."));
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else if (alertIndex == 1) { // log to file
+ if (!g_plugin.getString(hContact, FILE_KEY, &tdbv)) {
+ int AmountWspcRem = 0;
+
+ if (!g_plugin.getByte(hContact, SAVE_AS_RAW_KEY, 0)) {
+ CodetoSymbol(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseBlock(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ FastTagFilter(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ NumSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ AmountWspcRem = g_plugin.getByte(hContact, RWSPACE_KEY, 0);
+ RemoveInvis(tempraw, AmountWspcRem);
+ Sleep(100); // avoid 100% CPU
+
+ Removewhitespace(tempraw);
+ }
+
+ SaveToFile(hContact, tempraw);
+ db_free(&tdbv);
+
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ }
+ else if (alertIndex == 3) {
+ WAlertOSD(hContact, TranslateT("Alert start/end strings not found or strings not set."));
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else if (eventIndex == 2) {
+ WDisplayDataAlert(hContact);
+
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+
+ HWND hwndDlg = (WindowList_Find(hWindowList, hContact));
+
+ SetDlgItemText(hwndDlg, IDC_STATUSBAR, TranslateT("Start/end strings not found or strings not set."));
+ }
+ else MessageBox(nullptr, TranslateT("Start/end strings not found or strings not set."), _A2W(MODULENAME), MB_OK);
+ }
+
+ if (eventIndex == 0) { // string present
+ if (!g_plugin.getString(hContact, ALERT_STRING_KEY, &tdbv)) {
+ strncpy_s(alertstring, _countof(alertstring), tdbv.pszVal, _TRUNCATE);
+ db_free(&tdbv);
+
+ if ((strstr(tempraw, alertstring)) != nullptr) { // // ENDALERT EVENT:CHECK FOR STRING
+ // there was an alert
+ wasAlert = 1;
+
+ // play sound?
+ Skin_PlaySound("webviewalert");
+ //
+ if ((!notpresent)) {
+ if (alertIndex == 0) { // popup
+ mir_snwprintf(displaystring, L"%s \"%S\" %s.", Translate("The string"), alertstring, Translate("has been found on the web page"));
+ WAlertPopup(hContact, displaystring);
+
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ } //
+ else if (alertIndex == 1) {
+ if (!g_plugin.getString(hContact, FILE_KEY, &tdbv)) {
+ int AmountWspcRem = 0;
+ if (!g_plugin.getByte(hContact, SAVE_AS_RAW_KEY, 0)) {
+ CodetoSymbol(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseBlock(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ FastTagFilter(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ NumSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ AmountWspcRem = g_plugin.getByte(hContact, RWSPACE_KEY, 0);
+ RemoveInvis(tempraw, AmountWspcRem);
+ Sleep(100); // avoid 100% CPU
+
+ Removewhitespace(tempraw);
+ }
+ SaveToFile(hContact, tempraw);
+ db_free(&tdbv);
+
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ }
+ else if (alertIndex == 3) {
+ mir_snwprintf(displaystring, L"%s \"%s\" %s.", TranslateT("The string"), alertstring, TranslateT("has been found on the web page"));
+ WAlertOSD(hContact, displaystring);
+
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else if (alertIndex == 2) {
+ WDisplayDataAlert(hContact);
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+
+ HWND hwndDlg = WindowList_Find(hWindowList, hContact);
+ SetDlgItemText(hwndDlg, IDC_STATUSBAR, TranslateT("Download successful; about to process data..."));
+ }
+ else MessageBox(nullptr, TranslateT("Unknown alert type."), _A2W(MODULENAME), MB_OK);
+ }
+ }
+ }
+ }
+ else if (eventIndex == 1) { // webpage changed
+ // TEST GET NAME FOR CACHE
+ wchar_t cachepath[MAX_PATH], cachedirectorypath[MAX_PATH], newcachepath[MAX_PATH + 50];
+ GetModuleFileName(g_plugin.getInst(), cachepath, _countof(cachepath));
+ wchar_t *cacheend = wcsrchr(cachepath, '\\');
+ cacheend++;
+ *cacheend = '\0';
+
+ mir_snwprintf(cachedirectorypath, L"%s%S%S", cachepath, MODULENAME, "cache\\");
+ CreateDirectory(cachedirectorypath, nullptr);
+ mir_snwprintf(newcachepath, L"%s%S%S%S%S", cachepath, MODULENAME, "cache\\", contactname, ".txt");
+ // file exists?
+ if (_waccess(newcachepath, 0) != -1) {
+ if ((pcachefile = _wfopen(newcachepath, L"r")) == nullptr)
+ WErrorPopup((UINT_PTR)contactname, TranslateT("Cannot read from file"));
+ else {
+ memset(&cachecompare, 0, sizeof(cachecompare));
+ fread(cachecompare, sizeof(cachecompare), 1, pcachefile);
+ fclose(pcachefile);
+ }
+ }
+ // write to cache
+ if ((pcachefile = _wfopen(newcachepath, L"w")) == nullptr)
+ WErrorPopup((UINT_PTR)contactname, TranslateT("Cannot write to file 1"));
+ else {
+ fwrite(tempraw, mir_strlen(tempraw), 1, pcachefile); //smaller cache
+ fclose(pcachefile);
+ g_plugin.setWString(hContact, CACHE_FILE_KEY, newcachepath);
+ }
+ // end write to cache
+
+ if (strncmp(tempraw, cachecompare, mir_strlen(tempraw)) != 0) { //lets try this instead
+ // play sound?
+ Skin_PlaySound("webviewalert");
+ // there was an alert
+ wasAlert = 1;
+
+ if (!notpresent) {
+ if (alertIndex == 0) { // popup
+ WAlertPopup(hContact, TranslateT("The web page has changed."));
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else if (alertIndex == 3) { // osd
+ WAlertOSD(hContact, TranslateT("The web page has changed."));
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else if (alertIndex == 1) { // log
+ if (!g_plugin.getString(hContact, FILE_KEY, &tdbv)) {
+ int AmountWspcRem = 0;
+
+ if (!g_plugin.getByte(hContact, SAVE_AS_RAW_KEY, 0)) {
+ CodetoSymbol(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseBlock(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ FastTagFilter(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ NumSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ AmountWspcRem = g_plugin.getByte(hContact, RWSPACE_KEY, 0);
+ RemoveInvis(tempraw, AmountWspcRem);
+ Sleep(100); // avoid 100% CPU
+
+ Removewhitespace(tempraw);
+ }
+
+ SaveToFile(hContact, tempraw);
+ db_free(&tdbv);
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ }
+ else if (alertIndex == 2) { // window
+ WDisplayDataAlert(hContact);
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else MessageBox(nullptr, TranslateT("Unknown alert type."), _A2W(MODULENAME), MB_OK);
+ }
+ }
+ }
+
+ if (eventIndex == 2) { // part of webpage changed
+ Alerttempstring[0] = Alerttempstring2[0] = 0;
+ if (!g_plugin.getString(hContact, ALRT_S_STRING_KEY, &tdbv)) {
+ strncpy_s(Alerttempstring, _countof(Alerttempstring), tdbv.pszVal, _TRUNCATE);
+ db_free(&tdbv);
+ }
+ if (!g_plugin.getString(hContact, ALRT_E_STRING_KEY, &tdbv)) {
+ strncpy_s(Alerttempstring2, _countof(Alerttempstring2), tdbv.pszVal, _TRUNCATE);
+ db_free(&tdbv);
+ }
+
+ // putting data into string
+ if (((strstr(tempraw, Alerttempstring)) != nullptr) && ((strstr(tempraw, Alerttempstring2)) != nullptr)) {
+ //start string
+ alertpos = strstr(tempraw, Alerttempstring);
+ statalertpos = alertpos - tempraw;
+
+ memset(&alertpos, 0, sizeof(alertpos));
+ //end string
+ alertpos = strstr(tempraw, Alerttempstring2);
+ statalertposend = alertpos - tempraw + (int)mir_strlen(Alerttempstring2);
+
+ if (statalertpos > statalertposend) {
+ memset(&tempraw, ' ', statalertpos);
+ memset(&alertpos, 0, sizeof(alertpos));
+ alertpos = strstr(tempraw, Alerttempstring2);
+ statalertposend = alertpos - tempraw + (int)mir_strlen(Alerttempstring2);
+ }
+
+ if (statalertpos < statalertposend) {
+ memset(&raw, 0, sizeof(raw));
+
+ //start string
+ alertpos = strstr(tempraw, Alerttempstring);
+ statalertpos = alertpos - tempraw;
+
+ //end string
+ alertpos = strstr(tempraw, Alerttempstring2);
+ statalertposend = alertpos - tempraw + (int)mir_strlen(Alerttempstring2);
+
+ if (statalertpos > statalertposend) {
+ memset(&tempraw, ' ', statalertpos);
+ memset(&alertpos, 0, sizeof(alertpos));
+ alertpos = strstr(tempraw, Alerttempstring2);
+ statalertposend = alertpos - tempraw + (int)mir_strlen(Alerttempstring2);
+ }
+ disalertpos = 0;
+
+ //write selected data to string
+ strncpy(raw, &tempraw[statalertpos], (statalertposend - statalertpos));
+ raw[(statalertposend - statalertpos)] = '\0';
+ }
+ } // end putting data into string
+ else { // start and/or end string not present
+ if (alertIndex == 0) { // popup
+ Sleep(1000);
+ WAlertPopup(hContact, TranslateT("Alert start/end strings not found or strings not set."));
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else if (alertIndex == 1) { // LOG
+ if (!notpresent) { // dont log to file twice if both types of start/end strings not present
+ if (!g_plugin.getString(hContact, FILE_KEY, &tdbv)) {
+ int AmountWspcRem = 0;
+ if (!g_plugin.getByte(hContact, SAVE_AS_RAW_KEY, 0)) {
+ CodetoSymbol(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseBlock(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ FastTagFilter(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ NumSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ AmountWspcRem = g_plugin.getByte(hContact, RWSPACE_KEY, 0);
+ RemoveInvis(tempraw, AmountWspcRem);
+ Sleep(100); // avoid 100% CPU
+
+ Removewhitespace(tempraw);
+ }
+
+ SaveToFile(hContact, tempraw);
+ db_free(&tdbv);
+ // contactlist name
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ }
+ }
+ else if (alertIndex == 3) { // osd
+ WAlertOSD(hContact, TranslateT("Alert start/end strings not found or strings not set."));
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else if (alertIndex == 2) { // window
+ WDisplayDataAlert(hContact);
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+
+ HWND hwndDlg = (WindowList_Find(hWindowList, hContact));
+ SetDlgItemText(hwndDlg, IDC_STATUSBAR, TranslateT("Alert start/end strings not found or strings not set."));
+ }
+ else MessageBox(nullptr, TranslateT("Alert start/end strings not found or strings not set."), _A2W(MODULENAME), MB_OK);
+
+ g_plugin.setWord(hContact, "Status", ID_STATUS_AWAY);
+ }
+
+ ///////////////
+ if (((strstr(tempraw, Alerttempstring)) != nullptr) && ((strstr(tempraw, Alerttempstring2)) != nullptr)) {
+ // TEST GET NAME FOR CACHE
+ wchar_t cachepath[MAX_PATH], cachedirectorypath[MAX_PATH], newcachepath[MAX_PATH + 50];
+ GetModuleFileName(g_plugin.getInst(), cachepath, _countof(cachepath));
+ wchar_t *cacheend = wcsrchr(cachepath, '\\');
+ cacheend++;
+ *cacheend = '\0';
+
+ mir_snwprintf(cachedirectorypath, L"%s%S%S", cachepath, MODULENAME, "cache\\");
+ CreateDirectory(cachedirectorypath, nullptr);
+ mir_snwprintf(newcachepath, L"%s%S%S%S%S", cachepath, MODULENAME, "cache\\", contactname, ".txt");
+ // file exists?
+ if (_waccess(newcachepath, 0) != -1) {
+ if ((pcachefile = _wfopen(newcachepath, L"r")) == nullptr)
+ WErrorPopup((UINT_PTR)contactname, TranslateT("Cannot read from file"));
+ else {
+ memset(&cachecompare, 0, sizeof(cachecompare));
+ fread(cachecompare, sizeof(cachecompare), 1, pcachefile);
+ fclose(pcachefile);
+ }
+ }
+ // write to cache
+ if ((pcachefile = _wfopen(newcachepath, L"w")) == nullptr)
+ WErrorPopup((UINT_PTR)contactname, TranslateT("Cannot write to file 2"));
+ else {
+ fwrite(raw, mir_strlen(raw), 1, pcachefile); //smaller cache
+ g_plugin.setWString(hContact, CACHE_FILE_KEY, newcachepath);
+ fclose(pcachefile);
+ }
+ // end write to cache
+ if (strncmp(raw, cachecompare, (mir_strlen(raw))) != 0) { //lets try this instead
+ // play sound?
+ Skin_PlaySound("webviewalert");
+ // there was an alert
+ wasAlert = 1;
+
+ if (!notpresent) {
+ if (alertIndex == 0) { // popup
+ WAlertPopup(hContact, TranslateT("Specific part of the web page has changed."));
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else if (alertIndex == 3) { // osd
+ WAlertOSD(hContact, TranslateT("Specific part of the web page has changed."));
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else if (alertIndex == 1) { // log to file
+ if (!g_plugin.getString(hContact, FILE_KEY, &tdbv)) {
+ int AmountWspcRem = 0;
+ if (!g_plugin.getByte(hContact, SAVE_AS_RAW_KEY, 0)) {
+ CodetoSymbol(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseBlock(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ FastTagFilter(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ NumSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ AmountWspcRem = g_plugin.getByte(hContact, RWSPACE_KEY, 0);
+ RemoveInvis(tempraw, AmountWspcRem);
+ Sleep(100); // avoid 100% CPU
+
+ Removewhitespace(tempraw);
+ }
+
+ SaveToFile(hContact, tempraw);
+ db_free(&tdbv);
+ // contactlist name
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ }
+ else if (alertIndex == 2) { // window
+ WDisplayDataAlert(hContact);
+ // contactlist name//
+ if (g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0))
+ db_set_s(hContact, "CList", "MyHandle", tstr);
+ }
+ else MessageBox(nullptr, TranslateT("Unknown alert type."), _A2W(MODULENAME), MB_OK);
+ }
+ }
+ }
+ } // alert type
+ }
+ // end alerts
+
+ //if always log to file option is enabled do this
+ if (wasAlert && alertIndex != 1) { // dont do for log to file alert
+ if (g_plugin.getByte(hContact, ALWAYS_LOG_KEY, 0)) {
+ if (!g_plugin.getString(hContact, FILE_KEY, &tdbv)) {
+ int AmountWspcRem = 0;
+
+ if (!g_plugin.getByte(hContact, SAVE_AS_RAW_KEY, 0)) {
+ CodetoSymbol(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseBlock(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ FastTagFilter(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ NumSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ EraseSymbols(tempraw);
+ Sleep(100); // avoid 100% CPU
+
+ AmountWspcRem = g_plugin.getByte(hContact, RWSPACE_KEY, 0);
+ RemoveInvis(tempraw, AmountWspcRem);
+ Sleep(100); // avoid 100% CPU
+
+ Removewhitespace(tempraw);
+ }
+
+ SaveToFile(hContact, tempraw);
+ db_free(&tdbv);
+ }
+ }
+ }
+ strncpy(truncated, tempraw, mir_strlen(truncated));
+ return wasAlert;
+}
+
+/*****************************************************************************/
+int DataWndAlertCommand(WPARAM wParam, LPARAM)
+{
+ MCONTACT hContact = wParam;
+ if (WindowList_Find(hWindowList, hContact))
+ return 0;
+
+ HWND hwndDlg = CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_DISPLAY_DATA), nullptr, DlgProcDisplayData, hContact);
+ HWND hTopmost = g_plugin.getByte(hContact, ON_TOP_KEY, 0) ? HWND_TOPMOST : HWND_NOTOPMOST;
+ SendDlgItemMessage(hwndDlg, IDC_STICK_BUTTON, BM_SETIMAGE, IMAGE_ICON, (LPARAM)((HICON)LoadImage(g_plugin.getInst(), MAKEINTRESOURCE(IDI_STICK), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0)));
+ if (g_plugin.getByte(SAVE_INDIVID_POS_KEY, 0))
+ SetWindowPos(hwndDlg, hTopmost,
+ g_plugin.getDword(hContact, "WVx", 100), // Xposition,
+ g_plugin.getDword(hContact, "WVy", 100), // Yposition,
+ g_plugin.getDword(hContact, "WVwidth", 100), // WindowWidth,
+ g_plugin.getDword(hContact, "WVheight", 100), 0); // WindowHeight,
+ else
+ SetWindowPos(hwndDlg, HWND_TOPMOST, Xposition, Yposition, WindowWidth, WindowHeight, 0);
+
+ ShowWindow(hwndDlg, SW_SHOW);
+ SetActiveWindow(hwndDlg);
+ return 0;
+}
+
+/*****************************************************************************/
+void ReadFromFile(void *param)
+{
+ MCONTACT hContact = (UINT_PTR)param;
+
+ DBVARIANT dbv;
+ char truncated[MAXSIZE1];
+ int AmountWspcRem = 0;
+ int fileexists = 0;
+
+ HWND hwndDlg = WindowList_Find(hWindowList, hContact);
+
+ char contactname[100]; contactname[0] = 0;
+ if (!db_get_s(hContact, "CList", "MyHandle", &dbv)) {
+ strncpy_s(contactname, _countof(contactname), dbv.pszVal, _TRUNCATE);
+ db_free(&dbv);
+ }
+
+ if (g_plugin.getString(hContact, CACHE_FILE_KEY, &dbv))
+ return;
+
+ FILE *pfile;
+ if ((pfile = fopen(dbv.pszVal, "r")) == nullptr) {
+ SendToRichEdit(hwndDlg, Translate("Cannot read from cache file"), TextClr, BackgoundClr);
+ fileexists = 0;
+ }
+ else {
+ fread(truncated, sizeof(truncated), 1, pfile);
+ fclose(pfile);
+ fileexists = 1;
+ }
+
+ db_free(&dbv);
+
+ if (fileexists) {
+ CodetoSymbol(truncated);
+ Sleep(100); // avoid 100% CPU
+
+ EraseBlock(truncated);
+ Sleep(100); // avoid 100% CPU
+
+ FastTagFilter(truncated);
+ Sleep(100); // avoid 100% CPU
+
+ NumSymbols(truncated);
+ Sleep(100); // avoid 100% CPU
+
+ EraseSymbols(truncated);
+ Sleep(100); // avoid 100% CPU
+
+ AmountWspcRem = g_plugin.getByte(hContact, RWSPACE_KEY, 0);
+ RemoveInvis(truncated, AmountWspcRem);
+ Sleep(100); // avoid 100% CPU
+
+ Removewhitespace(truncated);
+
+ SendToRichEdit(hwndDlg, truncated, TextClr, BackgoundClr);
+ SetDlgItemText(hwndDlg, IDC_STATUSBAR, TranslateT("Loaded from cache"));
+ }
+}