Skip to content

Commit 18eeec5

Browse files
committed
fix file opening
1 parent bc644c8 commit 18eeec5

File tree

4 files changed

+95
-44
lines changed

4 files changed

+95
-44
lines changed

packages/graphql-playground-electron/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"homepage": "https://github.com/graphcool/graphql-playground",
55
"repository": "graphcool/graphql-playground",
66
"description": "Playground app",
7-
"version": "1.3.0-beta.2",
7+
"version": "1.3.0-beta.4",
88
"author": {
99
"name": "Graphcool",
1010
"email": "[email protected]",
@@ -93,6 +93,7 @@
9393
"date-fns": "^1.28.5",
9494
"electron-is-dev": "^0.3.0",
9595
"electron-localshortcut": "^2.0.2",
96+
"electron-log": "^2.2.11",
9697
"electron-updater": "^2.13.0",
9798
"find-up": "^2.1.0",
9899
"graphcool-styles": "^0.1.31",

packages/graphql-playground-electron/src/ElectronApp.tsx

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,25 @@ interface State {
3737
env?: any
3838
}
3939

40+
const events: any[] = []
41+
42+
ipcRenderer.on('OpenSelectedFile', pushSelectedFile)
43+
ipcRenderer.on('OpenUrl', pushOpenUrl)
44+
45+
function pushSelectedFile() {
46+
events.push({
47+
type: 'OpenSelectedFile',
48+
args: arguments,
49+
})
50+
}
51+
52+
function pushOpenUrl() {
53+
events.push({
54+
type: 'OpenUrl',
55+
args: arguments,
56+
})
57+
}
58+
4059
export default class ElectronApp extends React.Component<{}, State> {
4160
private playground: IPlayground
4261

@@ -130,11 +149,27 @@ cd ${folderPath}; graphql playground`)
130149
}
131150

132151
componentDidMount() {
152+
ipcRenderer.removeListener('OpenUrl', pushOpenUrl)
153+
ipcRenderer.removeListener('OpenSelectedFile', pushSelectedFile)
133154
ipcRenderer.on('Tab', this.readTabMessage)
134155
ipcRenderer.on('File', this.readFileMessage)
135156
ipcRenderer.on('OpenSelectedFile', this.readOpenSelectedFileMessage)
136157
ipcRenderer.on('OpenUrl', this.handleUrl)
137158
window.addEventListener('keydown', this.handleKeyDown)
159+
this.consumeEvents()
160+
ipcRenderer.send('ready', '')
161+
}
162+
163+
consumeEvents() {
164+
while (events.length > 0) {
165+
const event = events.shift()
166+
switch (event.type) {
167+
case 'OpenSelectedFile':
168+
return this.readOpenSelectedFileMessage.call(this, ...event.args)
169+
case 'OpenUrl':
170+
return this.handleUrl.call(this, ...event.args)
171+
}
172+
}
138173
}
139174

140175
componentWillUnmount() {
@@ -416,6 +451,8 @@ cd ${folderPath}; graphql playground`)
416451
canSaveConfig={true}
417452
env={this.state.env}
418453
folderName={this.state.folderName}
454+
showNewWorkspace={true}
455+
onNewWorkspace={this.handleOpenNewWindow}
419456
/>
420457
</div>
421458
)}

packages/graphql-playground-electron/src/main.ts

Lines changed: 52 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import {
1010
protocol,
1111
} from 'electron'
1212
import * as electronLocalShortcut from 'electron-localshortcut'
13+
import * as fs from 'fs'
14+
import * as os from 'os'
1315
import { autoUpdater } from 'electron-updater'
1416
const dev = require('electron-is-dev')
1517

@@ -20,6 +22,38 @@ const { newWindowConfig } = require('./utils')
2022
const server = 'https://hazel-wmigqegsed.now.sh'
2123
const feed = `${server}/update/${process.platform}/${app.getVersion()}`
2224

