00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "pab_pablib.h"
00019
00020 bool operator < (mapitag_t & a,mapitag_t & b) { return a._order<b._order; }
00021 bool operator > (mapitag_t & a,mapitag_t & b) { return a._order>b._order; }
00022 bool operator == (mapitag_t & a,mapitag_t & b) { return a._order==b._order; }
00023
00024 static word_t
00025 map_givenname[]=
00026 { pr_givenname,
00027 SET_MS_GIVEN_NAME,
00028 0
00029 },
00030 map_email[]=
00031 { pr_email,
00032 SET_MS_EMAIL,
00033 0
00034 },
00035 map_firstname[]=
00036 { pr_firstname,
00037 SET_MS_FIRSTNAME,
00038 0
00039 },
00040 map_lastname[]=
00041 { pr_lastname,
00042 SET_MS_LASTNAME,
00043 0
00044 },
00045 map_additionalname[]=
00046 { pr_additionalname,
00047 SET_MS_MIDDLENAME,
00048 0
00049 },
00050 map_title[]=
00051 { pr_title,
00052 SET_MS_TITLE,
00053 0
00054 },
00055 map_address[]=
00056 { pr_address,
00057 SET_MS_ADDRESS,
00058 0
00059 },
00060 map_zip[]=
00061 { pr_zip,
00062 SET_MS_ZIP,
00063 0
00064 },
00065 map_state[]=
00066 { pr_state,
00067 SET_MS_STATE,
00068 0
00069 },
00070 map_town[]=
00071 { pr_town,
00072 SET_MS_TOWN,
00073 0
00074 },
00075 map_country[]=
00076 { pr_country,
00077 SET_MS_COUNTRY,
00078 0
00079 },
00080 map_tel[]=
00081 { pr_tel,
00082 SET_MS_TEL,
00083 0
00084 },
00085 map_mobile[]=
00086 { pr_mobile,
00087 SET_MS_MOBILE,
00088 0
00089 },
00090 map_fax[]=
00091 { pr_fax,
00092 SET_MS_FAX,
00093 0
00094 },
00095 map_job[]=
00096 { pr_job,
00097 HP_OPENMAIL_JOB,
00098 0
00099 },
00100 map_organization[]=
00101 { pr_organization,
00102 SET_MS_ORGANIZATION,
00103 HP_OPENMAIL_ORGANIZATION,
00104 0
00105 },
00106 map_department[]=
00107 { pr_department,
00108 SET_MS_DEPARTMENT,
00109 HP_OPENMAIL_DEPARTMENT,
00110 0
00111 },
00112 map_subdep[]=
00113 { pr_subdep,
00114 HP_OPENMAIL_SUBDEP,
00115 0
00116 },
00117 map_notes[]=
00118 { pr_notes,
00119 SET_MS_COMMENT,
00120 0
00121 },
00122 map_notused[]=
00123 { pr_notused,
00124 HP_OPENMAIL_LOCATION_OF_WORK,
00125 SET_NOT_USED,
00126 0
00127 };
00128
00129
00130 static word_t *mapi_map[]={ map_givenname, map_email,
00131 map_firstname, map_lastname, map_additionalname,map_title,
00132 map_address, map_town, map_zip, map_state, map_country,
00133 map_tel, map_mobile, map_fax,
00134 map_organization, map_department, map_subdep, map_job,
00135 map_notes,
00136 map_notused,
00137 NULL
00138 };
00139
00140 pabrec_entry mapitag_t::matchTag(void)
00141 {
00142 int i,j;
00143 pabrec_entry e=pr_unknown;
00144
00145 for(i=0;mapi_map[i]!=NULL && e==pr_unknown;i++) {
00146 for(j=1;mapi_map[i][j]!=0 && _tag!=mapi_map[i][j];j++);
00147 if (mapi_map[i][j]!=0) {
00148 e=(pabrec_entry) mapi_map[i][0];
00149 }
00150 }
00151 return e;
00152 }
00153
00154 pabfields_t::pabfields_t(pabrec & R, QWidget * )
00155 {
00156
00157
00158
00159
00160 int mb,me;
00161 uint i,k;
00162 content_t _tag,_order;
00163
00164 mb=R[1];
00165 me=R[2];
00166
00167 while (mb<me) {
00168 _tag=R.read(mb);mb+=sizeof(_tag);
00169 _order=R.read(mb);mb+=sizeof(_order);
00170
00171 {mapitag_t mt(_tag,_order);
00172 tags[tags.size()]=mt;
00173 context_tags[context_tags.size()]=mt;
00174 }
00175 }
00176 tags.sort();
00177
00178
00179
00180 for(i=2,k=0;i<R.N() && k<tags.size();i++,k++) {
00181 if (!isUsed(k)) { i-=1; }
00182 else {pabrec_entry e;
00183 QString E;
00184
00185 e=isWhat(k);
00186 E=R.getEntry(i);
00187 { QString s=E;
00188 s=s.stripWhiteSpace();
00189 E=s;
00190 }
00191
00192
00193
00194
00195
00196
00197
00198
00199 if (!E.isEmpty()) {
00200
00201 switch (e) {
00202 case pr_givenname: givenName=E;
00203 break;
00204 case pr_email: email=E;
00205 break;
00206 case pr_firstname: firstName=E;
00207 break;
00208 case pr_additionalname: additionalName=E;
00209 break;
00210 case pr_lastname: lastName=E;
00211 break;
00212 case pr_title: title=E;
00213 break;
00214 case pr_address: address=E;
00215 break;
00216 case pr_town: town=E;
00217 break;
00218 case pr_state: state=E;
00219 break;
00220 case pr_zip: zip=E;
00221 break;
00222 case pr_country: country=E;
00223 break;
00224 case pr_organization: organization=E;
00225 break;
00226 case pr_department: department=E;
00227 break;
00228 case pr_subdep: subDep=E;
00229 break;
00230 case pr_job: job=E;
00231 break;
00232 case pr_tel: tel=E;
00233 break;
00234 case pr_fax: fax=E;
00235 break;
00236 case pr_modem: modem=E;
00237 break;
00238 case pr_mobile: mobile=E;
00239 break;
00240 case pr_url: homepage=E;
00241 break;
00242 case pr_talk: talk=E;
00243 break;
00244 case pr_notes: comment=E;
00245 break;
00246 case pr_birthday: birthday=E;
00247 break;
00248 case pr_notused:
00249 break;
00250 default: {
00251
00252
00253 }
00254 break;
00255 }
00256 }
00257 }
00258 }
00259
00260 if (!firstName.isEmpty() && !lastName.isEmpty()) {
00261 givenName=lastName+", "+firstName;
00262 }
00263
00264
00265
00266 OK=true;
00267 }
00268
00269 bool pabfields_t::isUsed(int k)
00270 {
00271 return tags[k].isUsed();
00272 }
00273
00274 pabrec_entry pabfields_t::isWhat(int k)
00275 {
00276 return tags[k].matchTag();
00277 }
00278
00279 word_t pabfields_t::literal(int k)
00280 {
00281 return tags[k].literal();
00282 }
00283
00284 content_t pabfields_t::order(int k)
00285 {
00286 return tags[k].order();
00287 }
00288
00289 KABC::Addressee pabfields_t::get() {
00290 KABC::Addressee a;
00291 if (!givenName.isEmpty()) a.setFormattedName(givenName);
00292 if (!email.isEmpty()) a.insertEmail(email);
00293 if (!title.isEmpty()) a.setTitle(title);
00294 if (!firstName.isEmpty()) a.setName(firstName);
00295 if (!additionalName.isEmpty()) a.setAdditionalName(additionalName);
00296 if (!lastName.isEmpty()) a.setFamilyName(lastName);
00297
00298 KABC::Address addr;
00299 if (!address.isEmpty()) addr.setStreet(address);
00300 if (!town.isEmpty()) addr.setLocality(town);
00301 if (!zip.isEmpty()) addr.setPostalCode(zip);
00302 if (!state.isEmpty()) addr.setRegion(state);
00303 if (!country.isEmpty()) addr.setCountry(country);
00304 a.insertAddress(addr);
00305
00306 if (!organization.isEmpty()) a.setOrganization(organization);
00307 if (!department.isEmpty()) a.setRole(department);
00308
00309 if (!tel.isEmpty()) a.insertPhoneNumber( KABC::PhoneNumber( tel, KABC::PhoneNumber::Voice ) );
00310 if (!fax.isEmpty()) a.insertPhoneNumber( KABC::PhoneNumber( fax, KABC::PhoneNumber::Fax ) );
00311 if (!mobile.isEmpty()) a.insertPhoneNumber( KABC::PhoneNumber( mobile, KABC::PhoneNumber::Cell ) );
00312 if (!modem.isEmpty()) a.insertPhoneNumber( KABC::PhoneNumber( modem, KABC::PhoneNumber::Modem ) );
00313 if (!homepage.isEmpty()) a.setUrl(KURL( homepage ));
00314
00315 if (!comment.isEmpty()) a.setNote(comment);
00316
00317 return a;
00318 }
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341 pabrec::pabrec(pab & P)
00342 {
00343 adr_t A=P.tell();
00344 content_t hdr;
00345 word_t offset,size,dummy;
00346 int i;
00347
00348 hdr=P.go(A);
00349 offset=P.lower(hdr);
00350
00351 size=offset;
00352 _mem=new byte[size];
00353 P.read(_mem,size);
00354
00355 P.go(A+offset);
00356 P.read(m_N);
00357 m_W=new word_t[m_N+1];
00358
00359 P.read(dummy);
00360 for(i=0;i<=m_N;i++) {
00361 P.read(m_W[i]);
00362 }
00363 }
00364
00365 pabrec::~pabrec()
00366 {
00367 delete _mem;
00368 delete m_W;
00369 }
00370
00371
00372 content_t pabrec::read(word_t offset)
00373 {
00374 content_t R;
00375 R=_mem[offset+3];
00376 R<<=8;R+=_mem[offset+2];
00377 R<<=8;R+=_mem[offset+1];
00378 R<<=8;R+=_mem[offset];
00379 return R;
00380 }
00381
00382 const char *pabrec::getEntry(int i)
00383 {
00384 int mb,me;
00385 int k;
00386 mb=m_W[i];me=m_W[i+1];
00387 for(k=0;mb!=me;mb++) {
00388 if (_mem[mb]>=' ' || _mem[mb]=='\n' || _mem[mb]==13 || _mem[mb]=='\t') {
00389 if (_mem[mb]==13) { entry[k]='\n'; }
00390 else { entry[k]=_mem[mb]; }
00391 k+=1;
00392 }
00393 }
00394 entry[k]='\0';
00395 return (const char *) entry;
00396 }