示例#1
0
bool Geo::operator!=( const Geo &g ) const
{
  if ( !g.isValid() && !isValid() ) return false;
  if ( !g.isValid() || !isValid() ) return true;
  if ( g.mLatitude == mLatitude && g.mLongitude == mLongitude ) return false;
  return true;
}
示例#2
0
void VCardFormatImpl::addGeoValue( VCARD::VCard *vcard, const Geo &geo )
{
  if ( !geo.isValid() ) return;

  ContentLine cl;
  cl.setName( EntityTypeToParamName( EntityGeo ) );

  GeoValue *v = new GeoValue;
  v->setLatitude( geo.latitude() );
  v->setLongitude( geo.longitude() );

  cl.setValue( v );
  vcard->add(cl);
}
示例#3
0
// TODO: make list a const&
QString VCardTool::createVCards(Addressee::List list, VCard::Version version)
{
    VCard::List vCardList;

    Addressee::List::ConstIterator addrIt;
    Addressee::List::ConstIterator listEnd(list.constEnd());
    for(addrIt = list.constBegin(); addrIt != listEnd; ++addrIt)
    {
        VCard card;
        QStringList::ConstIterator strIt;

        // ADR + LABEL
        const Address::List addresses = (*addrIt).addresses();
        for(Address::List::ConstIterator it = addresses.begin(); it != addresses.end(); ++it)
        {
            QStringList address;

            bool isEmpty = ((*it).postOfficeBox().isEmpty() && (*it).extended().isEmpty() && (*it).street().isEmpty() && (*it).locality().isEmpty()
                            && (*it).region().isEmpty() && (*it).postalCode().isEmpty() && (*it).country().isEmpty());

            address.append((*it).postOfficeBox().replace(';', "\\;"));
            address.append((*it).extended().replace(';', "\\;"));
            address.append((*it).street().replace(';', "\\;"));
            address.append((*it).locality().replace(';', "\\;"));
            address.append((*it).region().replace(';', "\\;"));
            address.append((*it).postalCode().replace(';', "\\;"));
            address.append((*it).country().replace(';', "\\;"));

            VCardLine adrLine("ADR", address.join(";"));
            if(version == VCard::v2_1 && needsEncoding(address.join(";")))
            {
                adrLine.addParameter("charset", "UTF-8");
                adrLine.addParameter("encoding", "QUOTED-PRINTABLE");
            }

            VCardLine labelLine("LABEL", (*it).label());
            if(version == VCard::v2_1 && needsEncoding((*it).label()))
            {
                labelLine.addParameter("charset", "UTF-8");
                labelLine.addParameter("encoding", "QUOTED-PRINTABLE");
            }

            bool hasLabel = !(*it).label().isEmpty();
            QMap< QString, int >::ConstIterator typeIt;
            for(typeIt = mAddressTypeMap.constBegin(); typeIt != mAddressTypeMap.constEnd(); ++typeIt)
            {
                if(typeIt.data() & (*it).type())
                {
                    adrLine.addParameter("TYPE", typeIt.key());
                    if(hasLabel)
                        labelLine.addParameter("TYPE", typeIt.key());
                }
            }

            if(!isEmpty)
                card.addLine(adrLine);
            if(hasLabel)
                card.addLine(labelLine);
        }

        // AGENT
        card.addLine(createAgent(version, (*addrIt).agent()));

        // BDAY
        card.addLine(VCardLine("BDAY", createDateTime((*addrIt).birthday())));

        // CATEGORIES
        if(version == VCard::v3_0)
        {
            QStringList categories = (*addrIt).categories();
            QStringList::Iterator catIt;
            for(catIt = categories.begin(); catIt != categories.end(); ++catIt)
                (*catIt).replace(',', "\\,");

            VCardLine catLine("CATEGORIES", categories.join(","));
            if(version == VCard::v2_1 && needsEncoding(categories.join(",")))
            {
                catLine.addParameter("charset", "UTF-8");
                catLine.addParameter("encoding", "QUOTED-PRINTABLE");
            }

            card.addLine(catLine);
        }

        // CLASS
        if(version == VCard::v3_0)
        {
            card.addLine(createSecrecy((*addrIt).secrecy()));
        }

        // EMAIL
        const QStringList emails = (*addrIt).emails();
        bool pref = true;
        for(strIt = emails.begin(); strIt != emails.end(); ++strIt)
        {
            VCardLine line("EMAIL", *strIt);
            if(pref == true && emails.count() > 1)
            {
                line.addParameter("TYPE", "PREF");
                pref = false;
            }
            card.addLine(line);
        }

        // FN
        VCardLine fnLine("FN", (*addrIt).formattedName());
        if(version == VCard::v2_1 && needsEncoding((*addrIt).formattedName()))
        {
            fnLine.addParameter("charset", "UTF-8");
            fnLine.addParameter("encoding", "QUOTED-PRINTABLE");
        }
        card.addLine(fnLine);

        // GEO
        Geo geo = (*addrIt).geo();
        if(geo.isValid())
        {
            QString str;
            str.sprintf("%.6f;%.6f", geo.latitude(), geo.longitude());
            card.addLine(VCardLine("GEO", str));
        }

        // KEY
        const Key::List keys = (*addrIt).keys();
        Key::List::ConstIterator keyIt;
        for(keyIt = keys.begin(); keyIt != keys.end(); ++keyIt)
            card.addLine(createKey(*keyIt));

        // LOGO
        card.addLine(createPicture("LOGO", (*addrIt).logo()));

        // MAILER
        VCardLine mailerLine("MAILER", (*addrIt).mailer());
        if(version == VCard::v2_1 && needsEncoding((*addrIt).mailer()))
        {
            mailerLine.addParameter("charset", "UTF-8");
            mailerLine.addParameter("encoding", "QUOTED-PRINTABLE");
        }
        card.addLine(mailerLine);

        // N
        QStringList name;
        name.append((*addrIt).familyName().replace(';', "\\;"));
        name.append((*addrIt).givenName().replace(';', "\\;"));
        name.append((*addrIt).additionalName().replace(';', "\\;"));
        name.append((*addrIt).prefix().replace(';', "\\;"));
        name.append((*addrIt).suffix().replace(';', "\\;"));

        VCardLine nLine("N", name.join(";"));
        if(version == VCard::v2_1 && needsEncoding(name.join(";")))
        {
            nLine.addParameter("charset", "UTF-8");
            nLine.addParameter("encoding", "QUOTED-PRINTABLE");
        }
        card.addLine(nLine);

        // NAME
        VCardLine nameLine("NAME", (*addrIt).name());
        if(version == VCard::v2_1 && needsEncoding((*addrIt).name()))
        {
            nameLine.addParameter("charset", "UTF-8");
            nameLine.addParameter("encoding", "QUOTED-PRINTABLE");
        }
        card.addLine(nameLine);

        // NICKNAME
        if(version == VCard::v3_0)
            card.addLine(VCardLine("NICKNAME", (*addrIt).nickName()));

        // NOTE
        VCardLine noteLine("NOTE", (*addrIt).note());
        if(version == VCard::v2_1 && needsEncoding((*addrIt).note()))
        {
            noteLine.addParameter("charset", "UTF-8");
            noteLine.addParameter("encoding", "QUOTED-PRINTABLE");
        }
        card.addLine(noteLine);

        // ORG
        QStringList organization;
        organization.append((*addrIt).organization().replace(';', "\\;"));
        if(!(*addrIt).department().isEmpty())
            organization.append((*addrIt).department().replace(';', "\\;"));
        VCardLine orgLine("ORG", organization.join(";"));
        if(version == VCard::v2_1 && needsEncoding(organization.join(";")))
        {
            orgLine.addParameter("charset", "UTF-8");
            orgLine.addParameter("encoding", "QUOTED-PRINTABLE");
        }
        card.addLine(orgLine);

        // PHOTO
        card.addLine(createPicture("PHOTO", (*addrIt).photo()));

        // PROID
        if(version == VCard::v3_0)
            card.addLine(VCardLine("PRODID", (*addrIt).productId()));

        // REV
        card.addLine(VCardLine("REV", createDateTime((*addrIt).revision())));

        // ROLE
        VCardLine roleLine("ROLE", (*addrIt).role());
        if(version == VCard::v2_1 && needsEncoding((*addrIt).role()))
        {
            roleLine.addParameter("charset", "UTF-8");
            roleLine.addParameter("encoding", "QUOTED-PRINTABLE");
        }
        card.addLine(roleLine);

        // SORT-STRING
        if(version == VCard::v3_0)
            card.addLine(VCardLine("SORT-STRING", (*addrIt).sortString()));

        // SOUND
        card.addLine(createSound((*addrIt).sound()));

        // TEL
        const PhoneNumber::List phoneNumbers = (*addrIt).phoneNumbers();
        PhoneNumber::List::ConstIterator phoneIt;
        for(phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt)
        {
            VCardLine line("TEL", (*phoneIt).number());

            QMap< QString, int >::ConstIterator typeIt;
            for(typeIt = mPhoneTypeMap.constBegin(); typeIt != mPhoneTypeMap.constEnd(); ++typeIt)
            {
                if(typeIt.data() & (*phoneIt).type())
                    line.addParameter("TYPE", typeIt.key());
            }

            card.addLine(line);
        }

        // TITLE
        VCardLine titleLine("TITLE", (*addrIt).title());
        if(version == VCard::v2_1 && needsEncoding((*addrIt).title()))
        {
            titleLine.addParameter("charset", "UTF-8");
            titleLine.addParameter("encoding", "QUOTED-PRINTABLE");
        }
        card.addLine(titleLine);

        // TZ
        TimeZone timeZone = (*addrIt).timeZone();
        if(timeZone.isValid())
        {
            QString str;

            int neg = 1;
            if(timeZone.offset() < 0)
                neg = -1;

            str.sprintf("%c%02d:%02d", (timeZone.offset() >= 0 ? '+' : '-'), (timeZone.offset() / 60) * neg, (timeZone.offset() % 60) * neg);

            card.addLine(VCardLine("TZ", str));
        }

        // UID
        card.addLine(VCardLine("UID", (*addrIt).uid()));

        // URL
        card.addLine(VCardLine("URL", (*addrIt).url().url()));

        // VERSION
        if(version == VCard::v2_1)
            card.addLine(VCardLine("VERSION", "2.1"));
        if(version == VCard::v3_0)
            card.addLine(VCardLine("VERSION", "3.0"));

        // X-
        const QStringList customs = (*addrIt).customs();
        for(strIt = customs.begin(); strIt != customs.end(); ++strIt)
        {
            QString identifier = "X-" + (*strIt).left((*strIt).find(":"));
            QString value = (*strIt).mid((*strIt).find(":") + 1);
            if(value.isEmpty())
                continue;

            VCardLine line(identifier, value);
            if(version == VCard::v2_1 && needsEncoding(value))
            {
                line.addParameter("charset", "UTF-8");
                line.addParameter("encoding", "QUOTED-PRINTABLE");
            }
            card.addLine(line);
        }

        vCardList.append(card);
    }

    return VCardParser::createVCards(vCardList);
}