Add protocol to enable extension support

This commit is contained in:
Preston 2020-10-04 16:31:07 -04:00
parent cbb1b853b5
commit 54a3810a53
3 changed files with 101 additions and 35 deletions

View File

@ -32,6 +32,14 @@ const config = {
directories: {
output: './build/',
},
protocols: [
{
name: "FreeTube",
schemes: [
"freetube"
]
}
],
files: ['_icons/iconColor.*', './dist/**/*', '!./dist/web/**/*'],
dmg: {
contents: [

View File

@ -21,8 +21,6 @@ app.setName(productName)
// disable electron warning
process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = 'true'
// const gotTheLock = app.requestSingleInstanceLock()
const path = require('path')
const isDev = process.env.NODE_ENV === 'development'
const isDebug = process.argv.includes('--debug')
@ -33,26 +31,55 @@ let mainWindow
// This line can possible be removed if the issue is fixed upstream
app.commandLine.appendSwitch('disable-features', 'OutOfBlinkCors')
app.setAsDefaultProtocolClient('freetube')
// TODO: Uncomment if needed
// only allow single instance of application
// if (!isDev) {
// if (gotTheLock) {
// app.on('second-instance', () => {
// // Someone tried to run a second instance, we should focus our window.
// if (mainWindow && mainWindow.isMinimized()) {
// mainWindow.restore()
// }
// mainWindow.focus()
// })
// } else {
// app.quit()
// process.exit(0)
// }
// } else {
// require('electron-debug')({
// showDevTools: !(process.env.RENDERER_REMOTE_DEBUGGING === 'true')
// })
// }
if (!isDev) {
const gotTheLock = app.requestSingleInstanceLock()
if (gotTheLock) {
app.on('second-instance', (event, commandLine, workingDirectory) => {
// Someone tried to run a second instance, we should focus our window.
if (mainWindow && typeof (commandLine) !== 'undefined') {
if (mainWindow.isMinimized()) mainWindow.restore()
mainWindow.focus()
mainWindow.webContents.send('ping', commandLine)
}
})
app.on('ready', (event, commandLine, workingDirectory) => {
createWindow()
if (isDev) {
installDevTools()
}
if (isDebug) {
mainWindow.webContents.openDevTools()
}
})
} else {
app.quit()
}
} else {
require('electron-debug')({
showDevTools: !(process.env.RENDERER_REMOTE_DEBUGGING === 'true')
})
app.on('ready', () => {
createWindow()
if (isDev) {
installDevTools()
}
if (isDebug) {
mainWindow.webContents.openDevTools()
}
})
}
async function installDevTools () {
try {
@ -172,19 +199,14 @@ function createWindow () {
}
})
})
}
app.on('ready', () => {
createWindow()
if (isDev) {
installDevTools()
}
if (isDebug) {
mainWindow.webContents.openDevTools()
ipcMain.on('appReady', () => {
const param = process.argv[1]
if (typeof (param) !== 'undefined' && param !== null) {
mainWindow.webContents.send('ping', process.argv)
}
})
}
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
@ -222,7 +244,6 @@ app.on('activate', () => {
/*
import { autoUpdater } from 'electron-updater'
autoUpdater.on('update-downloaded', () => {
autoUpdater.quitAndInstall()
})

View File

@ -1,4 +1,5 @@
import Vue from 'vue'
import { mapActions } from 'vuex'
import { ObserveVisibility } from 'vue-observe-visibility'
import FtFlexBox from './components/ft-flex-box/ft-flex-box.vue'
import TopNav from './components/top-nav/top-nav.vue'
@ -14,12 +15,14 @@ import Parser from 'rss-parser'
let useElectron
let shell
let electron
Vue.directive('observe-visibility', ObserveVisibility)
if (window && window.process && window.process.type === 'renderer') {
/* eslint-disable-next-line */
shell = require('electron').shell
electron = require('electron')
shell = electron.shell
useElectron = true
} else {
useElectron = false
@ -65,6 +68,9 @@ export default Vue.extend({
},
checkForBlogPosts: function () {
return this.$store.getters.getCheckForBlogPosts
},
searchSettings: function () {
return this.$store.getters.getSearchSettings
}
},
mounted: function () {
@ -79,6 +85,7 @@ export default Vue.extend({
console.log('User is using Electron')
this.activateKeyboardShortcuts()
this.openAllLinksExternally()
this.enableCliPing()
this.setBoundsOnClose()
}
@ -247,9 +254,39 @@ export default Vue.extend({
})
},
enableCliPing: function () {
const v = this
electron.ipcRenderer.on('ping', function (event, message) {
console.log('ping!')
console.log(message)
let url = message[message.length - 1]
if (url) {
url = url.replace('freetube://', '')
v.$store.dispatch('getVideoIdFromUrl', url).then((result) => {
if (result) {
v.$router.push({
path: `/watch/${result}`
})
} else {
v.$router.push({
path: `/search/${encodeURIComponent(url)}`,
query: {
sortBy: v.searchSettings.sortBy,
time: v.searchSettings.time,
type: v.searchSettings.type,
duration: v.searchSettings.duration
}
})
}
})
}
})
electron.ipcRenderer.send('appReady')
},
setBoundsOnClose: function () {
window.onbeforeunload = (e) => {
const electron = require('electron')
electron.ipcRenderer.send('setBounds')
}
}