1 #include "frmContactEditor.h"
2 #include "../common/base64.h"
4 void frmContactEditor::LoadLogo(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *LogoCount){
6 size_t intPropertyLen = wxSPropertySeg1.Len();
7 std::map<int, int> SplitPoints;
8 std::map<int, int> SplitLength;
9 std::map<int, int>::iterator SLiter;
10 wxString PropertyData;
11 wxString PropertyName;
12 wxString PropertyValue;
13 wxString PropertyTokens;
14 bool FirstToken = TRUE;
15 int intSplitsFound = 0;
22 SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
26 // Look for type before continuing.
28 for (std::map<int, int>::iterator intiter = SplitPoints.begin();
29 intiter != SplitPoints.end(); ++intiter){
31 SLiter = SplitLength.find(intiter->first);
33 PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
35 wxStringTokenizer PropertyElement (PropertyData, wxT("="));
36 PropertyName = PropertyElement.GetNextToken();
37 PropertyValue = PropertyElement.GetNextToken();
39 intPrevValue = intiter->second;
41 if (PropertyName == wxT("TYPE")){
43 if (PropertyValue == wxT("work")){
47 } else if (PropertyValue == wxT("home")){
61 // Setup blank lines for later on.
63 LogosList.insert(std::make_pair(intValueSeek, ""));
64 LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
65 LogosListAltID.insert(std::make_pair(intValueSeek, wxT("")));
66 LogosListPID.insert(std::make_pair(intValueSeek, wxT("")));
67 LogosListPref.insert(std::make_pair(intValueSeek, 0));
68 LogosListPicEncType.insert(std::make_pair(intValueSeek, wxT("")));
69 LogosListPictureType.insert(std::make_pair(intValueSeek, wxT("")));
70 LogosListTokens.insert(std::make_pair(intValueSeek, wxT("")));
71 LogosListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
75 for (std::map<int, int>::iterator intiter = SplitPoints.begin();
76 intiter != SplitPoints.end(); ++intiter){
78 SLiter = SplitLength.find(intiter->first);
80 PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
82 wxStringTokenizer PropertyElement (PropertyData, wxT("="));
83 PropertyName = PropertyElement.GetNextToken();
84 PropertyValue = PropertyElement.GetNextToken();
86 intPrevValue = intiter->second;
88 // Process properties.
90 size_t intPropertyValueLen = PropertyValue.Len();
92 if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
95 PropertyValue.RemoveLast();
99 if (PropertyValue.Mid(0, 1) == wxT("\"")){
101 PropertyValue.Remove(0, 1);
105 ProcessCaptureStrings(&PropertyValue);
107 if (PropertyName == wxT("ALTID")){
109 if (intType == 0){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
110 else if (intType == 1){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
111 else if (intType == 2){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
113 } else if (PropertyName == wxT("PID")){
115 if (intType == 0){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
116 else if (intType == 1){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
117 else if (intType == 2){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
119 } else if (PropertyName == wxT("PREF")){
121 intPref = wxAtoi(PropertyValue);
123 if (intType == 0){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
124 else if (intType == 1){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
125 else if (intType == 2){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
127 } else if (PropertyName == wxT("MEDIATYPE")){
129 if (intType == 0){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
130 else if (intType == 1){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
131 else if (intType == 2){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
135 // Something else we don't know about so append
136 // to the tokens variable.
138 if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
140 if (FirstToken == TRUE){
142 PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
147 PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
157 intPropertyLen = wxSPropertySeg2.Len();
164 wxString wxSPhotoURI;
165 wxString wxSPhotoMIME;
166 wxString wxSPhotoEncoding;
167 wxString wxSPhotoData;
168 std::string base64enc;
170 ProcessCaptureStrings(&wxSPropertySeg2);
172 if (intSplitsFound == 0){
176 std::map<int, int>::iterator striter;
178 striter = SplitLength.find(1);
180 wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
182 while (wSTDataType.HasMoreTokens() == TRUE){
184 wxSPhotoURI = wSTDataType.GetNextToken();
185 wxSPhotoMIME = wSTDataType.GetNextToken();
190 wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));
192 while (wSTDataInfo.HasMoreTokens() == TRUE){
194 wxSPhotoEncoding = wSTDataInfo.GetNextToken();
195 wxSPhotoData = wSTDataInfo.GetNextToken();
196 base64enc = wxSPhotoData.mb_str();
203 // Add the data to the General/Home/Work address variables.
207 coldata.SetId(intValueSeek);
208 coldata.SetData(intValueSeek);
209 coldata.SetText(_("Picture"));
211 ListCtrlIndex = lboLogos->InsertItem(coldata);
213 if (intPref > 0 && intPref < 101){
215 lboLogos->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
219 LogosList.erase(intValueSeek);
220 LogosListType.erase(intValueSeek);
221 LogosListTokens.erase(intValueSeek);
222 LogosListPictureType.erase(intValueSeek);
223 LogosListPicEncType.erase(intValueSeek);
224 LogosList.insert(std::make_pair(intValueSeek, base64enc));
225 LogosListPictureType.insert(std::make_pair(intValueSeek, wxSPhotoMIME));
226 LogosListPicEncType.insert(std::make_pair(intValueSeek, wxSPhotoEncoding));
230 LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
232 } else if (intType == 1){
234 LogosListType.insert(std::make_pair(intValueSeek, wxT("home")));
235 lboLogos->SetItem(ListCtrlIndex, 1, _("Home"));
237 } else if (intType == 2){
239 LogosListType.insert(std::make_pair(intValueSeek, wxT("work")));
240 lboLogos->SetItem(ListCtrlIndex, 1, _("Work"));
244 LogosListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));