mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-04-21 07:32:02 +00:00
Create avatar utils file in common
This commit is contained in:
parent
cf73c7942d
commit
61ca898f9c
2 changed files with 73 additions and 0 deletions
68
src/common/avatarUtils.js
Normal file
68
src/common/avatarUtils.js
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
// Copyright (C) 2017-2025 Smart code 203358507
|
||||||
|
|
||||||
|
const CryptoJS = require('crypto-js');
|
||||||
|
|
||||||
|
const getGravatarUrl = (email, size = 200, defaultType = 'retro', rating = 'pg') => {
|
||||||
|
if (!email || typeof email !== 'string') {
|
||||||
|
throw new Error('Email is required and must be a string');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate proper MD5 hash as required by Gravatar
|
||||||
|
const hash = CryptoJS.MD5(email.toLowerCase().trim()).toString();
|
||||||
|
return `https://www.gravatar.com/avatar/${hash}?s=${size}&d=${defaultType}&r=${rating}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getAvatarUrl = (auth, size = 200) => {
|
||||||
|
// Anonymous user
|
||||||
|
if (!auth) {
|
||||||
|
// Return the webpack asset path for anonymous image
|
||||||
|
try {
|
||||||
|
return require('../../images/anonymous.png');
|
||||||
|
} catch (_) {
|
||||||
|
return '/images/anonymous.png';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Custom avatar takes priority
|
||||||
|
if (auth.user.avatar) {
|
||||||
|
return auth.user.avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gravatar if email exists
|
||||||
|
if (auth.user.email) {
|
||||||
|
return getGravatarUrl(auth.user.email, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default avatar fallback
|
||||||
|
try {
|
||||||
|
return require('../../images/default_avatar.png');
|
||||||
|
} catch (_) {
|
||||||
|
return '/images/default_avatar.png';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Available Gravatar default types
|
||||||
|
const GRAVATAR_DEFAULTS = {
|
||||||
|
MYSTERY_PERSON: 'mp',
|
||||||
|
IDENTICON: 'identicon',
|
||||||
|
MONSTER: 'monsterid',
|
||||||
|
WAVATAR: 'wavatar',
|
||||||
|
RETRO: 'retro',
|
||||||
|
ROBOHASH: 'robohash',
|
||||||
|
BLANK: 'blank'
|
||||||
|
};
|
||||||
|
|
||||||
|
// Available Gravatar ratings
|
||||||
|
const GRAVATAR_RATINGS = {
|
||||||
|
G: 'g', // General - suitable for all audiences
|
||||||
|
PG: 'pg', // Parental guidance suggested
|
||||||
|
R: 'r', // Restricted
|
||||||
|
X: 'x' // Adult content
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getGravatarUrl,
|
||||||
|
getAvatarUrl,
|
||||||
|
GRAVATAR_DEFAULTS,
|
||||||
|
GRAVATAR_RATINGS
|
||||||
|
};
|
||||||
|
|
@ -29,6 +29,7 @@ const useTorrent = require('./useTorrent');
|
||||||
const useTranslate = require('./useTranslate');
|
const useTranslate = require('./useTranslate');
|
||||||
const { default: useOrientation } = require('./useOrientation');
|
const { default: useOrientation } = require('./useOrientation');
|
||||||
const { default: useLanguageSorting } = require('./useLanguageSorting');
|
const { default: useLanguageSorting } = require('./useLanguageSorting');
|
||||||
|
const { getGravatarUrl, getAvatarUrl, GRAVATAR_DEFAULTS, GRAVATAR_RATINGS } = require('./avatarUtils');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
FileDropProvider,
|
FileDropProvider,
|
||||||
|
|
@ -65,4 +66,8 @@ module.exports = {
|
||||||
useTranslate,
|
useTranslate,
|
||||||
useOrientation,
|
useOrientation,
|
||||||
useLanguageSorting,
|
useLanguageSorting,
|
||||||
|
getGravatarUrl,
|
||||||
|
getAvatarUrl,
|
||||||
|
GRAVATAR_DEFAULTS,
|
||||||
|
GRAVATAR_RATINGS,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue