From 78ffa6466f05116493ea76e670cfeea7266f5d8d Mon Sep 17 00:00:00 2001 From: Yuya Ochiai Date: Tue, 16 Jan 2018 22:12:19 +0900 Subject: [PATCH 1/4] Fix deep linking not working when the app is not already opened --- src/main.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main.js b/src/main.js index 7a9c1f6f..4cc1a38b 100644 --- a/src/main.js +++ b/src/main.js @@ -360,8 +360,10 @@ function setDeeplinkingUrl(url) { app.on('open-url', (event, url) => { event.preventDefault(); setDeeplinkingUrl(url); - mainWindow.webContents.send('protocol-deeplink', deeplinkingUrl); - mainWindow.show(); + if (mainWindow) { // 'open-url' is emitted before 'ready' when the app is launched by URL scheme. + mainWindow.webContents.send('protocol-deeplink', deeplinkingUrl); + mainWindow.show(); + } }); // This method will be called when Electron has finished From 71989b9c37e54a7a2239d8940b1aec1c6e4278ad Mon Sep 17 00:00:00 2001 From: Yuya Ochiai Date: Thu, 18 Jan 2018 22:55:32 +0900 Subject: [PATCH 2/4] Use will-finish-launching event to set open-url event listener --- src/main.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main.js b/src/main.js index 4cc1a38b..270aa284 100644 --- a/src/main.js +++ b/src/main.js @@ -356,14 +356,16 @@ function setDeeplinkingUrl(url) { } } -// Protocol handler for osx -app.on('open-url', (event, url) => { - event.preventDefault(); - setDeeplinkingUrl(url); - if (mainWindow) { // 'open-url' is emitted before 'ready' when the app is launched by URL scheme. - mainWindow.webContents.send('protocol-deeplink', deeplinkingUrl); - mainWindow.show(); - } +app.on('will-finish-launching', () => { + // Protocol handler for osx + app.on('open-url', (event, url) => { + event.preventDefault(); + setDeeplinkingUrl(url); + if (mainWindow) { // 'open-url' is emitted before 'ready' when the app is launched by URL scheme. + mainWindow.webContents.send('protocol-deeplink', deeplinkingUrl); + mainWindow.show(); + } + }); }); // This method will be called when Electron has finished From 92489aea30aabf252e0311202fd92202d4be3a82 Mon Sep 17 00:00:00 2001 From: Yuya Ochiai Date: Fri, 19 Jan 2018 00:24:08 +0900 Subject: [PATCH 3/4] Allow deep-linking protocol when opening a link --- src/browser/components/MattermostView.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/browser/components/MattermostView.jsx b/src/browser/components/MattermostView.jsx index 64b24cc1..8393d3c7 100644 --- a/src/browser/components/MattermostView.jsx +++ b/src/browser/components/MattermostView.jsx @@ -8,6 +8,8 @@ const {findDOMNode} = require('react-dom'); const {ipcRenderer, remote, shell} = require('electron'); const url = require('url'); const contextMenu = require('../js/contextMenu'); +const {protocols} = require('../../../electron-builder.json'); +const scheme = protocols[0].schemes[0]; const ErrorView = require('./ErrorView.jsx'); @@ -72,7 +74,7 @@ const MattermostView = createReactClass({ webview.addEventListener('new-window', (e) => { var currentURL = url.parse(webview.getURL()); var destURL = url.parse(e.url); - if (destURL.protocol !== 'http:' && destURL.protocol !== 'https:') { + if (destURL.protocol !== 'http:' && destURL.protocol !== 'https:' && destURL.protocol !== `${scheme}:`) { ipcRenderer.send('confirm-protocol', destURL.protocol, e.url); return; } From 72332989e7972957c865ba8e2103fe7627f40332 Mon Sep 17 00:00:00 2001 From: Yuya Ochiai Date: Sat, 20 Jan 2018 00:38:42 +0900 Subject: [PATCH 4/4] Try to open deeplink many times when app is ready --- src/main.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main.js b/src/main.js index 270aa284..422f7a79 100644 --- a/src/main.js +++ b/src/main.js @@ -361,9 +361,16 @@ app.on('will-finish-launching', () => { app.on('open-url', (event, url) => { event.preventDefault(); setDeeplinkingUrl(url); - if (mainWindow) { // 'open-url' is emitted before 'ready' when the app is launched by URL scheme. - mainWindow.webContents.send('protocol-deeplink', deeplinkingUrl); - mainWindow.show(); + if (app.isReady()) { + function openDeepLink() { + try { + mainWindow.webContents.send('protocol-deeplink', deeplinkingUrl); + mainWindow.show(); + } catch (err) { + setTimeout(openDeepLink, 1000); + } + } + openDeepLink(); } }); });