mirror of
https://github.com/algerkong/AlgerMusicPlayer.git
synced 2026-04-14 23:11:00 +08:00
✨ feat: 优化更新检查 下载 功能
This commit is contained in:
@@ -44,10 +44,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, ref, computed } from 'vue';
|
import { onMounted, ref, computed, watch } from 'vue';
|
||||||
import { marked } from 'marked';
|
import { marked } from 'marked';
|
||||||
import { checkUpdate, UpdateResult } from '@/utils/update';
|
import { checkUpdate, UpdateResult } from '@/utils/update';
|
||||||
import config from '../../../../package.json';
|
import config from '../../../../package.json';
|
||||||
|
import { useStore } from 'vuex';
|
||||||
|
|
||||||
// 配置 marked
|
// 配置 marked
|
||||||
marked.setOptions({
|
marked.setOptions({
|
||||||
@@ -64,6 +65,25 @@ const updateInfo = ref<UpdateResult>({
|
|||||||
releaseInfo: null
|
releaseInfo: null
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const store = useStore()
|
||||||
|
|
||||||
|
// 添加计算属性
|
||||||
|
const showUpdateModalState = computed({
|
||||||
|
get: () => store.state.showUpdateModal,
|
||||||
|
set: (val) => store.commit('SET_SHOW_UPDATE_MODAL', val)
|
||||||
|
})
|
||||||
|
|
||||||
|
// 替换原来的 watch
|
||||||
|
watch(showUpdateModalState, (newVal) => {
|
||||||
|
if (newVal) {
|
||||||
|
showModal.value = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
watch(() => showModal.value, (newVal) => {
|
||||||
|
showUpdateModalState.value = newVal
|
||||||
|
})
|
||||||
|
|
||||||
// 解析 Markdown
|
// 解析 Markdown
|
||||||
const parsedReleaseNotes = computed(() => {
|
const parsedReleaseNotes = computed(() => {
|
||||||
if (!updateInfo.value.releaseInfo?.body) return '';
|
if (!updateInfo.value.releaseInfo?.body) return '';
|
||||||
@@ -96,12 +116,30 @@ const checkForUpdates = async () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const handleUpdate = async () => {
|
const handleUpdate = async () => {
|
||||||
|
|
||||||
const assets = updateInfo.value.releaseInfo?.assets || [];
|
const assets = updateInfo.value.releaseInfo?.assets || [];
|
||||||
const platform = window.electron.process.platform;
|
const platform = window.electron.process.platform;
|
||||||
const arch = window.electron.ipcRenderer.sendSync('get-arch');
|
const arch = window.electron.ipcRenderer.sendSync('get-arch');
|
||||||
console.log(arch);
|
console.log('arch',arch)
|
||||||
console.log(platform);
|
console.log('platform',platform)
|
||||||
|
const version = updateInfo.value.latestVersion
|
||||||
|
const downUrls = {
|
||||||
|
win32: {
|
||||||
|
all: `https://github.com/algerkong/AlgerMusicPlayer/releases/download/v${version}/AlgerMusicPlayer-${version}-win.exe`,
|
||||||
|
x64: `https://github.com/algerkong/AlgerMusicPlayer/releases/download/v${version}/AlgerMusicPlayer-${version}-win-x64.exe`,
|
||||||
|
ia32: `https://github.com/algerkong/AlgerMusicPlayer/releases/download/v${version}/AlgerMusicPlayer-${version}-win-ia32.exe`,
|
||||||
|
},
|
||||||
|
darwin: {
|
||||||
|
all: `https://github.com/algerkong/AlgerMusicPlayer/releases/download/v${version}AlgerMusicPlayer-${version}-mac-universal.dmg`,
|
||||||
|
},
|
||||||
|
linux: {
|
||||||
|
AppImage: `https://github.com/algerkong/AlgerMusicPlayer/releases/download/v${version}/AlgerMusicPlayer-${version}-linux-x64.AppImage`,
|
||||||
|
deb: `https://github.com/algerkong/AlgerMusicPlayer/releases/download/v${version}/AlgerMusicPlayer-${version}-linux-x64.deb`,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let downloadUrl = '';
|
let downloadUrl = '';
|
||||||
|
|
||||||
@@ -111,30 +149,29 @@ const handleUpdate = async () => {
|
|||||||
const macAsset = assets.find(asset =>
|
const macAsset = assets.find(asset =>
|
||||||
asset.name.includes('mac')
|
asset.name.includes('mac')
|
||||||
);
|
);
|
||||||
downloadUrl = macAsset?.browser_download_url || '';
|
downloadUrl = macAsset?.browser_download_url || downUrls.darwin.all || '';
|
||||||
} else if (platform === 'win32') {
|
} else if (platform === 'win32') {
|
||||||
// Windows
|
// Windows
|
||||||
const winAsset = assets.find(asset =>
|
const winAsset = assets.find(asset =>
|
||||||
asset.name.includes('win') &&
|
asset.name.includes('win') &&
|
||||||
(arch === 'x64' ? asset.name.includes('x64') : asset.name.includes('ia32'))
|
(arch === 'x64' ? asset.name.includes('x64') : asset.name.includes('ia32'))
|
||||||
);
|
);
|
||||||
downloadUrl = winAsset?.browser_download_url || '';
|
downloadUrl = winAsset?.browser_download_url || downUrls.win32[arch] || downUrls.win32.all || '';
|
||||||
} else if (platform === 'linux') {
|
} else if (platform === 'linux') {
|
||||||
// Linux
|
// Linux
|
||||||
const linuxAsset = assets.find(asset =>
|
const linuxAsset = assets.find(asset =>
|
||||||
(asset.name.endsWith('.AppImage') || asset.name.endsWith('.deb')) &&
|
(asset.name.endsWith('.AppImage') || asset.name.endsWith('.deb')) &&
|
||||||
asset.name.includes('x64')
|
asset.name.includes('x64')
|
||||||
);
|
);
|
||||||
downloadUrl = linuxAsset?.browser_download_url || '';
|
downloadUrl = linuxAsset?.browser_download_url || downUrls.linux[arch] || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (downloadUrl) {
|
if (downloadUrl) {
|
||||||
window.open(`https://ghproxy.cn/${downloadUrl}`, '_blank');
|
window.open(`https://www.ghproxy.cn/${downloadUrl}`, '_blank');
|
||||||
} else {
|
} else {
|
||||||
// 如果没有找到对应的安装包,跳转到 release 页面
|
// 如果没有找到对应的安装包,跳转到 release 页面
|
||||||
window.open('https://github.com/algerkong/AlgerMusicPlayer/releases/latest', '_blank');
|
window.open('https://github.com/algerkong/AlgerMusicPlayer/releases/latest', '_blank');
|
||||||
}
|
}
|
||||||
closeModal();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
<play-bar v-if="isPlay" :style="isMobile && store.state.musicFull ? 'bottom: 0;' : ''" />
|
<play-bar v-if="isPlay" :style="isMobile && store.state.musicFull ? 'bottom: 0;' : ''" />
|
||||||
</div>
|
</div>
|
||||||
<install-app-modal v-if="!isElectron"></install-app-modal>
|
<install-app-modal v-if="!isElectron"></install-app-modal>
|
||||||
<update-modal />
|
<update-modal v-if="isElectron"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ const checkForUpdates = async () => {
|
|||||||
|
|
||||||
const toGithubRelease = () => {
|
const toGithubRelease = () => {
|
||||||
if (updateInfo.value.hasUpdate) {
|
if (updateInfo.value.hasUpdate) {
|
||||||
window.open(updateInfo.value.releaseInfo?.html_url || 'https://github.com/algerkong/AlgerMusicPlayer/releases/latest', '_blank');
|
store.commit('SET_SHOW_UPDATE_MODAL', true)
|
||||||
} else {
|
} else {
|
||||||
window.open('https://github.com/algerkong/AlgerMusicPlayer/releases', '_blank');
|
window.open('https://github.com/algerkong/AlgerMusicPlayer/releases', '_blank');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ interface State {
|
|||||||
playMode: number;
|
playMode: number;
|
||||||
theme: ThemeType;
|
theme: ThemeType;
|
||||||
musicFull: boolean;
|
musicFull: boolean;
|
||||||
|
showUpdateModal: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const state: State = {
|
const state: State = {
|
||||||
@@ -57,7 +58,8 @@ const state: State = {
|
|||||||
favoriteList: getLocalStorageItem('favoriteList', []),
|
favoriteList: getLocalStorageItem('favoriteList', []),
|
||||||
playMode: getLocalStorageItem('playMode', 0),
|
playMode: getLocalStorageItem('playMode', 0),
|
||||||
theme: getCurrentTheme(),
|
theme: getCurrentTheme(),
|
||||||
musicFull: false
|
musicFull: false,
|
||||||
|
showUpdateModal: false
|
||||||
};
|
};
|
||||||
|
|
||||||
const { handlePlayMusic, nextPlay, prevPlay } = useMusicListHook();
|
const { handlePlayMusic, nextPlay, prevPlay } = useMusicListHook();
|
||||||
@@ -117,6 +119,9 @@ const mutations = {
|
|||||||
toggleTheme(state: State) {
|
toggleTheme(state: State) {
|
||||||
state.theme = state.theme === 'dark' ? 'light' : 'dark';
|
state.theme = state.theme === 'dark' ? 'light' : 'dark';
|
||||||
applyTheme(state.theme);
|
applyTheme(state.theme);
|
||||||
|
},
|
||||||
|
SET_SHOW_UPDATE_MODAL(state, value) {
|
||||||
|
state.showUpdateModal = value
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import config from '../../../package.json';
|
import config from '../../../package.json';
|
||||||
import { useDateFormat } from '@vueuse/core';
|
import { useDateFormat } from '@vueuse/core';
|
||||||
|
|
||||||
interface GithubReleaseInfo {
|
interface GithubReleaseInfo {
|
||||||
tag_name: string;
|
tag_name: string;
|
||||||
body: string;
|
body: string;
|
||||||
@@ -36,20 +35,41 @@ export const getLatestReleaseInfo = async (): Promise<GithubReleaseInfo | null>
|
|||||||
try {
|
try {
|
||||||
const token = import.meta.env.VITE_GITHUB_TOKEN;
|
const token = import.meta.env.VITE_GITHUB_TOKEN;
|
||||||
const headers = {};
|
const headers = {};
|
||||||
if (token) {
|
|
||||||
headers['Authorization'] = `token ${token}`;
|
const apiUrls = [
|
||||||
}
|
// 原始地址
|
||||||
const response = await axios.get(
|
|
||||||
'https://api.github.com/repos/algerkong/AlgerMusicPlayer/releases/latest',
|
'https://api.github.com/repos/algerkong/AlgerMusicPlayer/releases/latest',
|
||||||
{
|
|
||||||
headers
|
// 使用 ghproxy.com 代理
|
||||||
}
|
'https://www.ghproxy.cn/https://raw.githubusercontent.com/algerkong/AlgerMusicPlayer/dev_electron/package.json',
|
||||||
);
|
|
||||||
|
// 使用 gitee 镜像(如果有的话)
|
||||||
if (response.data) {
|
// 'https://gitee.com/api/v5/repos/[用户名]/AlgerMusicPlayer/releases/latest'
|
||||||
return response.data;
|
];
|
||||||
|
if (token) {
|
||||||
|
headers['Authorization'] = `token ${token}`;
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
|
for (const url of apiUrls) {
|
||||||
|
try {
|
||||||
|
const response = await axios.get(url, { headers });
|
||||||
|
|
||||||
|
if (url.includes('package.json')) {
|
||||||
|
// 如果是 package.json,直接读取版本号
|
||||||
|
return {
|
||||||
|
tag_name: response.data.version,
|
||||||
|
body:(await axios.get('https://raw.githubusercontent.com/algerkong/AlgerMusicPlayer/dev_electron/CHANGELOG.md')).data,
|
||||||
|
html_url: 'https://github.com/algerkong/AlgerMusicPlayer/releases/latest',
|
||||||
|
assets: []
|
||||||
|
} as unknown as GithubReleaseInfo;
|
||||||
|
}
|
||||||
|
return response.data;
|
||||||
|
} catch (err) {
|
||||||
|
console.warn(`尝试访问 ${url} 失败:`, err);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new Error('所有 API 地址均无法访问');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取 GitHub Release 信息失败:', error);
|
console.error('获取 GitHub Release 信息失败:', error);
|
||||||
return null;
|
return null;
|
||||||
@@ -69,6 +89,7 @@ const formatDate = (dateStr: string): string => {
|
|||||||
export const checkUpdate = async (currentVersion: string = config.version): Promise<UpdateResult | null> => {
|
export const checkUpdate = async (currentVersion: string = config.version): Promise<UpdateResult | null> => {
|
||||||
try {
|
try {
|
||||||
const releaseInfo = await getLatestReleaseInfo();
|
const releaseInfo = await getLatestReleaseInfo();
|
||||||
|
console.log('releaseInfo',releaseInfo)
|
||||||
if (!releaseInfo) {
|
if (!releaseInfo) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -77,6 +98,8 @@ export const checkUpdate = async (currentVersion: string = config.version): Prom
|
|||||||
if (latestVersion === currentVersion) {
|
if (latestVersion === currentVersion) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
console.log('latestVersion',latestVersion)
|
||||||
|
console.log('currentVersion',currentVersion)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
hasUpdate: true,
|
hasUpdate: true,
|
||||||
@@ -84,7 +107,7 @@ export const checkUpdate = async (currentVersion: string = config.version): Prom
|
|||||||
currentVersion,
|
currentVersion,
|
||||||
releaseInfo: {
|
releaseInfo: {
|
||||||
tag_name: latestVersion,
|
tag_name: latestVersion,
|
||||||
body: `## 更新内容\n\n- 版本: ${latestVersion}\n- 发布时间: ${formatDate(releaseInfo.published_at)}\n\n${releaseInfo.body}`,
|
body: `## 更新内容\n\n- 版本: ${latestVersion}\n${releaseInfo.body}`,
|
||||||
html_url: releaseInfo.html_url,
|
html_url: releaseInfo.html_url,
|
||||||
assets: releaseInfo.assets.map(asset => ({
|
assets: releaseInfo.assets.map(asset => ({
|
||||||
browser_download_url: asset.browser_download_url,
|
browser_download_url: asset.browser_download_url,
|
||||||
|
|||||||
@@ -290,7 +290,7 @@ const checkForUpdates = async (isClick = false) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const openReleasePage = () => {
|
const openReleasePage = () => {
|
||||||
window.open(updateInfo.value.releaseInfo?.html_url || 'https://github.com/algerkong/AlgerMusicPlayer/releases/latest', '_blank');
|
store.commit('SET_SHOW_UPDATE_MODAL', true)
|
||||||
};
|
};
|
||||||
|
|
||||||
const selectDownloadPath = async () => {
|
const selectDownloadPath = async () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user