1 // ContactDataObject-Save.cpp - Client Data Object.
3 // (c) 2012-2016 Xestia Software Development.
5 // This file is part of Xestia Address Book.
7 // Xestia Address Book is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by the
9 // Free Software Foundation, version 3 of the license.
11 // Xestia Address Book is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with Xestia Address Book. If not, see <http://www.gnu.org/licenses/>
19 #include "ContactDataObject.h"
20 #include "../../version.h"
22 ContactSaveStatus ContactDataObject::SaveString(wxString *SaveData){
24 ContactSaveStatus SaveDataStatus = CONTACTSAVE_UNITTESTFAIL;
26 // Write the header for the vCard data file.
28 SaveData->Append("BEGIN:VCARD\n");
29 SaveData->Append("VERSION:4.0\n");
31 // Write the product ID.
35 SaveData->Append("PRODID:-//Xestia//Address Book Unit Testing//KW\n");
39 SaveData->Append(wxT("PRODID:-//Xestia//Address Book Version "));
40 SaveData->Append(wxT(XSDAB_VERSION));
41 SaveData->Append(wxT("//KW\n"));
47 wxString ProcessData = "";
49 for (std::map<int, wxString>::iterator FNIter = FullNamesList.begin();
50 FNIter != FullNamesList.end(); FNIter++){
52 ProcessData.Append("FN");
54 // Check if there is a value for TYPE.
56 if (FullNamesListType[FNIter->first].size() > 0){
58 ProcessData.Append(";TYPE=");
59 ProcessData.Append(FullNamesListType[FNIter->first]);
63 // Check if there is a value for LANGUAGE.
65 if (FullNamesListLanguage[FNIter->first].size() > 0){
67 ProcessData.Append(";LANGUAGE=");
68 ProcessData.Append(FullNamesListLanguage[FNIter->first]);
72 // Check if there is a value for ALTID.
74 if (FullNamesListAltID[FNIter->first].size() > 0){
76 ProcessData.Append(";ALTID=");
77 ProcessData.Append(FullNamesListAltID[FNIter->first]);
81 // Check if there is a value for PID.
83 if (FullNamesListPID[FNIter->first].size() > 0){
85 ProcessData.Append(";PID=");
86 ProcessData.Append(FullNamesListPID[FNIter->first]);
90 // Check if there is a value for PREF.
92 if (FullNamesListPref[FNIter->first] > 0){
94 ProcessData.Append(";PREF=");
95 ProcessData.Append(wxString::Format("%i", FullNamesListPref[FNIter->first]));
99 // Check if there is a value for tokens.
101 if (FullNamesListTokens[FNIter->first].size() > 0){
103 ProcessData.Append(";");
104 ProcessData.Append(FullNamesListTokens[FNIter->first]);
108 ProcessData.Append(":");
109 ProcessData.Append(FNIter->second);
110 ProcessData.Append("\n");
112 ProcessData = OutputText(&ProcessData);
114 SaveData->Append(ProcessData);
121 SaveTitle(&GeneralTitleList, &GeneralTitleListLanguage,
122 &GeneralTitleListAltID, &GeneralTitleListPID,
123 &GeneralTitleListType, &GeneralTitleListPref,
124 &GeneralTitleListTokens, SaveData, "");
125 SaveTitle(&HomeTitleList, &HomeTitleListLanguage,
126 &HomeTitleListAltID, &HomeTitleListPID,
127 &HomeTitleListType, &HomeTitleListPref,
128 &HomeTitleListTokens, SaveData, "home");
129 SaveTitle(&BusinessTitleList, &BusinessTitleListLanguage,
130 &BusinessTitleListAltID, &BusinessTitleListPID,
131 &BusinessTitleListType, &BusinessTitleListPref,
132 &BusinessTitleListTokens, SaveData, "work");
134 // Write the end part of the vCard data file.
136 SaveData->Append("END:VCARD");
138 SaveDataStatus = CONTACTSAVE_OK;
140 return SaveDataStatus;
144 void ContactDataObject::SaveTitle(map<int, wxString> *TitleList, map<int, wxString> *TitleListLanguage,
145 map<int, wxString> *TitleListAltID, map<int, wxString> *TitleListPID,
146 map<int, wxString> *TitleListType, map<int, int> *TitleListPref,
147 map<int, wxString> *TitleListTokens, wxString *SaveData, wxString DataType){
149 wxString ProcessData = "";
151 for (std::map<int, wxString>::iterator TitleIter = TitleList->begin();
152 TitleIter != TitleList->end(); TitleIter++){
154 ProcessData.Append("TITLE");
156 // Check if there is a value for TYPE.
158 if (DataType.size() > 0){
160 ProcessData.Append(";TYPE=");
161 ProcessData.Append(DataType);
165 // Check if there is a value for ALTID.
167 if ((*TitleListAltID)[TitleIter->first].size() > 0){
169 ProcessData.Append(";ALTID=");
170 ProcessData.Append((*TitleListAltID)[TitleIter->first]);
174 // Check if there is a value for LANGUAGE.
176 if ((*TitleListLanguage)[TitleIter->first].size() > 0){
178 ProcessData.Append(";LANGUAGE=");
179 ProcessData.Append((*TitleListLanguage)[TitleIter->first]);
183 // Check if there is a value for PID.
185 if ((*TitleListPID)[TitleIter->first].size() > 0){
187 ProcessData.Append(";PID=");
188 ProcessData.Append((*TitleListPID)[TitleIter->first]);
192 // Check if there is a value for PREF.
194 if ((*TitleListPref)[TitleIter->first] > 0){
196 ProcessData.Append(";PREF=");
197 ProcessData.Append(wxString::Format("%i", (*TitleListPref)[TitleIter->first]));
201 // Check if there is a value for tokens.
203 if ((*TitleListTokens)[TitleIter->first].size() > 0){
205 ProcessData.Append(";");
206 ProcessData.Append((*TitleListTokens)[TitleIter->first]);
210 ProcessData.Append(":");
211 ProcessData.Append(TitleIter->second);
212 ProcessData.Append("\n");
214 ProcessData = OutputText(&ProcessData);
216 SaveData->Append(ProcessData);