Skip to content

Commit 1283661

Browse files
authoredOct 19, 2020
Merge pull request #1489 from nextcloud/fix/avatar-cleanup
Cleanup avatar fetching methods
2 parents 141a716 + 988eb3e commit 1283661

File tree

1 file changed

+53
-30
lines changed

1 file changed

+53
-30
lines changed
 

‎src/components/Avatar/Avatar.vue

+53-30
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,10 @@ export default {
449449
}
450450
this.isMenuLoaded = true
451451
},
452+
453+
/**
454+
* Handle avatar loading if user or url defined
455+
*/
452456
loadAvatarUrl() {
453457
this.isAvatarLoaded = false
454458

@@ -459,44 +463,63 @@ export default {
459463
return
460464
}
461465

462-
const urlGenerator = (user, size) => {
463-
let url = '/avatar/{user}/{size}'
464-
if (this.isGuest) {
465-
url = '/avatar/guest/{user}/{size}'
466-
}
466+
// Directly use the url if defined
467+
if (this.isUrlDefined) {
468+
this.updateImageIfValid(this.url)
469+
return
470+
}
467471

468-
let avatarUrl = generateUrl(
469-
url,
470-
{
471-
user,
472-
size,
473-
})
472+
const avatarUrl = this.avatarUrlGenerator(this.user, this.size)
473+
const srcset = [
474+
avatarUrl + ' 1x',
475+
this.avatarUrlGenerator(this.user, this.size * 2) + ' 2x',
476+
this.avatarUrlGenerator(this.user, this.size * 4) + ' 4x',
477+
].join(', ')
474478

475-
// eslint-disable-next-line camelcase
476-
if (user === getCurrentUser()?.uid && typeof oc_userconfig !== 'undefined') {
477-
avatarUrl += '?v=' + oc_userconfig.avatar.version
478-
}
479+
this.updateImageIfValid(avatarUrl, srcset)
480+
},
479481

480-
return avatarUrl
482+
/**
483+
* Generate an avatar url from the server's avatar endpoint
484+
*
485+
* @param {string} user the user id
486+
* @param {number} size the desired size
487+
* @returns {string}
488+
*/
489+
avatarUrlGenerator(user, size) {
490+
let url = '/avatar/{user}/{size}'
491+
if (this.isGuest) {
492+
url = '/avatar/guest/{user}/{size}'
481493
}
482494

483-
let avatarUrl = urlGenerator(this.user, this.size)
484-
if (this.isUrlDefined) {
485-
avatarUrl = this.url
495+
let avatarUrl = generateUrl(
496+
url,
497+
{
498+
user,
499+
size,
500+
})
501+
502+
// eslint-disable-next-line camelcase
503+
if (user === getCurrentUser()?.uid && typeof oc_userconfig !== 'undefined') {
504+
avatarUrl += '?v=' + oc_userconfig.avatar.version
486505
}
487506

488-
const srcset = [
489-
avatarUrl + ' 1x',
490-
urlGenerator(this.user, this.size * 2) + ' 2x',
491-
urlGenerator(this.user, this.size * 4) + ' 4x',
492-
].join(', ')
507+
return avatarUrl
508+
},
493509

510+
/**
511+
* Check if the provided url is valid and update Avatar if so
512+
*
513+
* @param {string} url the avatar url
514+
* @param {array} srcset the avatar srcset
515+
*/
516+
updateImageIfValid(url, srcset = null) {
494517
// skip loading
495518
const userHasAvatar = getUserHasAvatar(this.user)
496519
if (typeof userHasAvatar === 'boolean') {
497520
this.isAvatarLoaded = true
498-
this.avatarUrlLoaded = avatarUrl
499-
if (!this.isUrlDefined) {
521+
this.avatarUrlLoaded = url
522+
if (srcset) {
500523
this.avatarSrcSetLoaded = srcset
501524
}
502525
if (userHasAvatar === false) {
@@ -507,8 +530,8 @@ export default {
507530

508531
const img = new Image()
509532
img.onload = () => {
510-
this.avatarUrlLoaded = avatarUrl
511-
if (!this.isUrlDefined) {
533+
this.avatarUrlLoaded = url
534+
if (srcset) {
512535
this.avatarSrcSetLoaded = srcset
513536
}
514537
this.isAvatarLoaded = true
@@ -521,10 +544,10 @@ export default {
521544
setUserHasAvatar(this.user, false)
522545
}
523546

524-
if (!this.isUrlDefined) {
547+
if (srcset) {
525548
img.srcset = srcset
526549
}
527-
img.src = avatarUrl
550+
img.src = url
528551
},
529552
},
530553
}

0 commit comments

Comments
 (0)
Please sign in to comment.