Skip to content

Commit

Permalink
refactor(frontend): CherryPick 클라이언트 업데이트 확인
Browse files Browse the repository at this point in the history
  • Loading branch information
noridev committed Feb 14, 2025
1 parent c896c0d commit e7821bb
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 119 deletions.
21 changes: 4 additions & 17 deletions packages/frontend/src/pages/admin/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ SPDX-License-Identifier: AGPL-3.0-only

<script lang="ts" setup>
import { onActivated, onMounted, onUnmounted, provide, watch, ref, computed } from 'vue';
import { version } from '@@/js/config.js';
import { compareVersions } from 'compare-versions';
import type { SuperMenuDef } from '@/components/MkSuperMenu.vue';
import type { PageMetadata } from '@/scripts/page-metadata.js';
import { i18n } from '@/i18n.js';
Expand All @@ -47,6 +45,7 @@ import { misskeyApi } from '@/scripts/misskey-api.js';
import { lookupUser, lookupUserByEmail, lookupFile } from '@/scripts/admin-lookup.js';
import { definePageMetadata, provideMetadataReceiver, provideReactiveMetadata } from '@/scripts/page-metadata.js';
import { useRouter } from '@/router/supplier.js';
import { fetchCherrypickReleases } from '@/scripts/fetch-cherrypick-releases.js';

const isEmpty = (x: string | null) => x == null || x === '';

Expand All @@ -73,7 +72,6 @@ const noInquiryUrl = computed(() => isEmpty(instance.inquiryUrl));
const thereIsUnresolvedAbuseReport = ref(false);
const currentPage = computed(() => router.currentRef.value.child);
const updateAvailable = ref(false);
const releasesCherryPick = ref(null);

