From 02ed3d0a95051e55ecaf66561f379041ae111cca Mon Sep 17 00:00:00 2001 From: Sebastian Goth Date: Mon, 24 Aug 2009 18:03:09 +0200 Subject: [PATCH] Make netsplits pretty on clientside --- data/default.qss | 2 ++ src/qtui/qtuistyle.cpp | 2 ++ src/uisupport/qssparser.cpp | 4 ++++ src/uisupport/uistyle.cpp | 38 +++++++++++++++++++++++++++++++++++++ src/uisupport/uistyle.h | 2 ++ 5 files changed, 48 insertions(+) diff --git a/data/default.qss b/data/default.qss index 2066779e..eb7f76a5 100644 --- a/data/default.qss +++ b/data/default.qss @@ -88,6 +88,8 @@ ChatLine#info { foreground: #916409; } ChatLine#error { foreground: #916409; } ChatLine#daychange { foreground: #916409; } ChatLine#topic { foreground: #960096; } +ChatLine#netsplitJoin { foreground: #960096; } +ChatLine#netsplitQuit { foreground: #960096; } // BufferView Colors ChatListItem[state="inactive"] { foreground: #a0a0a4; } diff --git a/src/qtui/qtuistyle.cpp b/src/qtui/qtuistyle.cpp index 26c90482..84b1d14a 100644 --- a/src/qtui/qtuistyle.cpp +++ b/src/qtui/qtuistyle.cpp @@ -82,6 +82,8 @@ void QtUiStyle::generateSettingsQss() const { << msgTypeQss("error", "ErrorMsg", s) << msgTypeQss("daychange", "ServerMsg", s) << msgTypeQss("topic", "CommandMsg", s) + << msgTypeQss("netsplitJoin", "CommandMsg", s) + << msgTypeQss("netsplitQuit", "CommandMsg", s) << "\n"; } diff --git a/src/uisupport/qssparser.cpp b/src/uisupport/qssparser.cpp index 48a1a064..ceac60ba 100644 --- a/src/uisupport/qssparser.cpp +++ b/src/uisupport/qssparser.cpp @@ -226,6 +226,10 @@ quint64 QssParser::parseFormatType(const QString &decl) { fmtType |= UiStyle::DayChangeMsg; else if(msgType == "topic") fmtType |= UiStyle::TopicMsg; + else if(msgType == "netsplitJoin") + fmtType |= UiStyle::NetsplitJoinMsg; + else if(msgType == "netsplitQuit") + fmtType |= UiStyle::NetsplitQuitMsg; else { qWarning() << Q_FUNC_INFO << tr("Invalid message type in %1").arg(decl); } diff --git a/src/uisupport/uistyle.cpp b/src/uisupport/uistyle.cpp index 75524db8..281ec76c 100644 --- a/src/uisupport/uistyle.cpp +++ b/src/uisupport/uistyle.cpp @@ -393,6 +393,10 @@ UiStyle::FormatType UiStyle::formatType(Message::Type msgType) { return DayChangeMsg; case Message::Topic: return TopicMsg; + case Message::NetsplitJoin: + return NetsplitJoinMsg; + case Message::NetsplitQuit: + return NetsplitQuitMsg; } //Q_ASSERT(false); // we need to handle all message types qWarning() << Q_FUNC_INFO << "Unknown message type:" << msgType; @@ -548,6 +552,7 @@ void UiStyle::StyledMessage::style() const { QString txt = UiStyle::mircToInternal(contents()); QString bufferName = bufferInfo().bufferName(); bufferName.replace('%', "%%"); // well, you _can_ have a % in a buffername apparently... -_- + const int maxNetsplitNicks = 15; QString t; switch(type()) { @@ -610,6 +615,35 @@ void UiStyle::StyledMessage::style() const { case Message::Topic: //: Topic Message t = tr("%1").arg(txt); break; + case Message::NetsplitJoin: { + QStringList users = txt.split(":"); + QStringList servers = users.takeLast().split(" "); + + for(int i = 0; i < users.count() && i < maxNetsplitNicks; i++) + users[i] = nickFromMask(users.at(i)); + + t = tr("Netsplit between %DH%1%DH and %DH%2%DH ended. Users joined: ").arg(servers.at(0),servers.at(1)); + if(users.count() <= maxNetsplitNicks) + t.append(QString("%DN%1%DN").arg(users.join(", "))); + else + t.append(tr("%DN%1%DN (%2 more)").arg(static_cast(users.mid(0, maxNetsplitNicks)).join(", ")).arg(users.count() - maxNetsplitNicks)); + } + break; + case Message::NetsplitQuit: { + QStringList users = txt.split(":"); + QStringList servers = users.takeLast().split(" "); + + for(int i = 0; i < users.count() && i < maxNetsplitNicks; i++) + users[i] = nickFromMask(users.at(i)); + + t = tr("Netsplit between %DH%1%DH and %DH%2%DH. Users quit: ").arg(servers.at(0),servers.at(1)); + + if(users.count() <= maxNetsplitNicks) + t.append(QString("%DN%1%DN").arg(users.join(", "))); + else + t.append(tr("%DN%1%DN (%2 more)").arg(static_cast(users.mid(0, maxNetsplitNicks)).join(", ")).arg(users.count() - maxNetsplitNicks)); + } + break; default: t = tr("[%1]").arg(txt); } @@ -676,6 +710,10 @@ QString UiStyle::StyledMessage::decoratedSender() const { return tr("-"); break; case Message::Topic: return tr("*"); break; + case Message::NetsplitJoin: + return tr("=>"); break; + case Message::NetsplitQuit: + return tr("<="); break; default: return tr("%1").arg(plainSender()); } diff --git a/src/uisupport/uistyle.h b/src/uisupport/uistyle.h index f10dd4c7..18163779 100644 --- a/src/uisupport/uistyle.h +++ b/src/uisupport/uistyle.h @@ -70,6 +70,8 @@ public: ErrorMsg = 0x0000000d, DayChangeMsg = 0x0000000e, TopicMsg = 0x0000000f, + NetsplitJoinMsg = 0x00000010, + NetsplitQuitMsg = 0x00000020, // Standard Formats Bold = 0x00000100, -- 2.20.1