bool ForwardPlugin::processEvent(Event *e) { if (e->type() == eEventMessageReceived){ EventMessage *em = static_cast<EventMessage*>(e); Message *msg = em->msg(); if (msg->type() == MessageStatus) return false; QString text = msg->getPlainText(); if (text.isEmpty()) return false; if (msg->type() == MessageSMS){ SMSMessage *sms = static_cast<SMSMessage*>(msg); QString phone = sms->getPhone(); bool bMyPhone; SIM::PropertyHubPtr data = getContacts()->getUserData("forward"); bMyPhone = ContactList::cmpPhone(phone, data->value("Phone").toString()); if (!bMyPhone){ Group *grp; ContactList::GroupIterator it; while ((grp = ++it) != NULL){ data = grp->getUserData("forward", false); if (data && !data->value("Phone").toString().isEmpty()){ bMyPhone = ContactList::cmpPhone(phone, data->value("Phone").toString()); break; } } } if (!bMyPhone){ Contact *contact; ContactList::ContactIterator it; while ((contact = ++it) != NULL){ data = contact->getUserData("forward", false); if (data && !data->value("Phone").toString().isEmpty()) { bMyPhone = ContactList::cmpPhone(phone, data->value("Phone").toString()); break; } } } if (bMyPhone){ int n = text.indexOf(": "); if (n > 0){ QString name = text.left(n); QString msg_text = text.mid(n + 2); Contact *contact; ContactList::ContactIterator it; while ((contact = ++it) != NULL){ if (contact->getName() == name){ Message *msg = new Message(MessageGeneric); msg->setContact(contact->id()); msg->setText(msg_text); void *data; ClientDataIterator it(contact->clientData); while ((data = ++it) != NULL){ if (it.client()->send(msg, data)) break; } if (data == NULL) delete msg; return true; } } } } } Contact *contact = getContacts()->contact(msg->contact()); if (contact == NULL) return false; SIM::PropertyHubPtr data = contact->getUserData("forward"); if (!data || data->value("Key").toString().isEmpty()) return false; CorePlugin *core = GET_CorePlugin(); unsigned status = core->getManualStatus(); if ((status == STATUS_AWAY) || (status == STATUS_NA)){ text = contact->getName() + ": " + text; unsigned flags = MESSAGE_NOHISTORY; if (data->value("Send1st").toBool()) flags |= MESSAGE_1ST_PART; if (data->value("Translit").toBool()) flags |= MESSAGE_TRANSLIT; SMSMessage *m = new SMSMessage; m->setPhone(data->value("Phone").toString()); m->setText(text); m->setFlags(flags); unsigned i; for (i = 0; i < getContacts()->nClients(); i++){ Client *client = getContacts()->getClient(i); if (client->send(m, NULL)) break; } if (i >= getContacts()->nClients()) delete m; } } return false; }
void *ForwardPlugin::processEvent(Event *e) { if (e->type() == EventMessageReceived){ Message *msg = (Message*)(e->param()); if (msg->type() == MessageStatus) return NULL; QString text = msg->getPlainText(); if (text.isEmpty()) return NULL; if (msg->type() == MessageSMS){ SMSMessage *sms = static_cast<SMSMessage*>(msg); QString phone = sms->getPhone(); bool bMyPhone = false; ForwardUserData *data = (ForwardUserData*)(getContacts()->getUserData(user_data_id)); if (data->Phone.ptr) bMyPhone = ContactList::cmpPhone(phone.toUtf8(), data->Phone.ptr); if (!bMyPhone){ Group *grp; ContactList::GroupIterator it; while ((grp = ++it) != NULL){ data = (ForwardUserData*)(grp->userData.getUserData(user_data_id, false)); if (data && data->Phone.ptr){ bMyPhone = ContactList::cmpPhone(phone.toUtf8(), data->Phone.ptr); break; } } } if (!bMyPhone){ Contact *contact; ContactList::ContactIterator it; while ((contact = ++it) != NULL){ data = (ForwardUserData*)(contact->userData.getUserData(user_data_id, false)); if (data && data->Phone.ptr){ bMyPhone = ContactList::cmpPhone(phone.toUtf8(), data->Phone.ptr); break; } } } if (bMyPhone){ int n = text.find(": "); if (n > 0){ QString name = text.left(n); QString msg_text = text.mid(n + 2); Contact *contact; ContactList::ContactIterator it; while ((contact = ++it) != NULL){ if (contact->getName() == name){ Message *msg = new Message(MessageGeneric); msg->setContact(contact->id()); msg->setText(msg_text); void *data; ClientDataIterator it(contact->clientData); while ((data = ++it) != NULL){ if (it.client()->send(msg, data)) break; } if (data == NULL) delete msg; return e->param(); } } } } } Contact *contact = getContacts()->contact(msg->contact()); if (contact == NULL) return NULL; ForwardUserData *data = (ForwardUserData*)(contact->getUserData(user_data_id)); if ((data == NULL) || (data->Phone.ptr == NULL) || (*data->Phone.ptr == 0)) return NULL; unsigned status = core->getManualStatus(); if ((status == STATUS_AWAY) || (status == STATUS_NA)){ text = contact->getName() + ": " + text; unsigned flags = MESSAGE_NOHISTORY; if (data->Send1st.bValue) flags |= MESSAGE_1ST_PART; if (data->Translit.bValue) flags |= MESSAGE_TRANSLIT; SMSMessage *m = new SMSMessage; m->setPhone(QString::fromUtf8(data->Phone.ptr)); m->setText(text); m->setFlags(flags); unsigned i; for (i = 0; i < getContacts()->nClients(); i++){ Client *client = getContacts()->getClient(i); if (client->send(m, NULL)) break; } if (i >= getContacts()->nClients()) delete m; } } return NULL; }
void *MsgSMS::processEvent(Event *e) { if (e->type() == EventTemplateExpanded){ TemplateExpand *t = (TemplateExpand*)(e->param()); if (m_bExpand){ m_edit->m_edit->append(t->tmpl); }else{ m_edit->m_edit->setText(t->tmpl); m_edit->m_edit->moveCursor(QTextEdit::MoveEnd, false); m_bExpand = true; Contact *contact = getContacts()->contact(m_id); if (contact){ SMSUserData *data = (SMSUserData*)(contact->getUserData(CorePlugin::m_plugin->sms_data_id)); if (data->SMSSignatureAfter){ t->tmpl = QString::fromUtf8(data->SMSSignatureAfter); Event eTmpl(EventTemplateExpand, t); eTmpl.process(); } } } return e->param(); } if (e->type() == EventCommandExec){ CommandDef *cmd = (CommandDef*)(e->param()); if ((cmd->id == CmdSend) && (cmd->param == m_edit)){ unsigned flags = 0; if (btnTranslit->isOn()) flags |= MESSAGE_TRANSLIT; QString msgText = m_edit->m_edit->text(); QString phone = lineEdit()->text(); if (!msgText.isEmpty() && !phone.isEmpty()){ SMSMessage *msg = new SMSMessage; msg->setText(msgText); msg->setFlags(flags); msg->setPhone(phone); msg->setContact(m_edit->m_userWnd->id()); if (m_edit->sendMessage(msg)){ Contact *contact = getContacts()->contact(m_edit->m_userWnd->id()); if (contact){ if (contact->getTemporary()){ contact->setName(phone); if (m_panel && m_panel->chkSave->isChecked()){ contact->setTemporary(0); delete m_panel; } Event e(EventContactChanged, contact); e.process(); } SMSUserData *data = (SMSUserData*)(contact->userData.getUserData(CorePlugin::m_plugin->sms_data_id, true)); data->SMSTranslit = btnTranslit->isOn(); QString newPhones; QString phones = contact->getPhones(); QString type = "Private Cellular"; QString src = "-"; while (phones.length()){ QString phoneItem = getToken(phones, ';', false); QString item = phoneItem; QString phoneStr = getToken(phoneItem, '/', false); QString phone = getToken(phoneStr, ','); QString phoneType = getToken(phoneStr, ','); if ((phone != msg->getPhone()) || (phoneStr.toUInt() != CELLULAR)){ if (!newPhones.isEmpty()) newPhones += ";"; newPhones += item; continue; } type = phoneType; src = phoneItem; } phone += ","; phone += type; phone += ","; phone += QString::number(CELLULAR); phone += "/"; phone += src; if (!newPhones.isEmpty()) phone += ";"; newPhones = phone + newPhones; if (contact->setPhones(newPhones)){ Event e(EventContactChanged, contact); e.process(); } } } } return e->param(); } } return NULL; }