Storing actor avatars. Using 1 second interval queue for location resolve as per OSM code of conduct.
This commit is contained in:
52
src/media.js
52
src/media.js
@@ -106,10 +106,11 @@ function toBaseSource(rawSource) {
|
||||
return null;
|
||||
}
|
||||
|
||||
function baseSourceToBaseMedia(baseSource, role) {
|
||||
function baseSourceToBaseMedia(baseSource, role, metadata) {
|
||||
if (Array.isArray(baseSource)) {
|
||||
if (baseSource.length > 0) {
|
||||
return {
|
||||
...metadata,
|
||||
id: nanoid(),
|
||||
role,
|
||||
sources: baseSource,
|
||||
@@ -121,6 +122,7 @@ function baseSourceToBaseMedia(baseSource, role) {
|
||||
|
||||
if (baseSource) {
|
||||
return {
|
||||
...metadata,
|
||||
id: nanoid(),
|
||||
role,
|
||||
sources: [baseSource],
|
||||
@@ -130,15 +132,15 @@ function baseSourceToBaseMedia(baseSource, role) {
|
||||
return null;
|
||||
}
|
||||
|
||||
function fallbackMediaToBaseMedia(rawMedia, role) {
|
||||
function fallbackMediaToBaseMedia(rawMedia, role, metadata) {
|
||||
const baseSources = rawMedia
|
||||
.map(source => toBaseSource(source))
|
||||
.filter(Boolean);
|
||||
|
||||
return baseSourceToBaseMedia(baseSources, role);
|
||||
return baseSourceToBaseMedia(baseSources, role, metadata);
|
||||
}
|
||||
|
||||
function toBaseMedias(rawMedias, role) {
|
||||
function toBaseMedias(rawMedias, role, metadata) {
|
||||
if (!rawMedias || rawMedias.length === 0) {
|
||||
return [];
|
||||
}
|
||||
@@ -150,12 +152,12 @@ function toBaseMedias(rawMedias, role) {
|
||||
|
||||
if (Array.isArray(rawMedia)) {
|
||||
// fallback sources provided
|
||||
return fallbackMediaToBaseMedia(rawMedia, role);
|
||||
return fallbackMediaToBaseMedia(rawMedia, role, metadata);
|
||||
}
|
||||
|
||||
const baseSource = toBaseSource(rawMedia);
|
||||
|
||||
return baseSourceToBaseMedia(baseSource, role);
|
||||
return baseSourceToBaseMedia(baseSource, role, metadata);
|
||||
}).filter(Boolean);
|
||||
|
||||
const sampledBaseMedias = sampleMedias(baseMedias);
|
||||
@@ -604,6 +606,44 @@ async function associateReleaseMedia(releases) {
|
||||
}, Promise.resolve());
|
||||
}
|
||||
|
||||
async function associateAvatars(profiles) {
|
||||
if (!argv.media) {
|
||||
return profiles;
|
||||
}
|
||||
|
||||
const profilesWithBaseMedias = profiles.map(profile => (profile.avatar
|
||||
? {
|
||||
...profile,
|
||||
avatarBaseMedia: toBaseMedias([profile.avatar], 'avatars', {
|
||||
copyright: profile.network?.name || null,
|
||||
scraper: profile.scraper || null,
|
||||
})[0],
|
||||
}
|
||||
: profile
|
||||
));
|
||||
|
||||
const baseMedias = profilesWithBaseMedias.map(profile => profile.avatarBaseMedia).filter(Boolean);
|
||||
|
||||
const storedMedias = await storeMedias(baseMedias);
|
||||
const storedMediasById = itemsByKey(storedMedias, 'id');
|
||||
|
||||
const profilesWithAvatarIds = profilesWithBaseMedias.map((profile) => {
|
||||
const media = storedMediasById[profile.avatarBaseMedia?.id];
|
||||
|
||||
if (media) {
|
||||
return {
|
||||
...profile,
|
||||
avatarMediaId: media.use || media.entry.id,
|
||||
};
|
||||
}
|
||||
|
||||
return profile;
|
||||
});
|
||||
|
||||
return profilesWithAvatarIds;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
associateAvatars,
|
||||
associateReleaseMedia,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user