void SessionManager::newSession() { // Fetch session name QString name = getSessionName(tr("New Session")); if (name.isEmpty()) { return; } QString theme = m_session->theme(); // Close open documents bool visible = isVisible(); hide(); if (!closeCurrent()) { if (visible) { show(); } return; } accept(); // Create session and make it active { QSettings session(Session::pathFromName(name), QSettings::IniFormat); session.setValue("ThemeManager/Theme", theme); session.setValue("ThemeManager/Size", QSettings().value("ThemeManager/Size")); } setCurrent(name); }
void IRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, const std::string &room, const std::string &nickname, const std::string &password) { std::string session = getSessionName(user, room); std::string target = getTargetName(room); LOG4CXX_INFO(logger, user << ": Session name: " << session << ", Joining room " << target); if (m_sessions[session] == NULL) { if (m_servers.empty()) { // in gateway mode we want to login this user to network according to legacyName if (room.find("@") != std::string::npos) { // suffix is %irc.freenode.net to let MyIrcSession return #room%irc.freenode.net m_sessions[session] = createSession(user, room.substr(room.find("@") + 1), nickname, "", room.substr(room.find("@"))); } else { LOG4CXX_WARN(logger, user << ": There's no proper server defined in room to which this user wants to join: " << room); return; } } else { LOG4CXX_WARN(logger, user << ": Join room requested for unconnected user"); return; } } m_sessions[session]->addAutoJoinChannel(target, password); m_sessions[session]->sendCommand(IrcCommand::createJoin(FROM_UTF8(target), FROM_UTF8(password))); m_sessions[session]->rooms += 1; // update nickname, because we have nickname per session, no nickname per room. handleRoomNicknameChanged(user, target, TO_UTF8(m_sessions[session]->nickName())); }
void IRCNetworkPlugin::handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &/*xhtml*/, const std::string &/*id*/) { std::string session = getSessionName(user, legacyName); if (m_sessions[session] == NULL) { LOG4CXX_WARN(logger, user << ": Session name: " << session << ", No session for user"); return; } std::string target = getTargetName(legacyName); // We are sending PM message. On XMPP side, user is sending PM using the particular channel, // for example #[email protected]/hanzz. On IRC side, we are forwarding this message // just to "hanzz". Therefore we have to somewhere store, that message from "hanzz" should // be mapped to #[email protected]/hanzz. if (legacyName.find("/") != std::string::npos) { m_sessions[session]->addPM(target, legacyName.substr(0, legacyName.find("@"))); } LOG4CXX_INFO(logger, user << ": Session name: " << session << ", message to " << target); if (message.find("/me") == 0) { m_sessions[session]->sendCommand(IrcCommand::createCtcpAction(FROM_UTF8(target), FROM_UTF8(message.substr(4)))); } else if (message.find("/whois") == 0 || message.find(".whois") == 0) { m_sessions[session]->sendWhoisCommand(target, message.substr(7)); return; } else { m_sessions[session]->sendCommand(IrcCommand::createMessage(FROM_UTF8(target), FROM_UTF8(message))); } if (target.find("#") == 0) { handleMessage(user, legacyName, message, TO_UTF8(m_sessions[session]->nickName())); } }
void IRCNetworkPlugin::handleRoomSubjectChangedRequest(const std::string &user, const std::string &room, const std::string &message) { std::string session = getSessionName(user, room); if (m_sessions[session] == NULL) { LOG4CXX_WARN(logger, user << ": Session name: " << session << ", No session for user"); return; } std::string target = getTargetName(room); m_sessions[session]->sendCommand(IrcCommand::createTopic(FROM_UTF8(target), FROM_UTF8(message))); }
void IRCNetworkPlugin::handleLeaveRoomRequest(const std::string &user, const std::string &room) { std::string session = getSessionName(user, room); std::string target = getTargetName(room); LOG4CXX_INFO(logger, user << ": Session name: " << session << ", Leaving room " << target); if (m_sessions[session] == NULL) return; m_sessions[session]->sendCommand(IrcCommand::createPart(FROM_UTF8(target))); m_sessions[session]->removeAutoJoinChannel(target); m_sessions[session]->rooms -= 1; if (m_sessions[session]->rooms <= 0 && m_servers.empty()) { LOG4CXX_INFO(logger, user << ": Session name: " << session << ", User is not in any room, disconnecting from network"); m_sessions[session]->close(); m_sessions[session]->deleteLater(); m_sessions.erase(session); } }
void SessionManager::cloneSession() { // Find path QListWidgetItem* item = selectedSession(false); if (!item) { return; } QString filename = item != m_sessions_list->item(0) ? Session::pathFromName(item->text()) : ""; // Fetch session name QString name = getSessionName(tr("Clone Session")); if (name.isEmpty()) { return; } // Close open documents hide(); if (!closeCurrent()) { show(); return; } accept(); // Create session and make it active QSettings settings; if (!filename.isEmpty()) { QFile::copy(filename, Session::pathFromName(name)); } else { QSettings session(Session::pathFromName(name), QSettings::IniFormat); session.setValue("ThemeManager/Theme", settings.value("ThemeManager/Theme")); session.setValue("ThemeManager/Size", settings.value("ThemeManager/Size")); session.setValue("Save/Current", settings.value("Save/Current")); if (settings.value("Save/RememberPositions", true).toBool()) { session.setValue("Save/Positions", settings.value("Save/Positions")); } session.setValue("Save/Active", settings.value("Save/Active")); } setCurrent(name); }
void SessionManager::renameSession() { QListWidgetItem* item = selectedSession(true); if (!item) { return; } // Fetch session name QString name = getSessionName(tr("Rename Session"), item->text()); if (name.isEmpty()) { return; } // Rename session QString current = item->text(); if (current == m_session->name()) { m_session->setName(name); QSettings().setValue("SessionManager/Session", m_session->name()); } else { QFile::rename(Session::pathFromName(current), Session::pathFromName(name)); } updateList(name); }