Feature: users can set start mode now, mini window position will be remembered

This commit is contained in:
萌萌哒赫萝 2023-04-06 15:57:36 +08:00
parent e0e26bd9ad
commit 76c0cfbcb3
11 changed files with 179 additions and 26 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "piclist", "name": "piclist",
"version": "1.5.2", "version": "1.5.3",
"author": { "author": {
"name": "Kuingsmile", "name": "Kuingsmile",
"email": "msq@msq.pub" "email": "msq@msq.pub"

View File

@ -1,6 +1,7 @@
LANG_DISPLAY_LABEL: 'English' LANG_DISPLAY_LABEL: 'English'
ABOUT: About ABOUT: About
OPEN_MAIN_WINDOW: Open Main Window OPEN_MAIN_WINDOW: Open Main Window
OPEN_MINI_WINDOW: Open Mini Window
CHOOSE_DEFAULT_PICBED: Choose Default Picbed CHOOSE_DEFAULT_PICBED: Choose Default Picbed
OPEN_UPDATE_HELPER: Open Update Helper OPEN_UPDATE_HELPER: Open Update Helper
PRIVACY_AGREEMENT: Privacy Agreement PRIVACY_AGREEMENT: Privacy Agreement
@ -111,6 +112,10 @@ SETTINGS_MIGRATE_FROM_PICGO_TITLE: Notice
SETTINGS_MIGRATE_FROM_PICGO_CONTENT: Migrate from PicGo will overwrite your current settings and gallery, do you want to continue? SETTINGS_MIGRATE_FROM_PICGO_CONTENT: Migrate from PicGo will overwrite your current settings and gallery, do you want to continue?
SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: Import succeed, please restart PicList SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: Import succeed, please restart PicList
SETTINGS_MIGRATE_FROM_PICGO_FAILED: Import failed SETTINGS_MIGRATE_FROM_PICGO_FAILED: Import failed
SETTINGS_START_MODE: Default Start Mode
SETTINGS_START_MODE_MINI: Mini Window
SETTINGS_START_MODE_MAIN: Main Window
SETTINGS_START_MODE_QUIET: Quiet Mode
SETTINGS_CLICK_TO_OPEN: Click to Open SETTINGS_CLICK_TO_OPEN: Click to Open
SETTINGS_SET_LOG_FILE: Set Log File SETTINGS_SET_LOG_FILE: Set Log File
SETTINGS_CLICK_TO_SET: Click to Set SETTINGS_CLICK_TO_SET: Click to Set

View File

@ -1,6 +1,7 @@
LANG_DISPLAY_LABEL: 中文 LANG_DISPLAY_LABEL: 中文
ABOUT: 关于 ABOUT: 关于
OPEN_MAIN_WINDOW: 打开主窗口 OPEN_MAIN_WINDOW: 打开主窗口
OPEN_MINI_WINDOW: 打开mini窗口
CHOOSE_DEFAULT_PICBED: 选择默认图床 CHOOSE_DEFAULT_PICBED: 选择默认图床
OPEN_UPDATE_HELPER: 打开更新助手 OPEN_UPDATE_HELPER: 打开更新助手
PRIVACY_AGREEMENT: 隐私协议 PRIVACY_AGREEMENT: 隐私协议
@ -111,6 +112,10 @@ SETTINGS_MIGRATE_FROM_PICGO_TITLE: 通知
SETTINGS_MIGRATE_FROM_PICGO_CONTENT: 即将导入PicGo的配置文件和相册, 这将覆盖当前的配置文件和相册, 是否继续? SETTINGS_MIGRATE_FROM_PICGO_CONTENT: 即将导入PicGo的配置文件和相册, 这将覆盖当前的配置文件和相册, 是否继续?
SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: 导入成功, 请重启PicList生效 SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: 导入成功, 请重启PicList生效
SETTINGS_MIGRATE_FROM_PICGO_FAILED: 导入失败 SETTINGS_MIGRATE_FROM_PICGO_FAILED: 导入失败
SETTINGS_START_MODE: 启动模式
SETTINGS_START_MODE_MINI: mini窗口
SETTINGS_START_MODE_MAIN: 主窗口
SETTINGS_START_MODE_QUIET: 静默启动
SETTINGS_CLICK_TO_OPEN: 点击打开 SETTINGS_CLICK_TO_OPEN: 点击打开
SETTINGS_SET_LOG_FILE: 设置日志文件 SETTINGS_SET_LOG_FILE: 设置日志文件
SETTINGS_CLICK_TO_SET: 点击设置 SETTINGS_CLICK_TO_SET: 点击设置

View File

@ -1,6 +1,7 @@
LANG_DISPLAY_LABEL: 繁體中文 LANG_DISPLAY_LABEL: 繁體中文
ABOUT: 關於 ABOUT: 關於
OPEN_MAIN_WINDOW: 打開主視窗 OPEN_MAIN_WINDOW: 打開主視窗
OPEN_MINI_WINDOW: 打開mini視窗
CHOOSE_DEFAULT_PICBED: 選擇預設圖床 CHOOSE_DEFAULT_PICBED: 選擇預設圖床
OPEN_UPDATE_HELPER: 開啟更新助手 OPEN_UPDATE_HELPER: 開啟更新助手
PRIVACY_AGREEMENT: 隱私協議 PRIVACY_AGREEMENT: 隱私協議
@ -111,6 +112,10 @@ SETTINGS_MIGRATE_FROM_PICGO_TITLE: 通知
SETTINGS_MIGRATE_FROM_PICGO_CONTENT: 即將導入PicGo的設定文件和相冊, 這將會覆蓋當前的設定, 是否繼續? SETTINGS_MIGRATE_FROM_PICGO_CONTENT: 即將導入PicGo的設定文件和相冊, 這將會覆蓋當前的設定, 是否繼續?
SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: 導入成功, 請重啟應用 SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: 導入成功, 請重啟應用
SETTINGS_MIGRATE_FROM_PICGO_FAILED: 導入失敗 SETTINGS_MIGRATE_FROM_PICGO_FAILED: 導入失敗
SETTINGS_START_MODE: 啟動模式
SETTINGS_START_MODE_MINI: mini窗口
SETTINGS_START_MODE_MAIN: 主窗口
SETTINGS_START_MODE_QUIET: 靜默啟動
SETTINGS_CLICK_TO_OPEN: 點擊打開 SETTINGS_CLICK_TO_OPEN: 點擊打開
SETTINGS_SET_LOG_FILE: 設定記錄檔案 SETTINGS_SET_LOG_FILE: 設定記錄檔案
SETTINGS_CLICK_TO_SET: 點擊設定 SETTINGS_CLICK_TO_SET: 點擊設定

View File

@ -6,7 +6,8 @@ import {
dialog, dialog,
clipboard, clipboard,
systemPreferences, systemPreferences,
Notification Notification,
screen
} from 'electron' } from 'electron'
import uploader from 'apis/app/uploader' import uploader from 'apis/app/uploader'
import db, { GalleryDB } from '~/main/apis/core/datastore' import db, { GalleryDB } from '~/main/apis/core/datastore'
@ -15,7 +16,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 { 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'
import { buildPicBedListMenu } from '~/main/events/remotes/menu' import { buildPicBedListMenu } from '~/main/events/remotes/menu'
@ -80,7 +80,7 @@ export function createMenu () {
export function createContextMenu () { export function createContextMenu () {
if (process.platform === 'darwin' || process.platform === 'win32') { if (process.platform === 'darwin' || process.platform === 'win32') {
const submenu = buildPicBedListMenu() const submenu = buildPicBedListMenu()
contextMenu = Menu.buildFromTemplate([ const template = [
{ {
label: T('ABOUT'), label: T('ABOUT'),
click () { click () {
@ -120,7 +120,39 @@ export function createContextMenu () {
role: 'quit', role: 'quit',
label: T('QUIT') label: T('QUIT')
} }
]) ] as any
if (process.platform === 'win32') {
template.splice(2, 0,
{
label: T('OPEN_MINI_WINDOW'),
click () {
const miniWindow = windowManager.get(IWindowList.MINI_WINDOW)!
if (db.get('settings.miniWindowOntop')) {
miniWindow.setAlwaysOnTop(true)
}
const { width, height } = screen.getPrimaryDisplay().workAreaSize
const lastPosition = db.get('settings.miniWindowPosition')
if (lastPosition) {
miniWindow.setPosition(lastPosition[0], lastPosition[1])
} else {
miniWindow.setPosition(width - 100, height - 100)
}
miniWindow.on('close', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.on('move', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.show()
miniWindow.focus()
}
}
)
}
contextMenu = Menu.buildFromTemplate(template)
} else if (process.platform === 'linux') { } else if (process.platform === 'linux') {
// TODO 图床选择功能 // TODO 图床选择功能
// 由于在Linux难以像在Mac和Windows上那样在点击时构造ContextMenu // 由于在Linux难以像在Mac和Windows上那样在点击时构造ContextMenu
@ -141,6 +173,33 @@ export function createContextMenu () {
} }
} }
}, },
{
label: T('OPEN_MINI_WINDOW'),
click () {
const miniWindow = windowManager.get(IWindowList.MINI_WINDOW)!
if (db.get('settings.miniWindowOntop')) {
miniWindow.setAlwaysOnTop(true)
}
const { width, height } = screen.getPrimaryDisplay().workAreaSize
const lastPosition = db.get('settings.miniWindowPosition')
if (lastPosition) {
miniWindow.setPosition(lastPosition[0], lastPosition[1])
} else {
miniWindow.setPosition(width - 100, height - 100)
}
miniWindow.on('close', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.on('move', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.show()
miniWindow.focus()
}
},
{ {
label: T('ABOUT'), label: T('ABOUT'),
click () { click () {

View File

@ -4,7 +4,8 @@ import {
shell, shell,
Notification, Notification,
IpcMainEvent, IpcMainEvent,
BrowserWindow BrowserWindow,
screen
} from 'electron' } from 'electron'
import windowManager from 'apis/app/window/windowManager' import windowManager from 'apis/app/window/windowManager'
import { IWindowList } from '#/types/enum' import { IWindowList } from '#/types/enum'
@ -170,7 +171,21 @@ export default {
if (db.get('settings.miniWindowOntop')) { if (db.get('settings.miniWindowOntop')) {
miniWindow.setAlwaysOnTop(true) miniWindow.setAlwaysOnTop(true)
} }
const { width, height } = screen.getPrimaryDisplay().workAreaSize
const lastPosition = db.get('settings.miniWindowPosition')
if (lastPosition) {
miniWindow.setPosition(lastPosition[0], lastPosition[1])
} else {
miniWindow.setPosition(width - 100, height - 100)
}
miniWindow.on('close', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.on('move', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.show() miniWindow.show()
miniWindow.focus() miniWindow.focus()
settingWindow.hide() settingWindow.hide()

View File

@ -49,12 +49,6 @@ const buildMiniPageMenu = () => {
BrowserWindow.getFocusedWindow()!.hide() BrowserWindow.getFocusedWindow()!.hide()
} }
}, },
{
label: T('PRIVACY_AGREEMENT'),
click () {
privacyManager.show(false)
}
},
{ {
label: T('RELOAD_APP'), label: T('RELOAD_APP'),
click () { click () {

View File

@ -5,7 +5,8 @@ import {
protocol, protocol,
Notification, Notification,
Menu, Menu,
dialog dialog,
screen
} from 'electron' } from 'electron'
import { import {
createProtocol createProtocol
@ -174,6 +175,34 @@ class LifeCycle {
} }
await remoteNoticeHandler.init() await remoteNoticeHandler.init()
remoteNoticeHandler.triggerHook(IRemoteNoticeTriggerHook.APP_START) remoteNoticeHandler.triggerHook(IRemoteNoticeTriggerHook.APP_START)
if (db.get('settings.startMode') === 'mini') {
windowManager.create(IWindowList.MINI_WINDOW)
const miniWindow = windowManager.get(IWindowList.MINI_WINDOW)!
if (db.get('settings.miniWindowOntop')) {
miniWindow.setAlwaysOnTop(true)
}
const { width, height } = screen.getPrimaryDisplay().workAreaSize
const lastPosition = db.get('settings.miniWindowPosition')
if (lastPosition) {
miniWindow.setPosition(lastPosition[0], lastPosition[1])
} else {
miniWindow.setPosition(width - 100, height - 100)
}
miniWindow.on('close', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.on('move', () => {
const position = miniWindow.getPosition()
db.set('settings.miniWindowPosition', position)
})
miniWindow.show()
miniWindow.focus()
} else if (db.get('settings.startMode') === 'main') {
const settingWindow = windowManager.get(IWindowList.SETTING_WINDOW)!
settingWindow.show()
settingWindow.focus()
}
} }
app.whenReady().then(readyFunction) app.whenReady().then(readyFunction)
} }

View File

@ -42,6 +42,34 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item
:label="$T('SETTINGS_START_MODE')"
>
<el-select
v-model="currentStartMode"
size="small"
style="width: 50%"
:placeholder="$T('SETTINGS_START_MODE')"
@change="handleStartModeChange"
>
<el-option
key="quiet"
:label="$T('SETTINGS_START_MODE_QUIET')"
:value="'quiet'"
/>
<el-option
v-if="os !== 'darwin'"
key="mini"
:label="$T('SETTINGS_START_MODE_MINI')"
:value="'mini'"
/>
<el-option
key="main"
:label="$T('SETTINGS_START_MODE_MAIN')"
:value="'main'"
/>
</el-select>
</el-form-item>
<el-form-item <el-form-item
:label="$T('SETTINGS_MIGRATE_FROM_PICGO')" :label="$T('SETTINGS_MIGRATE_FROM_PICGO')"
> >
@ -233,6 +261,17 @@
@change="handleMiniWindowOntop" @change="handleMiniWindowOntop"
/> />
</el-form-item> </el-form-item>
<el-form-item
v-if="os !== 'darwin'"
:label="$T('SETTINGS_CUSTOM_MINI_ICON')"
>
<el-switch
v-model="form.isCustomMiniIcon"
:active-text="$T('SETTINGS_OPEN')"
:inactive-text="$T('SETTINGS_CLOSE')"
@change="handleIsCustomMiniIcon"
/>
</el-form-item>
<el-form-item <el-form-item
v-if="os !== 'darwin' && form.isCustomMiniIcon" v-if="os !== 'darwin' && form.isCustomMiniIcon"
:label="$T('SETTINGS_CUSTOM_MINI_ICON_PATH')" :label="$T('SETTINGS_CUSTOM_MINI_ICON_PATH')"
@ -246,18 +285,6 @@
{{ $T('SETTINGS_CLICK_TO_SET') }} {{ $T('SETTINGS_CLICK_TO_SET') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item
v-if="os !== 'darwin'"
:label="$T('SETTINGS_CUSTOM_MINI_ICON')"
>
<el-switch
v-model="form.isCustomMiniIcon"
:active-text="$T('SETTINGS_OPEN')"
:inactive-text="$T('SETTINGS_CLOSE')"
@change="handleIsCustomMiniIcon"
/>
</el-form-item>
<el-form-item <el-form-item
:label="$T('SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD')" :label="$T('SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD')"
> >
@ -1004,6 +1031,7 @@ const languageList = i18nManager.languageList.map(item => ({
})) }))
const currentLanguage = ref('zh-CN') const currentLanguage = ref('zh-CN')
const currentStartMode = ref('quiet')
const picBed = ref<IPicBedType[]>([]) const picBed = ref<IPicBedType[]>([])
@ -1090,6 +1118,7 @@ async function initData () {
form.isCustomMiniIcon = settings.isCustomMiniIcon || false form.isCustomMiniIcon = settings.isCustomMiniIcon || false
form.customMiniIcon = settings.customMiniIcon || '' form.customMiniIcon = settings.customMiniIcon || ''
currentLanguage.value = settings.language ?? 'zh-CN' currentLanguage.value = settings.language ?? 'zh-CN'
currentStartMode.value = settings.startMode || 'quiet'
customLink.value = settings.customLink || '$url' customLink.value = settings.customLink || '$url'
shortKey.upload = settings.shortKey.upload shortKey.upload = settings.shortKey.upload
proxy.value = picBed.proxy || '' proxy.value = picBed.proxy || ''
@ -1403,6 +1432,12 @@ function handleLanguageChange (val: string) {
sendToMain(GET_PICBEDS) sendToMain(GET_PICBEDS)
} }
function handleStartModeChange (val: 'quiet' | 'mini' | 'main') {
saveConfig({
'settings.startMode': val
})
}
function goConfigPage () { function goConfigPage () {
sendToMain(OPEN_URL, 'https://piclist.cn/configure.html') sendToMain(OPEN_URL, 'https://piclist.cn/configure.html')
} }

View File

@ -2,6 +2,7 @@ interface ILocales {
LANG_DISPLAY_LABEL: string LANG_DISPLAY_LABEL: string
ABOUT: string ABOUT: string
OPEN_MAIN_WINDOW: string OPEN_MAIN_WINDOW: string
OPEN_MINI_WINDOW: string
CHOOSE_DEFAULT_PICBED: string CHOOSE_DEFAULT_PICBED: string
OPEN_UPDATE_HELPER: string OPEN_UPDATE_HELPER: string
PRIVACY_AGREEMENT: string PRIVACY_AGREEMENT: string
@ -105,6 +106,10 @@ interface ILocales {
SETTINGS_MIGRATE_FROM_PICGO_CONTENT: string SETTINGS_MIGRATE_FROM_PICGO_CONTENT: string
SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: string SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: string
SETTINGS_MIGRATE_FROM_PICGO_FAILED: string SETTINGS_MIGRATE_FROM_PICGO_FAILED: string
SETTINGS_START_MODE: string
SETTINGS_START_MODE_MINI: string
SETTINGS_START_MODE_MAIN: string
SETTINGS_START_MODE_QUIET: string
SETTINGS_CLICK_TO_OPEN: string SETTINGS_CLICK_TO_OPEN: string
SETTINGS_SET_LOG_FILE: string SETTINGS_SET_LOG_FILE: string
SETTINGS_CLICK_TO_SET: string SETTINGS_CLICK_TO_SET: string

View File

@ -115,6 +115,7 @@ interface IBrowserWindowOptions {
icon?: string icon?: string
skipTaskbar?: boolean skipTaskbar?: boolean
alwaysOnTop?: boolean alwaysOnTop?: boolean
[propName: string]: any
} }
interface IFileWithPath { interface IFileWithPath {