From e4c2bba89a61280137c1dda2a4e72f8139346b92 Mon Sep 17 00:00:00 2001 From: syuilo <Syuilotan@yahoo.co.jp> Date: Thu, 8 Dec 2022 17:33:04 +0900 Subject: [PATCH] fix(client): use proxied image for instance icon --- packages/client/assets/dummy.png | Bin 0 -> 6285 bytes .../src/ui/_common_/statusbar-federation.vue | 7 ++++++- packages/client/src/widgets/federation.vue | 7 ++++++- packages/client/src/widgets/instance-cloud.vue | 7 ++++++- 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 packages/client/assets/dummy.png diff --git a/packages/client/assets/dummy.png b/packages/client/assets/dummy.png new file mode 100644 index 0000000000000000000000000000000000000000..39332b0c1beeda1edb90d78d25c16e7372aff030 GIT binary patch literal 6285 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 IqD|EQ01tF`Q2+n{ literal 0 HcmV?d00001 diff --git a/packages/client/src/ui/_common_/statusbar-federation.vue b/packages/client/src/ui/_common_/statusbar-federation.vue index 7d4f0d6166..24fc4f6f6d 100644 --- a/packages/client/src/ui/_common_/statusbar-federation.vue +++ b/packages/client/src/ui/_common_/statusbar-federation.vue @@ -4,7 +4,7 @@ <transition name="change" mode="default"> <MarqueeText :key="key" :duration="marqueeDuration" :reverse="marqueeReverse"> <span v-for="instance in instances" :key="instance.id" class="item" :class="{ colored }" :style="{ background: colored ? instance.themeColor : null }"> - <img v-if="instance.iconUrl" class="icon" :src="instance.iconUrl" alt=""/> + <img class="icon" :src="getInstanceIcon(instance)" alt=""/> <MkA :to="`/instance-info/${instance.host}`" class="host _monospace"> {{ instance.host }} </MkA> @@ -27,6 +27,7 @@ import * as os from '@/os'; import { useInterval } from '@/scripts/use-interval'; import { getNoteSummary } from '@/scripts/get-note-summary'; import { notePage } from '@/filters/note'; +import { getProxiedImageUrlNullable } from '@/scripts/media-proxy'; const props = defineProps<{ display?: 'marquee' | 'oneByOne'; @@ -56,6 +57,10 @@ useInterval(tick, Math.max(5000, props.refreshIntervalSec * 1000), { immediate: true, afterMounted: true, }); + +function getInstanceIcon(instance): string { + return getProxiedImageUrlNullable(instance.iconUrl, 'preview') ?? getProxiedImageUrlNullable(instance.faviconUrl, 'preview') ?? '/client-assets/dummy.png'; +} </script> <style lang="scss" scoped> diff --git a/packages/client/src/widgets/federation.vue b/packages/client/src/widgets/federation.vue index e07cab5bfa..d0f81c1356 100644 --- a/packages/client/src/widgets/federation.vue +++ b/packages/client/src/widgets/federation.vue @@ -6,7 +6,7 @@ <MkLoading v-if="fetching"/> <transition-group v-else tag="div" :name="$store.state.animation ? 'chart' : ''" class="instances"> <div v-for="(instance, i) in instances" :key="instance.id" class="instance"> - <img v-if="instance.iconUrl" :src="instance.iconUrl" alt=""/> + <img :src="getInstanceIcon(instance)" alt=""/> <div class="body"> <a class="a" :href="'https://' + instance.host" target="_blank" :title="instance.host">{{ instance.host }}</a> <p>{{ instance.softwareName || '?' }} {{ instance.softwareVersion }}</p> @@ -27,6 +27,7 @@ import MkMiniChart from '@/components/MkMiniChart.vue'; import * as os from '@/os'; import { useInterval } from '@/scripts/use-interval'; import { i18n } from '@/i18n'; +import { getProxiedImageUrlNullable } from '@/scripts/media-proxy'; const name = 'federation'; @@ -71,6 +72,10 @@ useInterval(fetch, 1000 * 60, { afterMounted: true, }); +function getInstanceIcon(instance): string { + return getProxiedImageUrlNullable(instance.iconUrl, 'preview') ?? getProxiedImageUrlNullable(instance.faviconUrl, 'preview') ?? '/client-assets/dummy.png'; +} + defineExpose<WidgetComponentExpose>({ name, configure, diff --git a/packages/client/src/widgets/instance-cloud.vue b/packages/client/src/widgets/instance-cloud.vue index f8e463ee33..4965616995 100644 --- a/packages/client/src/widgets/instance-cloud.vue +++ b/packages/client/src/widgets/instance-cloud.vue @@ -4,7 +4,7 @@ <MkTagCloud v-if="activeInstances"> <li v-for="instance in activeInstances" :key="instance.id"> <a @click.prevent="onInstanceClick(instance)"> - <img style="width: 32px;" :src="instance.iconUrl"> + <img style="width: 32px;" :src="getInstanceIcon(instance)"> </a> </li> </MkTagCloud> @@ -20,6 +20,7 @@ import MkContainer from '@/components/MkContainer.vue'; import MkTagCloud from '@/components/MkTagCloud.vue'; import * as os from '@/os'; import { useInterval } from '@/scripts/use-interval'; +import { getProxiedImageUrlNullable } from '@/scripts/media-proxy'; const name = 'instanceCloud'; @@ -64,6 +65,10 @@ useInterval(() => { afterMounted: true, }); +function getInstanceIcon(instance): string { + return getProxiedImageUrlNullable(instance.iconUrl, 'preview') ?? getProxiedImageUrlNullable(instance.faviconUrl, 'preview') ?? '/client-assets/dummy.png'; +} + defineExpose<WidgetComponentExpose>({ name, configure,