kioslave/imap4
mailaddress.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "mailaddress.h"
00025 #include "mimehdrline.h"
00026 #include <kimap/rfccodecs.h>
00027 #include <kmime/kmime_util.h>
00028 #include <QByteArray>
00029
00030 using namespace KIMAP;
00031
00032 mailAddress::mailAddress ()
00033 {
00034 }
00035
00036 mailAddress::mailAddress (const mailAddress & lr):
00037 user (lr.user),
00038 host (lr.host),
00039 rawFullName (lr.rawFullName),
00040 rawComment (lr.rawComment)
00041 {
00042
00043 }
00044
00045 mailAddress & mailAddress::operator = (const mailAddress & lr)
00046 {
00047
00048 if (this == &lr)
00049 return *this;
00050
00051 user = lr.user;
00052 host = lr.host;
00053 rawFullName = lr.rawFullName;
00054 rawComment = lr.rawComment;
00055
00056
00057
00058 return *this;
00059 }
00060
00061
00062
00063
00064 mailAddress::~mailAddress ()
00065 {
00066 }
00067
00068 mailAddress::mailAddress (char *aCStr)
00069 {
00070 parseAddress (aCStr);
00071 }
00072
00073 int mailAddress::parseAddress (const char *aCStr)
00074 {
00075 int retVal = 0;
00076 int skip;
00077 uint len;
00078 int pt;
00079
00080 if (aCStr)
00081 {
00082
00083 skip = mimeHdrLine::skipWS (aCStr);
00084 if (skip > 0)
00085 {
00086 aCStr += skip;
00087 retVal += skip;
00088 }
00089 while (*aCStr)
00090 {
00091 int advance;
00092
00093 switch (*aCStr)
00094 {
00095 case '"':
00096 advance = mimeHdrLine::parseQuoted ('"', '"', aCStr);
00097 rawFullName += QByteArray (aCStr, advance);
00098 break;
00099 case '(':
00100 advance = mimeHdrLine::parseQuoted ('(', ')', aCStr);
00101 rawComment += QByteArray (aCStr, advance);
00102 break;
00103 case '<':
00104 advance = mimeHdrLine::parseQuoted ('<', '>', aCStr);
00105 user = QByteArray (aCStr, advance);
00106 len = advance;
00107 user = user.mid (1, len - 2);
00108 len -= 2;
00109 pt = user.indexOf('@');
00110 host = user.right (len - pt - 1);
00111 user.truncate(pt);
00112 break;
00113 default:
00114 advance = mimeHdrLine::parseWord (aCStr);
00115
00116 if (user.isEmpty ())
00117 {
00118 if (*aCStr != ',')
00119 {
00120 rawFullName += aCStr;
00121 if (mimeHdrLine::skipWS (aCStr+advance) > 0)
00122 {
00123 rawFullName += ' ';
00124 }
00125 }
00126 }
00127 break;
00128 }
00129 if (advance)
00130 {
00131 retVal += advance;
00132 aCStr += advance;
00133 }
00134 else
00135 break;
00136 advance = mimeHdrLine::skipWS (aCStr);
00137 if (advance > 0)
00138 {
00139 retVal += advance;
00140 aCStr += advance;
00141 }
00142
00143 if (*aCStr == ',')
00144 {
00145 advance++;
00146 break;
00147 }
00148 }
00149
00150 if (rawFullName.isEmpty ())
00151 {
00152 if (user.isEmpty ())
00153 retVal = 0;
00154 else
00155 {
00156 if (host.isEmpty ())
00157 {
00158 rawFullName = user;
00159 user.truncate(0);
00160 }
00161 }
00162 }
00163 else if (user.isEmpty ())
00164 {
00165 pt = rawFullName.indexOf ('@');
00166 if (pt >= 0)
00167 {
00168 user = rawFullName;
00169 host = user.right (user.length () - pt - 1);
00170 user.truncate(pt);
00171 rawFullName.truncate(0);
00172 }
00173 }
00174
00175 #if 0
00176
00177 if (!rawFullName.isEmpty ())
00178 {
00179
00180
00181
00182
00183 }
00184 #endif
00185 if (!rawComment.isEmpty ())
00186 {
00187 if (rawComment[0] == '(')
00188 rawComment = rawComment.mid (1, rawComment.length () - 2);
00189 rawComment = rawComment.trimmed ();
00190
00191 }
00192 }
00193 else
00194 {
00195
00196 }
00197 return retVal;
00198 }
00199
00200 const QByteArray mailAddress::getStr ()
00201 {
00202 QByteArray retVal(128, '\0' );
00203
00204 if (!rawFullName.isEmpty ())
00205 {
00206 KMime::addQuotes( rawFullName, false );
00207 retVal = rawFullName + ' ';
00208 }
00209 if (!user.isEmpty ())
00210 {
00211 retVal += '<';
00212 retVal += user;
00213 if (!host.isEmpty ()) {
00214 retVal += '@';
00215 retVal += host;
00216 }
00217 retVal += '>';
00218 }
00219 if (!rawComment.isEmpty ())
00220 {
00221 retVal = '(' + rawComment + ')';
00222 }
00223
00224 return retVal;
00225 }
00226
00227 bool mailAddress::isEmpty () const
00228 {
00229 return user.isEmpty ();
00230 }
00231
00232 void mailAddress::setFullName (const QString & _str)
00233 {
00234 rawFullName = KIMAP::encodeRFC2047String (_str).toLatin1 ();
00235 }
00236
00237 const QString mailAddress::getFullName () const
00238 {
00239 return KIMAP::decodeRFC2047String (rawFullName);
00240 }
00241
00242 void mailAddress::setCommentRaw (const QByteArray & _str)
00243 {
00244 rawComment = _str;
00245 }
00246
00247 void mailAddress::setComment (const QString & _str)
00248 {
00249 rawComment = KIMAP::encodeRFC2047String (_str).toLatin1 ();
00250 }
00251
00252 const QString mailAddress::getComment () const
00253 {
00254 return KIMAP::decodeRFC2047String (rawComment);
00255 }
00256
00257 const QByteArray & mailAddress::getCommentRaw () const
00258 {
00259 return rawComment;
00260 }
00261
00262 QString mailAddress::emailAddrAsAnchor (const mailAddress & adr, bool shortAdr)
00263 {
00264 QString retVal;
00265 if (!adr.getFullName ().isEmpty ())
00266 {
00267
00268 retVal += adr.getFullName () + ' ';
00269 }
00270 if (!adr.getUser ().isEmpty () && !shortAdr)
00271 {
00272 retVal += "<" + adr.getUser ();
00273 if (!adr.getHost ().isEmpty ())
00274 retVal += '@' + adr.getHost ();
00275 retVal += "> ";
00276 }
00277 if (!adr.getComment ().isEmpty ())
00278 {
00279
00280 retVal = '(' + adr.getComment () + ')';
00281 }
00282
00283 if (!adr.getUser ().isEmpty ())
00284 {
00285 QString mail;
00286 mail = adr.getUser ();
00287 if (!mail.isEmpty () && !adr.getHost ().isEmpty ())
00288 mail += '@' + adr.getHost ();
00289 if (!mail.isEmpty ())
00290 retVal = "<A HREF=\"mailto:" + mail + "\">" + retVal + "</A>";
00291 }
00292 return retVal;
00293 }
00294
00295 QString mailAddress::emailAddrAsAnchor (const QList < mailAddress *> &list, bool value)
00296 {
00297 QString retVal;
00298 QListIterator < mailAddress *> it (list);
00299
00300 while (it.hasNext())
00301 {
00302 retVal += emailAddrAsAnchor ((*it.next()), value) + "<BR></BR>\n";
00303 }
00304
00305 return retVal;
00306 }
00307
00308
00309 void mailAddress::clear() {
00310 user.truncate(0);
00311 host.truncate(0);
00312 rawFullName.truncate(0);
00313 rawComment.truncate(0);
00314 }
00315