summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2011-04-22 18:37:42 (GMT)
committerKevin Smith <git@kismith.co.uk>2011-04-22 18:37:42 (GMT)
commite66d257f786f034a7372780c7933312fe8b66dff (patch)
treec85f1f22a6ea1c29e24bd87e62db51c4f461da12 /Swift/Controllers/ChatMessageSummarizer.cpp
parent1a8df7d98e58adde9bd0611b5689507780393856 (diff)
downloadswift-e66d257f786f034a7372780c7933312fe8b66dff.zip
swift-e66d257f786f034a7372780c7933312fe8b66dff.tar.bz2
Merge unread tab titles legibly.
Release-Notes: Chat tabs with unread messages from several chats will now be a little more descriptive. Resolves: #485
Diffstat (limited to 'Swift/Controllers/ChatMessageSummarizer.cpp')
-rw-r--r--Swift/Controllers/ChatMessageSummarizer.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/Swift/Controllers/ChatMessageSummarizer.cpp b/Swift/Controllers/ChatMessageSummarizer.cpp
new file mode 100644
index 0000000..682d88b
--- /dev/null
+++ b/Swift/Controllers/ChatMessageSummarizer.cpp
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2011 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swift/Controllers/ChatMessageSummarizer.h>
+
+#include <Swiften/Base/format.h>
+#include <Swift/Controllers/Intl.h>
+#include <Swiften/Base/foreach.h>
+
+using namespace Swift;
+using namespace std;
+
+string ChatMessageSummarizer::getSummary(const string& current, const vector<UnreadPair>& unreads) {
+ vector<UnreadPair> others;
+ int currentUnread = 0;
+ int otherCount = 0;
+ foreach (UnreadPair unread, unreads) {
+ if (unread.first == current) {
+ currentUnread += unread.second;
+ } else {
+ if (unread.second > 0) {
+ otherCount += unread.second;
+ others.push_back(unread);
+ }
+ }
+ }
+ string myString(current);
+
+ if (currentUnread > 0) {
+ string result(QT_TRANSLATE_NOOP("", "%1% (%2%)"));
+ myString = str(format(result) % current % currentUnread);
+ }
+
+ if (others.size() > 1) {
+ string result(QT_TRANSLATE_NOOP("", "%1% and %2% others (%3%)"));
+ myString = str(format(result) % myString % others.size() % otherCount);
+ } else if (others.size() > 0) {
+ string result(QT_TRANSLATE_NOOP("", "%1%, %2% (%3%)"));
+ myString = str(format(result) % myString % others[0].first % otherCount);
+ }
+ return myString;
+}