void *NavigatePlugin::processEvent(Event *e) { #ifdef WIN32 if (e->type() == EventGetURL){ string *url = (string*)(e->param()); *url = getCurrentUrl(); return e->param(); } #endif if (e->type() == EventGoURL){ string url = (const char*)(e->param()); string proto; if (url.length() == 0) return NULL; int n = url.find(':'); if (n < 0){ proto = "http"; url = proto + "://" + url; }else{ proto = url.substr(0, n); if ((proto != "http") && (proto != "https") && (proto != "ftp") && (proto != "file") && (proto != "mailto")) return NULL; } #ifdef WIN32 bool bExec = false; if (getNewWindow()){ string key_name = proto; key_name += "\\Shell\\Open"; RegEntry rp(HKEY_CLASSES_ROOT, key_name.c_str()); string prg = rp.value("command"); string action = rp.value("ddeexec"); string topic = rp.value("ddeexec\\Topic"); string server = rp.value("ddeexec\\Application"); if (!action.empty()){ int pos = action.find("%1"); if (pos >= 0) action = action.substr(0, pos) + url + action.substr(pos + 2); pos = prg.find("%1"); if (pos >= 0) prg = prg.substr(0, pos) + url + prg.substr(pos + 2); if (!prg.empty()){ STARTUPINFOA si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); if (CreateProcessA(NULL, (char*)prg.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)){ WaitForInputIdle(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } } DDEbase b; DDEconversation conv(server.c_str(), topic.c_str()); if (conv.Execute(action.c_str())) bExec = true; } } if (!bExec){ if (proto == "file") url = url.substr(5); ShellExecuteA(NULL, NULL, url.c_str(), NULL, NULL, SW_SHOWNORMAL); } #else ExecParam execParam; if (proto == "mailto"){ execParam.cmd = getMailer(); url = url.substr(proto.length() + 1); }else{ execParam.cmd = getBrowser(); } execParam.arg = url.c_str(); Event eExec(EventExec, &execParam); eExec.process(); #endif return e->param(); } if (e->type() == EventEncodeText){ QString *text = (QString*)(e->param()); *text = parseUrl(*text); return e->param(); } if (e->type() == EventCheckState){ CommandDef *cmd = (CommandDef*)(e->param()); if (cmd->id == CmdMail){ Contact *contact = getContacts()->contact((unsigned long)(cmd->param)); if (contact == NULL) return NULL; QString mails = contact->getEMails(); if (mails.length() == 0) return NULL; int nMails = 0; while (mails.length()){ getToken(mails, ';'); nMails++; } cmd->popup_id = (nMails <= 1) ? 0 : MenuMail; return e->param(); } if (cmd->id == CmdMailList){ Contact *contact = getContacts()->contact((unsigned long)(cmd->param)); if (contact == NULL) return NULL; QString mails = contact->getEMails(); if (mails.length() == 0) return NULL; int nMails = 0; while (mails.length()){ getToken(mails, ';'); nMails++; } CommandDef *cmds = new CommandDef[nMails + 1]; unsigned n = 0; mails = contact->getEMails(); while (mails.length()){ QString mail = getToken(mails, ';', false); mail = getToken(mail, '/'); cmds[n] = *cmd; cmds[n].id = CmdMailList + n; cmds[n].flags = COMMAND_DEFAULT; cmds[n].text_wrk = strdup(mail.utf8()); n++; } memset(&cmds[n], 0, sizeof(CommandDef)); cmd->param = cmds; cmd->flags |= COMMAND_RECURSIVE; return e->param(); } } if (e->type() == EventCommandExec){ CommandDef *cmd = (CommandDef*)(e->param()); if (cmd->id == CmdMail){ QString mail; Contact *contact = getContacts()->contact((unsigned long)(cmd->param)); if (contact) mail = contact->getEMails(); mail = getToken(mail, ';', false); mail = getToken(mail, '/'); if (mail.length()){ string addr = "mailto:"; addr += mail.local8Bit(); Event eMail(EventGoURL, (void*)addr.c_str()); eMail.process(); } return e->param(); } if (cmd->menu_id == MenuMail){ unsigned n = cmd->id - CmdMailList; QString mails; Contact *contact = getContacts()->contact((unsigned long)(cmd->param)); if (contact) mails = contact->getEMails(); while (mails.length()){ QString mail = getToken(mails, ';', false); if (n-- == 0){ mail = getToken(mail, '/'); if (mail.length()){ string addr = "mailto:"; addr += mail.local8Bit(); Event eMail(EventGoURL, (void*)addr.c_str()); eMail.process(); } break; } } return e->param(); } } return NULL; }
void *NavigatePlugin::processEvent(Event *e) { if (e->type() == EventGoURL){ string url = (const char*)(e->param()); string proto; if (url.length() == 0) return NULL; int n = url.find(':'); if (n < 0){ proto = "http"; url = proto + "://" + url; }else{ proto = url.substr(0, n); if ((proto != "http") && (proto != "https") && (proto != "ftp") && (proto != "file") && (proto != "mailto")) return NULL; } #ifdef WIN32 ShellExecuteA(NULL, NULL, url.c_str(), NULL, NULL, SW_SHOWNORMAL); #else ExecParam execParam; if (proto == "mailto"){ execParam.cmd = getMailer(); url = url.substr(proto.length() + 1); }else{ execParam.cmd = getBrowser(); } execParam.arg = url.c_str(); Event eExec(EventExec, &execParam); eExec.process(); #endif return e->param(); } if (e->type() == EventEncodeText){ QString *text = (QString*)(e->param()); *text = parseUrl(*text); return e->param(); } if (e->type() == EventCheckState){ CommandDef *cmd = (CommandDef*)(e->param()); if (cmd->id == CmdMail){ Contact *contact = getContacts()->contact((unsigned long)(cmd->param)); if (contact == NULL) return NULL; QString mails = contact->getEMails(); if (mails.length() == 0) return NULL; int nMails = 0; while (mails.length()){ getToken(mails, ';'); nMails++; } cmd->popup_id = (nMails <= 1) ? 0 : MenuMail; return e->param(); } if (cmd->id == CmdMailList){ Contact *contact = getContacts()->contact((unsigned long)(cmd->param)); if (contact == NULL) return NULL; QString mails = contact->getEMails(); if (mails.length() == 0) return NULL; int nMails = 0; while (mails.length()){ getToken(mails, ';'); nMails++; } CommandDef *cmds = new CommandDef[nMails + 1]; unsigned n = 0; mails = contact->getEMails(); while (mails.length()){ QString mail = getToken(mails, ';', false); mail = getToken(mail, '/'); cmds[n] = *cmd; cmds[n].id = CmdMailList + n; cmds[n].flags = COMMAND_DEFAULT; cmds[n].text_wrk = strdup(mail.utf8()); n++; } memset(&cmds[n], 0, sizeof(CommandDef)); cmd->param = cmds; cmd->flags |= COMMAND_RECURSIVE; return e->param(); } } if (e->type() == EventCommandExec){ CommandDef *cmd = (CommandDef*)(e->param()); if (cmd->id == CmdMail){ QString mail; Contact *contact = getContacts()->contact((unsigned long)(cmd->param)); if (contact) mail = contact->getEMails(); mail = getToken(mail, ';', false); mail = getToken(mail, '/'); if (mail.length()){ string addr = "mailto:"; addr += mail.local8Bit(); Event eMail(EventGoURL, (void*)addr.c_str()); eMail.process(); } return e->param(); } if (cmd->menu_id == MenuMail){ unsigned n = cmd->id - CmdMailList; QString mails; Contact *contact = getContacts()->contact((unsigned long)(cmd->param)); if (contact) mails = contact->getEMails(); while (mails.length()){ QString mail = getToken(mails, ';', false); if (n-- == 0){ mail = getToken(mail, '/'); if (mail.length()){ string addr = "mailto:"; addr += mail.local8Bit(); Event eMail(EventGoURL, (void*)addr.c_str()); eMail.process(); } break; } } return e->param(); } } return NULL; }