mirror of
https://github.com/Kuingsmile/PicList.git
synced 2025-02-02 11:08:13 -05:00
🔨 Refactor: optimize auto update
This commit is contained in:
parent
2fab2cd79d
commit
e0e26bd9ad
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "piclist",
|
"name": "piclist",
|
||||||
"version": "1.5.3",
|
"version": "1.5.2",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Kuingsmile",
|
"name": "Kuingsmile",
|
||||||
"email": "msq@msq.pub"
|
"email": "msq@msq.pub"
|
||||||
|
@ -779,7 +779,7 @@ TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR: Custom config file parse error, please check
|
|||||||
TIPS_SHORTCUT_MODIFIED_SUCCEED: Shortcut modified successfully
|
TIPS_SHORTCUT_MODIFIED_SUCCEED: Shortcut modified successfully
|
||||||
TIPS_SHORTCUT_MODIFIED_CONFLICT: Shortcut conflict, please reset
|
TIPS_SHORTCUT_MODIFIED_CONFLICT: Shortcut conflict, please reset
|
||||||
TIPS_CUSTOM_LINK_STYLE_MODIFIED_SUCCEED: Custom link style modified successfully
|
TIPS_CUSTOM_LINK_STYLE_MODIFIED_SUCCEED: Custom link style modified successfully
|
||||||
TIPS_FIND_NEW_VERSION: Find new version ${v}, update many new features, do you want to download the latest version?
|
TIPS_FIND_NEW_VERSION: Find new version ${v}, update many new features, do you want to download the latest version in the background?
|
||||||
UPDATE_DOWNLOADED: Update downloaded
|
UPDATE_DOWNLOADED: Update downloaded
|
||||||
TIPS_UPDATE_DOWNLOADED: The update has been downloaded and will be installed on the next app restart. Would you like to restart now?
|
TIPS_UPDATE_DOWNLOADED: The update has been downloaded and will be installed on the next app restart. Would you like to restart now?
|
||||||
# privacy
|
# privacy
|
||||||
|
@ -780,7 +780,7 @@ TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR: 自定义文件解析出错,请检查路
|
|||||||
TIPS_SHORTCUT_MODIFIED_SUCCEED: 快捷键已经修改成功
|
TIPS_SHORTCUT_MODIFIED_SUCCEED: 快捷键已经修改成功
|
||||||
TIPS_SHORTCUT_MODIFIED_CONFLICT: 快捷键冲突,请重新设置
|
TIPS_SHORTCUT_MODIFIED_CONFLICT: 快捷键冲突,请重新设置
|
||||||
TIPS_CUSTOM_LINK_STYLE_MODIFIED_SUCCEED: 自定义链接格式已经修改成功
|
TIPS_CUSTOM_LINK_STYLE_MODIFIED_SUCCEED: 自定义链接格式已经修改成功
|
||||||
TIPS_FIND_NEW_VERSION: 发现新版本${v},更新了很多功能,是否去下载最新的版本?
|
TIPS_FIND_NEW_VERSION: 发现新版本${v},更新了很多功能,是否后台下载最新的版本?
|
||||||
UPDATE_DOWNLOADED: 更新已下载
|
UPDATE_DOWNLOADED: 更新已下载
|
||||||
TIPS_UPDATE_DOWNLOADED: 更新已下载,将在下次启动时安装,是否现在重启?
|
TIPS_UPDATE_DOWNLOADED: 更新已下载,将在下次启动时安装,是否现在重启?
|
||||||
|
|
||||||
|
@ -778,7 +778,7 @@ TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR: 自訂設定檔案解析出錯,請檢查
|
|||||||
TIPS_SHORTCUT_MODIFIED_SUCCEED: 快捷鍵已經修改成功
|
TIPS_SHORTCUT_MODIFIED_SUCCEED: 快捷鍵已經修改成功
|
||||||
TIPS_SHORTCUT_MODIFIED_CONFLICT: 快捷鍵衝突,請重新設定
|
TIPS_SHORTCUT_MODIFIED_CONFLICT: 快捷鍵衝突,請重新設定
|
||||||
TIPS_CUSTOM_LINK_STYLE_MODIFIED_SUCCEED: 自訂連結格式已經修改成功
|
TIPS_CUSTOM_LINK_STYLE_MODIFIED_SUCCEED: 自訂連結格式已經修改成功
|
||||||
TIPS_FIND_NEW_VERSION: 發現新版本${v},更新了很多功能,是否去下載最新的版本?
|
TIPS_FIND_NEW_VERSION: 發現新版本${v},更新了很多功能,是否後台下載最新的版本?
|
||||||
UPDATE_DOWNLOADED: 更新已下載
|
UPDATE_DOWNLOADED: 更新已下載
|
||||||
TIPS_UPDATE_DOWNLOADED: 更新已下載,将在下次啟動時安裝,是否立即重啟?
|
TIPS_UPDATE_DOWNLOADED: 更新已下載,将在下次啟動時安裝,是否立即重啟?
|
||||||
# privacy
|
# privacy
|
||||||
|
@ -1,37 +1,36 @@
|
|||||||
"use strict";
|
'use strict'
|
||||||
|
|
||||||
require('dotenv').config()
|
require('dotenv').config()
|
||||||
|
|
||||||
const { notarize } = require("@electron/notarize")
|
const { notarize } = require('@electron/notarize')
|
||||||
const {
|
const {
|
||||||
ELECTRON_SKIP_NOTARIZATION,
|
ELECTRON_SKIP_NOTARIZATION,
|
||||||
XCODE_APP_LOADER_EMAIL,
|
XCODE_APP_LOADER_EMAIL,
|
||||||
XCODE_APP_LOADER_PASSWORD,
|
XCODE_APP_LOADER_PASSWORD
|
||||||
} = process.env
|
} = process.env
|
||||||
|
|
||||||
async function main(context) {
|
async function main (context) {
|
||||||
const { electronPlatformName, appOutDir } = context
|
const { electronPlatformName, appOutDir } = context
|
||||||
|
|
||||||
if (
|
if (
|
||||||
electronPlatformName !== "darwin" ||
|
electronPlatformName !== 'darwin' ||
|
||||||
ELECTRON_SKIP_NOTARIZATION === "true" ||
|
ELECTRON_SKIP_NOTARIZATION === 'true' ||
|
||||||
!XCODE_APP_LOADER_EMAIL ||
|
!XCODE_APP_LOADER_EMAIL ||
|
||||||
!XCODE_APP_LOADER_PASSWORD
|
!XCODE_APP_LOADER_PASSWORD
|
||||||
) {
|
) {
|
||||||
console.log("Skipping Apple notarization.")
|
console.log('Skipping Apple notarization.')
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("Starting Apple notarization.")
|
console.log('Starting Apple notarization.')
|
||||||
const appName = context.packager.appInfo.productFilename;
|
const appName = context.packager.appInfo.productFilename
|
||||||
await notarize({
|
await notarize({
|
||||||
appBundleId: "com.kuingsmile.piclist",
|
appBundleId: 'com.kuingsmile.piclist',
|
||||||
appPath: `${appOutDir}/${appName}.app`,
|
appPath: `${appOutDir}/${appName}.app`,
|
||||||
appleId: XCODE_APP_LOADER_EMAIL,
|
appleId: XCODE_APP_LOADER_EMAIL,
|
||||||
appleIdPassword: XCODE_APP_LOADER_PASSWORD,
|
appleIdPassword: XCODE_APP_LOADER_PASSWORD
|
||||||
})
|
})
|
||||||
console.log("Finished Apple notarization.")
|
console.log('Finished Apple notarization.')
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.default = main;
|
exports.default = main
|
||||||
|
@ -14,7 +14,6 @@ const ACCOUNT_ID = process.env.R2_ACCOUNT_ID
|
|||||||
const SECRET_ID = process.env.R2_SECRET_ID
|
const SECRET_ID = process.env.R2_SECRET_ID
|
||||||
const SECRET_KEY = process.env.R2_SECRET_KEY
|
const SECRET_KEY = process.env.R2_SECRET_KEY
|
||||||
|
|
||||||
|
|
||||||
const uploadFile = async () => {
|
const uploadFile = async () => {
|
||||||
try {
|
try {
|
||||||
const platform = process.platform
|
const platform = process.platform
|
||||||
|
@ -7,10 +7,11 @@ const pkg = require('../package.json')
|
|||||||
const configList = require('./config')
|
const configList = require('./config')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
const yaml = require('js-yaml')
|
||||||
|
|
||||||
const BUCKET = 'piclist-dl'
|
const BUCKET = 'piclist-dl'
|
||||||
const VERSION = pkg.version
|
const VERSION = pkg.version
|
||||||
const FILE_PATH = `latest/`
|
const FILE_PATH = 'latest/'
|
||||||
const ACCOUNT_ID = process.env.R2_ACCOUNT_ID
|
const ACCOUNT_ID = process.env.R2_ACCOUNT_ID
|
||||||
const SECRET_ID = process.env.R2_SECRET_ID
|
const SECRET_ID = process.env.R2_SECRET_ID
|
||||||
const SECRET_KEY = process.env.R2_SECRET_KEY
|
const SECRET_KEY = process.env.R2_SECRET_KEY
|
||||||
@ -19,9 +20,22 @@ const s3 = new S3({
|
|||||||
endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`,
|
endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`,
|
||||||
accessKeyId: SECRET_ID,
|
accessKeyId: SECRET_ID,
|
||||||
secretAccessKey: SECRET_KEY,
|
secretAccessKey: SECRET_KEY,
|
||||||
signatureVersion: 'v4',
|
signatureVersion: 'v4'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const removeDupField = path => {
|
||||||
|
const file = fs.readFileSync(path, 'utf8')
|
||||||
|
const data = yaml.load(file)
|
||||||
|
const filesMap = {}
|
||||||
|
data.files.forEach(file => {
|
||||||
|
const key = file.url + file.sha512 + file.size
|
||||||
|
filesMap[key] = file
|
||||||
|
})
|
||||||
|
data.files = Object.values(filesMap)
|
||||||
|
const newYml = yaml.dump(data, { lineWidth: -1 })
|
||||||
|
fs.writeFileSync(path, newYml, 'utf8')
|
||||||
|
}
|
||||||
|
|
||||||
const uploadFile = async () => {
|
const uploadFile = async () => {
|
||||||
try {
|
try {
|
||||||
const platform = process.platform
|
const platform = process.platform
|
||||||
@ -30,7 +44,7 @@ const uploadFile = async () => {
|
|||||||
for (const [index, config] of configList[platform].entries()) {
|
for (const [index, config] of configList[platform].entries()) {
|
||||||
const fileName = `${config.appNameWithPrefix}${VERSION}${config.arch}${config.ext}`
|
const fileName = `${config.appNameWithPrefix}${VERSION}${config.arch}${config.ext}`
|
||||||
const distPath = path.join(__dirname, '../dist_electron')
|
const distPath = path.join(__dirname, '../dist_electron')
|
||||||
let versionFileName = config['version-file']
|
const versionFileName = config['version-file']
|
||||||
console.log('[PicList Dist] Uploading...', fileName, `${index + 1}/${configList[platform].length}`)
|
console.log('[PicList Dist] Uploading...', fileName, `${index + 1}/${configList[platform].length}`)
|
||||||
const fileStream = fs.createReadStream(path.join(distPath, fileName))
|
const fileStream = fs.createReadStream(path.join(distPath, fileName))
|
||||||
const options = {
|
const options = {
|
||||||
@ -55,7 +69,7 @@ const uploadFile = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
parallelUploads3.on('httpUploadProgress', (progress) => {
|
parallelUploads3.on('httpUploadProgress', progress => {
|
||||||
const progressBar = Math.round((progress.loaded / progress.total) * 100)
|
const progressBar = Math.round((progress.loaded / progress.total) * 100)
|
||||||
process.stdout.write(`\r${progressBar}% ${fileName}`)
|
process.stdout.write(`\r${progressBar}% ${fileName}`)
|
||||||
})
|
})
|
||||||
@ -72,17 +86,22 @@ const uploadFile = async () => {
|
|||||||
} else {
|
} else {
|
||||||
versionFilePath = path.join(distPath, 'latest-linux.yml')
|
versionFilePath = path.join(distPath, 'latest-linux.yml')
|
||||||
}
|
}
|
||||||
|
removeDupField(versionFilePath)
|
||||||
const versionFileBuffer = fs.readFileSync(versionFilePath)
|
const versionFileBuffer = fs.readFileSync(versionFilePath)
|
||||||
await s3.upload({
|
await s3
|
||||||
|
.upload({
|
||||||
Bucket: BUCKET,
|
Bucket: BUCKET,
|
||||||
Key: `${versionFileName}`,
|
Key: `${versionFileName}`,
|
||||||
Body: versionFileBuffer
|
Body: versionFileBuffer
|
||||||
}).promise()
|
})
|
||||||
await s3.upload({
|
.promise()
|
||||||
|
await s3
|
||||||
|
.upload({
|
||||||
Bucket: BUCKET,
|
Bucket: BUCKET,
|
||||||
Key: `${FILE_PATH}${versionFileName}`,
|
Key: `${FILE_PATH}${versionFileName}`,
|
||||||
Body: versionFileBuffer
|
Body: versionFileBuffer
|
||||||
}).promise()
|
})
|
||||||
|
.promise()
|
||||||
versionFileHasUploaded = true
|
versionFileHasUploaded = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@ import { IWindowList } from '#/types/enum'
|
|||||||
import pasteTemplate from '~/main/utils/pasteTemplate'
|
import pasteTemplate from '~/main/utils/pasteTemplate'
|
||||||
import pkg from 'root/package.json'
|
import pkg from 'root/package.json'
|
||||||
import { ensureFilePath, handleCopyUrl } from '~/main/utils/common'
|
import { ensureFilePath, handleCopyUrl } from '~/main/utils/common'
|
||||||
import { privacyManager } from '~/main/utils/privacyManager'
|
|
||||||
// import { T } from '#/i18n'
|
// import { T } from '#/i18n'
|
||||||
import { T } from '~/main/i18n'
|
import { T } from '~/main/i18n'
|
||||||
import { isMacOSVersionGreaterThanOrEqualTo } from '~/main/utils/getMacOSVersion'
|
import { isMacOSVersionGreaterThanOrEqualTo } from '~/main/utils/getMacOSVersion'
|
||||||
@ -50,12 +49,6 @@ export function createMenu () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
label: T('PRIVACY_AGREEMENT'),
|
|
||||||
click () {
|
|
||||||
privacyManager.show(false)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: T('RELOAD_APP'),
|
label: T('RELOAD_APP'),
|
||||||
click () {
|
click () {
|
||||||
@ -115,12 +108,6 @@ export function createContextMenu () {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
submenu
|
submenu
|
||||||
},
|
},
|
||||||
{
|
|
||||||
label: T('PRIVACY_AGREEMENT'),
|
|
||||||
click () {
|
|
||||||
privacyManager.show(false)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: T('RELOAD_APP'),
|
label: T('RELOAD_APP'),
|
||||||
click () {
|
click () {
|
||||||
|
@ -43,6 +43,7 @@ import getManageApi from '../manage/Main'
|
|||||||
import UpDownTaskQueue from '../manage/datastore/upDownTaskQueue'
|
import UpDownTaskQueue from '../manage/datastore/upDownTaskQueue'
|
||||||
import { T } from '~/main/i18n'
|
import { T } from '~/main/i18n'
|
||||||
import { UpdateInfo, autoUpdater } from 'electron-updater'
|
import { UpdateInfo, autoUpdater } from 'electron-updater'
|
||||||
|
import updateChecker from '../utils/updateChecker'
|
||||||
const isDevelopment = process.env.NODE_ENV !== 'production'
|
const isDevelopment = process.env.NODE_ENV !== 'production'
|
||||||
|
|
||||||
const handleStartUpFiles = (argv: string[], cwd: string) => {
|
const handleStartUpFiles = (argv: string[], cwd: string) => {
|
||||||
@ -77,11 +78,14 @@ autoUpdater.on('update-available', (info: UpdateInfo) => {
|
|||||||
buttons: ['Yes', 'No'],
|
buttons: ['Yes', 'No'],
|
||||||
message: T('TIPS_FIND_NEW_VERSION', {
|
message: T('TIPS_FIND_NEW_VERSION', {
|
||||||
v: info.version
|
v: info.version
|
||||||
})
|
}),
|
||||||
|
checkboxLabel: T('NO_MORE_NOTICE'),
|
||||||
|
checkboxChecked: false
|
||||||
}).then((result) => {
|
}).then((result) => {
|
||||||
if (result.response === 0) {
|
if (result.response === 0) {
|
||||||
autoUpdater.downloadUpdate()
|
autoUpdater.downloadUpdate()
|
||||||
}
|
}
|
||||||
|
db.set('settings.showUpdateTip', !result.checkboxChecked)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -151,8 +155,7 @@ class LifeCycle {
|
|||||||
}
|
}
|
||||||
createTray()
|
createTray()
|
||||||
db.set('needReload', false)
|
db.set('needReload', false)
|
||||||
// updateChecker()
|
updateChecker()
|
||||||
autoUpdater.checkForUpdatesAndNotify()
|
|
||||||
// 不需要阻塞
|
// 不需要阻塞
|
||||||
process.nextTick(() => {
|
process.nextTick(() => {
|
||||||
shortKeyHandler.init()
|
shortKeyHandler.init()
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
import { dialog, shell } from 'electron'
|
|
||||||
import db from '~/main/apis/core/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import pkg from 'root/package.json'
|
|
||||||
import { lt } from 'semver'
|
|
||||||
import { T } from '~/main/i18n'
|
|
||||||
import { getLatestVersion } from '#/utils/getLatestVersion'
|
import { getLatestVersion } from '#/utils/getLatestVersion'
|
||||||
const version = pkg.version
|
import { autoUpdater } from 'electron-updater'
|
||||||
// const releaseUrl = 'https://api.github.com/repos/Molunerfinn/PicGo/releases'
|
// const releaseUrl = 'https://api.github.com/repos/Molunerfinn/PicGo/releases'
|
||||||
// const releaseUrlBackup = 'https://picgo-1251750343.cos.ap-chengdu.myqcloud.com'
|
// const releaseUrlBackup = 'https://picgo-1251750343.cos.ap-chengdu.myqcloud.com'
|
||||||
const downloadUrl = 'https://github.com/Kuingsmile/PicList/releases/latest'
|
// const downloadUrl = 'https://github.com/Kuingsmile/PicList/releases/latest'
|
||||||
|
|
||||||
const checkVersion = async () => {
|
const checkVersion = async () => {
|
||||||
let showTip = db.get('settings.showUpdateTip')
|
let showTip = db.get('settings.showUpdateTip')
|
||||||
@ -18,25 +14,7 @@ const checkVersion = async () => {
|
|||||||
if (showTip) {
|
if (showTip) {
|
||||||
const res: string = await getLatestVersion()
|
const res: string = await getLatestVersion()
|
||||||
if (res !== '') {
|
if (res !== '') {
|
||||||
const latest = res
|
autoUpdater.checkForUpdatesAndNotify()
|
||||||
const result = compareVersion2Update(version, latest)
|
|
||||||
if (result) {
|
|
||||||
dialog.showMessageBox({
|
|
||||||
type: 'info',
|
|
||||||
title: T('FIND_NEW_VERSION'),
|
|
||||||
buttons: ['Yes', 'No'],
|
|
||||||
message: T('TIPS_FIND_NEW_VERSION', {
|
|
||||||
v: latest
|
|
||||||
}),
|
|
||||||
checkboxLabel: T('NO_MORE_NOTICE'),
|
|
||||||
checkboxChecked: false
|
|
||||||
}).then(res => {
|
|
||||||
if (res.response === 0) { // if selected yes
|
|
||||||
shell.openExternal(downloadUrl)
|
|
||||||
}
|
|
||||||
db.set('settings.showUpdateTip', !res.checkboxChecked)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -45,13 +23,4 @@ const checkVersion = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if true -> update else return false
|
|
||||||
const compareVersion2Update = (current: string, latest: string) => {
|
|
||||||
try {
|
|
||||||
return lt(current, latest)
|
|
||||||
} catch (e) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default checkVersion
|
export default checkVersion
|
||||||
|
@ -151,7 +151,6 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
v-if="false"
|
|
||||||
:label="$T('SETTINGS_OPEN_UPDATE_HELPER')"
|
:label="$T('SETTINGS_OPEN_UPDATE_HELPER')"
|
||||||
>
|
>
|
||||||
<el-switch
|
<el-switch
|
||||||
|
Loading…
Reference in New Issue
Block a user