From 32fd9e17f77acc28cbf178b4a2a0615611de5232 Mon Sep 17 00:00:00 2001 From: seanyesmunt Date: Wed, 30 May 2018 14:29:22 -0400 Subject: [PATCH] Redirect special LBRY urls to pages in App --- src/main/index.js | 5 ++++- src/renderer/component/router/index.js | 4 ++-- src/renderer/component/router/view.jsx | 13 +++++++++---- src/renderer/index.js | 15 +++++++++++++-- 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index 2591e20f6..bb8501d93 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -242,8 +242,11 @@ const isSecondInstance = app.makeSingleInstance(argv => { // path, so we just strip it off. // - In a URI with a claim ID, like lbry://channel#claimid, Windows interprets the hash mark as // an anchor and converts it to lbry://channel/#claimid. We remove the slash here as well. + // - ? also interpreted as an anchor, remove slash also. if (process.platform === 'win32') { - URI = URI.replace(/\/$/, '').replace('/#', '#'); + URI = URI.replace(/\/$/, '') + .replace('/#', '#') + .replace('/?', '?'); } rendererWindow.webContents.send('open-uri-requested', URI); diff --git a/src/renderer/component/router/index.js b/src/renderer/component/router/index.js index 0e2a262cb..20933d960 100644 --- a/src/renderer/component/router/index.js +++ b/src/renderer/component/router/index.js @@ -1,5 +1,5 @@ import { connect } from 'react-redux'; -import { selectCurrentPage, selectCurrentParams } from 'lbry-redux'; +import { selectCurrentPage, selectCurrentParams, doNotify } from 'lbry-redux'; import Router from './view'; const select = state => ({ @@ -7,4 +7,4 @@ const select = state => ({ currentPage: selectCurrentPage(state), }); -export default connect(select, null)(Router); +export default connect(select, { doNotify })(Router); diff --git a/src/renderer/component/router/view.jsx b/src/renderer/component/router/view.jsx index f67e252a3..34728ace5 100644 --- a/src/renderer/component/router/view.jsx +++ b/src/renderer/component/router/view.jsx @@ -18,16 +18,21 @@ import InvitePage from 'page/invite'; import BackupPage from 'page/backup'; import SubscriptionsPage from 'page/subscriptions'; -const route = (page, routesMap) => { +const route = (props, page, routesMap) => { const component = routesMap[page]; - - return component || DiscoverPage; + if (!component) { + props.doNotify({ + message: __('Invalid page requested'), + displayType: ['snackbar'], + }); + } + return component || routesMap.discover; }; const Router = props => { const { currentPage, params } = props; - return route(currentPage, { + return route(props, currentPage, { auth: , backup: , channel: , diff --git a/src/renderer/index.js b/src/renderer/index.js index c82db3287..090b43920 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -8,7 +8,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; import { doConditionalAuthNavigate, doDaemonReady, doAutoUpdate } from 'redux/actions/app'; -import { doNotify, doBlackListedOutpointsSubscribe } from 'lbry-redux'; +import { doNotify, doBlackListedOutpointsSubscribe, isURIValid } from 'lbry-redux'; import { doNavigate } from 'redux/actions/navigation'; import { doDownloadLanguages, doUpdateIsNightAsync } from 'redux/actions/settings'; import { doUserEmailVerify } from 'redux/actions/user'; @@ -18,6 +18,7 @@ import app from './app'; import analytics from './analytics'; const { autoUpdater } = remote.require('electron-updater'); +const APPPAGEURL = 'lbry://?'; autoUpdater.logger = remote.require('electron-log'); @@ -41,8 +42,18 @@ ipcRenderer.on('open-uri-requested', (event, uri, newSession) => { }) ); } - } else { + } else if (uri.startsWith(APPPAGEURL)) { + const navpage = uri.replace(APPPAGEURL, '').toLowerCase(); + app.store.dispatch(doNavigate(`/${navpage}`)); + } else if (isURIValid(uri)) { app.store.dispatch(doNavigate('/show', { uri })); + } else { + app.store.dispatch( + doNotify({ + message: __('Invalid LBRY URL requested'), + displayType: ['snackbar'], + }) + ); } } });