diff --git a/source/index.ts b/source/index.ts index be110207e..02686bf5b 100644 --- a/source/index.ts +++ b/source/index.ts @@ -25,7 +25,7 @@ import doNotDisturb = require('@sindresorhus/do-not-disturb'); import updateAppMenu from './menu'; import config from './config'; import tray from './tray'; -import {sendAction, sendBackgroundAction} from './util'; +import {sendAction, sendBackgroundAction, messengerDomain, stripTrackingFromUrl} from './util'; import {process as processEmojiUrl} from './emoji'; import ensureOnline from './ensure-online'; import './touch-bar'; // eslint-disable-line import/no-unassigned-import @@ -40,9 +40,19 @@ electronDebug({ }); electronDl(); -electronContextMenu(); +electronContextMenu({ + prepend: defaultActions => { + /* + TODO: Use menu option or use replacement of options (https://github.com/sindresorhus/electron-context-menu/issues/70) + See explanation for this hacky solution here: https://github.com/sindresorhus/caprine/pull/1169 + */ + defaultActions.copyLink({ + transform: stripTrackingFromUrl + }); -const domain = config.get('useWorkChat') ? 'facebook.com' : 'messenger.com'; + return []; + } +}); app.setAppUserModelId('com.sindresorhus.caprine'); @@ -176,7 +186,7 @@ function enableHiresResources(): void { return; } - const filter = {urls: [`*://*.${domain}/`]}; + const filter = {urls: [`*://*.${messengerDomain}/`]}; session.defaultSession.webRequest.onBeforeSendHeaders( filter, @@ -204,10 +214,10 @@ function enableHiresResources(): void { function initRequestsFiltering(): void { const filter = { urls: [ - `*://*.${domain}/*typ.php*`, // Type indicator blocker - `*://*.${domain}/*change_read_status.php*`, // Seen indicator blocker - `*://*.${domain}/*delivery_receipts*`, // Delivery receipts indicator blocker - `*://*.${domain}/*unread_threads*`, // Delivery receipts indicator blocker + `*://*.${messengerDomain}/*typ.php*`, // Type indicator blocker + `*://*.${messengerDomain}/*change_read_status.php*`, // Seen indicator blocker + `*://*.${messengerDomain}/*delivery_receipts*`, // Delivery receipts indicator blocker + `*://*.${messengerDomain}/*unread_threads*`, // Delivery receipts indicator blocker '*://*.fbcdn.net/images/emoji.php/v9/*', // Emoji '*://*.facebook.com/images/emoji.php/v9/*' // Emoji ] @@ -339,9 +349,6 @@ function createMainWindow(): BrowserWindow { (async () => { await Promise.all([ensureOnline(), app.whenReady()]); - - const trackingUrlPrefix = `https://l.${domain}/l.php`; - await updateAppMenu(); mainWindow = createMainWindow(); @@ -468,10 +475,7 @@ function createMainWindow(): BrowserWindow { (event as any).newGuest = new BrowserWindow(options); } } else { - if (url.startsWith(trackingUrlPrefix)) { - url = new URL(url).searchParams.get('u')!; - } - + url = stripTrackingFromUrl(url); await shell.openExternal(url); } }); diff --git a/source/util.ts b/source/util.ts index 6407a9561..13cc31eba 100644 --- a/source/util.ts +++ b/source/util.ts @@ -1,5 +1,6 @@ import {app, BrowserWindow, dialog} from 'electron'; import {is} from 'electron-util'; +import config from './config'; export function getWindow(): BrowserWindow { const [win] = BrowserWindow.getAllWindows(); @@ -37,3 +38,14 @@ export function showRestartDialog(message: string): void { app.quit(); } } + +export const messengerDomain = config.get('useWorkChat') ? 'facebook.com' : 'messenger.com'; + +export function stripTrackingFromUrl(url: string): string { + const trackingUrlPrefix = `https://l.${messengerDomain}/l.php`; + if (url.startsWith(trackingUrlPrefix)) { + url = new URL(url).searchParams.get('u')!; + } + + return url; +}