Skip to content
This repository has been archived by the owner on Sep 4, 2021. It is now read-only.

Commit

Permalink
[libcontacts] Allow empty avatar to precede others with multiple avat…
Browse files Browse the repository at this point in the history
…ar types

If a contact has avatars with multiple metadata types, a non-empty
type would still override an empty path for a preceding metadata
category.
  • Loading branch information
matthewvogt committed Oct 10, 2013
1 parent e2c36c6 commit 43a82f7
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions src/seasidecache.cpp
Expand Up @@ -1021,15 +1021,15 @@ QString SeasideCache::generateDisplayLabelFromNonNameDetails(const QContact &con
return QString();
}

static QUrl avatarUrlWithMetadata(const QContact &c, const QString &metadataFragment = QString())
static bool avatarUrlWithMetadata(const QContact &contact, QUrl &matchingUrl, const QString &metadataFragment = QString())
{
static const QString localMetadata(QString::fromLatin1("local"));
static const QString fileScheme(QString::fromLatin1("file"));

QUrl fallbackUrl;
QUrl remoteFallbackUrl;

QList<QContactAvatar> avatarDetails = c.details<QContactAvatar>();
QList<QContactAvatar> avatarDetails = contact.details<QContactAvatar>();
for (int i = 0; i < avatarDetails.size(); ++i) {
const QContactAvatar &av(avatarDetails[i]);

Expand All @@ -1043,7 +1043,8 @@ static QUrl avatarUrlWithMetadata(const QContact &c, const QString &metadataFrag

if (metadata == localMetadata) {
// We have a local avatar record - use the image it specifies
return avatarImageUrl;
matchingUrl = avatarImageUrl;
return true;
} else {
// queue it as fallback - prefer local file system images over remote, if possible
const bool remote(!avatarImageUrl.scheme().isEmpty() && avatarImageUrl.scheme() != fileScheme);
Expand All @@ -1055,24 +1056,29 @@ static QUrl avatarUrlWithMetadata(const QContact &c, const QString &metadataFrag
}

if (!fallbackUrl.isEmpty()) {
return fallbackUrl;
matchingUrl = fallbackUrl;
return true;
} else if (!remoteFallbackUrl.isEmpty()) {
return remoteFallbackUrl;
matchingUrl = remoteFallbackUrl;
return true;
}

// no matching avatar image.
return QUrl();
return false;
}

QUrl SeasideCache::filteredAvatarUrl(const QContact &contact, const QStringList &metadataFragments)
{
QUrl matchingUrl;

if (metadataFragments.isEmpty()) {
return avatarUrlWithMetadata(contact);
if (avatarUrlWithMetadata(contact, matchingUrl)) {
return matchingUrl;
}
}

foreach (const QString &metadataFragment, metadataFragments) {
QUrl matchingUrl = avatarUrlWithMetadata(contact, metadataFragment);
if (!matchingUrl.isEmpty()) {
if (avatarUrlWithMetadata(contact, matchingUrl, metadataFragment)) {
return matchingUrl;
}
}
Expand Down

0 comments on commit 43a82f7

Please sign in to comment.