From af6904ea5075f78271dfb6b70bdef06f59a2882d Mon Sep 17 00:00:00 2001 From: xream Date: Tue, 16 Jan 2024 09:44:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=96=E6=B6=88=20github=20=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=90=8D=E7=BB=91=E5=AE=9A=E5=85=B3=E7=B3=BB(?= =?UTF-8?q?=E7=8E=B0=E5=9C=A8=E7=94=A8=E6=88=B7=E5=90=8D=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=8F=AA=E5=BD=B1=E5=93=8D=E5=A4=B4=E5=83=8F),=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=9C=80=E8=BF=91=E4=B8=80=E6=AC=A1=20gist=20?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/src/restful/settings.js | 23 ++++++++++++++--------- backend/src/utils/gist.js | 30 +++++++++++++++--------------- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/backend/package.json b/backend/package.json index 6b16158..d275aac 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.167", + "version": "2.14.169", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/restful/settings.js b/backend/src/restful/settings.js index d80f48e..83c7874 100644 --- a/backend/src/restful/settings.js +++ b/backend/src/restful/settings.js @@ -19,6 +19,7 @@ async function getSettings(req, res) { if (!settings.avatarUrl) await updateGitHubAvatar(); if (!settings.artifactStore) await updateArtifactStore(); success(res, settings); + // TODO: 缺错误处理 前端也缺 } async function updateSettings(req, res) { @@ -31,6 +32,7 @@ async function updateSettings(req, res) { await updateGitHubAvatar(); await updateArtifactStore(); success(res, newSettings); + // TODO: 缺错误处理 前端也缺 } export async function updateGitHubAvatar() { @@ -70,17 +72,20 @@ export async function updateArtifactStore() { }); try { - const gistId = await manager.locate(); - if (gistId !== -1) { - settings.artifactStore = `https://gist.github.com/${githubUser}/${gistId}`; - $.write(settings, SETTINGS_KEY); + const gist = await manager.locate(); + if (gist?.html_url) { + $.log(`找到 Sub-Store Gist: ${gist.html_url}`); + // 只需要保证 token 是对的, 现在 username 错误只会导致头像错误 + settings.artifactStore = gist.html_url; + settings.artifactStoreStatus = 'VALID'; + } else { + $.error(`找不到 Sub-Store Gist`); + settings.artifactStoreStatus = 'NOT FOUND'; } } catch (err) { - $.error( - `Failed to fetch artifact store for User: ${githubUser}. Reason: ${ - err.message ?? err - }`, - ); + $.error(`查找 Sub-Store Gist 时发生错误: ${err.message ?? err}`); + settings.artifactStoreStatus = 'ERROR'; } + $.write(settings, SETTINGS_KEY); } } diff --git a/backend/src/utils/gist.js b/backend/src/utils/gist.js index 8504e78..cea9706 100644 --- a/backend/src/utils/gist.js +++ b/backend/src/utils/gist.js @@ -32,10 +32,10 @@ export default class Gist { const gists = JSON.parse(response.body); for (let g of gists) { if (g.description === this.key) { - return g.id; + return g; } } - return -1; + return; }); } @@ -44,9 +44,15 @@ export default class Gist { return Promise.reject('未提供需上传的文件'); } - const id = await this.locate(); + const gist = await this.locate(); - if (id === -1) { + if (gist?.id) { + // update an existing gist + return this.http.patch({ + url: `/gists/${gist.id}`, + body: JSON.stringify({ files }), + }); + } else { // create a new gist for backup return this.http.post({ url: '/gists', @@ -56,29 +62,23 @@ export default class Gist { files, }), }); - } else { - // update an existing gist - return this.http.patch({ - url: `/gists/${id}`, - body: JSON.stringify({ files }), - }); } } async download(filename) { - const id = await this.locate(); - if (id === -1) { - return Promise.reject('未找到Gist备份!'); - } else { + const gist = await this.locate(); + if (gist?.id) { try { const { files } = await this.http - .get(`/gists/${id}`) + .get(`/gists/${gist.id}`) .then((resp) => JSON.parse(resp.body)); const url = files[filename].raw_url; return await this.http.get(url).then((resp) => resp.body); } catch (err) { return Promise.reject(err); } + } else { + return Promise.reject('找不到 Sub-Store Gist'); } } }