void ConversationManager::handleMessageReceived(Swift::Message::ref message) { // std::string name = message->getTo().getUnescapedNode(); // if (name.find_last_of("%") != std::string::npos) { // OK when commented // name.replace(name.find_last_of("%"), 1, "@"); // OK when commented // } std::string name = Buddy::JIDToLegacyName(message->getTo()); if (name.empty()) { LOG4CXX_WARN(logger, m_user->getJID().toString() << ": Tried to create empty conversation"); return; } // create conversation if it does not exist. if (!m_convs[name]) { Conversation *conv = m_component->getFactory()->createConversation(this, name); addConversation(conv); } // if it exists and it's MUC, but this message is PM, get PM conversation or create new one. else if (m_convs[name]->isMUC() && message->getType() != Swift::Message::Groupchat) { std::string room_name = name; name = room_name + "/" + message->getTo().getResource(); if (m_convs.find(name) == m_convs.end()) { Conversation *conv = m_component->getFactory()->createConversation(this, message->getTo().getResource()); conv->setRoom(room_name); conv->setNickname(name); addConversation(conv); } } // update resource and send the message m_convs[name]->setJID(message->getFrom()); m_convs[name]->sendMessage(message); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), database(0), eventsFilterModel(new QSortFilterProxyModel(this)), conversationsTreeModel(new TableToTreeProxyModel(this)), hideEventsTableColumnsModel(new HideColumnsProxyModel(this)) { ui->setupUi(this); eventsFilterModel->setObjectName("eventsFilterModel"); hideEventsTableColumnsModel->setObjectName("hideEventsTableColumnsModel"); QList<int> hideColumns; hideColumns << 0 << 1 << 4 << 5; hideEventsTableColumnsModel->setHideColumns(hideColumns); conversationsTreeModel = new TableToTreeProxyModel(this); conversationsTreeModel->setObjectName("conversationsTreeModel"); QString fileName = settings.value("database").toString(); if (fileName.isEmpty() || !QFile(fileName).exists()) { newFile(); } else { openFile(fileName); } ui->statusBar->hide(); ui->splitter->setStretchFactor(1, 1); QVariant treeSize = settings.value("treeSize"); QVariant tableSize = settings.value("tableSize"); if (treeSize.isValid() && tableSize.isValid()) { QList<int> splitterSizes; splitterSizes << treeSize.toInt() << tableSize.toInt(); ui->splitter->setSizes(splitterSizes); } // TODO: Disable actions that need new e.g. characters until ready connect(ui->actionNew, SIGNAL(triggered()), this, SLOT(newFile())); connect(ui->actionOpen, SIGNAL(triggered()), this, SLOT(openFile())); connect(ui->actionAdd_Event, SIGNAL(triggered()), this, SLOT(addEvent())); connect(ui->actionDelete_Event, SIGNAL(triggered()), this, SLOT(deleteEvent())); connect(ui->actionAdd_Conversation, SIGNAL(triggered()), this, SLOT(addConversation())); connect(ui->actionDelete_Conversation, SIGNAL(triggered()), this, SLOT(deleteConversation())); connect(ui->actionAdd_Character, SIGNAL(triggered()), this, SLOT(addCharacter())); connect(ui->actionDelete_Character, SIGNAL(triggered()), this, SLOT(deleteCharacter())); connect(ui->actionPreferences, SIGNAL(triggered()), this, SLOT(openPreferences())); ui->conversationsView->installEventFilter(this); ui->eventsView->installEventFilter(this); connect(ui->conversationsView, SIGNAL(clicked(QModelIndex)), this, SLOT(filterOnConversation(QModelIndex))); ui->eventsView->setModel(eventsFilterModel); ui->eventsView->hideColumn(0); ui->eventsView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); ui->eventsView->setEditTriggers(QAbstractItemView::NoEditTriggers); connect(ui->eventsView, SIGNAL(activated(QModelIndex)), this, SLOT(editEvent(QModelIndex))); conversationsTreeModel->index(0,0).parent().isValid(); ui->conversationsView->setModel(conversationsTreeModel); ui->conversationsView->sortByColumn(0, Qt::AscendingOrder); ui->conversationsView->setEditTriggers(QAbstractItemView::NoEditTriggers); connect(ui->conversationsView, SIGNAL(activated(QModelIndex)), this, SLOT(editTreeItem(QModelIndex))); }