misskeyApi('admin/abuse-user-reports', {
state: 'unresolved',
Expand All @@ -82,20 +80,9 @@ misskeyApi('admin/abuse-user-reports', {
if (reports.length > 0) thereIsUnresolvedAbuseReport.value = true;
});

misskeyApi('admin/meta')
.then(meta => {
return fetch('https://api.github.com/repos/kokonect-link/cherrypick/releases')
.then(res => res.json())
.then(cherryPickData => {
releasesCherryPick.value = meta.enableReceivePrerelease ? cherryPickData : cherryPickData.filter(x => !x.prerelease);
if ((compareVersions(version, releasesCherryPick.value[0].tag_name) < 0) && (compareVersions(meta.skipCherryPickVersion, releasesCherryPick.value[0].tag_name) < 0)) {
updateAvailable.value = true;
}
});
})
.catch(error => {
console.error('Failed to fetch CherryPick releases:', error);
});
fetchCherrypickReleases().then((result) => {
if (result) updateAvailable.value = true;
});

const NARROW_THRESHOLD = 600;
const ro = new ResizeObserver((entries, observer) => {
Expand Down
33 changes: 33 additions & 0 deletions packages/frontend/src/scripts/fetch-cherrypick-releases.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { compareVersions } from 'compare-versions';
import { version } from '@@/js/config.js';
import { misskeyApi } from '@/scripts/misskey-api.js';

export async function fetchCherrypickReleases(): Promise<boolean> {
try {
const meta = await misskeyApi('admin/meta');
const response = await fetch('https://api.github.com/repos/kokonect-link/cherrypick/releases');
const releasesData = await response.json();

if (!Array.isArray(releasesData) || releasesData.length === 0) {
console.warn('No CherryPick releases found.');
return false;
}

const latestRelease = meta.enableReceivePrerelease
? releasesData[0]
: releasesData.filter((x: any) => !x.prerelease)[0];

if (!latestRelease || !latestRelease.tag_name || typeof latestRelease.tag_name !== 'string') {
console.warn('Invalid latest CherryPick release:', latestRelease);
return false;
}

return (
compareVersions(version, latestRelease.tag_name) < 0 &&
compareVersions(<string>meta.skipCherryPickVersion || version, latestRelease.tag_name) < 0
);
} catch (error) {
console.error('Failed to fetch CherryPick releases:', error);
return false;
}
}
21 changes: 4 additions & 17 deletions packages/frontend/src/ui/_common_/navbar-for-mobile.vue
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,6 @@ SPDX-License-Identifier: AGPL-3.0-only

<script lang="ts" setup>
import { computed, defineAsyncComponent, ref, toRef, watch } from 'vue';
import { version } from '@@/js/config.js';
import { compareVersions } from 'compare-versions';
import { openInstanceMenu } from './common.js';
import * as os from '@/os.js';
import { navbarItemDef } from '@/navbar.js';
Expand All @@ -65,6 +63,7 @@ import { defaultStore } from '@/store.js';
import { i18n } from '@/i18n.js';
import { instance } from '@/instance.js';
import { misskeyApi } from '@/scripts/misskey-api.js';
import { fetchCherrypickReleases } from '@/scripts/fetch-cherrypick-releases.js';

const menu = toRef(defaultStore.state, 'menu');
const otherMenuItemIndicated = computed(() => {
Expand All @@ -75,7 +74,6 @@ const otherMenuItemIndicated = computed(() => {
return false;
});
const controlPanelIndicated = ref(false);
const releasesCherryPick = ref(null);
const bannerDisplay = ref(defaultStore.state.bannerDisplay);

if ($i && ($i.isAdmin ?? $i.isModerator)) {
Expand All @@ -86,20 +84,9 @@ if ($i && ($i.isAdmin ?? $i.isModerator)) {
if (reports.length > 0) controlPanelIndicated.value = true;
});

misskeyApi('admin/meta')
.then(meta => {
return fetch('https://api.github.com/repos/kokonect-link/cherrypick/releases')
.then(res => res.json())
.then(cherryPickData => {
releasesCherryPick.value = meta.enableReceivePrerelease ? cherryPickData : cherryPickData.filter(x => !x.prerelease);
if ((compareVersions(version, releasesCherryPick.value[0].tag_name) < 0) && (compareVersions(meta.skipCherryPickVersion, releasesCherryPick.value[0].tag_name) < 0)) {
controlPanelIndicated.value = true;
}
});
})
.catch(error => {
console.error('Failed to fetch CherryPick releases:', error);
});
fetchCherrypickReleases().then((result) => {
if (result) controlPanelIndicated.value = true;
});
}

watch(defaultStore.reactiveState.bannerDisplay, () => {
Expand Down
21 changes: 4 additions & 17 deletions packages/frontend/src/ui/_common_/navbar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,6 @@ SPDX-License-Identifier: AGPL-3.0-only

<script lang="ts" setup>
import { computed, defineAsyncComponent, ref, watch } from 'vue';
import { version } from '@@/js/config.js';
import { compareVersions } from 'compare-versions';
import { openInstanceMenu } from './common.js';
import * as os from '@/os.js';
import { navbarItemDef } from '@/navbar.js';
Expand All @@ -91,6 +89,7 @@ import { i18n } from '@/i18n.js';
import { instance } from '@/instance.js';
import { getHTMLElementOrNull } from '@/scripts/get-dom-node-or-null.js';
import { misskeyApi } from '@/scripts/misskey-api.js';
import { fetchCherrypickReleases } from '@/scripts/fetch-cherrypick-releases.js';

const forceIconOnly = ref(window.innerWidth <= 1279);
const iconOnly = computed(() => {
Expand All @@ -106,7 +105,6 @@ const otherMenuItemIndicated = computed(() => {
return false;
});
const controlPanelIndicated = ref(false);
const releasesCherryPick = ref(null);
const bannerDisplay = ref(defaultStore.state.bannerDisplay);

if ($i && ($i.isAdmin ?? $i.isModerator)) {
Expand All @@ -117,20 +115,9 @@ if ($i && ($i.isAdmin ?? $i.isModerator)) {
if (reports.length > 0) controlPanelIndicated.value = true;
});

misskeyApi('admin/meta')
.then(meta => {
return fetch('https://api.github.com/repos/kokonect-link/cherrypick/releases')
.then(res => res.json())
.then(cherryPickData => {
releasesCherryPick.value = meta.enableReceivePrerelease ? cherryPickData : cherryPickData.filter(x => !x.prerelease);
if ((compareVersions(version, releasesCherryPick.value[0].tag_name) < 0) && (compareVersions(meta.skipCherryPickVersion, releasesCherryPick.value[0].tag_name) < 0)) {
controlPanelIndicated.value = true;
}
});
})
.catch(error => {
console.error('Failed to fetch CherryPick releases:', error);
});
fetchCherrypickReleases().then((result) => {
if (result) controlPanelIndicated.value = true;
});
}

function calcViewState() {
Expand Down
21 changes: 4 additions & 17 deletions packages/frontend/src/ui/classic.header.vue
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@ SPDX-License-Identifier: AGPL-3.0-only

<script lang="ts" setup>
import { computed, defineAsyncComponent, onMounted, ref } from 'vue';
import { version } from '@@/js/config.js';
import { compareVersions } from 'compare-versions';
import { openInstanceMenu } from './_common_/common.js';
import * as os from '@/os.js';
import { misskeyApi } from '@/scripts/misskey-api.js';
Expand All @@ -60,6 +58,7 @@ import MkButton from '@/components/MkButton.vue';
import { defaultStore } from '@/store.js';
import { instance } from '@/instance.js';
import { i18n } from '@/i18n.js';
import { fetchCherrypickReleases } from '@/scripts/fetch-cherrypick-releases.js';

const WINDOW_THRESHOLD = 1400;

Expand All @@ -75,7 +74,6 @@ const otherNavItemIndicated = computed<boolean>(() => {
});

const controlPanelIndicated = ref(false);
const releasesCherryPick = ref(null);

if ($i && ($i.isAdmin ?? $i.isModerator)) {
misskeyApi('admin/abuse-user-reports', {
Expand All @@ -85,20 +83,9 @@ if ($i && ($i.isAdmin ?? $i.isModerator)) {
if (reports.length > 0) controlPanelIndicated.value = true;
});

misskeyApi('admin/meta')
.then(meta => {
return fetch('https://api.github.com/repos/kokonect-link/cherrypick/releases')
.then(res => res.json())
.then(cherryPickData => {
releasesCherryPick.value = meta.enableReceivePrerelease ? cherryPickData : cherryPickData.filter(x => !x.prerelease);
if ((compareVersions(version, releasesCherryPick.value[0].tag_name) < 0) && (compareVersions(meta.skipCherryPickVersion, releasesCherryPick.value[0].tag_name) < 0)) {
controlPanelIndicated.value = true;
}
});
})
.catch(error => {
console.error('Failed to fetch CherryPick releases:', error);
});
fetchCherrypickReleases().then((result) => {
if (result) controlPanelIndicated.value = true;
});
}

function more(ev: MouseEvent) {
Expand Down
21 changes: 4 additions & 17 deletions packages/frontend/src/ui/classic.sidebar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ SPDX-License-Identifier: AGPL-3.0-only

<script lang="ts" setup>
import { defineAsyncComponent, computed, watch, ref, shallowRef } from 'vue';
import { version } from '@@/js/config.js';
import { compareVersions } from 'compare-versions';
import { openInstanceMenu } from './_common_/common.js';
// import { host } from '@@/js/config.js';
import * as os from '@/os.js';
Expand All @@ -66,6 +64,7 @@ import MkButton from '@/components/MkButton.vue';
import { defaultStore } from '@/store.js';
import { instance } from '@/instance.js';
import { i18n } from '@/i18n.js';
import { fetchCherrypickReleases } from '@/scripts/fetch-cherrypick-releases.js';

const WINDOW_THRESHOLD = 1400;

Expand All @@ -84,7 +83,6 @@ const el = shallowRef<HTMLElement>();
const iconOnly = ref(false);
const settingsWindowed = ref(false);
const controlPanelIndicated = ref(false);
const releasesCherryPick = ref(null);

if ($i && ($i.isAdmin ?? $i.isModerator)) {
misskeyApi('admin/abuse-user-reports', {
Expand All @@ -94,20 +92,9 @@ if ($i && ($i.isAdmin ?? $i.isModerator)) {
if (reports.length > 0) controlPanelIndicated.value = true;
});

misskeyApi('admin/meta')
.then(meta => {
return fetch('https://api.github.com/repos/kokonect-link/cherrypick/releases')
.then(res => res.json())
.then(cherryPickData => {
releasesCherryPick.value = meta.enableReceivePrerelease ? cherryPickData : cherryPickData.filter(x => !x.prerelease);
if ((compareVersions(version, releasesCherryPick.value[0].tag_name) < 0) && (compareVersions(meta.skipCherryPickVersion, releasesCherryPick.value[0].tag_name) < 0)) {
controlPanelIndicated.value = true;
}
});
})
.catch(error => {
console.error('Failed to fetch CherryPick releases:', error);
});
fetchCherrypickReleases().then((result) => {
if (result) controlPanelIndicated.value = true;
});
}

function calcViewState() {
Expand Down
21 changes: 4 additions & 17 deletions packages/frontend/src/ui/friendly/navbar-for-mobile.vue
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,6 @@ SPDX-License-Identifier: AGPL-3.0-only

<script lang="ts" setup>
import { computed, defineAsyncComponent, ref, toRef, watch } from 'vue';
import { version } from '@@/js/config.js';
import { compareVersions } from 'compare-versions';
import { openInstanceMenu } from '@/ui/_common_/common.js';
import * as os from '@/os.js';
import { navbarItemDef } from '@/navbar.js';
Expand All @@ -67,6 +65,7 @@ import { i18n } from '@/i18n.js';
import { instance } from '@/instance.js';
import { misskeyApi } from '@/scripts/misskey-api.js';
import { mainRouter } from '@/router/main.js';
import { fetchCherrypickReleases } from '@/scripts/fetch-cherrypick-releases.js';

const menu = toRef(defaultStore.state, 'menu');
const otherMenuItemIndicated = computed(() => {
Expand All @@ -77,7 +76,6 @@ const otherMenuItemIndicated = computed(() => {
return false;
});
const controlPanelIndicated = ref(false);
const releasesCherryPick = ref(null);
const bannerDisplay = ref(defaultStore.state.bannerDisplay);

if ($i && ($i.isAdmin ?? $i.isModerator)) {
Expand All @@ -88,20 +86,9 @@ if ($i && ($i.isAdmin ?? $i.isModerator)) {
if (reports.length > 0) controlPanelIndicated.value = true;
});

misskeyApi('admin/meta')
.then(meta => {
return fetch('https://api.github.com/repos/kokonect-link/cherrypick/releases')
.then(res => res.json())
.then(cherryPickData => {
releasesCherryPick.value = meta.enableReceivePrerelease ? cherryPickData : cherryPickData.filter(x => !x.prerelease);
if ((compareVersions(version, releasesCherryPick.value[0].tag_name) < 0) && (compareVersions(meta.skipCherryPickVersion, releasesCherryPick.value[0].tag_name) < 0)) {
controlPanelIndicated.value = true;
}
});
})
.catch(error => {
console.error('Failed to fetch CherryPick releases:', error);
});
fetchCherrypickReleases().then((result) => {
if (result) controlPanelIndicated.value = true;
});
}

watch(defaultStore.reactiveState.bannerDisplay, () => {
Expand Down
21 changes: 4 additions & 17 deletions packages/frontend/src/ui/friendly/navbar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,6 @@ SPDX-License-Identifier: AGPL-3.0-only

<script lang="ts" setup>
import { computed, defineAsyncComponent, ref, watch } from 'vue';
import { version } from '@@/js/config.js';
import { compareVersions } from 'compare-versions';
import { openInstanceMenu } from '@/ui/_common_/common.js';
import * as os from '@/os.js';
import { navbarItemDef } from '@/navbar.js';
Expand All @@ -98,6 +96,7 @@ import { instance } from '@/instance.js';
import { getHTMLElementOrNull } from '@/scripts/get-dom-node-or-null.js';
import { misskeyApi } from '@/scripts/misskey-api.js';
import { mainRouter } from '@/router/main.js';
import { fetchCherrypickReleases } from '@/scripts/fetch-cherrypick-releases.js';

const forceIconOnly = ref(window.innerWidth <= 1279);
const iconOnly = computed(() => {
Expand All @@ -113,7 +112,6 @@ const otherMenuItemIndicated = computed(() => {
return false;
});
const controlPanelIndicated = ref(false);
const releasesCherryPick = ref(null);
const bannerDisplay = ref(defaultStore.state.bannerDisplay);

if ($i && ($i.isAdmin ?? $i.isModerator)) {
Expand All @@ -124,20 +122,9 @@ if ($i && ($i.isAdmin ?? $i.isModerator)) {
if (reports.length > 0) controlPanelIndicated.value = true;
});

misskeyApi('admin/meta')
.then(meta => {
return fetch('https://api.github.com/repos/kokonect-link/cherrypick/releases')
.then(res => res.json())
.then(cherryPickData => {
releasesCherryPick.value = meta.enableReceivePrerelease ? cherryPickData : cherryPickData.filter(x => !x.prerelease);
if ((compareVersions(version, releasesCherryPick.value[0].tag_name) < 0) && (compareVersions(meta.skipCherryPickVersion, releasesCherryPick.value[0].tag_name) < 0)) {
controlPanelIndicated.value = true;
}
});
})
.catch(error => {
console.error('Failed to fetch CherryPick releases:', error);
});
fetchCherrypickReleases().then((result) => {
if (result) controlPanelIndicated.value = true;
});
}

function calcViewState() {
Expand Down

0 comments on commit e7821bb

Please sign in to comment.