summaryrefslogtreecommitdiff
path: root/plugins/!NotAdopted/WebView/webview_services.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/!NotAdopted/WebView/webview_services.c')
-rw-r--r--plugins/!NotAdopted/WebView/webview_services.c770
1 files changed, 770 insertions, 0 deletions
diff --git a/plugins/!NotAdopted/WebView/webview_services.c b/plugins/!NotAdopted/WebView/webview_services.c
new file mode 100644
index 0000000000..8436441ec2
--- /dev/null
+++ b/plugins/!NotAdopted/WebView/webview_services.c
@@ -0,0 +1,770 @@
+/*
+ * 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.
+ */
+
+static int searchId = -1;
+static char sID[32];
+
+/************************/
+static int DBSettingChanged(WPARAM wParam, LPARAM lParam)
+{
+
+ DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING *) lParam;
+ char *invalidchar;
+
+ // We can't upload changes to NULL contact
+ if ((HANDLE) wParam == NULL)
+ return 0;
+
+ if (!strcmp(cws->szModule, "CList"))
+ {
+ HANDLE hContact;
+ DBVARIANT dbv;
+ char *szProto;
+ FILE *pcachefile;
+ char cachepath[MAX_PATH];
+
+ char cachedirectorypath[MAX_PATH];
+
+ char newcachepath[MAX_PATH + 50];
+ char renamedcachepath[MAX_PATH + 50];
+ char *cacheend;
+ char OLDcontactname[100];
+ char NEWcontactname[100];
+ int ranNum;
+ char ranStr[7];
+ int invalidpresent = 0;
+
+
+ hContact = (HANDLE) wParam;
+ szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0);
+ if (szProto == NULL || strcmp(szProto, DLLNAME))
+ return 0;
+
+ // A contact is renamed
+ if (!strcmp(cws->szSetting, "MyHandle"))
+ {
+ hContact = (HANDLE) wParam;
+ szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0);
+ if (szProto == NULL || strcmp(szProto, DLLNAME))
+ return 0;
+///////
+ if (!DBGetContactSetting(hContact, DLLNAME, PRESERVE_NAME_KEY, &dbv))
+ {
+ char nick[100];
+
+ ZeroMemory(&OLDcontactname, sizeof(OLDcontactname));
+ ZeroMemory(&NEWcontactname, sizeof(NEWcontactname));
+
+ DBFreeVariant(&dbv);
+
+ ZeroMemory(&nick, sizeof(nick));
+
+ DBGetContactSetting(hContact, "CList", "MyHandle", &dbv);
+ _snprintf(nick, sizeof(nick), "%s", dbv.pszVal);
+ DBFreeVariant(&dbv);
+
+ DBGetContactSetting((HANDLE) wParam, DLLNAME, PRESERVE_NAME_KEY, &dbv);
+ _snprintf(OLDcontactname, sizeof(OLDcontactname), "%s", dbv.pszVal);
+ DBFreeVariant(&dbv);
+
+ if (strchr(nick, '\\') != NULL)
+ {
+ WErrorPopup("ERROR", Translate("Invalid symbol present in contact name."));
+ invalidchar = strchr(nick, '\\');
+ *invalidchar = '_';
+ invalidpresent =1;
+ }
+
+ if (strchr(nick, '/') != NULL)
+ {
+ WErrorPopup("ERROR", Translate("Invalid symbol present in contact name."));
+ invalidchar = strchr(nick, '/');
+ *invalidchar = '_';
+ invalidpresent =1;
+ }
+
+ if (strchr(nick, ':') != NULL)
+ {
+ WErrorPopup("ERROR", Translate("Invalid symbol present in contact name."));
+ invalidchar = strchr(nick, ':');
+ *invalidchar = '_';
+ invalidpresent =1;
+ }
+
+ if (strchr(nick, '*') != NULL)
+ {
+ WErrorPopup("ERROR", Translate("Invalid symbol present in contact name."));
+ invalidchar = strchr(nick, '*');
+ *invalidchar = '_';
+ invalidpresent =1;
+ }
+
+ if (strchr(nick, '?') != NULL)
+ {
+ WErrorPopup("ERROR", Translate("Invalid symbol present in contact name."));
+ invalidchar = strchr(nick, '?');
+ *invalidchar = '_';
+ invalidpresent =1;
+ }
+
+ if (strchr(nick, '\"') != NULL)
+ {
+ WErrorPopup("ERROR", Translate("Invalid symbol present in contact name."));
+ invalidchar = strchr(nick, '\"');
+ *invalidchar = '_';
+ invalidpresent =1;
+ }
+
+ if (strchr(nick, '<') != NULL)
+ {
+ WErrorPopup("ERROR", Translate("Invalid symbol present in contact name."));
+ invalidchar = strchr(nick, '<');
+ *invalidchar = '_';
+ invalidpresent =1;
+ }
+
+ if (strchr(nick, '>') != NULL)
+ {
+ WErrorPopup("ERROR", Translate("Invalid symbol present in contact name."));
+ invalidchar = strchr(nick, '>');
+ *invalidchar = '_';
+ invalidpresent =1;
+ }
+
+ if (strchr(nick, '|') != NULL)
+ {
+ WErrorPopup("ERROR", Translate("Invalid symbol present in contact name."));
+ invalidchar = strchr(nick, '|');
+ *invalidchar = '_';
+ invalidpresent =1;
+ }
+
+ if(invalidpresent)
+ {
+ srand((unsigned) time(NULL));
+ ranNum = (int) 10000 *rand() / (RAND_MAX + 1.0);
+ _snprintf(ranStr, sizeof(ranStr), "%d", ranNum);
+ strcat(nick, ranStr);
+ }
+
+
+
+ if (((strchr(nick, '(')) == 0))
+ {
+ DBWriteContactSettingString(hContact, DLLNAME, PRESERVE_NAME_KEY, nick);
+ DBWriteContactSettingString(hContact, DLLNAME, "Nick", nick);
+ DBWriteContactSettingString(hContact, "CList", "MyHandle", nick);
+ }
+ DBGetContactSetting((HANDLE) wParam, DLLNAME, PRESERVE_NAME_KEY, &dbv);
+ _snprintf(NEWcontactname, sizeof(NEWcontactname), "%s", dbv.pszVal);
+ DBFreeVariant(&dbv);
+
+//
+
+ // TEST GET NAME FOR CACHE
+ GetModuleFileName(hInst, cachepath, sizeof(cachepath));
+ cacheend = strrchr(cachepath, '\\');
+ cacheend++;
+ *cacheend = '\0';
+ _snprintf(cachedirectorypath, sizeof(cachedirectorypath), "%s%s%s", cachepath, DLLNAME, "cache\\");
+ CreateDirectory(cachedirectorypath, NULL);
+
+
+
+ _snprintf(newcachepath, sizeof(newcachepath), "%s%s%s%s%s", cachepath, DLLNAME, "cache\\", OLDcontactname, ".txt");
+ _snprintf(renamedcachepath, sizeof(newcachepath), "%s%s%s%s%s", cachepath, DLLNAME, "cache\\", NEWcontactname, ".txt");
+
+
+
+ // file exists?
+ if ((_access(newcachepath, 0)) != -1)
+ {
+ if ((pcachefile = fopen(newcachepath, "r")) != NULL)
+ {
+ fclose(pcachefile);
+ if (lstrcmp(newcachepath, renamedcachepath))
+ {
+ MoveFile(newcachepath, renamedcachepath);
+ DBWriteContactSettingString(hContact, DLLNAME, CACHE_FILE_KEY, renamedcachepath);
+ }
+
+ }
+ }
+//
+
+ }
+////////
+ }
+ }
+ return 0;
+}
+/************************/
+
+/************************/
+int SiteDeleted(WPARAM wParam, LPARAM lParam)
+{
+ FILE *pcachefile;
+ char cachepath[MAX_PATH];
+ char cachedirectorypath[MAX_PATH];
+ char newcachepath[MAX_PATH + 50];
+ char *cacheend;
+ char contactname[100];
+ DBVARIANT dbv;
+
+ ZeroMemory(&contactname, sizeof(contactname));
+ ZeroMemory(&dbv, sizeof(dbv));
+
+ if (lstrcmp((char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0), DLLNAME))
+ return 0;
+
+ DBGetContactSetting((HANDLE) wParam, DLLNAME, PRESERVE_NAME_KEY, &dbv);
+ _snprintf(contactname, sizeof(contactname), "%s", dbv.pszVal);
+ DBFreeVariant(&dbv);
+
+ // TEST GET NAME FOR CACHE
+ GetModuleFileName(hInst, cachepath, sizeof(cachepath));
+ cacheend = strrchr(cachepath, '\\');
+ cacheend++;
+ *cacheend = '\0';
+
+ _snprintf(cachedirectorypath, sizeof(cachedirectorypath), "%s%s%s", cachepath, DLLNAME, "cache\\");
+ CreateDirectory(cachedirectorypath, NULL);
+ _snprintf(newcachepath, sizeof(newcachepath), "%s%s%s%s%s", cachepath, DLLNAME, "cache\\", contactname, ".txt");
+ // file exists?
+ if ((_access(newcachepath, 0)) != -1)
+ {
+ if ((pcachefile = fopen(newcachepath, "r")) != NULL)
+ {
+ fclose(pcachefile);
+ DeleteFile(newcachepath);
+ DBWriteContactSettingString((HANDLE) wParam, DLLNAME, CACHE_FILE_KEY, "");
+ }
+ }
+ return 0;
+}
+/************************/
+
+/************************/
+static int OpenCacheDir(WPARAM wParam, LPARAM lParam)
+{
+ char cachepath[MAX_PATH];
+ char cachedirectorypath[MAX_PATH];
+ char *cacheend;
+ DIR *pdir = NULL;
+
+
+ //GET NAME FOR CACHE
+ GetModuleFileName(hInst, cachepath, sizeof(cachepath));
+ cacheend = strrchr(cachepath, '\\');
+ cacheend++;
+ *cacheend = '\0';
+
+ _snprintf(cachedirectorypath, sizeof(cachedirectorypath), "%s%s%s%s", cachepath, DLLNAME, "cache\\", cacheend);
+
+ if((pdir = opendir(cachedirectorypath)) == NULL)
+ {
+ WErrorPopup("ERROR", Translate("Cache folder does not exist."));
+ return 0;
+ }
+
+ ShellExecute(NULL, "open", cachedirectorypath, NULL, NULL, SW_SHOWNORMAL);
+
+ return 0;
+}
+/************************/
+/************************/
+static int PingWebsiteMenuCommand(WPARAM wParam, LPARAM lParam)
+{
+ DBVARIANT dbv;
+ char url[300];
+ static char *Newnick;
+ static char *Oldnick;
+ char *Nend;
+ char Cnick[255];
+ FILE *pfile = NULL;
+
+ if ((pfile = fopen("psite.bat", "r")) == NULL)
+ {
+ WErrorPopup("ERROR", Translate("Missing \"psite.bat\" file."));
+ return 0;
+ }
+
+ ZeroMemory(&Cnick, sizeof(Cnick));
+ ZeroMemory(&url, sizeof(url));
+
+ DBGetContactSetting((HANDLE) wParam, DLLNAME, "URL", &dbv);
+ wsprintf(url, "%s", dbv.pszVal);
+ DBFreeVariant(&dbv);
+
+ strncpy(Cnick, url, sizeof(Cnick));
+ Oldnick = strdup(Cnick);
+
+ /**/
+ if ((strstr(Cnick, "://")) != 0)
+ {
+ Oldnick = strstr(Cnick, "://");
+ Oldnick = Oldnick + 3;
+ } else if ((strstr(Cnick, "://")) == 0)
+ {
+ strcpy(Oldnick, Cnick);
+ }
+
+ Newnick = strdup(Oldnick);
+ if (strchr(Newnick, '/'))
+ {
+ Nend = strchr(Newnick, '/');
+ *Nend = '\0';
+ }
+
+ //MessageBox(NULL, Newnick, DLLNAME, MB_OK);
+
+ ShellExecute(NULL, "open", "psite.bat", Newnick, NULL, SW_HIDE);
+
+
+ return 0;
+}
+/************************/
+
+
+/************************/
+static int StpPrcssMenuCommand(WPARAM wParam, LPARAM lParam)
+{
+ DBVARIANT dbv;
+
+ DBWriteContactSettingByte((HANDLE) wParam, DLLNAME, STOP_KEY, 1);
+
+ return 0;
+}
+/************************/
+
+
+
+//=======================================================
+// GetCaps
+// =======================================================
+
+int GetCaps(WPARAM wParam, LPARAM lParam)
+{
+ int ret = 0;
+
+ if (wParam == PFLAGNUM_1)
+ ret = PF1_BASICSEARCH | PF1_ADDSEARCHRES | PF1_VISLIST;
+
+ if (wParam == PFLAGNUM_2)
+ {
+ if (!(DBGetContactSettingByte(NULL, DLLNAME, HIDE_STATUS_ICON_KEY, 0)))
+ return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; // add
+ // the
+ // possible
+ // statuses here
+
+ }
+ if (wParam == PFLAG_UNIQUEIDTEXT)
+ ret = (int) Translate("Site URL");
+
+ if (wParam == PFLAGNUM_3)
+ ret = 0;
+
+
+ if (wParam == PFLAGNUM_5)
+ ret = PF2_INVISIBLE|PF2_SHORTAWAY|PF2_LONGAWAY|PF2_LIGHTDND|PF2_HEAVYDND|PF2_FREECHAT|
+ PF2_OUTTOLUNCH|PF2_ONTHEPHONE;
+
+ if (wParam == PFLAG_UNIQUEIDSETTING)
+ ret = (int) "PreserveName";
+
+ return ret;
+}
+
+//=======================================================
+// =======================================================
+// GetName
+// =======================================================
+int GetName(WPARAM wParam, LPARAM lParam)
+{
+ lstrcpyn((char *) lParam, DLLNAME, wParam);
+ return 0;
+}
+//=======================================================
+// SetStatus
+// =======================================================
+int SetStatus(WPARAM wParam, LPARAM lParam)
+{
+ int oldStatus;
+ DBVARIANT dbv;
+
+ oldStatus = bpStatus;
+ char *szProto;
+ HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+
+ if (wParam == ID_STATUS_ONLINE)
+ {
+ wParam = ID_STATUS_ONLINE;
+ } else if (wParam == ID_STATUS_OFFLINE)
+ {
+ wParam = ID_STATUS_OFFLINE;
+ } else
+ {
+ wParam = ID_STATUS_ONLINE;
+ }
+ // broadcast the message
+ bpStatus = wParam;
+
+ ProtoBroadcastAck(DLLNAME, NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE) oldStatus, wParam);
+
+ /**/
+ // Make sure no contact has offline status for any reason on first time
+ // run
+ if (DBGetContactSetting(NULL, DLLNAME, "FirstTime", &dbv))
+ {
+ while (hContact)
+ {
+ szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0);
+ if (szProto != NULL && !lstrcmp(DLLNAME, szProto))
+ {
+ DBWriteContactSettingWord(hContact, DLLNAME, "Status", ID_STATUS_ONLINE);
+ }
+ hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0);
+ }
+ if (DBGetContactSetting(NULL, DLLNAME, "FirstTime", &dbv))
+ DBWriteContactSettingByte(NULL, DLLNAME, "FirstTime", 1);
+ }
+ DBFreeVariant(&dbv);
+ /**/
+
+ if (bpStatus == ID_STATUS_OFFLINE)
+ DBWriteContactSettingByte(NULL, DLLNAME, OFFLINE_STATUS, 1);
+ else
+ DBWriteContactSettingByte(NULL, DLLNAME, OFFLINE_STATUS, 0);
+
+ return 0;
+}
+//=======================================================
+// GetStatus
+// =======================================================
+
+int GetStatus(WPARAM wParam, LPARAM lParam)
+{
+
+ if (bpStatus == ID_STATUS_ONLINE)
+ return ID_STATUS_ONLINE;
+ else if (bpStatus == ID_STATUS_AWAY)
+ return ID_STATUS_AWAY;
+ else if (bpStatus == ID_STATUS_NA)
+ return ID_STATUS_NA;
+ else if (bpStatus == ID_STATUS_OCCUPIED)
+ return ID_STATUS_OCCUPIED;
+ else if (bpStatus == ID_STATUS_DND)
+ return ID_STATUS_DND;
+ else
+ return ID_STATUS_OFFLINE;
+
+}
+
+//=======================================================
+// BPLoadIcon
+// =======================================================
+
+int BPLoadIcon(WPARAM wParam, LPARAM lParam)
+{
+ UINT id;
+
+ switch (wParam & 0xFFFF)
+ {
+ case PLI_PROTOCOL:
+ id = IDI_SITE;
+ break;
+ default:
+ return (int) (HICON) NULL;
+ }
+ return (int) LoadImage(hInst, MAKEINTRESOURCE(id), IMAGE_ICON, GetSystemMetrics(wParam & PLIF_SMALL ? SM_CXSMICON : SM_CXICON), GetSystemMetrics(wParam & PLIF_SMALL ? SM_CYSMICON : SM_CYICON), 0);
+}
+
+/*******************/
+static void __cdecl BasicSearchTimerProc(void *pszNick)
+{
+ PROTOSEARCHRESULT psr;
+
+ ZeroMemory(&psr, sizeof(psr));
+ psr.cbSize = sizeof(psr);
+ psr.nick = (char *) pszNick;
+ //
+
+ // broadcast the search result
+ ProtoBroadcastAck(DLLNAME, NULL, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE) 1, (LPARAM) & psr);
+ ProtoBroadcastAck(DLLNAME, NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE) 1, 0);
+
+ // exit the search
+ searchId = -1;
+}
+
+/*******************/
+
+/*******************/
+int BasicSearch(WPARAM wParam, LPARAM lParam)
+{
+ static char buf[300];
+
+
+ if (lParam)
+ lstrcpyn(buf, (const char *) lParam, 256);
+ //
+
+ if (searchId != -1)
+ return 0; // only one search at a time
+
+ lstrcpyn(sID, (char *) lParam, sizeof(sID));
+ searchId = 1;
+ // create a thread for the ID search
+ forkthread(BasicSearchTimerProc, 0, &buf);
+
+ return searchId;
+}
+/*******************/
+
+/*******************/
+int AddToList(WPARAM wParam, LPARAM lParam)
+{
+ PROTOSEARCHRESULT *psr = (PROTOSEARCHRESULT *) lParam;
+ DBVARIANT dbv;
+ static char *Newnick;
+ static char *Oldnick;
+ char *Nend;
+ char Cnick[255];
+ int sameurl = 0;
+ int samename = 0;
+
+
+ ZeroMemory(&Cnick, sizeof(Cnick));
+
+
+ // search for existing contact
+ HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+ HANDLE hContact2 = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+ char *szProto;
+
+
+
+
+
+ while (hContact != NULL)
+ {
+ szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0);
+ // check if it is a webview contact
+ if (szProto != NULL && !lstrcmp(DLLNAME, szProto))
+ {
+ // check ID to see if the contact already exist in the database
+
+ if (!DBGetContactSetting(hContact, DLLNAME, "URL", &dbv))
+ {
+ if (!lstrcmpi(psr->nick, dbv.pszVal))
+ {
+ // remove the flag for not on list and hidden, thus make the
+ // contact visible
+ // and add them on the list
+ sameurl++;
+ if (DBGetContactSettingByte(hContact, "CList", "NotOnList", 1))
+ {
+ DBDeleteContactSetting(hContact, "CList", "NotOnList");
+ DBDeleteContactSetting(hContact, "CList", "Hidden");
+ }
+ DBFreeVariant(&dbv);
+ }
+ }
+ DBFreeVariant(&dbv);
+
+ }
+ hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0);
+ }
+
+
+
+ if (psr->nick == NULL)
+ {
+ WErrorPopup("ERROR", Translate("Please select site in Find/Add Contacts..."));
+ return;
+ }
+
+ // if contact with the same ID was not found, add it
+ if (psr->cbSize != sizeof(PROTOSEARCHRESULT))
+ return (int) (HANDLE) NULL;
+ hContact = (HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0);
+ CallService(MS_PROTO_ADDTOCONTACT, (WPARAM) hContact, (LPARAM) DLLNAME);
+
+
+/////////write to db
+ DBWriteContactSettingByte(hContact, DLLNAME, ON_TOP_KEY, 0);
+ DBWriteContactSettingByte(hContact, DLLNAME, DBLE_WIN_KEY, 1);
+ DBWriteContactSettingString(hContact, DLLNAME, END_STRING_KEY, "");
+ DBWriteContactSettingByte(hContact, DLLNAME, RWSPACE_KEY, 1);
+
+
+
+
+//Convert url into a name for contact
+///
+ if (psr->nick != NULL)
+ strncpy(Cnick, psr->nick, sizeof(Cnick));// this crashes
+///
+
+ Oldnick = strdup(Cnick);
+
+
+ /**/
+ if ((strstr(Cnick, "://")) != 0)
+ {
+ Oldnick = strstr(Cnick, "://");
+ Oldnick = Oldnick + 3;
+
+ } else if ((strstr(Cnick, "://")) == 0)
+ {
+ strcpy(Oldnick, Cnick);
+
+ }
+ if ((strstr(Oldnick, "www.")) != 0)
+ {
+ Newnick = strstr(Oldnick, "www.");
+ Newnick = Newnick + 4;
+ Nend = strchr(Newnick, '.');
+ *Nend = '\0';
+
+ } else if ((strstr(Oldnick, "WWW.")) != 0)
+ {
+ Newnick = strstr(Oldnick, "WWW.");
+ Newnick = Newnick + 4;
+ Nend = strchr(Newnick, '.');
+ *Nend = '\0';
+
+ } else
+ {
+
+ Newnick = strdup(Oldnick);
+ if (strchr(Newnick, '.'))
+ {
+ Nend = strchr(Newnick, '.');
+ *Nend = '\0';
+
+ }
+ }
+
+
+ while (hContact2 != NULL)
+ {
+ szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact2, 0);
+ // check if it is a webview contact
+ if (szProto != NULL && !lstrcmp(DLLNAME, szProto))
+ {
+ // check ID to see if the contact already exist in the database
+
+
+
+ if (!DBGetContactSetting(hContact2, DLLNAME, PRESERVE_NAME_KEY, &dbv))
+ {
+ if (!lstrcmpi(Newnick, dbv.pszVal))
+ {
+ // remove the flag for not on list and hidden, thus make the
+ // contact visible
+ // and add them on the list
+ samename++;
+ if (DBGetContactSettingByte(hContact2, "CList", "NotOnList", 1))
+ {
+ DBDeleteContactSetting(hContact2, "CList", "NotOnList");
+ DBDeleteContactSetting(hContact2, "CList", "Hidden");
+ }
+ DBFreeVariant(&dbv);
+ }
+ }
+ DBFreeVariant(&dbv);
+
+ }
+ hContact2 = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact2, 0);
+ }
+
+
+
+ if ((sameurl > 0) || (samename > 0)) // contact has the same url or name as another contact, add rand
+ // num to name
+
+ {
+ int ranNum;
+ char ranStr[7];
+
+ srand((unsigned) time(NULL));
+
+ ranNum = (int) 10000 *rand() / (RAND_MAX + 1.0);
+
+ _snprintf(ranStr, sizeof(ranStr), "%d", ranNum);
+ strcat(Newnick, ranStr);
+ }
+//end convert
+
+ DBWriteContactSettingString(hContact, "CList", "MyHandle", Newnick);
+ DBWriteContactSettingString(hContact, DLLNAME, PRESERVE_NAME_KEY, Newnick);
+ DBWriteContactSettingString(hContact, DLLNAME, "Nick", Newnick);
+ DBWriteContactSettingByte(hContact, DLLNAME, CLEAR_DISPLAY_KEY, 1);
+ DBWriteContactSettingString(hContact, DLLNAME, START_STRING_KEY, "");
+ DBWriteContactSettingString(hContact, DLLNAME, URL_KEY, psr->nick);
+ DBWriteContactSettingString(hContact, DLLNAME, "Homepage", psr->nick);
+ DBWriteContactSettingByte(hContact, DLLNAME, U_ALLSITE_KEY, 1);
+ DBWriteContactSettingWord(hContact, DLLNAME, "Status", ID_STATUS_ONLINE);
+////////////////////////
+
+
+
+ // ignore status change
+ DBWriteContactSettingDword(hContact, "Ignore", "Mask", 8);
+
+ Sleep(2);
+
+ DBFreeVariant(&dbv);
+
+
+ return (int) hContact;
+}
+/*******************/
+
+/*******************/
+int GetInfo(WPARAM wParam, LPARAM lParam)
+{
+ forkthread(AckFunc, 0, NULL);
+ return 1;
+}
+/*******************/
+/*******************/
+void AckFunc(void *dummy)
+{
+ HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+ char *szProto;
+
+ while (hContact != NULL)
+ {
+ szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0);
+ //
+ if (szProto != NULL && !lstrcmp(DLLNAME, szProto))
+ ProtoBroadcastAck(DLLNAME, hContact, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, (HANDLE) 1, 0);
+ //
+ hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0);
+ }
+
+}
+/*******************/
+