46 if(detail.definitionName() != QContactAvatar::DefinitionName) |
46 if(detail.definitionName() != QContactAvatar::DefinitionName) |
47 User::Leave(KErrArgument); |
47 User::Leave(KErrArgument); |
48 |
48 |
49 QList<CContactItemField *> fieldList; |
49 QList<CContactItemField *> fieldList; |
50 |
50 |
51 //cast to avatar |
51 //cast to avatar |
52 const QContactAvatar &avatar(static_cast<const QContactAvatar&>(detail)); |
52 const QContactAvatar &avatar(static_cast<const QContactAvatar&>(detail)); |
53 |
53 |
|
54 //create new field |
|
55 QString urlString = avatar.imageUrl().toString(); |
|
56 TPtrC fieldText(reinterpret_cast<const TUint16*>(urlString.utf16())); |
54 |
57 |
55 //create new field |
58 //copy filename and replace slash with a backslash |
56 TPtrC fieldText(reinterpret_cast<const TUint16*>(avatar.avatar().utf16())); |
59 TFileName filename; |
|
60 for(TInt i(0); i < fieldText.Length(); ++i) { |
|
61 if(i >= filename.MaxLength()) |
|
62 User::Leave(KErrTooBig); |
|
63 if(fieldText[i] == '/') { |
|
64 filename.Append('\\'); |
|
65 } else { |
|
66 filename.Append(fieldText[i]); |
|
67 } |
|
68 } |
57 |
69 |
58 if(fieldText.Length()) { |
70 if(filename.Length()) { |
59 //supported subTypes |
71 TUid uid(KUidContactFieldCodImage); |
60 const QString& subTypeImage(QContactAvatar::SubTypeImage); |
|
61 const QString& subTypeAudioRingtone(QContactAvatar::SubTypeAudioRingtone); |
|
62 const QString& subTypeVideoRingtone(QContactAvatar::SubTypeVideoRingtone); |
|
63 |
72 |
64 QString subType = avatar.subType(); |
73 CContactItemField* newField = CContactItemField::NewLC(KStorageTypeText, uid); |
65 TUid uid(KNullUid); |
|
66 if(subType.isEmpty()) { |
|
67 uid = KUidContactFieldCodImage; |
|
68 } else if (subType.compare(subTypeImage) == 0) { |
|
69 uid = KUidContactFieldCodImage; |
|
70 } else if (subType.compare(subTypeAudioRingtone) == 0) { |
|
71 uid = KUidContactFieldRingTone; |
|
72 } else if (subType.compare(subTypeVideoRingtone) == 0) { |
|
73 uid = KUidContactFieldVideoRingTone; |
|
74 } else { |
|
75 User::LeaveIfError(KErrNotSupported); |
|
76 } |
|
77 CContactItemField* newField = CContactItemField::NewLC(KStorageTypeText, uid); |
|
78 |
74 |
79 newField->SetMapping(KUidContactFieldVCardMapUnknown); |
75 newField->SetMapping(KUidContactFieldVCardMapUnknown); |
80 newField->TextStorage()->SetTextL(fieldText); |
76 newField->TextStorage()->SetTextL(filename); |
81 |
77 |
82 fieldList.append(newField); |
78 fieldList.append(newField); |
83 CleanupStack::Pop(newField); |
79 CleanupStack::Pop(newField); |
84 } |
80 } |
85 |
81 |
86 return fieldList; |
82 return fieldList; |
87 } |
83 } |
88 |
84 |
89 QContactDetail *CntTransformAvatar::transformItemField(const CContactItemField& field, const QContact &contact) |
85 QContactDetail *CntTransformAvatar::transformItemField(const CContactItemField& field, const QContact &contact) |
90 { |
86 { |
91 Q_UNUSED(contact); |
87 Q_UNUSED(contact); |
|
88 QContactAvatar *avatar = new QContactAvatar(); |
92 |
89 |
93 QContactAvatar *avatar = new QContactAvatar(); |
90 if (field.ContentType().ContainsFieldType(KUidContactFieldCodImage)) { |
94 |
91 CContactTextField* storage = field.TextStorage(); |
95 CContactTextField* storage = field.TextStorage(); |
92 QString avatarString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); |
96 QString avatarString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); |
93 avatar->setImageUrl(QUrl(avatarString)); |
97 avatar->setAvatar(avatarString); |
|
98 |
|
99 if (field.ContentType().ContainsFieldType(KUidContactFieldCodImage)) { |
|
100 avatar->setSubType(QContactAvatar::SubTypeImage); |
|
101 } |
|
102 else if (field.ContentType().ContainsFieldType(KUidContactFieldRingTone)) { |
|
103 avatar->setSubType(QContactAvatar::SubTypeAudioRingtone); |
|
104 } |
|
105 else if (field.ContentType().ContainsFieldType(KUidContactFieldVideoRingTone)) { |
|
106 avatar->setSubType(QContactAvatar::SubTypeVideoRingtone); |
|
107 } |
94 } |
108 |
95 |
109 return avatar; |
96 return avatar; |
110 } |
97 } |
111 |
98 |
112 bool CntTransformAvatar::supportsField(TUint32 fieldType) const |
99 bool CntTransformAvatar::supportsField(TUint32 fieldType) const |
113 { |
100 { |
114 bool ret = false; |
101 bool ret = false; |
115 if (fieldType == KUidContactFieldCodImage.iUid || |
102 if (fieldType == KUidContactFieldCodImage.iUid) |
116 fieldType == KUidContactFieldRingTone.iUid || |
|
117 fieldType == KUidContactFieldVideoRingTone.iUid) { |
|
118 ret = true; |
103 ret = true; |
119 } |
|
120 return ret; |
104 return ret; |
121 } |
105 } |
122 |
106 |
123 bool CntTransformAvatar::supportsDetail(QString detailName) const |
107 bool CntTransformAvatar::supportsDetail(QString detailName) const |
124 { |
108 { |
140 * Checks whether the subtype is supported |
124 * Checks whether the subtype is supported |
141 * |
125 * |
142 * \a subType The subtype to be checked |
126 * \a subType The subtype to be checked |
143 * \return True if this subtype is supported |
127 * \return True if this subtype is supported |
144 */ |
128 */ |
145 bool CntTransformAvatar::supportsSubType(const QString& subType) const |
129 bool CntTransformAvatar::supportsSubType(const QString& /*subType*/) const |
146 { |
130 { |
147 if(QContactAvatar::FieldSubType == subType) |
131 // XXX todo |
148 return true; |
132 return false; |
149 else |
|
150 return false; |
|
151 } |
133 } |
152 |
134 |
153 /*! |
135 /*! |
154 * Returns the filed id corresponding to a field |
136 * Returns the filed id corresponding to a field |
155 * |
137 * |
156 * \a fieldName The name of the supported field |
138 * \a fieldName The name of the supported field |
157 * \return fieldId for the fieldName, 0 if not supported |
139 * \return fieldId for the fieldName, 0 if not supported |
158 */ |
140 */ |
159 quint32 CntTransformAvatar::getIdForField(const QString& fieldName) const |
141 quint32 CntTransformAvatar::getIdForField(const QString& /*fieldName*/) const |
160 { |
142 { |
161 if (QContactAvatar::FieldAvatar == fieldName) |
143 // XXX todo |
162 return 0; |
144 return 0; |
163 else if (QContactAvatar::SubTypeImage == fieldName) |
|
164 return 0; |
|
165 else if (QContactAvatar::SubTypeVideo == fieldName) |
|
166 return 0; |
|
167 else if (QContactAvatar::SubTypeTexturedMesh == fieldName) |
|
168 return 0; |
|
169 else if (QContactAvatar::SubTypeAudioRingtone == fieldName) |
|
170 return 0; |
|
171 else if (QContactAvatar::SubTypeVideoRingtone == fieldName) |
|
172 return 0; |
|
173 else |
|
174 return 0; |
|
175 } |
145 } |
176 |
146 |
177 /*! |
147 /*! |
178 * Modifies the detail definitions. The default detail definitions are |
148 * Modifies the detail definitions. The default detail definitions are |
179 * queried from QContactManagerEngine::schemaDefinitions and then modified |
149 * queried from QContactManagerEngine::schemaDefinitions and then modified |
188 |
158 |
189 if(definitions.contains(QContactAvatar::DefinitionName)) { |
159 if(definitions.contains(QContactAvatar::DefinitionName)) { |
190 QContactDetailDefinition d = definitions.value(QContactAvatar::DefinitionName); |
160 QContactDetailDefinition d = definitions.value(QContactAvatar::DefinitionName); |
191 QMap<QString, QContactDetailFieldDefinition> fields = d.fields(); |
161 QMap<QString, QContactDetailFieldDefinition> fields = d.fields(); |
192 |
162 |
193 // Update sub-types |
163 // We only support imageUrl |
194 QContactDetailFieldDefinition f; |
164 fields.remove(QContactAvatar::FieldVideoUrl); |
195 f.setDataType(QVariant::String); // only allowed to be a single subtype |
|
196 f.setAllowableValues(QVariantList() |
|
197 << QString(QLatin1String(QContactAvatar::SubTypeImage)) |
|
198 << QString(QLatin1String(QContactAvatar::SubTypeAudioRingtone)) |
|
199 << QString(QLatin1String(QContactAvatar::SubTypeVideoRingtone))); |
|
200 fields.insert(QContactAvatar::FieldSubType, f); |
|
201 |
|
202 // Context not supported in symbian back-end, remove |
165 // Context not supported in symbian back-end, remove |
203 fields.remove(QContactAvatar::FieldContext); |
166 fields.remove(QContactAvatar::FieldContext); |
204 |
167 |
205 d.setFields(fields); |
168 d.setFields(fields); |
206 d.setUnique(true); |
169 d.setUnique(true); |