This repository has been archived on 2023-08-30. You can view files and clone it, but cannot push or open issues/pull-requests.
appcat
/
sonist
Archived
1
0
Fork 0
sonist/src/main.js

171 lines
3.9 KiB
JavaScript
Raw Normal View History

2019-01-19 02:53:59 +08:00
const {
app,
BrowserWindow,
protocol,
Tray,
Menu,
session
} = require('electron')
2018-12-26 23:58:24 +08:00
const path = require('path')
const fs = require('iofs')
const { exec } = require('child_process')
2018-12-26 23:58:24 +08:00
const log = console.log
/* ******************************* */
/* **********修复环境变量*********** */
/* ******************************* */
let PATH_SET = new Set()
process.env.PATH.split(':').forEach(_ => {
PATH_SET.add(_)
})
PATH_SET.add('/usr/local/bin')
PATH_SET.add('/usr/local/sbin')
process.env.PATH = Array.from(PATH_SET).join(':')
PATH_SET = null
2018-12-26 23:58:24 +08:00
const ROOT = __dirname
const HOME = app.getPath('home')
const MIME_TYPES = {
js: 'application/javascript',
html: 'text/html',
htm: 'text/html',
css: 'text/css',
jpg: 'image/jpg',
png: 'image/png',
gif: 'image/gif'
}
let win = null
2018-12-28 18:47:45 +08:00
let tray = null
2018-12-26 23:58:24 +08:00
2019-01-19 22:19:55 +08:00
/* ----------------------------------------------------- */
const TRAYMENU_TMPL = [
{
2019-01-19 23:29:34 +08:00
label: '显示主窗口',
2019-01-19 22:19:55 +08:00
click: () => {
win.show()
}
},
{
type: 'separator'
},
{
2019-01-19 23:29:34 +08:00
label: '退出',
2019-01-19 22:19:55 +08:00
role: 'quit'
}
]
const MENUBAR_TMPL = [
2019-01-19 02:53:59 +08:00
{
label: 'View',
submenu: [{ role: 'zoomin' }, { role: 'zoomout' }]
},
{
role: 'window',
submenu: [{ role: 'minimize' }, { role: 'close' }]
}
]
if (process.platform === 'darwin') {
2019-01-19 23:29:34 +08:00
MENUBAR_TMPL.unshift({
2019-01-19 02:53:59 +08:00
label: 'Sonist',
submenu: [{ role: 'about' }, { type: 'separator' }, { role: 'quit' }]
})
// Window menu
2019-01-19 22:19:55 +08:00
MENUBAR_TMPL[2].submenu = [{ role: 'minimize' }]
2019-01-19 02:53:59 +08:00
}
2019-01-19 22:19:55 +08:00
let traymenuList = Menu.buildFromTemplate(TRAYMENU_TMPL)
let menubarList = Menu.buildFromTemplate(MENUBAR_TMPL)
/* ----------------------------------------------------- */
2019-01-19 02:53:59 +08:00
2018-12-26 23:58:24 +08:00
function createWindow() {
// 创建浏览器窗口
win = new BrowserWindow({
title: 'sonist',
width: 1024,
2018-12-29 20:00:19 +08:00
height: 640,
2018-12-26 23:58:24 +08:00
frame: false,
resizable: false,
2019-01-19 04:33:34 +08:00
icon: path.resolve(ROOT, './images/app.png'),
2018-12-26 23:58:24 +08:00
webPreferences: {
webSecurity: false,
experimentalFeatures: true
},
show: false
2018-12-26 23:58:24 +08:00
})
// 然后加载应用的 index.html。
win.loadURL('app://sonist/index.html')
}
2019-01-19 23:29:34 +08:00
app.commandLine.appendSwitch('--lang', 'zh-CN')
2018-12-26 23:58:24 +08:00
app.commandLine.appendSwitch('--autoplay-policy', 'no-user-gesture-required')
2019-01-19 23:29:34 +08:00
2018-12-26 23:58:24 +08:00
app.setPath('appData', path.resolve(HOME, '.sonist/'))
protocol.registerStandardSchemes(['app'], { secure: true })
let appPath = app.getPath('appData')
if (!fs.exists(appPath)) {
fs.mkdir(appPath)
2018-12-28 22:19:29 +08:00
fs.mkdir(path.join(appPath, 'lyrics'))
2018-12-26 23:58:24 +08:00
fs.echo('{}', path.join(appPath, 'app.ini'))
fs.echo('[]', path.join(appPath, 'music.db'))
}
// 创建窗口
2019-01-19 23:29:34 +08:00
app.once('ready', () => {
2018-12-26 23:58:24 +08:00
protocol.registerBufferProtocol('app', (req, cb) => {
let file = req.url.replace(/^app:\/\/sonist\//, '')
let ext = path.extname(req.url).slice(1)
let buf = fs.cat(path.resolve(ROOT, file))
cb({ data: buf, mimeType: MIME_TYPES[ext] })
})
2018-12-28 18:47:45 +08:00
exec('which ffprobe', (err, res) => {
if (res) {
tray = new Tray(path.resolve(ROOT, './images/trays/trayTemplate.png'))
if (process.platform === 'darwin') {
tray.on('click', _ => {
win.show()
})
tray.on('right-click', _ => {
tray.popUpContextMenu(traymenuList)
})
} else {
tray.setContextMenu(traymenuList)
}
Menu.setApplicationMenu(menubarList)
session.defaultSession.setUserAgent(
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
)
createWindow()
win.on('ready-to-show', _ => {
win.show()
})
2019-01-20 18:28:58 +08:00
// win.openDevTools()
} else {
win = new BrowserWindow({
width: 600,
height: 360,
skipTaskbar: true,
maximizable: false,
minimizable: false,
resizable: false,
titleBarStyle: 'hiddenInset'
})
win.setMenuBarVisibility(false)
win.loadURL('app://sonist/depends.html')
win.on('closed', _ => {
app.exit()
})
}
})
2018-12-26 23:58:24 +08:00
})