25+
app.setAsDefaultProtocolClient('graphql-playground')
26+
27+
const log = {
28+
info: (...args) => {
29+
console.log(...args)
30+
// fs.appendFileSync(
31+
// os.homedir() + '/pg-logs.log',
32+
// JSON.stringify(args) + '\n',
33+
// )
34+
},
35+
}
36+
37+
log.info(protocol)
38+
// log.info(protocol.registerStringProtocol)
39+
40+
// protocol.registerBufferProtocol('graphql-playground', (request, callback) => {
41+
// setTimeout(() => {
42+
// forceSend('OpenUrl', request.url)
43+
// }, 5000)
44+
// callback()
45+
// })
46+
47+
app.on('open-url', (event, url) => {
48+
event.preventDefault()
49+
forceSend('OpenUrl', url)
50+
})
51+
52+
app.on('open-file', (event, path) => {
53+
event.preventDefault()
54+
forceSend('OpenSelectedFile', path)
55+
})
56+
2357
function getFocusedWindow(): any | null {
2458
return BrowserWindow.getFocusedWindow()
2559
}
@@ -54,30 +88,24 @@ function getFocusedWindow(): any | null {
5488
function send(channel: string, arg: string) {
5589
const focusedWindow = getFocusedWindow()
5690
if (focusedWindow) {
57-
console.log('sending to focused window', channel, arg)
91+
log.info('sending to focused window', channel, arg)
5892
focusedWindow.webContents.send(channel, arg)
5993
} else {
60-
console.log('no focused window')
94+
log.info('no focused window')
6195
}
6296
}
6397

98+
const readyWindowsPromises = {}
99+
64100
async function forceSend(channel: string, arg: string) {
65101
await appPromise
66102
const currentWindows = BrowserWindow.getAllWindows()
67103
let window = currentWindows[0]
68104
if (!window) {
69105
window = createWindow()
70-
console.log('created window')
71-
await new Promise(r => {
72-
console.log('waiting for dom to be ready')
73-
window.webContents.addListener('dom-ready', r)
74-
})
75-
await new Promise(r => setTimeout(r, 200))
76-
console.log('did finish load')
77106
}
78-
// send(channel, arg)
79-
// console.log('window')
80-
console.log('force sending', channel, arg)
107+
await readyWindowsPromises[window.id]
108+
log.info('force sending', channel, arg)
81109
window.webContents.send(channel, arg)
82110
}
83111

@@ -147,12 +175,12 @@ function createWindow() {
147175
} = require('electron-devtools-installer')
148176

149177
installExtension(REACT_DEVELOPER_TOOLS)
150-
.then(name => console.log(`Added Extension: ${name}`))
151-
.catch(err => console.log('An error occurred: ', err))
178+
.then(name => log.info(`Added Extension: ${name}`))
179+
.catch(err => log.info('An error occurred: ', err))
152180

153181
installExtension(REDUX_DEVTOOLS)
154-
.then(name => console.log(`Added Extension: ${name}`))
155-
.catch(err => console.log('An error occurred: ', err))
182+
.then(name => log.info(`Added Extension: ${name}`))
183+
.catch(err => log.info('An error occurred: ', err))
156184

157185
// newWindow.webContents.openDevTools()
158186
}
@@ -174,6 +202,11 @@ function createWindow() {
174202
// electronLocalShortcut.register(newWindow, 'Cmd+Shift+[', () => {
175203
// send('Tab', 'Prev')
176204
// })
205+
readyWindowsPromises[newWindow.id] = new Promise(r => {
206+
ipcMain.once('ready', () => {
207+
r()
208+
})
209+
})
177210

178211
return newWindow
179212
}
@@ -292,35 +325,23 @@ app.on('ready', () => {
292325
Menu.setApplicationMenu(menu)
293326

294327
ipcMain.on('get-file-data', event => {
295-
console.log('get-file-data', event)
328+
log.info('get-file-data', event)
296329
// this.fileAdded(event)
297330
})
298331

299332
ipcMain.on('load-file-content', (event, filePath) => {
300-
console.log('load-file-content', event, filePath)
333+
log.info('load-file-content', event, filePath)
301334
})
302335

303336
protocol.registerFileProtocol('file:', (request, filePath) => {
304-
console.log('file:', request, filePath)
337+
log.info('file:', request, filePath)
305338
})
306339

307340
if (appResolve) {
308341
appResolve()
309342
}
310343
})
311344

312-
app.setAsDefaultProtocolClient('graphql-playground')
313-
314-
app.on('open-url', (event, url) => {
315-
event.preventDefault()
316-
forceSend('OpenUrl', url)
317-
})
318-
319-
app.on('open-file', (event, path) => {
320-
event.preventDefault()
321-
forceSend('OpenSelectedFile', path)
322-
})
323-
324345
// Quit when all windows are closed.
325346
app.on('window-all-closed', () => {
326347
// On OS X it is common for applications and their menu bar

packages/graphql-playground-electron/yarn.lock

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2450,6 +2450,10 @@ electron-localshortcut@^2.0.2:
24502450
debug "^2.6.8"
24512451
electron-is-accelerator "^0.1.0"
24522452

2453+
electron-log@^2.2.11:
2454+
version "2.2.11"
2455+
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.11.tgz#dc99118cda054aa866e47d081d1431c76baacd68"
2456+
24532457
24542458
version "0.4.7"
24552459
resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.7.tgz#1d75647a82748eacd48bea70616ec83ffade3ee5"
@@ -6715,18 +6719,6 @@ styled-components@^2.2.3:
67156719
postcss-load-plugins "^2.2.0"
67166720
styled-jsx "^0.5.7"
67176721

6718-
"styled-jsx-postcss@git+https://github.com/timsuchanek/styled-jsx-postcss.git#build3":
6719-
version "0.2.0"
6720-
uid "677ee0fb7f9138047a00e03c8c3e44adbb33cf2a"
6721-
resolved "git+https://github.com/timsuchanek/styled-jsx-postcss.git#677ee0fb7f9138047a00e03c8c3e44adbb33cf2a"
6722-
dependencies:
6723-
babel-traverse "^6.21.0"
6724-
babylon "^6.14.1"
6725-
deasync "^0.1.9"
6726-
postcss "^5.2.8"
6727-
postcss-load-plugins "^2.2.0"
6728-
styled-jsx "^0.5.7"
6729-
67306722
67316723
version "0.5.2"
67326724
resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-0.5.2.tgz#59740216c3db371636f9beec02149f9da5ea02e5"

0 commit comments

Comments
 (0)