summaryrefslogtreecommitdiffabout
path: root/kabc/addressee.cpp
Unidiff
Diffstat (limited to 'kabc/addressee.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressee.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 18b4d58..39d14bb 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -986,1025 +986,1026 @@ QString Addressee::homeFaxLabel()
986{ 986{
987 return i18n("Home Fax"); 987 return i18n("Home Fax");
988} 988}
989 989
990 990
991QString Addressee::businessFaxLabel() 991QString Addressee::businessFaxLabel()
992{ 992{
993 return i18n("Business Fax"); 993 return i18n("Business Fax");
994} 994}
995 995
996 996
997QString Addressee::carPhoneLabel() 997QString Addressee::carPhoneLabel()
998{ 998{
999 return i18n("Car Phone"); 999 return i18n("Car Phone");
1000} 1000}
1001 1001
1002 1002
1003QString Addressee::isdnLabel() 1003QString Addressee::isdnLabel()
1004{ 1004{
1005 return i18n("ISDN"); 1005 return i18n("ISDN");
1006} 1006}
1007 1007
1008 1008
1009QString Addressee::pagerLabel() 1009QString Addressee::pagerLabel()
1010{ 1010{
1011 return i18n("Pager"); 1011 return i18n("Pager");
1012} 1012}
1013 1013
1014QString Addressee::sipLabel() 1014QString Addressee::sipLabel()
1015{ 1015{
1016 return i18n("SIP"); 1016 return i18n("SIP");
1017} 1017}
1018 1018
1019QString Addressee::emailLabel() 1019QString Addressee::emailLabel()
1020{ 1020{
1021 return i18n("Email Address"); 1021 return i18n("Email Address");
1022} 1022}
1023 1023
1024 1024
1025void Addressee::setMailer( const QString &mailer ) 1025void Addressee::setMailer( const QString &mailer )
1026{ 1026{
1027 if ( mailer == mData->mailer ) return; 1027 if ( mailer == mData->mailer ) return;
1028 detach(); 1028 detach();
1029 mData->empty = false; 1029 mData->empty = false;
1030 mData->mailer = mailer; 1030 mData->mailer = mailer;
1031} 1031}
1032 1032
1033QString Addressee::mailer() const 1033QString Addressee::mailer() const
1034{ 1034{
1035 return mData->mailer; 1035 return mData->mailer;
1036} 1036}
1037 1037
1038QString Addressee::mailerLabel() 1038QString Addressee::mailerLabel()
1039{ 1039{
1040 return i18n("Mail Client"); 1040 return i18n("Mail Client");
1041} 1041}
1042 1042
1043 1043
1044void Addressee::setTimeZone( const TimeZone &timeZone ) 1044void Addressee::setTimeZone( const TimeZone &timeZone )
1045{ 1045{
1046 if ( timeZone == mData->timeZone ) return; 1046 if ( timeZone == mData->timeZone ) return;
1047 detach(); 1047 detach();
1048 mData->empty = false; 1048 mData->empty = false;
1049 mData->timeZone = timeZone; 1049 mData->timeZone = timeZone;
1050} 1050}
1051 1051
1052TimeZone Addressee::timeZone() const 1052TimeZone Addressee::timeZone() const
1053{ 1053{
1054 return mData->timeZone; 1054 return mData->timeZone;
1055} 1055}
1056 1056
1057QString Addressee::timeZoneLabel() 1057QString Addressee::timeZoneLabel()
1058{ 1058{
1059 return i18n("Time Zone"); 1059 return i18n("Time Zone");
1060} 1060}
1061 1061
1062 1062
1063void Addressee::setGeo( const Geo &geo ) 1063void Addressee::setGeo( const Geo &geo )
1064{ 1064{
1065 if ( geo == mData->geo ) return; 1065 if ( geo == mData->geo ) return;
1066 detach(); 1066 detach();
1067 mData->empty = false; 1067 mData->empty = false;
1068 mData->geo = geo; 1068 mData->geo = geo;
1069} 1069}
1070 1070
1071Geo Addressee::geo() const 1071Geo Addressee::geo() const
1072{ 1072{
1073 return mData->geo; 1073 return mData->geo;
1074} 1074}
1075 1075
1076QString Addressee::geoLabel() 1076QString Addressee::geoLabel()
1077{ 1077{
1078 return i18n("Geographic Position"); 1078 return i18n("Geographic Position");
1079} 1079}
1080 1080
1081 1081
1082void Addressee::setTitle( const QString &title ) 1082void Addressee::setTitle( const QString &title )
1083{ 1083{
1084 if ( title == mData->title ) return; 1084 if ( title == mData->title ) return;
1085 detach(); 1085 detach();
1086 mData->empty = false; 1086 mData->empty = false;
1087 mData->title = title; 1087 mData->title = title;
1088} 1088}
1089 1089
1090QString Addressee::title() const 1090QString Addressee::title() const
1091{ 1091{
1092 return mData->title; 1092 return mData->title;
1093} 1093}
1094 1094
1095QString Addressee::titleLabel() 1095QString Addressee::titleLabel()
1096{ 1096{
1097 return i18n("Title"); 1097 return i18n("Title");
1098} 1098}
1099 1099
1100 1100
1101void Addressee::setRole( const QString &role ) 1101void Addressee::setRole( const QString &role )
1102{ 1102{
1103 if ( role == mData->role ) return; 1103 if ( role == mData->role ) return;
1104 detach(); 1104 detach();
1105 mData->empty = false; 1105 mData->empty = false;
1106 mData->role = role; 1106 mData->role = role;
1107} 1107}
1108 1108
1109QString Addressee::role() const 1109QString Addressee::role() const
1110{ 1110{
1111 return mData->role; 1111 return mData->role;
1112} 1112}
1113 1113
1114QString Addressee::roleLabel() 1114QString Addressee::roleLabel()
1115{ 1115{
1116 return i18n("Role"); 1116 return i18n("Role");
1117} 1117}
1118 1118
1119 1119
1120void Addressee::setOrganization( const QString &organization ) 1120void Addressee::setOrganization( const QString &organization )
1121{ 1121{
1122 if ( organization == mData->organization ) return; 1122 if ( organization == mData->organization ) return;
1123 detach(); 1123 detach();
1124 mData->empty = false; 1124 mData->empty = false;
1125 mData->organization = organization; 1125 mData->organization = organization;
1126} 1126}
1127 1127
1128QString Addressee::organization() const 1128QString Addressee::organization() const
1129{ 1129{
1130 return mData->organization; 1130 return mData->organization;
1131} 1131}
1132 1132
1133QString Addressee::organizationLabel() 1133QString Addressee::organizationLabel()
1134{ 1134{
1135 return i18n("Organization"); 1135 return i18n("Organization");
1136} 1136}
1137 1137
1138 1138
1139void Addressee::setNote( const QString &note ) 1139void Addressee::setNote( const QString &note )
1140{ 1140{
1141 if ( note == mData->note ) return; 1141 if ( note == mData->note ) return;
1142 detach(); 1142 detach();
1143 mData->empty = false; 1143 mData->empty = false;
1144 mData->note = note; 1144 mData->note = note;
1145} 1145}
1146 1146
1147QString Addressee::note() const 1147QString Addressee::note() const
1148{ 1148{
1149 return mData->note; 1149 return mData->note;
1150} 1150}
1151 1151
1152QString Addressee::noteLabel() 1152QString Addressee::noteLabel()
1153{ 1153{
1154 return i18n("Note"); 1154 return i18n("Note");
1155} 1155}
1156 1156
1157 1157
1158void Addressee::setProductId( const QString &productId ) 1158void Addressee::setProductId( const QString &productId )
1159{ 1159{
1160 if ( productId == mData->productId ) return; 1160 if ( productId == mData->productId ) return;
1161 detach(); 1161 detach();
1162 mData->empty = false; 1162 mData->empty = false;
1163 mData->productId = productId; 1163 mData->productId = productId;
1164} 1164}
1165 1165
1166QString Addressee::productId() const 1166QString Addressee::productId() const
1167{ 1167{
1168 return mData->productId; 1168 return mData->productId;
1169} 1169}
1170 1170
1171QString Addressee::productIdLabel() 1171QString Addressee::productIdLabel()
1172{ 1172{
1173 return i18n("Product Identifier"); 1173 return i18n("Product Identifier");
1174} 1174}
1175 1175
1176 1176
1177void Addressee::setRevision( const QDateTime &revision ) 1177void Addressee::setRevision( const QDateTime &revision )
1178{ 1178{
1179 if ( revision == mData->revision ) return; 1179 if ( revision == mData->revision ) return;
1180 detach(); 1180 detach();
1181 mData->empty = false; 1181 mData->empty = false;
1182 mData->revision = QDateTime( revision.date(), 1182 mData->revision = QDateTime( revision.date(),
1183 QTime (revision.time().hour(), 1183 QTime (revision.time().hour(),
1184 revision.time().minute(), 1184 revision.time().minute(),
1185 revision.time().second())); 1185 revision.time().second()));
1186} 1186}
1187 1187
1188QDateTime Addressee::revision() const 1188QDateTime Addressee::revision() const
1189{ 1189{
1190 return mData->revision; 1190 return mData->revision;
1191} 1191}
1192 1192
1193QString Addressee::revisionLabel() 1193QString Addressee::revisionLabel()
1194{ 1194{
1195 return i18n("Revision Date"); 1195 return i18n("Revision Date");
1196} 1196}
1197 1197
1198 1198
1199void Addressee::setSortString( const QString &sortString ) 1199void Addressee::setSortString( const QString &sortString )
1200{ 1200{
1201 if ( sortString == mData->sortString ) return; 1201 if ( sortString == mData->sortString ) return;
1202 detach(); 1202 detach();
1203 mData->empty = false; 1203 mData->empty = false;
1204 mData->sortString = sortString; 1204 mData->sortString = sortString;
1205} 1205}
1206 1206
1207QString Addressee::sortString() const 1207QString Addressee::sortString() const
1208{ 1208{
1209 return mData->sortString; 1209 return mData->sortString;
1210} 1210}
1211 1211
1212QString Addressee::sortStringLabel() 1212QString Addressee::sortStringLabel()
1213{ 1213{
1214 return i18n("Sort String"); 1214 return i18n("Sort String");
1215} 1215}
1216 1216
1217 1217
1218void Addressee::setUrl( const KURL &url ) 1218void Addressee::setUrl( const KURL &url )
1219{ 1219{
1220 if ( url == mData->url ) return; 1220 if ( url == mData->url ) return;
1221 detach(); 1221 detach();
1222 mData->empty = false; 1222 mData->empty = false;
1223 mData->url = url; 1223 mData->url = url;
1224} 1224}
1225 1225
1226KURL Addressee::url() const 1226KURL Addressee::url() const
1227{ 1227{
1228 return mData->url; 1228 return mData->url;
1229} 1229}
1230 1230
1231QString Addressee::urlLabel() 1231QString Addressee::urlLabel()
1232{ 1232{
1233 return i18n("URL"); 1233 return i18n("URL");
1234} 1234}
1235 1235
1236 1236
1237void Addressee::setSecrecy( const Secrecy &secrecy ) 1237void Addressee::setSecrecy( const Secrecy &secrecy )
1238{ 1238{
1239 if ( secrecy == mData->secrecy ) return; 1239 if ( secrecy == mData->secrecy ) return;
1240 detach(); 1240 detach();
1241 mData->empty = false; 1241 mData->empty = false;
1242 mData->secrecy = secrecy; 1242 mData->secrecy = secrecy;
1243} 1243}
1244 1244
1245Secrecy Addressee::secrecy() const 1245Secrecy Addressee::secrecy() const
1246{ 1246{
1247 return mData->secrecy; 1247 return mData->secrecy;
1248} 1248}
1249 1249
1250QString Addressee::secrecyLabel() 1250QString Addressee::secrecyLabel()
1251{ 1251{
1252 return i18n("Security Class"); 1252 return i18n("Security Class");
1253} 1253}
1254 1254
1255 1255
1256void Addressee::setLogo( const Picture &logo ) 1256void Addressee::setLogo( const Picture &logo )
1257{ 1257{
1258 if ( logo == mData->logo ) return; 1258 if ( logo == mData->logo ) return;
1259 detach(); 1259 detach();
1260 mData->empty = false; 1260 mData->empty = false;
1261 mData->logo = logo; 1261 mData->logo = logo;
1262} 1262}
1263 1263
1264Picture Addressee::logo() const 1264Picture Addressee::logo() const
1265{ 1265{
1266 return mData->logo; 1266 return mData->logo;
1267} 1267}
1268 1268
1269QString Addressee::logoLabel() 1269QString Addressee::logoLabel()
1270{ 1270{
1271 return i18n("Logo"); 1271 return i18n("Logo");
1272} 1272}
1273 1273
1274 1274
1275void Addressee::setPhoto( const Picture &photo ) 1275void Addressee::setPhoto( const Picture &photo )
1276{ 1276{
1277 if ( photo == mData->photo ) return; 1277 if ( photo == mData->photo ) return;
1278 detach(); 1278 detach();
1279 mData->empty = false; 1279 mData->empty = false;
1280 mData->photo = photo; 1280 mData->photo = photo;
1281} 1281}
1282 1282
1283Picture Addressee::photo() const 1283Picture Addressee::photo() const
1284{ 1284{
1285 return mData->photo; 1285 return mData->photo;
1286} 1286}
1287 1287
1288QString Addressee::photoLabel() 1288QString Addressee::photoLabel()
1289{ 1289{
1290 return i18n("Photo"); 1290 return i18n("Photo");
1291} 1291}
1292 1292
1293 1293
1294void Addressee::setSound( const Sound &sound ) 1294void Addressee::setSound( const Sound &sound )
1295{ 1295{
1296 if ( sound == mData->sound ) return; 1296 if ( sound == mData->sound ) return;
1297 detach(); 1297 detach();
1298 mData->empty = false; 1298 mData->empty = false;
1299 mData->sound = sound; 1299 mData->sound = sound;
1300} 1300}
1301 1301
1302Sound Addressee::sound() const 1302Sound Addressee::sound() const
1303{ 1303{
1304 return mData->sound; 1304 return mData->sound;
1305} 1305}
1306 1306
1307QString Addressee::soundLabel() 1307QString Addressee::soundLabel()
1308{ 1308{
1309 return i18n("Sound"); 1309 return i18n("Sound");
1310} 1310}
1311 1311
1312 1312
1313void Addressee::setAgent( const Agent &agent ) 1313void Addressee::setAgent( const Agent &agent )
1314{ 1314{
1315 if ( agent == mData->agent ) return; 1315 if ( agent == mData->agent ) return;
1316 detach(); 1316 detach();
1317 mData->empty = false; 1317 mData->empty = false;
1318 mData->agent = agent; 1318 mData->agent = agent;
1319} 1319}
1320 1320
1321Agent Addressee::agent() const 1321Agent Addressee::agent() const
1322{ 1322{
1323 return mData->agent; 1323 return mData->agent;
1324} 1324}
1325 1325
1326QString Addressee::agentLabel() 1326QString Addressee::agentLabel()
1327{ 1327{
1328 return i18n("Agent"); 1328 return i18n("Agent");
1329} 1329}
1330 1330
1331 1331
1332 1332
1333void Addressee::setNameFromString( const QString &str ) 1333void Addressee::setNameFromString( const QString &str )
1334{ 1334{
1335 setFormattedName( str ); 1335 setFormattedName( str );
1336 setName( str ); 1336 setName( str );
1337 1337
1338 static bool first = true; 1338 static bool first = true;
1339 static QStringList titles; 1339 static QStringList titles;
1340 static QStringList suffixes; 1340 static QStringList suffixes;
1341 static QStringList prefixes; 1341 static QStringList prefixes;
1342 1342
1343 if ( first ) { 1343 if ( first ) {
1344 first = false; 1344 first = false;
1345 titles += i18n( "Dr." ); 1345 titles += i18n( "Dr." );
1346 titles += i18n( "Miss" ); 1346 titles += i18n( "Miss" );
1347 titles += i18n( "Mr." ); 1347 titles += i18n( "Mr." );
1348 titles += i18n( "Mrs." ); 1348 titles += i18n( "Mrs." );
1349 titles += i18n( "Ms." ); 1349 titles += i18n( "Ms." );
1350 titles += i18n( "Prof." ); 1350 titles += i18n( "Prof." );
1351 1351
1352 suffixes += i18n( "I" ); 1352 suffixes += i18n( "I" );
1353 suffixes += i18n( "II" ); 1353 suffixes += i18n( "II" );
1354 suffixes += i18n( "III" ); 1354 suffixes += i18n( "III" );
1355 suffixes += i18n( "Jr." ); 1355 suffixes += i18n( "Jr." );
1356 suffixes += i18n( "Sr." ); 1356 suffixes += i18n( "Sr." );
1357 1357
1358 prefixes += "van"; 1358 prefixes += "van";
1359 prefixes += "von"; 1359 prefixes += "von";
1360 prefixes += "de"; 1360 prefixes += "de";
1361 1361
1362 KConfig config( locateLocal( "config", "kabcrc") ); 1362 KConfig config( locateLocal( "config", "kabcrc") );
1363 config.setGroup( "General" ); 1363 config.setGroup( "General" );
1364 titles += config.readListEntry( "Prefixes" ); 1364 titles += config.readListEntry( "Prefixes" );
1365 titles.remove( "" ); 1365 titles.remove( "" );
1366 prefixes += config.readListEntry( "Inclusions" ); 1366 prefixes += config.readListEntry( "Inclusions" );
1367 prefixes.remove( "" ); 1367 prefixes.remove( "" );
1368 suffixes += config.readListEntry( "Suffixes" ); 1368 suffixes += config.readListEntry( "Suffixes" );
1369 suffixes.remove( "" ); 1369 suffixes.remove( "" );
1370 } 1370 }
1371 1371
1372 // clear all name parts 1372 // clear all name parts
1373 setPrefix( "" ); 1373 setPrefix( "" );
1374 setGivenName( "" ); 1374 setGivenName( "" );
1375 setAdditionalName( "" ); 1375 setAdditionalName( "" );
1376 setFamilyName( "" ); 1376 setFamilyName( "" );
1377 setSuffix( "" ); 1377 setSuffix( "" );
1378 1378
1379 if ( str.isEmpty() ) 1379 if ( str.isEmpty() )
1380 return; 1380 return;
1381 1381
1382 int i = str.find(','); 1382 int i = str.find(',');
1383 if( i < 0 ) { 1383 if( i < 0 ) {
1384 QStringList parts = QStringList::split( " ", str ); 1384 QStringList parts = QStringList::split( " ", str );
1385 int leftOffset = 0; 1385 int leftOffset = 0;
1386 int rightOffset = parts.count() - 1; 1386 int rightOffset = parts.count() - 1;
1387 1387
1388 QString suffix; 1388 QString suffix;
1389 while ( rightOffset >= 0 ) { 1389 while ( rightOffset >= 0 ) {
1390 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1390 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1391 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1391 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1392 rightOffset--; 1392 rightOffset--;
1393 } else 1393 } else
1394 break; 1394 break;
1395 } 1395 }
1396 setSuffix( suffix ); 1396 setSuffix( suffix );
1397 1397
1398 if ( rightOffset < 0 ) 1398 if ( rightOffset < 0 )
1399 return; 1399 return;
1400 1400
1401 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1401 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1402 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1402 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1403 rightOffset--; 1403 rightOffset--;
1404 } else 1404 } else
1405 setFamilyName( parts[ rightOffset ] ); 1405 setFamilyName( parts[ rightOffset ] );
1406 1406
1407 QString prefix; 1407 QString prefix;
1408 while ( leftOffset < rightOffset ) { 1408 while ( leftOffset < rightOffset ) {
1409 if ( titles.contains( parts[ leftOffset ] ) ) { 1409 if ( titles.contains( parts[ leftOffset ] ) ) {
1410 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1410 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1411 leftOffset++; 1411 leftOffset++;
1412 } else 1412 } else
1413 break; 1413 break;
1414 } 1414 }
1415 setPrefix( prefix ); 1415 setPrefix( prefix );
1416 1416
1417 if ( leftOffset < rightOffset ) { 1417 if ( leftOffset < rightOffset ) {
1418 setGivenName( parts[ leftOffset ] ); 1418 setGivenName( parts[ leftOffset ] );
1419 leftOffset++; 1419 leftOffset++;
1420 } 1420 }
1421 1421
1422 QString additionalName; 1422 QString additionalName;
1423 while ( leftOffset < rightOffset ) { 1423 while ( leftOffset < rightOffset ) {
1424 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1424 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1425 leftOffset++; 1425 leftOffset++;
1426 } 1426 }
1427 setAdditionalName( additionalName ); 1427 setAdditionalName( additionalName );
1428 } else { 1428 } else {
1429 QString part1 = str.left( i ); 1429 QString part1 = str.left( i );
1430 QString part2 = str.mid( i + 1 ); 1430 QString part2 = str.mid( i + 1 );
1431 1431
1432 QStringList parts = QStringList::split( " ", part1 ); 1432 QStringList parts = QStringList::split( " ", part1 );
1433 int leftOffset = 0; 1433 int leftOffset = 0;
1434 int rightOffset = parts.count() - 1; 1434 int rightOffset = parts.count() - 1;
1435 1435
1436 QString suffix; 1436 QString suffix;
1437 while ( rightOffset >= 0 ) { 1437 while ( rightOffset >= 0 ) {
1438 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1438 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1439 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1439 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1440 rightOffset--; 1440 rightOffset--;
1441 } else 1441 } else
1442 break; 1442 break;
1443 } 1443 }
1444 setSuffix( suffix ); 1444 setSuffix( suffix );
1445 1445
1446 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1446 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1447 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1447 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1448 rightOffset--; 1448 rightOffset--;
1449 } else 1449 } else
1450 setFamilyName( parts[ rightOffset ] ); 1450 setFamilyName( parts[ rightOffset ] );
1451 1451
1452 QString prefix; 1452 QString prefix;
1453 while ( leftOffset < rightOffset ) { 1453 while ( leftOffset < rightOffset ) {
1454 if ( titles.contains( parts[ leftOffset ] ) ) { 1454 if ( titles.contains( parts[ leftOffset ] ) ) {
1455 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1455 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1456 leftOffset++; 1456 leftOffset++;
1457 } else 1457 } else
1458 break; 1458 break;
1459 } 1459 }
1460 1460
1461 parts = QStringList::split( " ", part2 ); 1461 parts = QStringList::split( " ", part2 );
1462 1462
1463 leftOffset = 0; 1463 leftOffset = 0;
1464 rightOffset = parts.count(); 1464 rightOffset = parts.count();
1465 1465
1466 while ( leftOffset < rightOffset ) { 1466 while ( leftOffset < rightOffset ) {
1467 if ( titles.contains( parts[ leftOffset ] ) ) { 1467 if ( titles.contains( parts[ leftOffset ] ) ) {
1468 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1468 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1469 leftOffset++; 1469 leftOffset++;
1470 } else 1470 } else
1471 break; 1471 break;
1472 } 1472 }
1473 setPrefix( prefix ); 1473 setPrefix( prefix );
1474 1474
1475 if ( leftOffset < rightOffset ) { 1475 if ( leftOffset < rightOffset ) {
1476 setGivenName( parts[ leftOffset ] ); 1476 setGivenName( parts[ leftOffset ] );
1477 leftOffset++; 1477 leftOffset++;
1478 } 1478 }
1479 1479
1480 QString additionalName; 1480 QString additionalName;
1481 while ( leftOffset < rightOffset ) { 1481 while ( leftOffset < rightOffset ) {
1482 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1482 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1483 leftOffset++; 1483 leftOffset++;
1484 } 1484 }
1485 setAdditionalName( additionalName ); 1485 setAdditionalName( additionalName );
1486 } 1486 }
1487} 1487}
1488 1488
1489QString Addressee::realName() const 1489QString Addressee::realName() const
1490{ 1490{
1491 if ( !formattedName().isEmpty() ) 1491 if ( !formattedName().isEmpty() )
1492 return formattedName(); 1492 return formattedName();
1493 1493
1494 QString n = assembledName(); 1494 QString n = assembledName();
1495 1495
1496 if ( n.isEmpty() ) 1496 if ( n.isEmpty() )
1497 n = name(); 1497 n = name();
1498 1498 if ( n.isEmpty() )
1499 n = organization();
1499 return n; 1500 return n;
1500} 1501}
1501 1502
1502QString Addressee::assembledName() const 1503QString Addressee::assembledName() const
1503{ 1504{
1504 QString name = prefix() + " " + givenName() + " " + additionalName() + " " + 1505 QString name = prefix() + " " + givenName() + " " + additionalName() + " " +
1505 familyName() + " " + suffix(); 1506 familyName() + " " + suffix();
1506 1507
1507 return name.simplifyWhiteSpace(); 1508 return name.simplifyWhiteSpace();
1508} 1509}
1509 1510
1510QString Addressee::fullEmail( const QString &email ) const 1511QString Addressee::fullEmail( const QString &email ) const
1511{ 1512{
1512 QString e; 1513 QString e;
1513 if ( email.isNull() ) { 1514 if ( email.isNull() ) {
1514 e = preferredEmail(); 1515 e = preferredEmail();
1515 } else { 1516 } else {
1516 e = email; 1517 e = email;
1517 } 1518 }
1518 if ( e.isEmpty() ) return QString::null; 1519 if ( e.isEmpty() ) return QString::null;
1519 1520
1520 QString text; 1521 QString text;
1521 if ( realName().isEmpty() ) 1522 if ( realName().isEmpty() )
1522 text = e; 1523 text = e;
1523 else 1524 else
1524 text = assembledName() + " <" + e + ">"; 1525 text = assembledName() + " <" + e + ">";
1525 1526
1526 return text; 1527 return text;
1527} 1528}
1528 1529
1529void Addressee::insertEmail( const QString &email, bool preferred ) 1530void Addressee::insertEmail( const QString &email, bool preferred )
1530{ 1531{
1531 detach(); 1532 detach();
1532 1533
1533 QStringList::Iterator it = mData->emails.find( email ); 1534 QStringList::Iterator it = mData->emails.find( email );
1534 1535
1535 if ( it != mData->emails.end() ) { 1536 if ( it != mData->emails.end() ) {
1536 if ( !preferred || it == mData->emails.begin() ) return; 1537 if ( !preferred || it == mData->emails.begin() ) return;
1537 mData->emails.remove( it ); 1538 mData->emails.remove( it );
1538 mData->emails.prepend( email ); 1539 mData->emails.prepend( email );
1539 } else { 1540 } else {
1540 if ( preferred ) { 1541 if ( preferred ) {
1541 mData->emails.prepend( email ); 1542 mData->emails.prepend( email );
1542 } else { 1543 } else {
1543 mData->emails.append( email ); 1544 mData->emails.append( email );
1544 } 1545 }
1545 } 1546 }
1546} 1547}
1547 1548
1548void Addressee::removeEmail( const QString &email ) 1549void Addressee::removeEmail( const QString &email )
1549{ 1550{
1550 detach(); 1551 detach();
1551 1552
1552 QStringList::Iterator it = mData->emails.find( email ); 1553 QStringList::Iterator it = mData->emails.find( email );
1553 if ( it == mData->emails.end() ) return; 1554 if ( it == mData->emails.end() ) return;
1554 1555
1555 mData->emails.remove( it ); 1556 mData->emails.remove( it );
1556} 1557}
1557 1558
1558QString Addressee::preferredEmail() const 1559QString Addressee::preferredEmail() const
1559{ 1560{
1560 if ( mData->emails.count() == 0 ) return QString::null; 1561 if ( mData->emails.count() == 0 ) return QString::null;
1561 else return mData->emails.first(); 1562 else return mData->emails.first();
1562} 1563}
1563 1564
1564QStringList Addressee::emails() const 1565QStringList Addressee::emails() const
1565{ 1566{
1566 return mData->emails; 1567 return mData->emails;
1567} 1568}
1568void Addressee::setEmails( const QStringList& emails ) { 1569void Addressee::setEmails( const QStringList& emails ) {
1569 detach(); 1570 detach();
1570 mData->emails = emails; 1571 mData->emails = emails;
1571} 1572}
1572void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber ) 1573void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber )
1573{ 1574{
1574 detach(); 1575 detach();
1575 mData->empty = false; 1576 mData->empty = false;
1576 1577
1577 PhoneNumber::List::Iterator it; 1578 PhoneNumber::List::Iterator it;
1578 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1579 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1579 if ( (*it).id() == phoneNumber.id() ) { 1580 if ( (*it).id() == phoneNumber.id() ) {
1580 *it = phoneNumber; 1581 *it = phoneNumber;
1581 return; 1582 return;
1582 } 1583 }
1583 } 1584 }
1584 mData->phoneNumbers.append( phoneNumber ); 1585 mData->phoneNumbers.append( phoneNumber );
1585} 1586}
1586 1587
1587void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber ) 1588void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber )
1588{ 1589{
1589 detach(); 1590 detach();
1590 1591
1591 PhoneNumber::List::Iterator it; 1592 PhoneNumber::List::Iterator it;
1592 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1593 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1593 if ( (*it).id() == phoneNumber.id() ) { 1594 if ( (*it).id() == phoneNumber.id() ) {
1594 mData->phoneNumbers.remove( it ); 1595 mData->phoneNumbers.remove( it );
1595 return; 1596 return;
1596 } 1597 }
1597 } 1598 }
1598} 1599}
1599 1600
1600PhoneNumber Addressee::phoneNumber( int type ) const 1601PhoneNumber Addressee::phoneNumber( int type ) const
1601{ 1602{
1602 PhoneNumber phoneNumber( "", type ); 1603 PhoneNumber phoneNumber( "", type );
1603 PhoneNumber::List::ConstIterator it; 1604 PhoneNumber::List::ConstIterator it;
1604 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1605 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1605 if ( matchBinaryPatternP( (*it).type(), type ) ) { 1606 if ( matchBinaryPatternP( (*it).type(), type ) ) {
1606 if ( (*it).type() & PhoneNumber::Pref ) 1607 if ( (*it).type() & PhoneNumber::Pref )
1607 return (*it); 1608 return (*it);
1608 else if ( phoneNumber.number().isEmpty() ) 1609 else if ( phoneNumber.number().isEmpty() )
1609 phoneNumber = (*it); 1610 phoneNumber = (*it);
1610 } 1611 }
1611 } 1612 }
1612 1613
1613 return phoneNumber; 1614 return phoneNumber;
1614} 1615}
1615 1616
1616PhoneNumber::List Addressee::phoneNumbers() const 1617PhoneNumber::List Addressee::phoneNumbers() const
1617{ 1618{
1618 return mData->phoneNumbers; 1619 return mData->phoneNumbers;
1619} 1620}
1620 1621
1621PhoneNumber::List Addressee::phoneNumbers( int type ) const 1622PhoneNumber::List Addressee::phoneNumbers( int type ) const
1622{ 1623{
1623 PhoneNumber::List list; 1624 PhoneNumber::List list;
1624 1625
1625 PhoneNumber::List::ConstIterator it; 1626 PhoneNumber::List::ConstIterator it;
1626 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1627 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1627 if ( matchBinaryPattern( (*it).type(), type ) ) { 1628 if ( matchBinaryPattern( (*it).type(), type ) ) {
1628 list.append( *it ); 1629 list.append( *it );
1629 } 1630 }
1630 } 1631 }
1631 return list; 1632 return list;
1632} 1633}
1633 1634
1634PhoneNumber Addressee::findPhoneNumber( const QString &id ) const 1635PhoneNumber Addressee::findPhoneNumber( const QString &id ) const
1635{ 1636{
1636 PhoneNumber::List::ConstIterator it; 1637 PhoneNumber::List::ConstIterator it;
1637 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1638 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1638 if ( (*it).id() == id ) { 1639 if ( (*it).id() == id ) {
1639 return *it; 1640 return *it;
1640 } 1641 }
1641 } 1642 }
1642 return PhoneNumber(); 1643 return PhoneNumber();
1643} 1644}
1644 1645
1645void Addressee::insertKey( const Key &key ) 1646void Addressee::insertKey( const Key &key )
1646{ 1647{
1647 detach(); 1648 detach();
1648 mData->empty = false; 1649 mData->empty = false;
1649 1650
1650 Key::List::Iterator it; 1651 Key::List::Iterator it;
1651 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1652 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1652 if ( (*it).id() == key.id() ) { 1653 if ( (*it).id() == key.id() ) {
1653 *it = key; 1654 *it = key;
1654 return; 1655 return;
1655 } 1656 }
1656 } 1657 }
1657 mData->keys.append( key ); 1658 mData->keys.append( key );
1658} 1659}
1659 1660
1660void Addressee::removeKey( const Key &key ) 1661void Addressee::removeKey( const Key &key )
1661{ 1662{
1662 detach(); 1663 detach();
1663 1664
1664 Key::List::Iterator it; 1665 Key::List::Iterator it;
1665 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1666 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1666 if ( (*it).id() == key.id() ) { 1667 if ( (*it).id() == key.id() ) {
1667 mData->keys.remove( key ); 1668 mData->keys.remove( key );
1668 return; 1669 return;
1669 } 1670 }
1670 } 1671 }
1671} 1672}
1672 1673
1673Key Addressee::key( int type, QString customTypeString ) const 1674Key Addressee::key( int type, QString customTypeString ) const
1674{ 1675{
1675 Key::List::ConstIterator it; 1676 Key::List::ConstIterator it;
1676 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1677 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1677 if ( (*it).type() == type ) { 1678 if ( (*it).type() == type ) {
1678 if ( type == Key::Custom ) { 1679 if ( type == Key::Custom ) {
1679 if ( customTypeString.isEmpty() ) { 1680 if ( customTypeString.isEmpty() ) {
1680 return *it; 1681 return *it;
1681 } else { 1682 } else {
1682 if ( (*it).customTypeString() == customTypeString ) 1683 if ( (*it).customTypeString() == customTypeString )
1683 return (*it); 1684 return (*it);
1684 } 1685 }
1685 } else { 1686 } else {
1686 return *it; 1687 return *it;
1687 } 1688 }
1688 } 1689 }
1689 } 1690 }
1690 return Key( QString(), type ); 1691 return Key( QString(), type );
1691} 1692}
1692void Addressee::setKeys( const Key::List& list ) { 1693void Addressee::setKeys( const Key::List& list ) {
1693 detach(); 1694 detach();
1694 mData->keys = list; 1695 mData->keys = list;
1695} 1696}
1696 1697
1697Key::List Addressee::keys() const 1698Key::List Addressee::keys() const
1698{ 1699{
1699 return mData->keys; 1700 return mData->keys;
1700} 1701}
1701 1702
1702Key::List Addressee::keys( int type, QString customTypeString ) const 1703Key::List Addressee::keys( int type, QString customTypeString ) const
1703{ 1704{
1704 Key::List list; 1705 Key::List list;
1705 1706
1706 Key::List::ConstIterator it; 1707 Key::List::ConstIterator it;
1707 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1708 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1708 if ( (*it).type() == type ) { 1709 if ( (*it).type() == type ) {
1709 if ( type == Key::Custom ) { 1710 if ( type == Key::Custom ) {
1710 if ( customTypeString.isEmpty() ) { 1711 if ( customTypeString.isEmpty() ) {
1711 list.append(*it); 1712 list.append(*it);
1712 } else { 1713 } else {
1713 if ( (*it).customTypeString() == customTypeString ) 1714 if ( (*it).customTypeString() == customTypeString )
1714 list.append(*it); 1715 list.append(*it);
1715 } 1716 }
1716 } else { 1717 } else {
1717 list.append(*it); 1718 list.append(*it);
1718 } 1719 }
1719 } 1720 }
1720 } 1721 }
1721 return list; 1722 return list;
1722} 1723}
1723 1724
1724Key Addressee::findKey( const QString &id ) const 1725Key Addressee::findKey( const QString &id ) const
1725{ 1726{
1726 Key::List::ConstIterator it; 1727 Key::List::ConstIterator it;
1727 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1728 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1728 if ( (*it).id() == id ) { 1729 if ( (*it).id() == id ) {
1729 return *it; 1730 return *it;
1730 } 1731 }
1731 } 1732 }
1732 return Key(); 1733 return Key();
1733} 1734}
1734 1735
1735QString Addressee::asString() const 1736QString Addressee::asString() const
1736{ 1737{
1737 return "Smith, agent Smith..."; 1738 return "Smith, agent Smith...";
1738} 1739}
1739 1740
1740void Addressee::dump() const 1741void Addressee::dump() const
1741{ 1742{
1742 return; 1743 return;
1743#if 0 1744#if 0
1744 kdDebug(5700) << "Addressee {" << endl; 1745 kdDebug(5700) << "Addressee {" << endl;
1745 1746
1746 kdDebug(5700) << " Uid: '" << uid() << "'" << endl; 1747 kdDebug(5700) << " Uid: '" << uid() << "'" << endl;
1747 1748
1748 kdDebug(5700) << " Name: '" << name() << "'" << endl; 1749 kdDebug(5700) << " Name: '" << name() << "'" << endl;
1749 kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl; 1750 kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl;
1750 kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl; 1751 kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl;
1751 kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl; 1752 kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl;
1752 kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl; 1753 kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl;
1753 kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl; 1754 kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl;
1754 kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl; 1755 kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl;
1755 kdDebug(5700) << " NickName: '" << nickName() << "'" << endl; 1756 kdDebug(5700) << " NickName: '" << nickName() << "'" << endl;
1756 kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl; 1757 kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl;
1757 kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl; 1758 kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl;
1758 kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl; 1759 kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl;
1759 kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl; 1760 kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl;
1760 kdDebug(5700) << " Title: '" << title() << "'" << endl; 1761 kdDebug(5700) << " Title: '" << title() << "'" << endl;
1761 kdDebug(5700) << " Role: '" << role() << "'" << endl; 1762 kdDebug(5700) << " Role: '" << role() << "'" << endl;
1762 kdDebug(5700) << " Organization: '" << organization() << "'" << endl; 1763 kdDebug(5700) << " Organization: '" << organization() << "'" << endl;
1763 kdDebug(5700) << " Note: '" << note() << "'" << endl; 1764 kdDebug(5700) << " Note: '" << note() << "'" << endl;
1764 kdDebug(5700) << " ProductId: '" << productId() << "'" << endl; 1765 kdDebug(5700) << " ProductId: '" << productId() << "'" << endl;
1765 kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl; 1766 kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl;
1766 kdDebug(5700) << " SortString: '" << sortString() << "'" << endl; 1767 kdDebug(5700) << " SortString: '" << sortString() << "'" << endl;
1767 kdDebug(5700) << " Url: '" << url().url() << "'" << endl; 1768 kdDebug(5700) << " Url: '" << url().url() << "'" << endl;
1768 kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl; 1769 kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl;
1769 kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl; 1770 kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl;
1770 kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl; 1771 kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl;
1771 kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl; 1772 kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl;
1772 kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl; 1773 kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl;
1773 1774
1774 kdDebug(5700) << " Emails {" << endl; 1775 kdDebug(5700) << " Emails {" << endl;
1775 QStringList e = emails(); 1776 QStringList e = emails();
1776 QStringList::ConstIterator it; 1777 QStringList::ConstIterator it;
1777 for( it = e.begin(); it != e.end(); ++it ) { 1778 for( it = e.begin(); it != e.end(); ++it ) {
1778 kdDebug(5700) << " " << (*it) << endl; 1779 kdDebug(5700) << " " << (*it) << endl;
1779 } 1780 }
1780 kdDebug(5700) << " }" << endl; 1781 kdDebug(5700) << " }" << endl;
1781 1782
1782 kdDebug(5700) << " PhoneNumbers {" << endl; 1783 kdDebug(5700) << " PhoneNumbers {" << endl;
1783 PhoneNumber::List p = phoneNumbers(); 1784 PhoneNumber::List p = phoneNumbers();
1784 PhoneNumber::List::ConstIterator it2; 1785 PhoneNumber::List::ConstIterator it2;
1785 for( it2 = p.begin(); it2 != p.end(); ++it2 ) { 1786 for( it2 = p.begin(); it2 != p.end(); ++it2 ) {
1786 kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl; 1787 kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl;
1787 } 1788 }
1788 kdDebug(5700) << " }" << endl; 1789 kdDebug(5700) << " }" << endl;
1789 1790
1790 Address::List a = addresses(); 1791 Address::List a = addresses();
1791 Address::List::ConstIterator it3; 1792 Address::List::ConstIterator it3;
1792 for( it3 = a.begin(); it3 != a.end(); ++it3 ) { 1793 for( it3 = a.begin(); it3 != a.end(); ++it3 ) {
1793 (*it3).dump(); 1794 (*it3).dump();
1794 } 1795 }
1795 1796
1796 kdDebug(5700) << " Keys {" << endl; 1797 kdDebug(5700) << " Keys {" << endl;
1797 Key::List k = keys(); 1798 Key::List k = keys();
1798 Key::List::ConstIterator it4; 1799 Key::List::ConstIterator it4;
1799 for( it4 = k.begin(); it4 != k.end(); ++it4 ) { 1800 for( it4 = k.begin(); it4 != k.end(); ++it4 ) {
1800 kdDebug(5700) << " Type: " << int((*it4).type()) << 1801 kdDebug(5700) << " Type: " << int((*it4).type()) <<
1801 " Key: " << (*it4).textData() << 1802 " Key: " << (*it4).textData() <<
1802 " CustomString: " << (*it4).customTypeString() << endl; 1803 " CustomString: " << (*it4).customTypeString() << endl;
1803 } 1804 }
1804 kdDebug(5700) << " }" << endl; 1805 kdDebug(5700) << " }" << endl;
1805 1806
1806 kdDebug(5700) << "}" << endl; 1807 kdDebug(5700) << "}" << endl;
1807#endif 1808#endif
1808} 1809}
1809 1810
1810 1811
1811void Addressee::insertAddress( const Address &address ) 1812void Addressee::insertAddress( const Address &address )
1812{ 1813{
1813 detach(); 1814 detach();
1814 mData->empty = false; 1815 mData->empty = false;
1815 1816
1816 Address::List::Iterator it; 1817 Address::List::Iterator it;
1817 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1818 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1818 if ( (*it).id() == address.id() ) { 1819 if ( (*it).id() == address.id() ) {
1819 *it = address; 1820 *it = address;
1820 return; 1821 return;
1821 } 1822 }
1822 } 1823 }
1823 mData->addresses.append( address ); 1824 mData->addresses.append( address );
1824} 1825}
1825 1826
1826void Addressee::removeAddress( const Address &address ) 1827void Addressee::removeAddress( const Address &address )
1827{ 1828{
1828 detach(); 1829 detach();
1829 1830
1830 Address::List::Iterator it; 1831 Address::List::Iterator it;
1831 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1832 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1832 if ( (*it).id() == address.id() ) { 1833 if ( (*it).id() == address.id() ) {
1833 mData->addresses.remove( it ); 1834 mData->addresses.remove( it );
1834 return; 1835 return;
1835 } 1836 }
1836 } 1837 }
1837} 1838}
1838 1839
1839Address Addressee::address( int type ) const 1840Address Addressee::address( int type ) const
1840{ 1841{
1841 Address address( type ); 1842 Address address( type );
1842 Address::List::ConstIterator it; 1843 Address::List::ConstIterator it;
1843 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1844 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1844 if ( matchBinaryPatternA( (*it).type(), type ) ) { 1845 if ( matchBinaryPatternA( (*it).type(), type ) ) {
1845 if ( (*it).type() & Address::Pref ) 1846 if ( (*it).type() & Address::Pref )
1846 return (*it); 1847 return (*it);
1847 else if ( address.isEmpty() ) 1848 else if ( address.isEmpty() )
1848 address = (*it); 1849 address = (*it);
1849 } 1850 }
1850 } 1851 }
1851 1852
1852 return address; 1853 return address;
1853} 1854}
1854 1855
1855Address::List Addressee::addresses() const 1856Address::List Addressee::addresses() const
1856{ 1857{
1857 return mData->addresses; 1858 return mData->addresses;
1858} 1859}
1859 1860
1860Address::List Addressee::addresses( int type ) const 1861Address::List Addressee::addresses( int type ) const
1861{ 1862{
1862 Address::List list; 1863 Address::List list;
1863 1864
1864 Address::List::ConstIterator it; 1865 Address::List::ConstIterator it;
1865 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1866 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1866 if ( matchBinaryPattern( (*it).type(), type ) ) { 1867 if ( matchBinaryPattern( (*it).type(), type ) ) {
1867 list.append( *it ); 1868 list.append( *it );
1868 } 1869 }
1869 } 1870 }
1870 1871
1871 return list; 1872 return list;
1872} 1873}
1873 1874
1874Address Addressee::findAddress( const QString &id ) const 1875Address Addressee::findAddress( const QString &id ) const
1875{ 1876{
1876 Address::List::ConstIterator it; 1877 Address::List::ConstIterator it;
1877 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1878 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1878 if ( (*it).id() == id ) { 1879 if ( (*it).id() == id ) {
1879 return *it; 1880 return *it;
1880 } 1881 }
1881 } 1882 }
1882 return Address(); 1883 return Address();
1883} 1884}
1884 1885
1885void Addressee::insertCategory( const QString &c ) 1886void Addressee::insertCategory( const QString &c )
1886{ 1887{
1887 detach(); 1888 detach();
1888 mData->empty = false; 1889 mData->empty = false;
1889 1890
1890 if ( mData->categories.contains( c ) ) return; 1891 if ( mData->categories.contains( c ) ) return;
1891 1892
1892 mData->categories.append( c ); 1893 mData->categories.append( c );
1893} 1894}
1894 1895
1895void Addressee::removeCategory( const QString &c ) 1896void Addressee::removeCategory( const QString &c )
1896{ 1897{
1897 detach(); 1898 detach();
1898 1899
1899 QStringList::Iterator it = mData->categories.find( c ); 1900 QStringList::Iterator it = mData->categories.find( c );
1900 if ( it == mData->categories.end() ) return; 1901 if ( it == mData->categories.end() ) return;
1901 1902
1902 mData->categories.remove( it ); 1903 mData->categories.remove( it );
1903} 1904}
1904 1905
1905bool Addressee::hasCategory( const QString &c ) const 1906bool Addressee::hasCategory( const QString &c ) const
1906{ 1907{
1907 return ( mData->categories.contains( c ) ); 1908 return ( mData->categories.contains( c ) );
1908} 1909}
1909 1910
1910void Addressee::setCategories( const QStringList &c ) 1911void Addressee::setCategories( const QStringList &c )
1911{ 1912{
1912 detach(); 1913 detach();
1913 mData->empty = false; 1914 mData->empty = false;
1914 1915
1915 mData->categories = c; 1916 mData->categories = c;
1916} 1917}
1917 1918
1918QStringList Addressee::categories() const 1919QStringList Addressee::categories() const
1919{ 1920{
1920 return mData->categories; 1921 return mData->categories;
1921} 1922}
1922 1923
1923void Addressee::insertCustom( const QString &app, const QString &name, 1924void Addressee::insertCustom( const QString &app, const QString &name,
1924 const QString &value ) 1925 const QString &value )
1925{ 1926{
1926 if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return; 1927 if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return;
1927 1928
1928 detach(); 1929 detach();
1929 mData->empty = false; 1930 mData->empty = false;
1930 1931
1931 QString qualifiedName = app + "-" + name + ":"; 1932 QString qualifiedName = app + "-" + name + ":";
1932 1933
1933 QStringList::Iterator it; 1934 QStringList::Iterator it;
1934 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1935 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1935 if ( (*it).startsWith( qualifiedName ) ) { 1936 if ( (*it).startsWith( qualifiedName ) ) {
1936 (*it) = qualifiedName + value; 1937 (*it) = qualifiedName + value;
1937 return; 1938 return;
1938 } 1939 }
1939 } 1940 }
1940 mData->custom.append( qualifiedName + value ); 1941 mData->custom.append( qualifiedName + value );
1941} 1942}
1942 1943
1943void Addressee::removeCustom( const QString &app, const QString &name) 1944void Addressee::removeCustom( const QString &app, const QString &name)
1944{ 1945{
1945 detach(); 1946 detach();
1946 1947
1947 QString qualifiedName = app + "-" + name + ":"; 1948 QString qualifiedName = app + "-" + name + ":";
1948 1949
1949 QStringList::Iterator it; 1950 QStringList::Iterator it;
1950 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1951 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1951 if ( (*it).startsWith( qualifiedName ) ) { 1952 if ( (*it).startsWith( qualifiedName ) ) {
1952 mData->custom.remove( it ); 1953 mData->custom.remove( it );
1953 return; 1954 return;
1954 } 1955 }
1955 } 1956 }
1956} 1957}
1957 1958
1958QString Addressee::custom( const QString &app, const QString &name ) const 1959QString Addressee::custom( const QString &app, const QString &name ) const
1959{ 1960{
1960 QString qualifiedName = app + "-" + name + ":"; 1961 QString qualifiedName = app + "-" + name + ":";
1961 QString value; 1962 QString value;
1962 1963
1963 QStringList::ConstIterator it; 1964 QStringList::ConstIterator it;
1964 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1965 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1965 if ( (*it).startsWith( qualifiedName ) ) { 1966 if ( (*it).startsWith( qualifiedName ) ) {
1966 value = (*it).mid( (*it).find( ":" ) + 1 ); 1967 value = (*it).mid( (*it).find( ":" ) + 1 );
1967 break; 1968 break;
1968 } 1969 }
1969 } 1970 }
1970 1971
1971 return value; 1972 return value;
1972} 1973}
1973 1974
1974void Addressee::setCustoms( const QStringList &l ) 1975void Addressee::setCustoms( const QStringList &l )
1975{ 1976{
1976 detach(); 1977 detach();
1977 mData->empty = false; 1978 mData->empty = false;
1978 1979
1979 mData->custom = l; 1980 mData->custom = l;
1980} 1981}
1981 1982
1982QStringList Addressee::customs() const 1983QStringList Addressee::customs() const
1983{ 1984{
1984 return mData->custom; 1985 return mData->custom;
1985} 1986}
1986 1987
1987void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName, 1988void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName,
1988 QString &email) 1989 QString &email)
1989{ 1990{
1990 int startPos, endPos, len; 1991 int startPos, endPos, len;
1991 QString partA, partB, result; 1992 QString partA, partB, result;
1992 char endCh = '>'; 1993 char endCh = '>';
1993 1994
1994 startPos = rawEmail.find('<'); 1995 startPos = rawEmail.find('<');
1995 if (startPos < 0) 1996 if (startPos < 0)
1996 { 1997 {
1997 startPos = rawEmail.find('('); 1998 startPos = rawEmail.find('(');
1998 endCh = ')'; 1999 endCh = ')';
1999 } 2000 }
2000 if (startPos < 0) 2001 if (startPos < 0)
2001 { 2002 {
2002 // We couldn't find any separators, so we assume the whole string 2003 // We couldn't find any separators, so we assume the whole string
2003 // is the email address 2004 // is the email address
2004 email = rawEmail; 2005 email = rawEmail;
2005 fullName = ""; 2006 fullName = "";
2006 } 2007 }
2007 else 2008 else
2008 { 2009 {
2009 // We have a start position, try to find an end 2010 // We have a start position, try to find an end
2010 endPos = rawEmail.find(endCh, startPos+1); 2011 endPos = rawEmail.find(endCh, startPos+1);