bool MsgViewBase::findMessage(Message *msg) { bool bFound = false; for (unsigned i = 0; i < (unsigned)paragraphs(); i++){ QString s = text(i); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; if (bFound){ setCursorPosition(i, 0); moveCursor(MoveBackward, false); ensureCursorVisible(); return true; } string client; if ((messageId(s.left(n), client) != msg->id()) || (client != msg->client())) continue; setCursorPosition(i, 0); ensureCursorVisible(); bFound = true; } if (!bFound) return false; moveCursor(MoveEnd, false); ensureCursorVisible(); return true; }
void KGameChat::returnPressed(const QString& text) { if (!d->mFromPlayer) { qCWarning(GAMES_PRIVATE_KGAME) << ": You must set a player first!"; return; } if (!d->mGame) { qCWarning(GAMES_PRIVATE_KGAME) << ": You must set a game first!"; return; } qCDebug(GAMES_PRIVATE_KGAME) << "from:" << d->mFromPlayer->id() << "==" << d->mFromPlayer->name(); int id = sendingEntry(); if (isToGroupMessage(id)) { // note: there is currently no support for other groups than the players // group! It might be useful to send to other groups, too QString group = d->mFromPlayer->group(); qCDebug(GAMES_PRIVATE_KGAME) << "send to group" << group; int sender = d->mFromPlayer->id(); d->mGame->sendGroupMessage(text, messageId(), sender, group); //TODO //AB: this message is never received!! we need to connect to //KPlayer::networkData!!! //TODO } else { int toPlayer = 0; if (!isSendToAllMessage(id) && isToPlayerMessage(id)) { toPlayer = playerId(id); if (toPlayer == -1) { qCCritical(GAMES_PRIVATE_KGAME) << ": don't know that player " << "- internal ERROR"; } } int receiver = toPlayer; int sender = d->mFromPlayer->id(); d->mGame->sendMessage(text, messageId(), receiver, sender); } }
// FIX by Elmue: Why should we send our computername into all the world? // This is a security risk which does not make sense -> removed computer name from Id messageId messageId::generateId() { std::ostringstream left; left.imbue(std::locale::classic()); left << std::hex << utility::random::getTime(); left << std::hex << utility::random::getProcess(); left << std::hex << utility::random::getNext(); left << std::hex << utility::random::getNext(); return (messageId(left.str(), "")); }
void GxsFeedItem::comments(const QString &title) { #ifdef DEBUG_ITEM std::cerr << "GxsFeedItem::comments()"; std::cerr << std::endl; #endif if (mFeedHolder) { mFeedHolder->openComments(feedId(), groupId(), messageId(), title); } }
void PostedItem::readToggled(bool checked) { if (mInFill) { return; } RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), messageId()); uint32_t token; rsPosted->setMessageReadStatus(token, msgPair, !checked); setReadStatus(false, checked); }
void MsgViewBase::reload() { QString t; vector<Msg_Id> msgs; unsigned i; for (i = 0; i < (unsigned)paragraphs(); i++){ QString s = text(i); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; string client; Msg_Id id; id.id = messageId(s.left(n), client); id.client = client; unsigned nn; for (nn = 0; nn < msgs.size(); nn++){ if ((msgs[nn].id == id.id) && (msgs[nn].client == id.client)) break; } if (nn >= msgs.size()) msgs.push_back(id); } for (i = 0; i < msgs.size(); i++){ Message *msg = History::load(msgs[i].id, msgs[i].client.c_str(), m_id); if (msg == NULL) continue; t += messageText(msg, false); delete msg; } QPoint p = QPoint(0, height()); p = mapToGlobal(p); p = viewport()->mapFromGlobal(p); int x, y; viewportToContents(p.x(), p.y(), x, y); int para; int pos = charAt(QPoint(x, y), ¶); setText(t); if (!CorePlugin::m_plugin->getOwnColors()) setBackground(0); if (pos == -1){ scrollToBottom(); }else{ setCursorPosition(para, pos); ensureCursorVisible(); } }
Event::ApiEvents SendersImpl::senderAdded(int64_t msgId) { auto dao = Dao::ParticipantDao::load(msgId, sessionData_->dbSession_); if (!dao) throw Db::DatabaseIntegrityError("SendersImpl::senderAdded"); senders_.emplace(dao->messageId(), *dao); auto avatarHash = dao->avatarHash(); if (avatarHash) { auto avatar = Dao::AvatarDao::load(*avatarHash, sessionData_->dbSession_); avatars_.emplace(*avatarHash, avatar); } return {{}}; }
void GxsChannelPostItem::readToggled(bool checked) { if (mInFill) { return; } mCloseOnRead = false; RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), messageId()); uint32_t token; rsGxsChannels->setMessageReadStatus(token, msgPair, !checked); setReadStatus(false, checked); }
messageId messageId::generateId() { std::ostringstream left; left.imbue(std::locale::classic()); left << "vmime"; left << '.'; left << std::hex << utility::random::getTime(); left << '.'; left << std::hex << utility::random::getProcess(); left << '.'; left << std::hex << utility::random::getNext(); left << std::hex << utility::random::getNext(); return (messageId(left.str(), platform::getHandler()->getHostName())); }
bool PostedItem::setPost(const RsPostedPost &post, bool doFill) { if (groupId() != post.mMeta.mGroupId || messageId() != post.mMeta.mMsgId) { std::cerr << "PostedItem::setPost() - Wrong id, cannot set post"; std::cerr << std::endl; return false; } mPost = post; if (doFill) { fill(); } return true; }
// ----------------------------------------------------------------------------- // CMmConferenceCallMessHandler::ReceiveMessageL // Called when an ISI message has been received. // ----------------------------------------------------------------------------- // void CMmConferenceCallMessHandler::ReceiveMessageL( const TIsiReceiveC& aIsiMsg ) { TFLOGSTRING("TSY: CMmConferenceCallMessHandler::ReceiveMessageL."); OstTrace0( TRACE_NORMAL, CMMCONFERENCECALLMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmConferenceCallMessHandler::ReceiveMessageL" ); TInt resource( aIsiMsg.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) ); TInt messageId( aIsiMsg.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) ); switch( resource ) { case PN_MODEM_CALL: { switch( messageId ) { case CALL_MODEM_CONTROL_IND: { CallControlInd( aIsiMsg ); break; } case CALL_MODEM_CONTROL_RESP: { CallControlResp( aIsiMsg ); break; } case CALL_MODEM_RELEASE_RESP: { CallReleaseResp( aIsiMsg ); break; } default: { TFLOGSTRING("TSY: CMmConferenceCallMessHandler::ReceiveMessageL. PN_CALL Switch messageID case default."); OstTrace0( TRACE_NORMAL, DUP1_CMMCONFERENCECALLMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmConferenceCallMessHandler::ReceiveMessageL. PN_CALL Switch messageID case default" ); break; } } break; // Case PN_CALL } default: { TFLOGSTRING("TSY: CMmConferenceCallMessHandler::ReceiveMessageL. Switch resource case default."); OstTrace0( TRACE_NORMAL, DUP2_CMMCONFERENCECALLMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmConferenceCallMessHandler::ReceiveMessageL. Switch resource case default" ); break; } } }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void CEmailMailbox::TObserverEventMapper::ConvertParamsL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, REmailMessageIdArray& aMessageIds, TFolderId& aFolderId ) { RArray<TFSMailMsgId>* newEntries( static_cast< RArray<TFSMailMsgId>* >( aParam1 ) ); CleanupClosePushL( *newEntries ); TFSMailMsgId* parentFolder = static_cast<TFSMailMsgId*>( aParam2 ); aFolderId = TFolderId( parentFolder->Id(), aMailbox ); for ( TInt j = 0; j < newEntries->Count(); j++ ) { TFSMailMsgId fsId(( *newEntries )[j] ); TMessageId messageId( fsId.Id(), aFolderId.iId, aMailbox ); aMessageIds.Append( messageId ); } CleanupStack::PopAndDestroy( newEntries ); }
bool GxsChannelPostItem::setPost(const RsGxsChannelPost &post, bool doFill) { if (groupId() != post.mMeta.mGroupId || messageId() != post.mMeta.mMsgId) { std::cerr << "GxsChannelPostItem::setPost() - Wrong id, cannot set post"; std::cerr << std::endl; return false; } mPost = post; if (doFill) { fill(); } updateItem(); return true; }
void GxsFeedItem::fillDisplay(RsGxsUpdateBroadcastBase *updateBroadcastBase, bool complete) { GxsGroupFeedItem::fillDisplay(updateBroadcastBase, complete); std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > msgs; updateBroadcastBase->getAllMsgIds(msgs); if (!msgs.empty()) { std::map<RsGxsGroupId, std::vector<RsGxsMessageId> >::const_iterator mit = msgs.find(groupId()); if (mit != msgs.end()) { const std::vector<RsGxsMessageId> &msgIds = mit->second; if (std::find(msgIds.begin(), msgIds.end(), messageId()) != msgIds.end()) { requestMessage(); } } } }
Message *MsgViewBase::currentMessage() { int para = paragraphAt(m_popupPos); if (para < 0) return NULL; for (; para >= 0; para--){ QString s = text(para); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; string client; unsigned id = messageId(s.left(n), client); Message *msg = History::load(id, client.c_str(), m_id); if (msg) return msg; } return NULL; }
bool ConsoleCommandParserMessageTo::performParsing (const NetworkId & /*userId*/, const StringVector_t & argv, const String_t & /* originalMessage */, String_t & result, const CommandParser *) { if (isCommand( argv [0], "viewLastKnownLocations")) { result += Unicode::narrowToWide(MessageToQueue::getInstance().debugGetLastKnownLocations()); result += getErrorMessage(argv[0], ERR_SUCCESS); } if (isCommand( argv [0], "viewScheduler")) { char temp[256]; snprintf(temp,sizeof(temp),"Current time is %li\n",ServerClock::getInstance().getGameTimeSeconds()); result += Unicode::narrowToWide(temp); result += Unicode::narrowToWide(MessageToQueue::getInstance().debugGetSchedulerData()); result += getErrorMessage(argv[0], ERR_SUCCESS); } if (isCommand( argv [0], "listMessages")) { NetworkId networkId(Unicode::wideToNarrow (argv[1])); ServerObject const * const object = safe_cast<ServerObject const *>(NetworkIdManager::getObjectById(networkId)); if (object) { char temp[256]; snprintf(temp,sizeof(temp),"Current time is %li\n",ServerClock::getInstance().getGameTimeSeconds()); result += Unicode::narrowToWide(temp); result += Unicode::narrowToWide(object->debugGetMessageToList()); result += getErrorMessage(argv[0], ERR_SUCCESS); } else result += getErrorMessage(argv[0],ERR_INVALID_OBJECT); } if (isCommand( argv [0], "cancelMessage")) { NetworkId networkId(Unicode::wideToNarrow (argv[1])); std::string message(Unicode::wideToNarrow (argv[2])); ServerObject * const object = safe_cast<ServerObject *>(NetworkIdManager::getObjectById(networkId)); if (object) { char buffer[255]; snprintf(buffer,sizeof(buffer)-1,"%i messages cancelled\n", object->cancelMessageTo(message)); buffer[sizeof(buffer)-1]='\0'; result += Unicode::narrowToWide(buffer); result += getErrorMessage(argv[0], ERR_SUCCESS); } else result += getErrorMessage(argv[0],ERR_INVALID_OBJECT); } if (isCommand( argv [0], "cancelMessageById")) { NetworkId networkId(Unicode::wideToNarrow (argv[1])); NetworkId messageId(Unicode::wideToNarrow (argv[2])); ServerObject * const object = safe_cast<ServerObject *>(NetworkIdManager::getObjectById(networkId)); if (object) { char buffer[255]; snprintf(buffer,sizeof(buffer)-1,"%i messages cancelled\n", object->cancelMessageToByMessageId(messageId)); buffer[sizeof(buffer)-1]='\0'; result += Unicode::narrowToWide(buffer); result += getErrorMessage(argv[0], ERR_SUCCESS); } else result += getErrorMessage(argv[0],ERR_INVALID_OBJECT); } return true; }
void *MsgViewBase::processEvent(Event *e) { if ((e->type() == EventRewriteMessage) || (e->type() == EventMessageRead)){ Message *msg = (Message*)(e->param()); if (msg->contact() != m_id) return NULL; unsigned i; for (i = 0; i < (unsigned)paragraphs(); i++){ QString s = text(i); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; string client; if ((messageId(s.left(n), client) == msg->id()) && (client == msg->client())) break; } if (i >= (unsigned)paragraphs()) return NULL; Msg_Id id; id.id = msg->id(); id.client = msg->client(); m_updated.push_back(id); QTimer::singleShot(0, this, SLOT(update())); return NULL; } if (e->type() == EventCutHistory){ CutHistory *ch = (CutHistory*)(e->param()); if (ch->contact != m_id) return NULL; bool bDelete = false; vector<unsigned> start_pos; vector<unsigned> end_pos; for (unsigned i = 0; i < (unsigned)paragraphs(); i++){ QString s = text(i); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; string client; unsigned id = messageId(s.left(n), client); if ((client == ch->client) && (id >= ch->from) && (id < ch->from + ch->size)){ if (!bDelete){ bDelete = true; start_pos.push_back(i); } }else{ if (bDelete){ bDelete = false; end_pos.push_back(i); } } } if (bDelete) end_pos.push_back(paragraphs()); if (start_pos.size()){ int paraFrom, indexFrom; int paraTo, indexTo; getSelection(¶From, &indexFrom, ¶To, &indexTo); QPoint p = QPoint(0, 0); p = mapToGlobal(p); p = viewport()->mapFromGlobal(p); int x, y; viewportToContents(p.x(), p.y(), x, y); int para; int pos = charAt(QPoint(x, y), ¶); setReadOnly(false); for (unsigned i = 0; i < start_pos.size(); i++){ setSelection(start_pos[i], 0, end_pos[i], 0); removeSelectedText(); if ((unsigned)pos >= start_pos[i]) pos = end_pos[i] - start_pos[i]; } if ((paraFrom == -1) && (paraTo == -1)){ if (pos == -1){ scrollToBottom(); }else{ setCursorPosition(para, pos); ensureCursorVisible(); } }else{ setSelection(paraFrom, indexFrom, paraTo, indexTo); } setReadOnly(true); repaint(); } m_cut.push_back(*ch); return NULL; } if (e->type() == EventMessageDeleted){ Message *msg = (Message*)(e->param()); if (msg->contact() != m_id) return NULL; for (unsigned i = 0; i < (unsigned)paragraphs(); i++){ QString s = text(i); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; string client; if ((messageId(s.left(n), client) != msg->id()) || (client != msg->client())) continue; string ss; ss = text(i).local8Bit(); log(L_DEBUG, "?: %s", ss.c_str()); unsigned j; for (j = i + 1; j < (unsigned)paragraphs(); j++){ QString s = text(j); ss = text(j).local8Bit(); log(L_DEBUG, ">: %s", ss.c_str()); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; string client; if ((messageId(s.left(n), client) != msg->id()) || (client != msg->client())) break; } int paraFrom, indexFrom; int paraTo, indexTo; getSelection(¶From, &indexFrom, ¶To, &indexTo); unsigned pos = 0xFFFF; if (j == (unsigned)paragraphs()){ j++; pos = 0; } setSelection(i, 0, j - 1, pos); setReadOnly(false); removeSelectedText(); setReadOnly(true); if ((paraFrom == -1) && (paraTo == -1)){ scrollToBottom(); }else{ setSelection(paraFrom, indexFrom, paraTo, indexTo); } break; } return NULL; } if (e->type() == EventHistoryConfig){ unsigned id = (unsigned)(e->param()); if (id && (id != m_id)) return NULL; reload(); } if (e->type() == EventHistoryColors) setColors(); if (e->type() == EventCheckState){ CommandDef *cmd = (CommandDef*)(e->param()); if ((cmd->param != this) || (cmd->menu_id != MenuMsgView)) return NULL; Message *msg; switch (cmd->id){ case CmdCopy: cmd->flags &= ~(COMMAND_DISABLED | COMMAND_CHECKED); if (!hasSelectedText()) cmd->flags |= COMMAND_DISABLED; return e->param(); case CmdMsgOpen: msg = currentMessage(); if (msg){ unsigned type = msg->baseType(); delete msg; CommandDef *def = CorePlugin::m_plugin->messageTypes.find(type); if (def == NULL) return NULL; cmd->icon = def->icon; cmd->flags &= ~COMMAND_CHECKED; return e->param(); } return NULL; case CmdMsgSpecial: msg = currentMessage(); if (msg){ Event eMenu(EventGetMenuDef, (void*)MenuMsgCommand); CommandsDef *cmdsMsg = (CommandsDef*)(eMenu.process()); unsigned n = 0; MessageDef *mdef = NULL; unsigned type = msg->baseType(); const CommandDef *cmdsSpecial = NULL; CommandDef *msgCmd = CorePlugin::m_plugin->messageTypes.find(type); if (msgCmd) mdef = (MessageDef*)(msgCmd->param); if (mdef){ if (msg->getFlags() & MESSAGE_RECEIVED){ cmdsSpecial = mdef->cmdReceived; }else{ cmdsSpecial = mdef->cmdSent; } if (cmdsSpecial) for (const CommandDef *d = cmdsSpecial; d->text; d++) n++; } { CommandsList it(*cmdsMsg, true); while (++it) n++; } if (n == 0) return NULL; n++; CommandDef *cmds = new CommandDef[n]; memset(cmds, 0, sizeof(CommandDef) * n); n = 0; if (cmdsSpecial){ for (const CommandDef *d = cmdsSpecial; d->text; d++){ cmds[n] = *d; cmds[n].id = CmdMsgSpecial + n; n++; } } CommandDef *c; CommandsList it(*cmdsMsg, true); while ((c = ++it) != NULL){ CommandDef cmd = *c; cmd.menu_id = MenuMsgCommand; cmd.param = msg; Event e(EventCheckState, &cmd); if (!e.process()) continue; cmd.flags &= ~COMMAND_CHECK_STATE; cmds[n++] = cmd; } cmd->param = cmds; cmd->flags |= COMMAND_RECURSIVE; delete msg; return e->param(); } return NULL; } } if (e->type() == EventCommandExec){ CommandDef *cmd = (CommandDef*)(e->param()); if ((cmd->param != this) || (cmd->menu_id != MenuMsgView)) return NULL; Message *msg; switch (cmd->id){ case CmdCutHistory: msg = currentMessage(); if (msg){ History::cut(msg, 0, 0); delete msg; return e->param(); } return NULL; case CmdDeleteMessage: msg = currentMessage(); if (msg){ History::del(msg); delete msg; return e->param(); } return NULL; case CmdCopy: copy(); return e->param(); case CmdMsgOpen: msg = currentMessage(); if (msg){ msg->setFlags(msg->getFlags() | MESSAGE_OPEN); Event eOpen(EventOpenMessage, &msg); eOpen.process(); delete msg; return e->param(); } return NULL; default: msg = currentMessage(); if (msg){ if (cmd->id >= CmdMsgSpecial){ MessageDef *mdef = NULL; unsigned type = msg->baseType(); CommandDef *msgCmd = CorePlugin::m_plugin->messageTypes.find(type); if (msgCmd) mdef = (MessageDef*)(msgCmd->param); const CommandDef *cmds = NULL; if (mdef){ if (msg->getFlags() & MESSAGE_RECEIVED){ cmds = mdef->cmdReceived; }else{ cmds = mdef->cmdSent; } } if (cmds){ unsigned n = cmd->id - CmdMsgSpecial; for (const CommandDef *d = cmds; d->text; d++){ if (n-- == 0){ CommandDef cmd = *d; cmd.param = msg; Event eCmd(EventCommandExec, &cmd); eCmd.process(); return e->param(); } } } } Command c; c->id = cmd->id; c->menu_id = MenuMsgCommand; c->param = msg; Event e(EventCommandExec, c); void *res = e.process(); delete msg; return res; } return NULL; } } return NULL; }
void MsgViewBase::update() { if (m_updated.empty()) return; unsigned i; for (i = 0; i < (unsigned)paragraphs(); i++){ QString s = text(i); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; string client; unsigned id = messageId(s.left(n), client); list<Msg_Id>::iterator it; for (it = m_updated.begin(); it != m_updated.end(); ++it){ if (((*it).id == id) && ((*it).client == client)) break; } if (it != m_updated.end()) break; } m_updated.clear(); if (i >= (unsigned)paragraphs()) return; QPoint p = QPoint(0, 0); p = mapToGlobal(p); p = viewport()->mapFromGlobal(p); int x, y; viewportToContents(p.x(), p.y(), x, y); int para; int pos = charAt(QPoint(x, y), ¶); p = QPoint(0, viewport()->height()); p = viewport()->mapToGlobal(p); p = mapFromGlobal(p); if (p.y() + 2 == height()) pos = -1; unsigned start = i; list<Msg_Id> msgs; for (; i < (unsigned)paragraphs(); i++){ QString s = text(i); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; string client; unsigned id = messageId(s.left(n), client); list<Msg_Id>::iterator it; for (it = msgs.begin(); it != msgs.end(); ++it){ if (((*it).id == id) && ((*it).client == client)) break; } if (it != msgs.end()) continue; Msg_Id m_id; m_id.id = id; m_id.client = client; msgs.push_back(m_id); } int paraFrom, indexFrom; int paraTo, indexTo; getSelection(¶From, &indexFrom, ¶To, &indexTo); setReadOnly(false); setSelection(start, 0, paragraphs() - 1, 0xFFFF); removeSelectedText(); setReadOnly(true); QString text; for (list<Msg_Id>::iterator it = msgs.begin(); it != msgs.end(); ++it){ Message *msg = History::load((*it).id, (*it).client.c_str(), m_id); if (msg == NULL) continue; bool bUnread = false; for (list<msg_id>::iterator itu = CorePlugin::m_plugin->unread.begin(); itu != CorePlugin::m_plugin->unread.end(); ++itu){ msg_id &m = (*itu); if ((m.contact == msg->contact()) && (m.id == msg->id()) && (m.client == msg->client())){ bUnread = true; break; } } text += messageText(msg, bUnread); } append(text); if (!CorePlugin::m_plugin->getOwnColors()) setBackground(0); if ((paraFrom != paraTo) || (indexFrom != indexTo)) setSelection(paraFrom, indexFrom, paraTo, indexTo); if (pos == -1){ scrollToBottom(); }else{ setCursorPosition(para, pos); ensureCursorVisible(); } }
void htmlTextPart::generateIn(shared_ptr <bodyPart> /* message */, shared_ptr <bodyPart> parent) const { // Plain text if (!m_plainText->isEmpty()) { // -- Create a new part shared_ptr <bodyPart> part = make_shared <bodyPart>(); parent->getBody()->appendPart(part); // -- Set contents part->getBody()->setContents(m_plainText, mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN), m_charset, encoding::decide(m_plainText, m_charset, encoding::USAGE_TEXT)); } // HTML text // -- Create a new part shared_ptr <bodyPart> htmlPart = make_shared <bodyPart>(); // -- Set contents htmlPart->getBody()->setContents(m_text, mediaType(mediaTypes::TEXT, mediaTypes::TEXT_HTML), m_charset, encoding::decide(m_text, m_charset, encoding::USAGE_TEXT)); // Handle the case we have embedded objects if (!m_objects.empty()) { // Create a "multipart/related" body part shared_ptr <bodyPart> relPart = make_shared <bodyPart>(); parent->getBody()->appendPart(relPart); relPart->getHeader()->ContentType()-> setValue(mediaType(mediaTypes::MULTIPART, mediaTypes::MULTIPART_RELATED)); // Add the HTML part into this part relPart->getBody()->appendPart(htmlPart); // Also add objects into this part for (std::vector <shared_ptr <embeddedObject> >::const_iterator it = m_objects.begin() ; it != m_objects.end() ; ++it) { shared_ptr <bodyPart> objPart = make_shared <bodyPart>(); relPart->getBody()->appendPart(objPart); string id = (*it)->getId(); if (id.substr(0, 4) == "CID:") id = id.substr(4); objPart->getHeader()->ContentType()->setValue((*it)->getType()); objPart->getHeader()->ContentId()->setValue(messageId("<" + id + ">")); objPart->getHeader()->ContentDisposition()->setValue(contentDisposition(contentDispositionTypes::INLINE)); objPart->getHeader()->ContentTransferEncoding()->setValue((*it)->getEncoding()); //encoding(encodingTypes::BASE64); objPart->getBody()->setContents((*it)->getData()->clone()); } } else { // Add the HTML part into the parent part parent->getBody()->appendPart(htmlPart); } }
void MsgViewBase::update() { if (m_updated.empty()) return; unsigned i; for (i = 0; i < (unsigned)paragraphs(); i++){ QString s = text(i); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; string client; unsigned id = messageId(s.left(n), client); list<Msg_Id>::iterator it; for (it = m_updated.begin(); it != m_updated.end(); ++it){ if (((*it).id == id) && ((*it).client == client)) break; } if (it != m_updated.end()) break; } m_updated.clear(); if (i >= (unsigned)paragraphs()) return; int x = contentsX(); int y = contentsY(); viewport()->setUpdatesEnabled(false); unsigned start = i; list<Msg_Id> msgs; for (; i < (unsigned)paragraphs(); i++){ QString s = text(i); int n = s.find(MSG_ANCHOR); if (n < 0) continue; s = s.mid(n + strlen(MSG_ANCHOR)); n = s.find("\""); if (n < 0) continue; string client; unsigned id = messageId(s.left(n), client); list<Msg_Id>::iterator it; for (it = msgs.begin(); it != msgs.end(); ++it){ if (((*it).id == id) && ((*it).client == client)) break; } if (it != msgs.end()) continue; Msg_Id m_id; m_id.id = id; m_id.client = client; msgs.push_back(m_id); } int paraFrom, indexFrom; int paraTo, indexTo; getSelection(¶From, &indexFrom, ¶To, &indexTo); setReadOnly(false); setSelection(start, 0, paragraphs() - 1, 0xFFFF, 0); removeSelectedText(); setReadOnly(true); QString text; for (list<Msg_Id>::iterator it = msgs.begin(); it != msgs.end(); ++it){ Message *msg = History::load((*it).id, (*it).client.c_str(), m_id); if (msg == NULL) continue; bool bUnread = false; for (list<msg_id>::iterator itu = CorePlugin::m_plugin->unread.begin(); itu != CorePlugin::m_plugin->unread.end(); ++itu){ msg_id &m = (*itu); if ((m.contact == msg->contact()) && (m.id == msg->id()) && (m.client == msg->client())){ bUnread = true; break; } } text += messageText(msg, bUnread); } viewport()->setUpdatesEnabled(true); append(text); if (!CorePlugin::m_plugin->getOwnColors()) setBackground(i); if ((paraFrom != paraTo) || (indexFrom != indexTo)) setSelection(paraFrom, indexFrom, paraTo, indexTo, 0); TextShow::sync(); setContentsPos(x, y); viewport()->repaint(); }