qtmobility/plugins/contacts/symbian/src/transform/cnttransformavatar.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 11 06b8e2af4411
equal deleted inserted replaced
1:2b40d63a9c3d 4:90517678cc4f
    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);