diff --git a/public/i18n/en.yml b/public/i18n/en.yml index 269dfbe..a27fa9d 100644 --- a/public/i18n/en.yml +++ b/public/i18n/en.yml @@ -249,23 +249,32 @@ SETTINGS_SYNC_CONFIG_SELECT_FILE: Select files to sync SETTINGS_SYNC_CONFIG_SELECT_CONFIG: Configuration files only SETTINGS_SYNC_CONFIG_SELECT_GALLERY: Gallery files only SETTINGS_SYNC_CONFIG_SELECT_BOTH: Both configuration and gallery files +SETTINGS_SYNC_CONFIG_GITEA_HOST: Gitea Host SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: username +SETTINGS_SYNC_CONFIG_GITEA_USERNAME: username SETTINGS_SYNC_CONFIG_GITEE_USERNAME: username SETTINGS_SYNC_CONFIG_GITHUB_REPO: repository (private) +SETTINGS_SYNC_CONFIG_GITEA_REPO: repository SETTINGS_SYNC_CONFIG_GITEE_REPO: repository path SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: branch +SETTINGS_SYNC_CONFIG_GITEA_BRANCH: branch SETTINGS_SYNC_CONFIG_GITEE_BRANCH: branch SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: Token +SETTINGS_SYNC_CONFIG_GITEA_TOKEN: Token SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Token SETTINGS_SYNC_CONFIG_PROXY: Proxy SETTINGS_SYNC_CONFIG_INTERVAL: Interval(min) SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: Please enter GitHub username +SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER: Please enter Gitea username SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: Please enter Gitee username SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: Please enter GitHub repository name +SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER: Please enter Gitea repository name SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: Please enter Gitee repository name SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: Please enter GitHub branch name SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: Please enter Gitee branch name +SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER: Please enter Gitea branch name SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: Please enter GitHub Token +SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: Please enter Gitea Token SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: Please enter Gitee Token SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: Please enter proxy SETTINGS_UP_DOWN_DESC: Upload and download configuration files diff --git a/public/i18n/zh-CN.yml b/public/i18n/zh-CN.yml index 784207d..4acf3fc 100644 --- a/public/i18n/zh-CN.yml +++ b/public/i18n/zh-CN.yml @@ -252,23 +252,32 @@ SETTINGS_SYNC_CONFIG_SELECT_FILE: 选择同步文件 SETTINGS_SYNC_CONFIG_SELECT_CONFIG: 仅配置文件 SETTINGS_SYNC_CONFIG_SELECT_GALLERY: 仅相册文件 SETTINGS_SYNC_CONFIG_SELECT_BOTH: 配置文件和相册文件 +SETTINGS_SYNC_CONFIG_GITEA_HOST: Gitea 网址 SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: GitHub用户名 +SETTINGS_SYNC_CONFIG_GITEA_USERNAME: Gitea用户名 SETTINGS_SYNC_CONFIG_GITEE_USERNAME: Gitee用户名 SETTINGS_SYNC_CONFIG_GITHUB_REPO: 仓库(私有) +SETTINGS_SYNC_CONFIG_GITEA_REPO: 仓库 SETTINGS_SYNC_CONFIG_GITEE_REPO: 仓库路径名 SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub分支 +SETTINGS_SYNC_CONFIG_GITEA_BRANCH: Gitea分支 SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee分支 SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token +SETTINGS_SYNC_CONFIG_GITEA_TOKEN: Gitea Token SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Gitee Token SETTINGS_SYNC_CONFIG_PROXY: 代理 SETTINGS_SYNC_CONFIG_INTERVAL: 间隔(分钟) SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: 请输入GitHub用户名 +SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER: 请输入Gitea用户名 SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: 请输入Gitee用户名 SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: 请输入GitHub仓库名 +SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER: 请输入Gitea仓库名 SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: 请输入Gitee仓库名 SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: 请输入GitHub分支名 +SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER: 请输入Gitea分支名 SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: 请输入Gitee分支名 SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: 请输入GitHub Token +SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: 请输入Gitea Token SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: 请输入Gitee Token SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: 请输入代理地址 SETTINGS_UP_DOWN_DESC: 上传下载配置文件 diff --git a/public/i18n/zh-TW.yml b/public/i18n/zh-TW.yml index c056fd3..31c627f 100644 --- a/public/i18n/zh-TW.yml +++ b/public/i18n/zh-TW.yml @@ -250,23 +250,32 @@ SETTINGS_SYNC_CONFIG_SELECT_FILE: 選擇同步檔案 SETTINGS_SYNC_CONFIG_SELECT_CONFIG: 僅配置檔案 SETTINGS_SYNC_CONFIG_SELECT_GALLERY: 僅相簿檔案 SETTINGS_SYNC_CONFIG_SELECT_BOTH: 配置檔案和相簿檔案 +SETTINGS_SYNC_CONFIG_GITEA_HOST: Gitea Host SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: 用戶名 +SETTINGS_SYNC_CONFIG_GITEA_USERNAME: 用戶名 SETTINGS_SYNC_CONFIG_GITEE_USERNAME: 用戶名 SETTINGS_SYNC_CONFIG_GITHUB_REPO: 儲存庫(私有) +SETTINGS_SYNC_CONFIG_GITEA_REPO: 儲存庫 SETTINGS_SYNC_CONFIG_GITEE_REPO: 儲存庫路径 SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub 分支 +SETTINGS_SYNC_CONFIG_GITEA_BRANCH: Gitea 分支 SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee 分支 SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token +SETTINGS_SYNC_CONFIG_GITEA_TOKEN: Gitea Token SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Gitee Token SETTINGS_SYNC_CONFIG_PROXY: 代理 SETTINGS_SYNC_CONFIG_INTERVAL: 間隔(分鐘) SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: 請輸入 GitHub 用戶名 +SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER: 請輸入 Gitea 用戶名 SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: 請輸入 Gitee 用戶名 SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: 請輸入 GitHub 儲存庫名稱 +SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER: 請輸入 Gitea 儲存庫名稱 SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: 請輸入 Gitee 儲存庫名稱 SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: 請輸入 GitHub 分支名稱 +SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER: 請輸入 Gitea 分支名稱 SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: 請輸入 Gitee 分支名稱 SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: 請輸入 GitHub Token +SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: 請輸入 Gitea Token SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: 請輸入 Gitee Token SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: 請輸入代理地址 SETTINGS_UP_DOWN_DESC: 上傳和下載配置檔案 diff --git a/src/main/utils/syncSettings.ts b/src/main/utils/syncSettings.ts index ee523c6..2092568 100644 --- a/src/main/utils/syncSettings.ts +++ b/src/main/utils/syncSettings.ts @@ -14,7 +14,8 @@ interface SyncConfig { repo: string branch: string token: string - proxy?: string, + endpoint?: string + proxy?: string interval?: number } @@ -81,7 +82,7 @@ async function uploadLocalToRemote (syncConfig: SyncConfig, fileName: string) { logger.error(error) return false } - } else { + } else if (type === 'github') { const octokit = getOctokit(syncConfig) try { const res = await octokit.rest.repos.createOrUpdateFileContents({ @@ -97,6 +98,25 @@ async function uploadLocalToRemote (syncConfig: SyncConfig, fileName: string) { logger.error(error) return false } + } else { + const { endpoint = '' } = syncConfig + const apiUrl = `${endpoint}/api/v1/repos/${username}/${repo}/contents/${fileName}` + try { + const headers = { + Authorization: `token ${token}` + } + const res = await axios.post(apiUrl, { + message: `upload ${fileName} from PicList`, + content: fs.readFileSync(localFilePath, { encoding: 'base64' }), + branch + }, { + headers + }) + return res.status >= 200 && res.status < 300 + } catch (error: any) { + logger.error(error) + return false + } } } @@ -132,9 +152,8 @@ async function updateLocalToRemote (syncConfig: SyncConfig, fileName: string) { return true } return false - } else { + } else if (type === 'github') { const octokit = getOctokit(syncConfig) - const shaRes = await octokit.rest.repos.getContent({ owner: username, repo, @@ -156,6 +175,29 @@ async function updateLocalToRemote (syncConfig: SyncConfig, fileName: string) { sha }) return res.status === 200 + } else { + const { endpoint = '' } = syncConfig + const apiUrl = `${endpoint}/api/v1/repos/${username}/${repo}/contents/${fileName}` + const headers = { + Authorization: `token ${token}` + } + const shaRes = await axios.get(apiUrl, { + headers + }) + if (shaRes.status < 200 || shaRes.status > 300) { + throw new Error('get sha failed') + } + const data = shaRes.data as any + const sha = data.sha + const res = await axios.put(apiUrl, { + message: `update ${fileName} from PicList`, + content: fs.readFileSync(localFilePath, { encoding: 'base64' }), + branch, + sha + }, { + headers + }) + return res.status >= 200 && res.status < 300 } } @@ -163,20 +205,25 @@ async function downloadRemoteToLocal (syncConfig: SyncConfig, fileName: string) const localFilePath = path.join(STORE_PATH, fileName) const { username, repo, branch, token, proxy, type } = syncConfig if (type === 'gitee') { - const url = `https://gitee.com/api/v5/repos/${username}/${repo}/contents/${fileName}` - const res = await axios.get(url, { - params: { - access_token: token, - ref: branch + try { + const url = `https://gitee.com/api/v5/repos/${username}/${repo}/contents/${fileName}` + const res = await axios.get(url, { + params: { + access_token: token, + ref: branch + } + }) + if (res.status >= 200 && res.status < 300) { + const content = res.data.content + await fs.writeFile(localFilePath, Buffer.from(content, 'base64')) + return true } - }) - if (res.status >= 200 && res.status < 300) { - const content = res.data.content - await fs.writeFile(localFilePath, Buffer.from(content, 'base64')) - return true + return false + } catch (error: any) { + logger.error(error) + return false } - return false - } else { + } else if (type === 'github') { const octokit = getOctokit(syncConfig) try { const res = await octokit.rest.repos.getContent({ @@ -209,6 +256,29 @@ async function downloadRemoteToLocal (syncConfig: SyncConfig, fileName: string) logger.error(error) return false } + } else { + const { endpoint = '' } = syncConfig + const apiUrl = `${endpoint}/api/v1/repos/${username}/${repo}/contents/${fileName}` + try { + const headers = { + Authorization: `token ${token}` + } + const res = await axios.get(apiUrl, { + headers, + params: { + ref: branch + } + }) + if (res.status >= 200 && res.status < 300) { + const content = res.data.content + await fs.writeFile(localFilePath, Buffer.from(content, 'base64')) + return true + } + return false + } catch (error: any) { + logger.error(error) + return false + } } } diff --git a/src/renderer/pages/PicGoSetting.vue b/src/renderer/pages/PicGoSetting.vue index 8d63510..50237ca 100644 --- a/src/renderer/pages/PicGoSetting.vue +++ b/src/renderer/pages/PicGoSetting.vue @@ -1129,39 +1129,49 @@ + + +