diff --git a/electron/index.js b/electron/index.js index c73564965..ec7cc01d1 100644 --- a/electron/index.js +++ b/electron/index.js @@ -45,9 +45,15 @@ let daemon; let lbryFirst; const appState = {}; +const PROTOCOL = 'lbry'; -if (process.platform !== 'linux') { - app.setAsDefaultProtocolClient('lbry'); +if (isDev && process.platform === 'win32') { + // Setting this is required to get this working in dev mode. + app.setAsDefaultProtocolClient(PROTOCOL, process.execPath, [ + path.resolve(process.argv[1]), + ]); +} else { + app.setAsDefaultProtocolClient(PROTOCOL); } app.name = 'LBRY'; @@ -149,9 +155,15 @@ if (!gotSingleInstanceLock) { app.on('second-instance', (event, argv) => { // Send the url to the app to navigate first, then focus if (rendererWindow) { - if ((process.platform === 'win32' || process.platform === 'linux') && String(argv[1]).startsWith('lbry')) { - let URI = argv[1]; - + // External uri (last item on argv): + const EXTERNAL_URI = (argv.length) ? argv[argv.length - 1] : ''; + // Handle protocol requests for windows and linux + const platforms = (process.platform === 'win32' || process.platform === 'linux'); + // Is LBRY protocol + const isProtocolURI = String(EXTERNAL_URI).startsWith(PROTOCOL + '://'); + // External protocol requested: + if (platforms && isProtocolURI) { + let URI = EXTERNAL_URI; // Keep only command line / deep linked arguments // Windows normalizes URIs when they're passed in from other apps. On Windows, this tries to // restore the original URI that was typed. diff --git a/static/app-strings.json b/static/app-strings.json index 654782b45..6d17868dc 100644 --- a/static/app-strings.json +++ b/static/app-strings.json @@ -2058,14 +2058,15 @@ "Only select creators can receive tips at this time": "Only select creators can receive tips at this time", "The payment will be made from your saved card": "The payment will be made from your saved card", "Commenting...": "Commenting...", - "Show %count% replies": "Show %count% replies", - "Show reply": "Show reply", "added to": "added to", "removed from": "removed from", "Skip Navigation": "Skip Navigation", "Reset": "Reset", "Reset to original (previous) publish date": "Reset to original (previous) publish date", "Search for something...": "Search for something...", + "Open in Desktop": "Open in Desktop", + "Show %count% replies": "Show %count% replies", + "Show reply": "Show reply", "Confirm Comment Deletion": "Confirm Comment Deletion", "Remove Comment": "Remove Comment", "Are you sure you want to remove this comment?": "Are you sure you want to remove this comment?", diff --git a/ui/component/claimMenuList/view.jsx b/ui/component/claimMenuList/view.jsx index 2a9d930a6..0ca12126e 100644 --- a/ui/component/claimMenuList/view.jsx +++ b/ui/component/claimMenuList/view.jsx @@ -9,6 +9,7 @@ import { Menu, MenuButton, MenuList, MenuItem } from '@reach/menu-button'; import Icon from 'component/common/icon'; import { generateShareUrl, generateRssUrl, generateLbryContentUrl } from 'util/url'; import { useHistory } from 'react-router'; +import { useIsMobile } from 'effects/use-screensize'; import { buildURI, parseURI, COLLECTIONS_CONSTS } from 'lbry-redux'; const SHARE_DOMAIN = SHARE_DOMAIN_URL || URL; @@ -94,6 +95,7 @@ function ClaimMenuList(props: Props) { editedCollection, isAuthenticated, } = props; + const isMobile = useIsMobile(); const incognitoClaim = contentChannelUri && !contentChannelUri.includes('@'); const isChannel = !incognitoClaim && !contentSigningChannel; const { channelName } = parseURI(contentChannelUri); @@ -229,6 +231,10 @@ function ClaimMenuList(props: Props) { push(`/$/${PAGES.REPORT_CONTENT}?claimId=${contentClaim && contentClaim.claim_id}`); } + function handleOpenInDesktop() { + window.open(claim.permanent_url, '_top'); + } + return (