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

List:       kde-commits
Subject:    kdenetwork/kopete/kopete/chatwindow
From:       Olivier Goffart <ogoffart () kde ! org>
Date:       2005-01-29 9:31:04
Message-ID: 20050129093104.D37201CFF9 () office ! kde ! org
[Download RAW message or body]

CVS commit by ogoffart: 

Store the xml QString internally instead of the Kopete::Message
That fix the crash when someone leave a chat in a groupchat.
BUG:  97082

Also fix the saving to text, by adding the contactId


  M +18 -22    chatmessagepart.cpp   1.17
  M +1 -2      chatmessagepart.h   1.9


--- kdenetwork/kopete/kopete/chatwindow/chatmessagepart.cpp  #1.16:1.17
@@ -265,14 +265,16 @@ void ChatMessagePart::save()
                 {
                         stream << QString::fromLatin1( "<document>" );
-                        for ( MessageMap::Iterator it = messageMap.begin(); it != \
                messageMap.end(); ++it )
-                                stream << (*it).asXML().toString();
+                        stream << messageMap.join("\n");
                         stream << QString::fromLatin1( "</document>\n" );
                 }
                 else if ( dlg.currentFilter() == QString::fromLatin1( "text/plain" ) \
)  {
-                        for( MessageMap::Iterator it = messageMap.begin(); it != \
messageMap.end(); ++it) +                        for( QStringList::Iterator it = \
messageMap.begin(); it != messageMap.end(); ++it)  {
-                                stream << "[" << KGlobal::locale()->formatDateTime( \
                (*it).timestamp(), true, true );
-                                stream << "] " << (*it).plainBody() << '\n';
+                                QDomDocument doc;
+                                doc.setContent(*it);
+                                stream << "[" << \
doc.elementsByTagName("message").item(0).toElement().attribute("formattedTimestamp"); \
+                                stream << "] " << \
doc.elementsByTagName("contact").item(0).toElement().attribute("contactId") ; +       \
stream << ": " << doc.elementsByTagName("body").item(0).toElement().text() << "\n";  \
}  }
@@ -345,18 +347,21 @@ void ChatMessagePart::appendMessage( Kop
         message.setBody( message.parsedBody() , Kopete::Message::ParsedHTML );
 
-        messageMap.insert( ++messageId, message );
+        message.setBgOverride( d->bgOverride );
+        message.setFgOverride( d->fgOverride );
+        message.setRtfOverride( d->rtfOverride );
+
+        messageMap.append(  message.asXML().toString() );
+
+        uint bufferLen = (uint)KopetePrefs::prefs()->chatViewBufferSize();
 
         // transform all messages every time. needed for Adium style.
 #ifdef TRANSFORM_ALL_MESSAGES
+        if ( messageMap.count() >= bufferLen )
+                messageMap.pop_front();
+
         d->refreshtimer.start(50,true); //let 50ms delay in the case several message \
are appended in the same time.  return;
 #else
 
-        uint bufferLen = (uint)KopetePrefs::prefs()->chatViewBufferSize();
-
-        message.setBgOverride( d->bgOverride );
-        message.setFgOverride( d->fgOverride );
-        message.setRtfOverride( d->rtfOverride );
-
         QDomDocument domMessage = message.asXML();
         domMessage.documentElement().setAttribute( QString::fromLatin1( "id" ), \
QString::number( messageId ) ); @@ -422,14 +427,5 @@ void \
ChatMessagePart::slotRefreshNodes()  
         QString xmlString = QString::fromLatin1( "<document>" );
-        for( MessageMap::Iterator it = messageMap.begin(); it != messageMap.end(); \
                ++it)
-        {
-                (*it).setBgOverride( d->bgOverride );
-                (*it).setFgOverride( d->fgOverride );
-                (*it).setRtfOverride( d->rtfOverride );
-
-                QDomDocument message = (*it).asXML();
-                message.documentElement().setAttribute( QString::fromLatin1( "id" ), \
                QString::number( it.key() ) );
-                xmlString += message.toString();
-        }
+        xmlString += messageMap.join("\n");
         xmlString += QString::fromLatin1( "</document>" );
 

--- kdenetwork/kopete/kopete/chatwindow/chatmessagepart.h  #1.8:1.9
@@ -142,6 +142,5 @@ private:
 
         unsigned long messageId;
-        typedef QMap<unsigned long,Kopete::Message> MessageMap;
-        MessageMap messageMap;
+        QStringList messageMap;
 
         bool scrollPressed;


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

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