From: <it_...@us...> - 2009-09-30 12:42:37
|
Revision: 5504 http://kmess.svn.sourceforge.net/kmess/?rev=5504&view=rev Author: it_amroth Date: 2009-09-30 12:42:30 +0000 (Wed, 30 Sep 2009) Log Message: ----------- Random fixes and improvements: * Removed KDE deps on InternalUtils; * Removed some warnings. Modified Paths: -------------- trunk/kmess/src/chat/chatmessagestyle.h trunk/kmess/src/network/connections/msnnotificationconnection.cpp trunk/kmess/src/network/connections/msnnotificationconnection.h trunk/kmess/src/network/connections/msnswitchboardconnection.h trunk/kmess/src/network/messages/message.cpp trunk/kmess/src/network/messages/message.h trunk/kmess/src/network/messages/winkmessage.h trunk/kmess/src/network/msnchat.cpp trunk/kmess/src/network/msncontact.h trunk/kmess/src/network/msnsession.cpp trunk/kmess/src/network/msnsession.h trunk/kmess/src/network/utils/utils_internal.cpp trunk/kmess/src/network/utils/utils_internal.h Modified: trunk/kmess/src/chat/chatmessagestyle.h =================================================================== --- trunk/kmess/src/chat/chatmessagestyle.h 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/chat/chatmessagestyle.h 2009-09-30 12:42:30 UTC (rev 5504) @@ -28,7 +28,7 @@ class XslTransformation; namespace KMess { - class KMess::TextMessage; + class TextMessage; } Modified: trunk/kmess/src/network/connections/msnnotificationconnection.cpp =================================================================== --- trunk/kmess/src/network/connections/msnnotificationconnection.cpp 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/connections/msnnotificationconnection.cpp 2009-09-30 12:42:30 UTC (rev 5504) @@ -27,7 +27,7 @@ #include "../soap/passportloginservice.h" #include "../soap/offlineimservice.h" #include "../soap/roamingservice.h" -#include "../messages/message.h" +#include "../messages/offlinemessage.h" #include "../utils/msnalgorithms.h" #include "../utils/msnchallengehandler.h" #include "../utils/utils.h" @@ -2293,7 +2293,7 @@ kDebug() << "All messages received, displaying messages in chat window."; #endif - const ContactBase *contact = 0; + MsnContact *contact = 0; QString name; QString picture; QStringList messageIds; @@ -2304,37 +2304,21 @@ // Get contact details // Re-use previous results if message is from the same contact - if( contact == 0 || contact->getHandle() != offlineIm->from ) + if( contact == 0 || contact->id() != offlineIm->from ) { - contact = session_->getContact( offlineIm->from ); - if( contact != 0 ) - { - // Display the name in a simple way, to make it clearer to - // see the CSS style for Offline IM - name = contact->getFriendlyName( STRING_CLEANED ); - picture = contact->getContactPicturePath(); - } - else - { - name = from; - picture = QString(); - } + contact = session_->getMsnContact( offlineIm->from ); } // Send out the chat message -#warning FIXME create OfflineMessage class - /* - emit receivedMessage( ChatMessage( ChatMessage::TYPE_OFFLINE_INCOMING, - ChatMessage::CONTENT_MESSAGE, - true, - offlineIm->body, - offlineIm->from, - name, - picture, - QFont(), - QString(), - offlineIm->date ) ); - */ + OfflineMessage *message = new OfflineMessage( 0 /* not attached to a chat */, + contact, + true /* incoming */ ); + message->setSender( contact ); + message->setRecipient( session_->self() ); + message->setMessage( offlineIm->body ); + message->setDateTime( offlineIm->date ); + + emit receivedMessage( message ); } // Delete all local messages Modified: trunk/kmess/src/network/connections/msnnotificationconnection.h =================================================================== --- trunk/kmess/src/network/connections/msnnotificationconnection.h 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/connections/msnnotificationconnection.h 2009-09-30 12:42:30 UTC (rev 5504) @@ -30,13 +30,10 @@ class Contact; class ContactList; class QAbstractItemModel; -#warning todo remove: -class KMessTest; namespace KMess { - // Forward declarations class MsnChat; class MsnSession; @@ -124,8 +121,6 @@ { Q_OBJECT - friend class ::KMessTest; - public: // Public methods related to this class // The constructor MsnNotificationConnection( MsnSession *session ); Modified: trunk/kmess/src/network/connections/msnswitchboardconnection.h =================================================================== --- trunk/kmess/src/network/connections/msnswitchboardconnection.h 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/connections/msnswitchboardconnection.h 2009-09-30 12:42:30 UTC (rev 5504) @@ -65,7 +65,6 @@ }; // The constructor -#warning TODO make MsnSwitchboardConnection not need a MsnSession MsnSwitchboardConnection( MsnSession* session ); // The destructor virtual ~MsnSwitchboardConnection(); Modified: trunk/kmess/src/network/messages/message.cpp =================================================================== --- trunk/kmess/src/network/messages/message.cpp 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/messages/message.cpp 2009-09-30 12:42:30 UTC (rev 5504) @@ -566,6 +566,18 @@ /** + * Change the date and time of the message. + * + * @param dateTime the new date/time of reception (or sending) + */ +void Message::setDateTime( const QDateTime dateTime ) +{ + dateTime_ = dateTime; +} + + + +/** * Return which type of message this is. * * Usually pointers to Message are passed around: you can recognize the Modified: trunk/kmess/src/network/messages/message.h =================================================================== --- trunk/kmess/src/network/messages/message.h 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/messages/message.h 2009-09-30 12:42:30 UTC (rev 5504) @@ -74,6 +74,7 @@ QTime time() const; MessageType type() const; void setConfirmationMode( const ConfirmationMode mode = ConfirmAlways ); + void setDateTime( const QDateTime dateTime ); public: // Public static methods static Message* fromData( MsnContact* peer, bool isIncoming, const QByteArray &data ); Modified: trunk/kmess/src/network/messages/winkmessage.h =================================================================== --- trunk/kmess/src/network/messages/winkmessage.h 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/messages/winkmessage.h 2009-09-30 12:42:30 UTC (rev 5504) @@ -25,8 +25,6 @@ #include <QDebug> #include <QTime> -#warning todo remove: -class MsnObject; namespace KMess { Modified: trunk/kmess/src/network/msnchat.cpp =================================================================== --- trunk/kmess/src/network/msnchat.cpp 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/msnchat.cpp 2009-09-30 12:42:30 UTC (rev 5504) @@ -573,8 +573,8 @@ #ifdef KMESSDEBUG_SWITCHBOARD_GENERAL kDebug() << "Current state is: " << connectionState_; #endif - // TODO FIXME, can't check now, just assume only one left... -#warning fix: + +#warning TODO FIXME: cannot check this now, just assume only one left... /* if( contactsInChat_.count() > 1 ) { @@ -762,7 +762,7 @@ // Check if any custom emoticon is being sent in the message. // This has to be sent first so the receiving client will be aware that // there will be custom emoticons in the next message. -#warning don't do this, TextMessage has an EmoticonMessage inside of it +#warning do not do this, TextMessage has an EmoticonMessage inside of it // i.e. this code should all be moved to the client etc! #if 0 QString code, pictureFile; @@ -1082,7 +1082,7 @@ // Send wink void MsnChat::sendWink( WinkMessage *message ) { - sendMessage( message ); + sendMessage( message ); } Modified: trunk/kmess/src/network/msncontact.h =================================================================== --- trunk/kmess/src/network/msncontact.h 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/msncontact.h 2009-09-30 12:42:30 UTC (rev 5504) @@ -21,11 +21,7 @@ #include "networkglobals.h" -#warning todo remove: -class KMessTest; - namespace KMess { - class MsnSession; @@ -45,8 +41,6 @@ { Q_OBJECT -#warning TODO remove: - friend class ::KMessTest; friend class MsnSession; public: // Public methods Modified: trunk/kmess/src/network/msnsession.cpp =================================================================== --- trunk/kmess/src/network/msnsession.cpp 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/msnsession.cpp 2009-09-30 12:42:30 UTC (rev 5504) @@ -927,6 +927,20 @@ /** + * Return the user's representation as an MsnContact. + * + * @return MsnContact* + */ +MsnContact* MsnSession::self() const +{ +#warning TODO: Implement a proper user MsnContact object + static MsnContact* contact = new MsnContact( getHandle() ); + return contact; +} + + + +/** * @brief Send a raw command to the notification server. * * Advanced function. See the warning at isNotificationConnected() before you Modified: trunk/kmess/src/network/msnsession.h =================================================================== --- trunk/kmess/src/network/msnsession.h 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/msnsession.h 2009-09-30 12:42:30 UTC (rev 5504) @@ -143,6 +143,8 @@ void setSessionSettings( const SettingsList &changes ); // Set the user's status void setStatus( Status status ); + // Return the user's representation as an MsnContact + MsnContact* self() const; // Check whether a given path is valid for a display picture bool validDisplayPicturePath( const QString &path ) const; Modified: trunk/kmess/src/network/utils/utils_internal.cpp =================================================================== --- trunk/kmess/src/network/utils/utils_internal.cpp 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/utils/utils_internal.cpp 2009-09-30 12:42:30 UTC (rev 5504) @@ -26,12 +26,7 @@ #include <QStringList> #include <QTextCodec> -#warning Remove KDE dependency -#include <KCharsets> -#include <KCodecs> -#include <KGlobal> - using namespace KMess; @@ -250,7 +245,7 @@ // decode quoted printable text for (i=str.length()-1; i>=0; i--) if (str[i]=='_') str[i]=' '; - cstr = KCodecs::quotedPrintableDecode(str); + cstr = quotedPrintableDecode( str ); } else { @@ -265,7 +260,7 @@ } else { - codec = KGlobal::charsets()->codecForName( charset.toLower() ); + codec = QTextCodec::codecForName( charset.toLower() ); } if (!codec) @@ -299,3 +294,98 @@ } + +// List of valid characters in hex data. Used by quotedPrintableDecode(). +static const char hexChars[16] = +{ + '0', '1', '2', '3', '4', '5', '6', '7' +, '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' +}; + + +// A strchr(3) version for broken systems. Used by quotedPrintableDecode(). +static int rikFindChar( register const char * _s, const char c ) +{ + register const char * s = _s; + + while( true ) + { + if( (0 == *s) || (c == *s) ) break; ++s; + if( (0 == *s) || (c == *s) ) break; ++s; + if( (0 == *s) || (c == *s) ) break; ++s; + if( (0 == *s) || (c == *s) ) break; ++s; + } + + return s - _s; +} + + + +/** + * Decode a Quoted-Printable string. + * + * Code taken from KCodecs, copyright of the KDE team, and Rik Hemsley. + */ +QByteArray InternalUtils::quotedPrintableDecode( const QByteArray& in ) +{ + QByteArray out; + + if( in.isEmpty() ) + { + return out; + } + + char *cursor; + const char *data; + const unsigned int length = in.size(); + + data = in.data(); + out.resize( length ); + cursor = out.data(); + + for( unsigned int i = 0; i < length; i++ ) + { + char c( in[i] ); + + if( '=' == c ) + { + if( i < length - 2 ) + { + char c1 = in[i + 1]; + char c2 = in[i + 2]; + + if( ('\n' == c1 ) || ( '\r' == c1 && '\n' == c2 ) ) + { + // Soft line break. No output. + if( '\r' == c1 ) + i += 2; // CRLF line breaks + else + i += 1; + } + else + { + // =XX encoded byte. + + int hexChar0 = rikFindChar( hexChars, c1 ); + int hexChar1 = rikFindChar( hexChars, c2 ); + + if( hexChar0 < 16 && hexChar1 < 16 ) + { + *cursor++ = char( (hexChar0 * 16 ) | hexChar1 ); + i += 2; + } + } + } + } + else + { + *cursor++ = c; + } + } + + out.truncate( cursor - out.data() ); + + return out; +} + + Modified: trunk/kmess/src/network/utils/utils_internal.h =================================================================== --- trunk/kmess/src/network/utils/utils_internal.h 2009-09-30 12:42:27 UTC (rev 5503) +++ trunk/kmess/src/network/utils/utils_internal.h 2009-09-30 12:42:30 UTC (rev 5504) @@ -48,6 +48,10 @@ // Decode MIME strings like =?iso...=...?=... static QString decodeRFC2047String( const QString &string ); + + private: // Private static methods + // Decode a Quoted-Printable string + static QByteArray quotedPrintableDecode( const QByteArray& in ); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |