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