/** Default constructor */ PopupChatWindow::PopupChatWindow(bool tabbed, QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) { /* Invoke Qt Designer generated QObject setup routine */ ui.setupUi(this); tabbedWindow = tabbed; firstShow = true; chatDialog = NULL; ui.tabWidget->setVisible(tabbedWindow); if (Settings->getChatFlags() & RS_CHAT_TABBED_WINDOW) { ui.actionDockTab->setVisible(tabbedWindow == false); ui.actionUndockTab->setVisible(tabbedWindow); } else { ui.actionDockTab->setVisible(false); ui.actionUndockTab->setVisible(false); } setAttribute(Qt::WA_DeleteOnClose, true); connect(ui.actionAvatar, SIGNAL(triggered()),this, SLOT(getAvatar())); connect(ui.actionDockTab, SIGNAL(triggered()), this, SLOT(dockTab())); connect(ui.actionUndockTab, SIGNAL(triggered()), this, SLOT(undockTab())); connect(ui.tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(tabCloseRequested(int))); connect(ui.tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tabCurrentChanged(int))); setWindowIcon(QIcon(IMAGE_WINDOW)); }
void SeasideListItemLarge::setThumbnail(const QString &thumbnail) { QString str = thumbnail; if (str.isEmpty()) str= "icon-m-content-avatar-placeholder"; if(priv->image) priv->image->setPixmap(getAvatar(str)); }
QVariant ContactsModel::data(const QModelIndex& index, int role) const { qWarning() << "Getting contacts data for index " << index.row() << " in role " << role; const KABC::Addressee& contact = m_contacts[index.row()]; switch (role) { case Qt::UserRole: { return index.row(); } case Qt::UserRole+1: { return getName(contact); } case Qt::UserRole+2: { KABC::PhoneNumber::List numbers = contact.phoneNumbers(); if (numbers.empty()) return "-"; return numbers.first().number(); } case Qt::UserRole+3: { QStringList mails = contact.emails(); if (mails.empty()) return "-"; return mails.first(); } case Qt::UserRole+4: { QString skypeUid = contact.custom("KADDRESSBOOK", "skype"); if (skypeUid.isEmpty()) return "-"; return skypeUid; } case Qt::UserRole+5: { return getAvatar(contact); } case Qt::UserRole+6: { return true; } case Qt::UserRole+7: { return contact.uid(); } } if (role == Qt::DisplayRole) return m_contacts[index.row()].formattedName(); return QVariant(); }
/** Default constructor */ PopupChatWindow::PopupChatWindow(bool tabbed, QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) { /* Invoke Qt Designer generated QObject setup routine */ ui.setupUi(this); tabbedWindow = tabbed; firstShow = true; chatDialog = NULL; mEmptyIcon = NULL; ui.tabWidget->setVisible(tabbedWindow); if (Settings->getChatFlags() & RS_CHAT_TABBED_WINDOW) { ui.actionDockTab->setVisible(tabbedWindow == false); ui.actionUndockTab->setVisible(tabbedWindow); } else { ui.actionDockTab->setVisible(false); ui.actionUndockTab->setVisible(false); } setAttribute(Qt::WA_DeleteOnClose, true); connect(ui.actionAvatar, SIGNAL(triggered()),this, SLOT(getAvatar())); connect(ui.actionColor, SIGNAL(triggered()), this, SLOT(setStyle())); connect(ui.actionDockTab, SIGNAL(triggered()), this, SLOT(dockTab())); connect(ui.actionUndockTab, SIGNAL(triggered()), this, SLOT(undockTab())); connect(ui.actionSetOnTop, SIGNAL(toggled(bool)), this, SLOT(setOnTop())); connect(ui.tabWidget, SIGNAL(tabChanged(ChatDialog*)), this, SLOT(tabChanged(ChatDialog*))); connect(ui.tabWidget, SIGNAL(tabClosed(ChatDialog*)), this, SLOT(tabClosed(ChatDialog*))); connect(rApp, SIGNAL(blink(bool)), this, SLOT(blink(bool))); if (tabbedWindow) { /* signal toggled is called */ ui.actionSetOnTop->setChecked(Settings->valueFromGroup("ChatWindow", "OnTop", false).toBool()); } setWindowIcon(QIcon(IMAGE_WINDOW)); }
void ImageView::setImage(const URL & filename) { setViewImageJNI(getAvatar(), filename.c_str()); }
void CWizUserInfoWidgetBase::paintEvent(QPaintEvent *event) { Q_UNUSED(event); int nAvatarWidth = 32; int nArrawWidth = 10; int nMargin = 4; QStyleOptionToolButton opt; initStyleOption(&opt); QPainter p(this); p.setClipRect(opt.rect); // draw user avatar QRect rectIcon = opt.rect; rectIcon.setLeft(rectIcon.left()); rectIcon.setRight(rectIcon.left() + nAvatarWidth); QPixmap pixmap = getAvatar(nAvatarWidth, nAvatarWidth); if (!pixmap.isNull()) { p.drawPixmap(rectIcon, pixmap); } //if (!opt.icon.isNull()) { // opt.icon.paint(&p, rectIcon); //} // draw vip indicator QRect rectVip = rectIcon; rectVip.setLeft(rectVip.right() + nMargin); rectVip.setRight(rectVip.left() + fontMetrics().width(opt.text)); //rectVip.setBottom(rectVip.top() + rectVip.height()/2); //if (!m_iconVipIndicator.isNull()) { // m_iconVipIndicator.paint(&p, rectVip, Qt::AlignLeft|Qt::AlignTop); //} // draw display name QRect rectText = rectVip; //rectText.setBottom(rectText.bottom() + rectVip.height()); //rectText.setTop(rectText.bottom() - rectVip.height()); if (!opt.text.isEmpty()) { if (opt.state & QStyle::State_MouseOver) { QFont font = p.font(); font.setUnderline(true); p.setFont(font); } p.setPen("#787878"); // FIXME p.drawText(rectText, Qt::AlignLeft|Qt::AlignVCenter, opt.text); } // draw arraw QRect rectArrow = rectText; rectArrow.setLeft(rectArrow.right() + nMargin); rectArrow.setRight(rectArrow.left() + nArrawWidth); QIcon arrow = getArrow(); if (!arrow.isNull()) { arrow.paint(&p, rectArrow, Qt::AlignVCenter, QIcon::Normal); } }
// Returns TRUE if all of the data for the textures that this layerset depends on have arrived. BOOL LLViewerTexLayerSet::isLocalTextureDataFinal() const { if (!mAvatarAppearance->isSelf()) return FALSE; return getAvatar()->isLocalTextureDataFinal(this); }
/** Default constructor */ PopupChatDialog::PopupChatDialog(std::string id, std::string name, QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags), dialogId(id), dialogName(name), lastChatTime(0), lastChatName("") { /* Invoke Qt Designer generated QObject setup routine */ ui.setupUi(this); RshareSettings config; config.loadWidgetInformation(this); loadEmoticons(); last_status_send_time = 0 ; styleHtm = ":/qss/chat/default.htm"; /* Hide Avatar frame */ showAvatarFrame(false); connect(ui.avatarFrameButton, SIGNAL(toggled(bool)), this, SLOT(showAvatarFrame(bool))); connect(ui.actionAvatar, SIGNAL(triggered()),this, SLOT(getAvatar())); connect(ui.chattextEdit, SIGNAL(textChanged ( ) ), this, SLOT(checkChat( ) )); connect(ui.sendButton, SIGNAL(clicked( ) ), this, SLOT(sendChat( ) )); connect(ui.addFileButton, SIGNAL(clicked() ), this , SLOT(addExtraFile())); connect(ui.textboldButton, SIGNAL(clicked()), this, SLOT(setFont())); connect(ui.textunderlineButton, SIGNAL(clicked()), this, SLOT(setFont())); connect(ui.textitalicButton, SIGNAL(clicked()), this, SLOT(setFont())); connect(ui.fontButton, SIGNAL(clicked()), this, SLOT(getFont())); connect(ui.colorButton, SIGNAL(clicked()), this, SLOT(setColor())); connect(ui.emoteiconButton, SIGNAL(clicked()), this, SLOT(smileyWidget())); connect(ui.styleButton, SIGNAL(clicked()), SLOT(changeStyle())); connect(ui.textBrowser, SIGNAL(anchorClicked(const QUrl &)), SLOT(anchorClicked(const QUrl &))); // Create the status bar resetStatusBar() ; ui.textBrowser->setOpenExternalLinks ( false ); ui.textBrowser->setOpenLinks ( false ); QString title = QString::fromStdString(name) + " :" + tr(" RetroShare - Encrypted Chat") ; setWindowTitle(title); //set the default avatar //ui.avatarlabel->setPixmap(QPixmap(":/images/retrosharelogo1.png")); setWindowIcon(QIcon(QString(":/images/rstray3.png"))); ui.textboldButton->setIcon(QIcon(QString(":/images/edit-bold.png"))); ui.textunderlineButton->setIcon(QIcon(QString(":/images/edit-underline.png"))); ui.textitalicButton->setIcon(QIcon(QString(":/images/edit-italic.png"))); ui.fontButton->setIcon(QIcon(QString(":/images/fonts.png"))); ui.emoteiconButton->setIcon(QIcon(QString(":/images/emoticons/kopete/kopete020.png"))); ui.styleButton->setIcon(QIcon(QString(":/images/looknfeel.png"))); ui.textboldButton->setCheckable(true); ui.textunderlineButton->setCheckable(true); ui.textitalicButton->setCheckable(true); setAcceptDrops(true); ui.chattextEdit->setAcceptDrops(false); /*Disabled style Button when will switch chat style RetroShare will crash need to be fix */ //ui.styleButton->setEnabled(false); /*QMenu * fontmenu = new QMenu(); fontmenu->addAction(ui.actionBold); fontmenu->addAction(ui.actionUnderline); fontmenu->addAction(ui.actionItalic); fontmenu->addAction(ui.actionStrike); ui.fontButton->setMenu(fontmenu);*/ mCurrentColor = Qt::black; mCurrentFont = QFont("Comic Sans MS", 10); colorChanged(mCurrentColor); setFont(); updateAvatar() ; updatePeerAvatar(id) ; }
void TemplateHTMLBuilder::appendEventTemplate(IEView *view, IEVIEWEVENT *event, ProtocolSettings* protoSettings) { DBVARIANT dbv; CONTACTINFO ci; HANDLE hRealContact; char *szRealProto = NULL; char tempBase[1024]; char *szBase=NULL; char tempStr[1024]; char *szNoAvatar=NULL; char szCID[32]; char *szName = NULL; char *szNameIn = NULL; char *szNameOut = NULL; char *szUIN = NULL; char *szUINIn = NULL; char *szUINOut = NULL; char *szNickIn = NULL; char *szNickOut = NULL; char *szStatusMsg = NULL; char *szAvatar = NULL; char *szAvatarIn = NULL; char *szAvatarOut = NULL; char *szText = NULL; char *szProto = NULL; char *szFileDesc = NULL; const char *tmpltName[2]; bool isGrouping = false; // DWORD today = (DWORD)time(NULL); // today = today - today % 86400; if (protoSettings == NULL) { return; } hRealContact = getRealContact(event->hContact); szRealProto = getProto(hRealContact); szProto = getProto(event->pszProto, event->hContact); tempBase[0]='\0'; TemplateMap *tmpm = getTemplateMap(protoSettings); if (tmpm!=NULL) { strcpy(tempBase, "file://"); strcat(tempBase, tmpm->getFilename()); char* pathrun = tempBase + strlen(tempBase); while ((*pathrun != '\\' && *pathrun != '/') && (pathrun > tempBase)) pathrun--; pathrun++; *pathrun = '\0'; isGrouping = tmpm->isGrouping(); } szBase = Utils::UTF8Encode(tempBase); if (event->hContact != NULL) { getUINs(event->hContact, szUINIn, szUINOut); } if (event->hContact != NULL) { szNameOut = getEncodedContactName(NULL, szProto, szRealProto); szNameIn = getEncodedContactName(event->hContact, szProto, szRealProto); } else { szNameOut = Utils::dupString(" "); szNameIn = Utils::dupString(" "); } sprintf(tempStr, "%snoavatar.jpg", tempBase); szNoAvatar = Utils::UTF8Encode(tempStr); if(event->hContact != NULL) { szAvatarIn = getAvatar(event->hContact, szRealProto); } if (szAvatarIn == NULL) { szAvatarIn = Utils::dupString(szNoAvatar); } szAvatarOut = getAvatar(NULL, szRealProto); if (szAvatarOut == NULL) { szAvatarOut = Utils::dupString(szNoAvatar); } if(event->hContact != NULL) { if (!DBGetContactSetting(event->hContact, "CList", "StatusMsg",&dbv)) { if (strlen(dbv.pszVal) > 0) { szStatusMsg = Utils::UTF8Encode(dbv.pszVal); } DBFreeVariant(&dbv); } } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = event->hContact; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNickIn = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = NULL; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNickOut = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); } IEVIEWEVENTDATA* eventData = event->eventData; for (int eventIdx = 0; eventData!=NULL && (eventIdx < event->count || event->count==-1); eventData = eventData->next, eventIdx++) { int outputSize; char *output; output = NULL; if (eventData->iType == IEED_EVENT_MESSAGE || eventData->iType == IEED_EVENT_STATUSCHANGE || eventData->iType == IEED_EVENT_FILE || eventData->iType == IEED_EVENT_URL || eventData->iType == IEED_EVENT_SYSTEM) { int isSent = (eventData->dwFlags & IEEDF_SENT); int isRTL = (eventData->dwFlags & IEEDF_RTL) && tmpm->isRTL(); int isHistory = (eventData->time < (DWORD)getStartedTime() && (eventData->dwFlags & IEEDF_READ || eventData->dwFlags & IEEDF_SENT)); int isGroupBreak = TRUE; if ((getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES) && eventData->dwFlags == LOWORD(getLastEventType()) && eventData->iType == IEED_EVENT_MESSAGE && HIWORD(getLastEventType()) == IEED_EVENT_MESSAGE && (isSameDate(eventData->time, getLastEventTime())) // && ((eventData->time < today) == (getLastEventTime() < today)) && (((eventData->time < (DWORD)startedTime) == (getLastEventTime() < (DWORD)startedTime)) || !(eventData->dwFlags & IEEDF_READ))) { isGroupBreak = FALSE; } if (isSent) { szAvatar = szAvatarOut; szUIN = szUINOut; sprintf(szCID, "%d", 0); } else { szAvatar = szAvatarIn; szUIN = szUINIn; sprintf(szCID, "%d", (int)event->hContact); } tmpltName[0] = groupTemplate; tmpltName[1] = NULL; groupTemplate = NULL; szName = NULL; szText = NULL; szFileDesc = NULL; if (event->eventData->dwFlags & IEEDF_UNICODE_NICK) { szName = encodeUTF8(event->hContact, szRealProto, eventData->pszNickW, ENF_NAMESMILEYS, true); } else { szName = encodeUTF8(event->hContact, szRealProto, eventData->pszNick, ENF_NAMESMILEYS, true); } if (eventData->dwFlags & IEEDF_UNICODE_TEXT) { szText = encodeUTF8(event->hContact, szRealProto, eventData->pszTextW, eventData->iType == IEED_EVENT_MESSAGE ? ENF_ALL : 0, isSent); } else { szText = encodeUTF8(event->hContact, szRealProto, eventData->pszText, event->codepage, eventData->iType == IEED_EVENT_MESSAGE ? ENF_ALL : 0, isSent); } if (eventData->dwFlags & IEEDF_UNICODE_TEXT2) { szFileDesc = encodeUTF8(event->hContact, szRealProto, eventData->pszText2W, 0, isSent); } else { szFileDesc = encodeUTF8(event->hContact, szRealProto, eventData->pszText2, event->codepage, 0, isSent); } if ((eventData->iType == IEED_EVENT_MESSAGE)) { if (!isRTL) { if (isGrouping && (getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES)) { if (isGroupBreak) { tmpltName[1] = isHistory ? isSent ? "hMessageOutGroupStart" : "hMessageInGroupStart" : isSent ? "MessageOutGroupStart" : "MessageInGroupStart"; } else { tmpltName[0] = isHistory ? isSent ? "hMessageOutGroupInner" : "hMessageInGroupInner" : isSent ? "MessageOutGroupInner" : "MessageInGroupInner"; } groupTemplate = isHistory ? isSent ? "hMessageOutGroupEnd" : "hMessageInGroupEnd" : isSent ? "MessageOutGroupEnd" : "MessageInGroupEnd"; } else { tmpltName[1] = isHistory ? isSent ? "hMessageOut" : "hMessageIn" : isSent ? "MessageOut" : "MessageIn"; } } else { if (isGrouping && (getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES)) { if (isGroupBreak) { tmpltName[1] = isHistory ? isSent ? "hMessageOutGroupStartRTL" : "hMessageInGroupStartRTL" : isSent ? "MessageOutGroupStartRTL" : "MessageInGroupStartRTL"; } else { tmpltName[0] = isHistory ? isSent ? "hMessageOutGroupInnerRTL" : "hMessageInGroupInnerRTL" : isSent ? "MessageOutGroupInnerRTL" : "MessageInGroupInnerRTL"; } groupTemplate = isHistory ? isSent ? "hMessageOutGroupEndRTL" : "hMessageInGroupEndRTL" : isSent ? "MessageOutGroupEndRTL" : "MessageInGroupEndRTL"; } else { tmpltName[1] = isHistory ? isSent ? "hMessageOutRTL" : "hMessageInRTL" : isSent ? "MessageOutRTL" : "MessageInRTL"; } } } else if (eventData->iType == IEED_EVENT_FILE) { tmpltName[1] = isHistory ? isSent ? "hFileOut" : "hFileIn" : isSent ? "FileOut" : "FileIn"; Template *tmplt = tmpm->getTemplate(tmpltName[1]); if (tmplt == NULL) { tmpltName[1] = isHistory ? "hFile" : "File"; } } else if (eventData->iType == IEED_EVENT_URL) { tmpltName[1] = isHistory ? isSent ? "hURLOut" : "hURLIn" : isSent ? "URLOut" : "URLIn"; Template *tmplt = tmpm->getTemplate(tmpltName[1]); if (tmplt == NULL) { tmpltName[1] = isHistory ? "hURL" : "URL"; } } else if (eventData->iType == IEED_EVENT_STATUSCHANGE || (eventData->iType == IEED_EVENT_SYSTEM)) { tmpltName[1] = isHistory ? "hStatus" : "Status"; } /* template-specific formatting */ for (int i=0;i<2;i++) { Template *tmplt; if (tmpltName[i] == NULL) continue; tmplt = tmpm->getTemplate(tmpltName[i]); if (tmplt == NULL) continue; for (Token *token = tmplt->getTokens();token!=NULL;token=token->getNext()) { const char *tokenVal; tokenVal = NULL; switch (token->getType()) { case Token::PLAIN: tokenVal = token->getText(); break; case Token::NAME: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { tokenVal = szName; } else { tokenVal = " "; } break; case Token::TIME: if (getFlags(protoSettings) & Options::LOG_SHOW_TIME) { tokenVal = timestampToString(getFlags(protoSettings), eventData->time, 1); } else { tokenVal = " "; } break; case Token::DATE: if (getFlags(protoSettings) & Options::LOG_SHOW_DATE) { tokenVal = timestampToString(getFlags(protoSettings), eventData->time, 0); } else { tokenVal = " "; } break; case Token::TEXT: tokenVal = szText; break; case Token::AVATAR: tokenVal = szAvatar; break; case Token::CID: tokenVal = szCID; break; case Token::BASE: tokenVal = szBase; break; case Token::NAMEIN: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { if (event->hContact != NULL) { tokenVal = szNameIn; } else { tokenVal = szName; } } else { tokenVal = " "; } break; case Token::NAMEOUT: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { if (event->hContact != NULL) { tokenVal = szNameOut; } else { tokenVal = szName; } } else { tokenVal = " "; } break; case Token::AVATARIN: tokenVal = szAvatarIn; break; case Token::AVATAROUT: tokenVal = szAvatarOut; break; case Token::PROTO: tokenVal = szRealProto; break; case Token::UIN: tokenVal = szUIN; break; case Token::UININ: tokenVal = szUINIn; break; case Token::UINOUT: tokenVal = szUINOut; break; case Token::STATUSMSG: tokenVal = szStatusMsg; break; case Token::NICKIN: tokenVal = szNickIn; break; case Token::NICKOUT: tokenVal = szNickOut; break; case Token::FILEDESC: tokenVal = szFileDesc; break; } if (tokenVal != NULL) { if (token->getEscape()) { char *escapedToken = Utils::escapeString(tokenVal); Utils::appendText(&output, &outputSize, "%s", escapedToken); delete escapedToken; } else { Utils::appendText(&output, &outputSize, "%s", tokenVal); } } } } setLastEventType(MAKELONG(eventData->dwFlags, eventData->iType)); setLastEventTime(eventData->time); if (szName!=NULL) delete szName; if (szText!=NULL) delete szText; if (szFileDesc!=NULL) delete szFileDesc; } if (output != NULL) { view->write(output); free(output); } } if (szBase!=NULL) delete szBase; if (szRealProto!=NULL) delete szRealProto; if (szProto!=NULL) delete szProto; if (szUINIn!=NULL) delete szUINIn; if (szUINOut!=NULL) delete szUINOut; if (szNoAvatar!=NULL) delete szNoAvatar; if (szAvatarIn!=NULL) delete szAvatarIn; if (szAvatarOut!=NULL) delete szAvatarOut; if (szNameIn!=NULL) delete szNameIn; if (szNameOut!=NULL) delete szNameOut; if (szNickIn!=NULL) delete szNickIn; if (szNickOut!=NULL) delete szNickOut; if (szStatusMsg!=NULL) delete szStatusMsg; view->documentClose(); }
void TemplateHTMLBuilder::buildHeadTemplate(IEView *view, IEVIEWEVENT *event, ProtocolSettings *protoSettings) { DBVARIANT dbv; CONTACTINFO ci; char tempBase[1024]; char tempStr[1024]; HANDLE hRealContact; char *szRealProto = NULL; char *szBase=NULL; char *szNoAvatar=NULL; char *szProto = NULL; char *szNameIn = NULL; char *szNameOut = NULL; char *szAvatarIn = NULL; char *szAvatarOut = NULL; char *szUINIn = NULL; char *szUINOut = NULL; char *szNickIn = NULL; char *szNickOut = NULL; char *szStatusMsg = NULL; int outputSize; char *output; output = NULL; hRealContact = getRealContact(event->hContact); szRealProto = getProto(hRealContact); szProto = getProto(event->pszProto, event->hContact); tempBase[0]='\0'; if (protoSettings == NULL) return; TemplateMap *tmpm = getTemplateMap(protoSettings); if (tmpm==NULL) return; strcpy(tempBase, "file://"); strcat(tempBase, tmpm->getFilename()); char* pathrun = tempBase + strlen(tempBase); while ((*pathrun != '\\' && *pathrun != '/') && (pathrun > tempBase)) pathrun--; pathrun++; *pathrun = '\0'; szBase = Utils::UTF8Encode(tempBase); getUINs(event->hContact, szUINIn, szUINOut); if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { szNameOut = getEncodedContactName(NULL, szProto, szRealProto); szNameIn = getEncodedContactName(event->hContact, szProto, szRealProto); } else { szNameOut = Utils::dupString(" "); szNameIn = Utils::dupString(" "); } sprintf(tempStr, "%snoavatar.jpg", tempBase); szNoAvatar = Utils::UTF8Encode(tempStr); szAvatarIn = getAvatar(event->hContact, szRealProto); if (szAvatarIn == NULL) { szAvatarIn = Utils::dupString(szNoAvatar); } szAvatarOut = getAvatar(NULL, szRealProto); if (szAvatarOut == NULL) { szAvatarOut = Utils::dupString(szNoAvatar); } if (!DBGetContactSetting(event->hContact, "CList", "StatusMsg",&dbv)) { if (strlen(dbv.pszVal) > 0) { szStatusMsg = Utils::UTF8Encode(dbv.pszVal); } DBFreeVariant(&dbv); } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = event->hContact; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNickIn = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = NULL; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNickOut = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); } Template *tmplt = tmpm->getTemplate(((event->dwFlags & IEEF_RTL) && tmpm->isRTL()) ? "HTMLStartRTL" : "HTMLStart"); if (tmplt == NULL) { tmplt = tmpm->getTemplate("HTMLStart"); } if (tmplt!=NULL) { for (Token *token = tmplt->getTokens();token!=NULL;token=token->getNext()) { const char *tokenVal; tokenVal = NULL; switch (token->getType()) { case Token::PLAIN: tokenVal = token->getText(); break; case Token::BASE: tokenVal = szBase; break; case Token::NAMEIN: tokenVal = szNameIn; break; case Token::NAMEOUT: tokenVal = szNameOut; break; case Token::AVATARIN: tokenVal = szAvatarIn; break; case Token::AVATAROUT: tokenVal = szAvatarOut; break; case Token::PROTO: tokenVal = szRealProto; break; case Token::UININ: tokenVal = szUINIn; break; case Token::UINOUT: tokenVal = szUINOut; break; case Token::STATUSMSG: tokenVal = szStatusMsg; break; case Token::NICKIN: tokenVal = szNickIn; break; case Token::NICKOUT: tokenVal = szNickOut; break; } if (tokenVal != NULL) { if (token->getEscape()) { char *escapedToken = Utils::escapeString(tokenVal); Utils::appendText(&output, &outputSize, "%s", escapedToken); delete escapedToken; } else { Utils::appendText(&output, &outputSize, "%s", tokenVal); } } } } if (output != NULL) { view->write(output); free(output); } if (szBase!=NULL) delete szBase; if (szRealProto!=NULL) delete szRealProto; if (szProto!=NULL) delete szProto; if (szUINIn!=NULL) delete szUINIn; if (szUINOut!=NULL) delete szUINOut; if (szNoAvatar!=NULL) delete szNoAvatar; if (szAvatarIn!=NULL) delete szAvatarIn; if (szAvatarOut!=NULL) delete szAvatarOut; if (szNameIn!=NULL) delete szNameIn; if (szNameOut!=NULL) delete szNameOut; if (szNickIn!=NULL) delete szNickIn; if (szNickOut!=NULL) delete szNickOut; if (szStatusMsg!=NULL) delete szStatusMsg; //view->scrollToBottom(); groupTemplate = NULL; iLastEventType = -1; }
/** Constructor */ FriendsDialog::FriendsDialog(QWidget *parent) : RsAutoUpdatePage(1500,parent) { /* Invoke the Qt Designer generated object setup routine */ ui.setupUi(this); if (instance == NULL) { instance = this; } last_status_send_time = 0 ; inChatCharFormatChanged = false; connect( ui.mypersonalstatusLabel, SIGNAL(clicked()), SLOT(statusmessage())); connect( ui.actionSet_your_Avatar, SIGNAL(triggered()), this, SLOT(getAvatar())); connect( ui.actionSet_your_Personal_Message, SIGNAL(triggered()), this, SLOT(statusmessage())); connect( ui.addfileButton, SIGNAL(clicked() ), this , SLOT(addExtraFile())); connect( ui.actionAdd_Friend, SIGNAL(triggered()), this, SLOT(addFriend())); connect( ui.actionFriendRecommendations, SIGNAL(triggered()), this, SLOT(recommendFriends())); connect( ui.actionServicePermission, SIGNAL(triggered()), this, SLOT(servicePermission())); connect( ui.filter_lineEdit, SIGNAL(textChanged(QString)), ui.friendList, SLOT(filterItems(QString))); ui.filter_lineEdit->setPlaceholderText(tr("Search")) ; ui.filter_lineEdit->showFilterIcon(); ui.avatar->setFrameType(AvatarWidget::STATUS_FRAME); ui.avatar->setOwnId(); ui.tabWidget->setTabPosition(QTabWidget::North); ui.tabWidget->addTab(networkView = new NetworkView(),QIcon(IMAGE_NETWORK2), tr("Local network")); ui.tabWidget->addTab(networkDialog = new NetworkDialog(),QIcon(IMAGE_PEERS), tr("Known people")); //ui.tabWidget->addTab(new ProfileWidget(), tr("Profile")); //newsFeed = new NewsFeed(); //int newsFeedTabIndex = ui.tabWidget->insertTab(0, newsFeed, tr("News Feed")); //ui.tabWidget->setCurrentIndex(newsFeedTabIndex); ui.tabWidget->hideCloseButton(0); ui.tabWidget->hideCloseButton(1); ui.tabWidget->hideCloseButton(2); ui.tabWidget->hideCloseButton(3); /* get the current text and text color of the tab bar */ //newsFeedTabColor = ui.tabWidget->tabBar()->tabTextColor(newsFeedTabIndex); //newsFeedText = ui.tabWidget->tabBar()->tabText(newsFeedTabIndex); //connect(newsFeed, SIGNAL(newsFeedChanged(int)), this, SLOT(newsFeedChanged(int))); connect(ui.Sendbtn, SIGNAL(clicked()), this, SLOT(sendMsg())); connect(ui.emoticonBtn, SIGNAL(clicked()), this, SLOT(smileyWidgetgroupchat())); connect(ui.msgText,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(contextMenuMsgText(QPoint))); connect(ui.lineEdit,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(contextMenu(QPoint))); // reset text and color after removing all characters from the QTextEdit and after calling QTextEdit::clear connect(ui.lineEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)), this, SLOT(chatCharFormatChanged())); connect(ui.textboldChatButton, SIGNAL(clicked()), this, SLOT(setFont())); connect(ui.textunderlineChatButton, SIGNAL(clicked()), this, SLOT(setFont())); connect(ui.textitalicChatButton, SIGNAL(clicked()), this, SLOT(setFont())); connect(ui.fontsButton, SIGNAL(clicked()), this, SLOT(chooseFont())); connect(ui.colorChatButton, SIGNAL(clicked()), this, SLOT(chooseColor())); connect(ui.actionSave_History, SIGNAL(triggered()), this, SLOT(fileSaveAs())); connect(ui.hashBox, SIGNAL(fileHashingFinished(QList<HashedFile>)), this, SLOT(fileHashingFinished(QList<HashedFile>))); ui.fontsButton->setIcon(QIcon(QString(":/images/fonts.png"))); mCurrentColor = Qt::black; mCurrentFont.fromString(Settings->getChatScreenFont()); colorChanged(); fontChanged(); setColorAndFont(); style.setStyleFromSettings(ChatStyle::TYPE_PUBLIC); setChatInfo(tr("Welcome to RetroShare's group chat."), QString::fromUtf8("blue")); if (rsHistory->getEnable(true)) { int messageCount = Settings->getPublicChatHistoryCount(); if (messageCount > 0) { std::list<HistoryMsg> historyMsgs; rsHistory->getMessages("", historyMsgs, messageCount); std::list<HistoryMsg>::iterator it; for (it = historyMsgs.begin(); it != historyMsgs.end(); it++) { addChatMsg(it->incoming, true, QString::fromUtf8(it->peerName.c_str()), QDateTime::fromTime_t(it->sendTime), QDateTime::fromTime_t(it->recvTime), QString::fromUtf8(it->message.c_str())); } } } QMenu *menu = new QMenu(); menu->addAction(ui.actionClear_Chat_History); menu->addAction(ui.actionDelete_Chat_History); menu->addAction(ui.actionSave_History); menu->addAction(ui.actionMessageHistory); ui.menuButton->setMenu(menu); menu = new QMenu(); menu->addAction(ui.actionAdd_Friend); menu->addAction(ui.actionAdd_Group); menu->addAction(ui.actionCreate_new_Chat_lobby); menu->addAction(ui.actionFriendRecommendations); menu->addAction(ui.actionServicePermission); menu->addSeparator(); menu->addAction(ui.actionSet_your_Avatar); menu->addAction(ui.actionSet_your_Personal_Message); ui.menutoolButton->setMenu(menu); setAcceptDrops(true); ui.lineEdit->setAcceptDrops(false); ui.hashBox->setDropWidget(this); ui.hashBox->setAutoHide(true); /* Set initial size the splitter */ QList<int> sizes; sizes << height() << 100; // Qt calculates the right sizes ui.splitter_2->setSizes(sizes); loadmypersonalstatus(); ui.displayButton->setMenu(ui.friendList->createDisplayMenu()); // load settings RsAutoUpdatePage::lockAllEvents(); ui.friendList->setShowStatusColumn(true); ui.friendList->setShowLastContactColumn(false); ui.friendList->setShowAvatarColumn(false); ui.friendList->setRootIsDecorated(true); ui.friendList->setShowGroups(true); processSettings(true); RsAutoUpdatePage::unlockAllEvents(); ui.lineEdit->installEventFilter(this); // add self nick and Avatar to Friends. RsPeerDetails pd ; if (rsPeers->getPeerDetails(rsPeers->getOwnId(),pd)) { ui.nicknameLabel->setText(PeerDefs::nameWithLocation(pd)); } /* Hide platform specific features */ #ifdef Q_WS_WIN #endif }
void TemplateHTMLBuilder::appendEventTemplate(IEView *view, IEVIEWEVENT *event, ProtocolSettings* protoSettings) { DBVARIANT dbv; CONTACTINFO ci; char *szRealProto = NULL; char tempBase[1024]; char *szBase=NULL; char tempStr[1024]; char *szNoAvatar=NULL; char szCID[32]; char *szName = NULL; char *szNameIn = NULL; char *szNameOut = NULL; char *szUIN = NULL; char *szUINIn = NULL; char *szUINOut = NULL; char *szNickIn = NULL; char *szNickOut = NULL; char *szStatusMsg = NULL; char *szAvatar = NULL; char *szAvatarIn = NULL; char *szAvatarOut = NULL; char *szText = NULL; char *szProto = NULL; char *szFileDesc = NULL; const char *tmpltName[2]; bool isGrouping = false; if (protoSettings == NULL) return; MCONTACT hRealContact = getRealContact(event->hContact); szRealProto = getProto(hRealContact); szProto = getProto(event->pszProto, event->hContact); tempBase[0]='\0'; TemplateMap *tmpm = getTemplateMap(protoSettings); if (tmpm!=NULL) { strcpy(tempBase, "file://"); strcat(tempBase, tmpm->getFilename()); char* pathrun = tempBase + strlen(tempBase); while ((*pathrun != '\\' && *pathrun != '/') && (pathrun > tempBase)) pathrun--; pathrun++; *pathrun = '\0'; isGrouping = tmpm->isGrouping(); } szBase = mir_utf8encode(tempBase); if (event->hContact != NULL) getUINs(event->hContact, szUINIn, szUINOut); if (event->hContact != NULL) { szNameOut = getEncodedContactName(NULL, szProto, szRealProto); szNameIn = getEncodedContactName(event->hContact, szProto, szRealProto); } else { szNameOut = mir_strdup(" "); szNameIn = mir_strdup(" "); } TCHAR szNoAvatarPath[MAX_PATH]; mir_sntprintf(szNoAvatarPath, SIZEOF(szNoAvatarPath), _T("%s"), _A2T(protoSettings->getSRMMTemplateFilename())); TCHAR *szNoAvatarPathTmp = _tcsrchr(szNoAvatarPath, '\\'); if (szNoAvatarPathTmp != NULL) *szNoAvatarPathTmp = 0; _tcscat(szNoAvatarPath, _T("\\noavatar.png")); if (_taccess(szNoAvatarPath, 0) == -1) mir_snprintf(tempStr, SIZEOF(tempStr), "%snoavatar.jpg", tempBase); else mir_snprintf(tempStr, SIZEOF(tempStr), "%snoavatar.png", tempBase); szNoAvatar = mir_utf8encode(tempStr); if(event->hContact != NULL) szAvatarIn = getAvatar(event->hContact, szRealProto); if (szAvatarIn == NULL) szAvatarIn = mir_strdup(szNoAvatar); szAvatarOut = getAvatar(NULL, szRealProto); if (szAvatarOut == NULL) szAvatarOut = mir_strdup(szNoAvatar); if(event->hContact != NULL) { if (!db_get(event->hContact, "CList", "StatusMsg",&dbv)) { if (strlen(dbv.pszVal) > 0) szStatusMsg = mir_utf8encode(dbv.pszVal); db_free(&dbv); } } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = event->hContact; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) szNickIn = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = NULL; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) szNickOut = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); IEVIEWEVENTDATA* eventData = event->eventData; for (int eventIdx = 0; eventData!=NULL && (eventIdx < event->count || event->count==-1); eventData = eventData->next, eventIdx++) { int outputSize; char *output = NULL; if (eventData->iType == IEED_EVENT_MESSAGE || eventData->iType == IEED_EVENT_STATUSCHANGE || eventData->iType == IEED_EVENT_FILE || eventData->iType == IEED_EVENT_URL || eventData->iType == IEED_EVENT_SYSTEM) { bool isSent = (eventData->dwFlags & IEEDF_SENT) != 0; bool isRTL = (eventData->dwFlags & IEEDF_RTL) && tmpm->isRTL(); bool isHistory = (eventData->time < (DWORD)getStartedTime() && (eventData->dwFlags & IEEDF_READ || eventData->dwFlags & IEEDF_SENT)); bool isGroupBreak = TRUE; if ((getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES) && eventData->dwFlags == LOWORD(getLastEventType()) && eventData->iType == IEED_EVENT_MESSAGE && HIWORD(getLastEventType()) == IEED_EVENT_MESSAGE && (isSameDate(eventData->time, getLastEventTime())) && (((eventData->time < (DWORD)startedTime) == (getLastEventTime() < (DWORD)startedTime)) || !(eventData->dwFlags & IEEDF_READ))) { isGroupBreak = FALSE; } if (isSent) { szAvatar = szAvatarOut; szUIN = szUINOut; mir_snprintf(szCID, SIZEOF(szCID), "%d", 0); } else { szAvatar = szAvatarIn; szUIN = szUINIn; mir_snprintf(szCID, SIZEOF(szCID), "%d", (int)event->hContact); } tmpltName[0] = groupTemplate; tmpltName[1] = NULL; groupTemplate = NULL; szName = NULL; szText = NULL; szFileDesc = NULL; if (event->eventData->dwFlags & IEEDF_UNICODE_NICK) szName = encodeUTF8(event->hContact, szRealProto, eventData->pszNickW, ENF_NAMESMILEYS, true); else szName = encodeUTF8(event->hContact, szRealProto, eventData->pszNick, ENF_NAMESMILEYS, true); if (eventData->dwFlags & IEEDF_UNICODE_TEXT) szText = encodeUTF8(event->hContact, szRealProto, eventData->pszTextW, eventData->iType == IEED_EVENT_MESSAGE ? ENF_ALL : 0, isSent); else szText = encodeUTF8(event->hContact, szRealProto, eventData->pszText, event->codepage, eventData->iType == IEED_EVENT_MESSAGE ? ENF_ALL : 0, isSent); if (eventData->dwFlags & IEEDF_UNICODE_TEXT2) szFileDesc = encodeUTF8(event->hContact, szRealProto, eventData->pszText2W, 0, isSent); else szFileDesc = encodeUTF8(event->hContact, szRealProto, eventData->pszText2, event->codepage, 0, isSent); if ((eventData->iType == IEED_EVENT_MESSAGE)) { if (!isRTL) { if (isGrouping && (getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES)) { if (isGroupBreak) tmpltName[1] = isHistory ? isSent ? "hMessageOutGroupStart" : "hMessageInGroupStart" : isSent ? "MessageOutGroupStart" : "MessageInGroupStart"; else tmpltName[0] = isHistory ? isSent ? "hMessageOutGroupInner" : "hMessageInGroupInner" : isSent ? "MessageOutGroupInner" : "MessageInGroupInner"; groupTemplate = isHistory ? isSent ? "hMessageOutGroupEnd" : "hMessageInGroupEnd" : isSent ? "MessageOutGroupEnd" : "MessageInGroupEnd"; } else tmpltName[1] = isHistory ? isSent ? "hMessageOut" : "hMessageIn" : isSent ? "MessageOut" : "MessageIn"; } else { if (isGrouping && (getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES)) { if (isGroupBreak) tmpltName[1] = isHistory ? isSent ? "hMessageOutGroupStartRTL" : "hMessageInGroupStartRTL" : isSent ? "MessageOutGroupStartRTL" : "MessageInGroupStartRTL"; else tmpltName[0] = isHistory ? isSent ? "hMessageOutGroupInnerRTL" : "hMessageInGroupInnerRTL" : isSent ? "MessageOutGroupInnerRTL" : "MessageInGroupInnerRTL"; groupTemplate = isHistory ? isSent ? "hMessageOutGroupEndRTL" : "hMessageInGroupEndRTL" : isSent ? "MessageOutGroupEndRTL" : "MessageInGroupEndRTL"; } else tmpltName[1] = isHistory ? isSent ? "hMessageOutRTL" : "hMessageInRTL" : isSent ? "MessageOutRTL" : "MessageInRTL"; } } else if (eventData->iType == IEED_EVENT_FILE) { tmpltName[1] = isHistory ? isSent ? "hFileOut" : "hFileIn" : isSent ? "FileOut" : "FileIn"; Template *tmplt = (tmpm == NULL) ? NULL : tmpm->getTemplate(tmpltName[1]); if (tmplt == NULL) tmpltName[1] = isHistory ? "hFile" : "File"; } else if (eventData->iType == IEED_EVENT_URL) { tmpltName[1] = isHistory ? isSent ? "hURLOut" : "hURLIn" : isSent ? "URLOut" : "URLIn"; Template *tmplt = (tmpm == NULL) ? NULL : tmpm->getTemplate(tmpltName[1]); if (tmplt == NULL) tmpltName[1] = isHistory ? "hURL" : "URL"; } else if (eventData->iType == IEED_EVENT_STATUSCHANGE || (eventData->iType == IEED_EVENT_SYSTEM)) tmpltName[1] = isHistory ? "hStatus" : "Status"; /* template-specific formatting */ for (int i=0;i<2;i++) { if (tmpltName[i] == NULL || tmpm == NULL) continue; Template *tmplt = tmpm->getTemplate(tmpltName[i]); if (tmplt == NULL) continue; for (Token *token = tmplt->getTokens();token!=NULL;token=token->getNext()) { const char *tokenVal; tokenVal = NULL; switch (token->getType()) { case Token::PLAIN: tokenVal = token->getText(); break; case Token::INAME: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) tokenVal = szName; else tokenVal = " "; break; case Token::TIME: if (getFlags(protoSettings) & Options::LOG_SHOW_TIME) tokenVal = timestampToString(getFlags(protoSettings), eventData->time, 1); else tokenVal = " "; break; case Token::DATE: if (getFlags(protoSettings) & Options::LOG_SHOW_DATE) tokenVal = timestampToString(getFlags(protoSettings), eventData->time, 0); else tokenVal = " "; break; case Token::TEXT: tokenVal = szText; break; case Token::AVATAR: tokenVal = szAvatar; break; case Token::CID: tokenVal = szCID; break; case Token::BASE: tokenVal = szBase; break; case Token::NAMEIN: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { if (event->hContact != NULL) tokenVal = szNameIn; else tokenVal = szName; } else tokenVal = " "; break; case Token::NAMEOUT: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { if (event->hContact != NULL) tokenVal = szNameOut; else tokenVal = szName; } else tokenVal = " "; break; case Token::AVATARIN: tokenVal = szAvatarIn; break; case Token::AVATAROUT: tokenVal = szAvatarOut; break; case Token::PROTO: tokenVal = szRealProto; break; case Token::UIN: tokenVal = szUIN; break; case Token::UININ: tokenVal = szUINIn; break; case Token::UINOUT: tokenVal = szUINOut; break; case Token::STATUSMSG: tokenVal = szStatusMsg; break; case Token::NICKIN: tokenVal = szNickIn; break; case Token::NICKOUT: tokenVal = szNickOut; break; case Token::FILEDESC: tokenVal = szFileDesc; break; } if (tokenVal != NULL) { if (token->getEscape()) Utils::appendText(&output, &outputSize, "%s", ptrA(Utils::escapeString(tokenVal))); else Utils::appendText(&output, &outputSize, "%s", tokenVal); } } } setLastEventType(MAKELONG(eventData->dwFlags, eventData->iType)); setLastEventTime(eventData->time); mir_free(szName); mir_free(szText); mir_free(szFileDesc); } if (output != NULL) { view->write(output); free(output); } } mir_free(szBase); mir_free(szRealProto); mir_free(szProto); mir_free(szUINIn); mir_free(szUINOut); mir_free(szNoAvatar); mir_free(szAvatarIn); mir_free(szAvatarOut); mir_free(szNameIn); mir_free(szNameOut); mir_free(szNickIn); mir_free(szNickOut); mir_free(szStatusMsg); view->documentClose(); }
void TemplateHTMLBuilder::buildHeadTemplate(IEView *view, IEVIEWEVENT *event, ProtocolSettings *protoSettings) { DBVARIANT dbv; CONTACTINFO ci; char tempBase[1024]; char tempStr[1024]; char *szRealProto = NULL; char *szBase=NULL; char *szNoAvatar=NULL; char *szProto = NULL; char *szNameIn = NULL; char *szNameOut = NULL; char *szAvatarIn = NULL; char *szAvatarOut = NULL; char *szUINIn = NULL; char *szUINOut = NULL; char *szNickIn = NULL; char *szNickOut = NULL; char *szStatusMsg = NULL; int outputSize; char *output; output = NULL; MCONTACT hRealContact = getRealContact(event->hContact); szRealProto = getProto(hRealContact); szProto = getProto(event->pszProto, event->hContact); tempBase[0]='\0'; if (protoSettings == NULL) return; TemplateMap *tmpm = getTemplateMap(protoSettings); if (tmpm==NULL) return; strcpy(tempBase, "file://"); strcat(tempBase, tmpm->getFilename()); char* pathrun = tempBase + strlen(tempBase); while ((*pathrun != '\\' && *pathrun != '/') && (pathrun > tempBase)) pathrun--; pathrun++; *pathrun = '\0'; szBase = mir_utf8encode(tempBase); getUINs(event->hContact, szUINIn, szUINOut); if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { szNameOut = getEncodedContactName(NULL, szProto, szRealProto); szNameIn = getEncodedContactName(event->hContact, szProto, szRealProto); } else { szNameOut = mir_strdup(" "); szNameIn = mir_strdup(" "); } mir_snprintf(tempStr, SIZEOF(tempStr), "%snoavatar.png", tempBase); TCHAR szNoAvatarPath[MAX_PATH]; mir_sntprintf(szNoAvatarPath, SIZEOF(szNoAvatarPath), _T("%s"), _A2T(protoSettings->getSRMMTemplateFilename())); TCHAR *szNoAvatarPathTmp = _tcsrchr(szNoAvatarPath, '\\'); if (szNoAvatarPathTmp != NULL) *szNoAvatarPathTmp = 0; _tcscat(szNoAvatarPath, _T("\\noavatar.png")); if (_taccess(szNoAvatarPath, 0) == -1) mir_snprintf(tempStr, SIZEOF(tempStr), "%snoavatar.jpg", tempBase); else mir_snprintf(tempStr, SIZEOF(tempStr), "%snoavatar.png", tempBase); szNoAvatar = mir_utf8encode(tempStr); szAvatarIn = getAvatar(event->hContact, szRealProto); if (szAvatarIn == NULL) { szAvatarIn = mir_strdup(szNoAvatar); } szAvatarOut = getAvatar(NULL, szRealProto); if (szAvatarOut == NULL) { szAvatarOut = mir_strdup(szNoAvatar); } if (!db_get(event->hContact, "CList", "StatusMsg",&dbv)) { if (strlen(dbv.pszVal) > 0) { szStatusMsg = mir_utf8encode(dbv.pszVal); } db_free(&dbv); } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = event->hContact; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNickIn = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = NULL; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNickOut = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); } Template *tmplt = tmpm->getTemplate(((event->dwFlags & IEEF_RTL) && tmpm->isRTL()) ? "HTMLStartRTL" : "HTMLStart"); if (tmplt == NULL) { tmplt = tmpm->getTemplate("HTMLStart"); } if (tmplt!=NULL) { for (Token *token = tmplt->getTokens();token!=NULL;token=token->getNext()) { const char *tokenVal; tokenVal = NULL; switch (token->getType()) { case Token::PLAIN: tokenVal = token->getText(); break; case Token::BASE: tokenVal = szBase; break; case Token::NAMEIN: tokenVal = szNameIn; break; case Token::NAMEOUT: tokenVal = szNameOut; break; case Token::AVATARIN: tokenVal = szAvatarIn; break; case Token::AVATAROUT: tokenVal = szAvatarOut; break; case Token::PROTO: tokenVal = szRealProto; break; case Token::UININ: tokenVal = szUINIn; break; case Token::UINOUT: tokenVal = szUINOut; break; case Token::STATUSMSG: tokenVal = szStatusMsg; break; case Token::NICKIN: tokenVal = szNickIn; break; case Token::NICKOUT: tokenVal = szNickOut; break; } if (tokenVal != NULL) { if (token->getEscape()) Utils::appendText(&output, &outputSize, "%s", ptrA(Utils::escapeString(tokenVal))); else Utils::appendText(&output, &outputSize, "%s", tokenVal); } } } if (output != NULL) { view->write(output); free(output); } mir_free(szBase); mir_free(szRealProto); mir_free(szProto); mir_free(szUINIn); mir_free(szUINOut); mir_free(szNoAvatar); mir_free(szAvatarIn); mir_free(szAvatarOut); mir_free(szNameIn); mir_free(szNameOut); mir_free(szNickIn); mir_free(szNickOut); mir_free(szStatusMsg); groupTemplate = NULL; iLastEventType = -1; }