kmobiletools
akonadi_serializer_sms.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "akonadi_serializer_sms.h"
00022
00023 #include <kdebug.h>
00024 #include <libkmobiletools/sms.h>
00025 #include <boost/shared_ptr.hpp>
00026
00027 #include <akonadi/item.h>
00028 #include <akonadi/private/imapparser_p.h>
00029
00030 #define SMS_MIMETYPE "application/x-kmobiletools-sms"
00031
00032 using namespace Akonadi;
00033 using namespace KMime;
00034
00035 typedef boost::shared_ptr<KMobileTools::SMS> MessagePtr;
00036
00037 template <typename T> static void parseAddrList( const QList<QByteArray> &addrList, T *hdr )
00038 {
00039 for ( QList<QByteArray>::ConstIterator it = addrList.constBegin(); it != addrList.constEnd(); ++it ) {
00040 QList<QByteArray> addr;
00041 ImapParser::parseParenthesizedList( *it, addr );
00042 if ( addr.count() != 4 ) {
00043 qWarning() << "Error parsing envelope address field: " << addr;
00044 continue;
00045 }
00046 KMime::Types::Mailbox addrField;
00047 addrField.setNameFrom7Bit( addr[0] );
00048 addrField.setAddress( addr[2] + '@' + addr[3] );
00049 hdr->addAddress( addrField );
00050 }
00051 }
00052
00053
00054 bool SerializerPluginSMS::deserialize( Item& item, const QByteArray& label, QIODevice& data, int version )
00055 {
00056 Q_UNUSED( version );
00057
00058 kDebug() <<"()" << label;
00059 if ( label != "SMS" ) {
00060 return false;
00061 }
00062
00063 MessagePtr msg;
00064 if ( !item.hasPayload() ) {
00065 KMobileTools::SMS *m = new KMobileTools::SMS();
00066 msg = MessagePtr( m );
00067 item.setPayload( msg );
00068 } else {
00069 msg = item.payload<MessagePtr>();
00070 }
00071
00072 if ( label == "SMS" ) {
00073 msg->setContent( data.readAll() );
00074 msg->parse();
00075 }
00076
00077
00078
00079
00080
00081
00082
00084
00085
00086
00089
00090
00091
00092
00095
00096
00099
00100
00103
00104
00107
00109
00111
00112
00113 return true;
00114 }
00115
00116
00117 void SerializerPluginSMS::serialize( const Item& item, const QByteArray& label, QIODevice& data, int &version )
00118 {
00119 Q_UNUSED( version );
00120
00121 kDebug() <<"()" << label;
00122 if ( label != "SMS" )
00123 return;
00124
00125 boost::shared_ptr<KMobileTools::SMS> m = item.payload< boost::shared_ptr<KMobileTools::SMS> >();
00126 m->assemble();
00127 data.write( m->encodedContent() );
00128 }
00129
00130
00131 extern "C"
00132 KDE_EXPORT Akonadi::ItemSerializerPlugin *
00133 akonadi_serializer_sms_create_item_serializer_plugin() {
00134 return new SerializerPluginSMS();
00135 }
00136
00137