[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.5/kdenetwork/kopete/plugins/history
From:       Roman Jarosz <kedgedev () gmail ! com>
Date:       2010-07-06 16:18:35
Message-ID: 20100706161835.18A7DAC85D () svn ! kde ! org
[Download RAW message or body]

SVN commit 1146774 by rjarosz:

Backport commit 1146770.
Fix bug ICQ-Chat History is displayed in wrong order, if the computer-date is \
incorrect.  
CCBUG: 186016
CCBUG: 212392


 M  +23 -1     historylogger.cpp  


--- branches/KDE/4.5/kdenetwork/kopete/plugins/history/historylogger.cpp \
#1146773:1146774 @@ -41,6 +41,12 @@
 
 bool messageTimestampLessThan(const Kopete::Message &m1, const Kopete::Message &m2)
 {
+	const Kopete::Contact* c1 = (m1.direction() == Kopete::Message::Outbound) ? \
m1.to().value(0) : m1.from(); +	const Kopete::Contact* c2 = (m2.direction() == \
Kopete::Message::Outbound) ? m2.to().value(0) : m2.from(); +
+	if (c1 == c2) // Messages from the same account, keep order as it was saved.
+		return false;
+
 	return m1.timestamp() < m2.timestamp();
 }
 
@@ -406,7 +412,23 @@
 
 	}
 
-	qSort(messages.begin(), messages.end(), messageTimestampLessThan);
+	//Bubble Sort, can't use qStableSort because we have to compare surrounding items \
only, mostly +	//it will be only O(n) sort, because we will only have one contact in \
metacontact for a day. +	const int size = messages.size();
+	for (int i = 0; i < size; i++)
+	{
+		bool swap = false;
+		for (int j = 0; j < size - 1; j++)
+		{
+			if (messageTimestampLessThan(messages.at(j + 1), messages.at(j))) {
+				messages.swap(j, j + 1);
+				swap = true;
+			}
+		}
+
+		if (!swap)
+			break;
+	}
 	return messages;
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic