blob: 9e9f1d33e4c8d34959afbd4e89a2d9fe43ac86ec [file] [log] [blame]
/****************************************************************************
* Copyright (C) 2017-2020 Savoir-faire Linux Inc. *
* Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com> *
* Author : Alexandre Lision <alexandre.lision@savoirfairelinux.com> *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
#pragma once
#include <string>
#include <string_view>
#include <map>
#include "string_utils.h"
namespace vCard {
constexpr static const char* PROFILE_VCF = "x-jami/jami.profile.vcard";
struct Delimiter
{
constexpr static const char* SEPARATOR_TOKEN = ";";
constexpr static const char* END_LINE_TOKEN = "\n";
constexpr static const char* BEGIN_TOKEN = "BEGIN:VCARD";
constexpr static const char* END_TOKEN = "END:VCARD";
};
struct Property
{
constexpr static const char* UID = "UID";
constexpr static const char* VCARD_VERSION = "VERSION";
constexpr static const char* ADDRESS = "ADR";
constexpr static const char* AGENT = "AGENT";
constexpr static const char* BIRTHDAY = "BDAY";
constexpr static const char* CATEGORIES = "CATEGORIES";
constexpr static const char* CLASS = "CLASS";
constexpr static const char* DELIVERY_LABEL = "LABEL";
constexpr static const char* EMAIL = "EMAIL";
constexpr static const char* FORMATTED_NAME = "FN";
constexpr static const char* GEOGRAPHIC_POSITION = "GEO";
constexpr static const char* KEY = "KEY";
constexpr static const char* LOGO = "LOGO";
constexpr static const char* MAILER = "MAILER";
constexpr static const char* NAME = "N";
constexpr static const char* NICKNAME = "NICKNAME";
constexpr static const char* DESCRIPTION = "DESCRIPTION";
constexpr static const char* NOTE = "NOTE";
constexpr static const char* ORGANIZATION = "ORG";
constexpr static const char* PHOTO = "PHOTO";
constexpr static const char* PRODUCT_IDENTIFIER = "PRODID";
constexpr static const char* REVISION = "REV";
constexpr static const char* ROLE = "ROLE";
constexpr static const char* SORT_STRING = "SORT-STRING";
constexpr static const char* SOUND = "SOUND";
constexpr static const char* TELEPHONE = "TEL";
constexpr static const char* TIME_ZONE = "TZ";
constexpr static const char* TITLE = "TITLE";
constexpr static const char* URL = "URL";
constexpr static const char* BASE64 = "ENCODING=BASE64";
constexpr static const char* TYPE_PNG = "TYPE=PNG";
constexpr static const char* TYPE_JPEG = "TYPE=JPEG";
constexpr static const char* PHOTO_PNG = "PHOTO;ENCODING=BASE64;TYPE=PNG";
constexpr static const char* PHOTO_JPEG = "PHOTO;ENCODING=BASE64;TYPE=JPEG";
constexpr static const char* X_RINGACCOUNT = "X-RINGACCOUNTID";
};
namespace utils {
/**
* Payload to vCard
* @param content payload
* @return the vCard representation
*/
static std::map<std::string, std::string>
toMap(std::string_view content)
{
std::map<std::string, std::string> vCard;
std::string_view line;
while (jami::getline(content, line)) {
if (line.size()) {
const auto dblptPos = line.find(':');
if (dblptPos == std::string::npos)
continue;
vCard.emplace(line.substr(0, dblptPos), line.substr(dblptPos + 1));
}
}
return vCard;
}
} // namespace utils
} // namespace vCard