diff --git a/.babelrc b/.babelrc index a937e43e..980e70d5 100644 --- a/.babelrc +++ b/.babelrc @@ -1,14 +1,14 @@ { "presets": [ [ - "@babel/env", + "@babel/preset-env", { "targets": { "chrome": 69 } } ], - "@babel/react", - "@babel/typescript" + "@babel/preset-react", + "@babel/preset-typescript" ] } diff --git a/.compilerc b/.compilerc deleted file mode 100644 index 83e6a070..00000000 --- a/.compilerc +++ /dev/null @@ -1,46 +0,0 @@ -{ - "env": { - "development": { - "text/typescript": { - "removeComments": false, - "preserveConstEnums": true, - "declaration": true, - "noImplicitAny": true, - "noImplicitReturns": true, - "suppressImplicitAnyIndexErrors": true, - "strictNullChecks": true, - "noUnusedLocals": true, - "noImplicitThis": true, - "noUnusedParameters": true, - "inlineSourceMap": true, - "inlineSources": true, - "importHelpers": true, - "noEmitHelpers": true, - "experimentalDecorators": true, - "target": "es2015", - "module": "commonjs", - "jsx": "react" - } - }, - "production": { - "text/typescript": { - "removeComments": false, - "preserveConstEnums": true, - "declaration": true, - "noImplicitAny": true, - "noImplicitReturns": true, - "suppressImplicitAnyIndexErrors": true, - "strictNullChecks": true, - "noUnusedLocals": true, - "noImplicitThis": true, - "noUnusedParameters": true, - "sourceMap": false, - "importHelpers": true, - "noEmitHelpers": true, - "experimentalDecorators": true, - "target": "es2015", - "jsx": "react" - } - } - } -} \ No newline at end of file diff --git a/.gitignore b/.gitignore index a5134e63..dd128552 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store node_modules out +.webpack yarn-error.log -.env \ No newline at end of file +.env diff --git a/.travis.yml b/.travis.yml index ee28a2d8..96729258 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: node_js script: + - yarn run lint + - yarn run typecheck - yarn run test - yarn run package cache: @@ -8,8 +10,8 @@ cache: - "node_modules" - $HOME/.cache/electron before_install: - - curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.7.0 + - curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.16.0 - export PATH="$HOME/.yarn/bin:$PATH" os: - osx -osx_image: xcode9.4 \ No newline at end of file +osx_image: xcode10.2 \ No newline at end of file diff --git a/@types/execa.d.ts b/@types/execa.d.ts new file mode 100644 index 00000000..9e027ead --- /dev/null +++ b/@types/execa.d.ts @@ -0,0 +1 @@ +declare module 'execa' diff --git a/@types/globals.d.ts b/@types/globals.d.ts new file mode 100644 index 00000000..31dca6bb --- /dev/null +++ b/@types/globals.d.ts @@ -0,0 +1 @@ +declare module '*.png' diff --git a/README.md b/README.md index 51406f4a..02e3afa1 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ cd browserosaurus Install dependencies: ``` -yarn install +yarn ``` Run Browserosaurus in dev mode: @@ -40,10 +40,12 @@ Run Browserosaurus in dev mode: yarn start ``` -Package and make installer: +Prepare for publishing: ``` -yarn run make +yarn package +yarn notarize +yarn make ``` ### Browser logos diff --git a/__mocks__/electron.js b/__mocks__/electron.js index 794ea751..140d791b 100644 --- a/__mocks__/electron.js +++ b/__mocks__/electron.js @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires const EventEmitter = require('events') const eventEmitter = new EventEmitter() @@ -5,8 +6,12 @@ module.exports = { app: jest.fn(), dialog: jest.fn(), ipcRenderer: { - on: jest.fn((name, fn) => eventEmitter.on(name, payload => fn(null, payload))), - removeAllListeners: jest.fn(channel => eventEmitter.removeAllListeners(channel)), + on: jest.fn((name, fn) => + eventEmitter.on(name, payload => fn(null, payload)), + ), + removeAllListeners: jest.fn(channel => + eventEmitter.removeAllListeners(channel), + ), send: jest.fn(), }, match: jest.fn(), @@ -14,7 +19,9 @@ module.exports = { BrowserWindow: function() { return { webContents: { - send: jest.fn((eventName, payload) => eventEmitter.emit(eventName, payload)), + send: jest.fn((eventName, payload) => + eventEmitter.emit(eventName, payload), + ), }, } }, diff --git a/docs/index.html b/docs/index.html index 626ded31..6a7ffd95 100644 --- a/docs/index.html +++ b/docs/index.html @@ -199,9 +199,9 @@
- Download Browserosaurus v5.6.0 for Mac + Download Browserosaurus v6.0.0 for Mac
diff --git a/package.json b/package.json index 297c1678..d09477c9 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "browserosaurus", "productName": "Browserosaurus", - "version": "5.6.0", + "version": "6.0.0", "engines": { "node": ">=10.4.1" }, "description": "The browser prompter for macOS", "homepage": "https://browserosaurus.com/", - "main": "src/main.ts", + "main": ".webpack/main", "scripts": { "docs": "http-server ./docs", "start": "ENV=DEV electron-forge start", @@ -18,7 +18,7 @@ "package": "export $(cat .env | xargs) && electron-forge package --platform=darwin --arch=x64", "notarize": "export $(cat .env | xargs) && ts-node ./scripts/notarize.ts", "make": "electron-forge make --skip-package", - "icns": "cd ./src/images/icon && ./png2icns.sh icon.png", + "icns": "cd ./src/images/icon && ./scripts/png2icns.sh icon.png", "env": "export $(cat .env | xargs) && env" }, "repository": "https://github.com/will-stone/browserosaurus", @@ -26,73 +26,15 @@ "url": "https://github.com/will-stone/browserosaurus/issues" }, "keywords": [ + "macOS", "Electron", "Browser chooser" ], "author": "Will Stone", "license": "MIT", - "prettier": "@will-stone/prettier-config", - "devDependencies": { - "@babel/core": "^7.4.4", - "@babel/preset-env": "^7.4.4", - "@babel/preset-react": "^7.0.0", - "@babel/preset-typescript": "^7.3.3", - "@types/jest": "^24.0.12", - "@types/jsonpath": "^0.2.0", - "@types/lodash": "^4.14.123", - "@types/mousetrap": "^1.6.2", - "@types/react": "^16.8.16", - "@types/react-dom": "^16.8.4", - "@types/xml2js": "^0.4.4", - "@typescript-eslint/eslint-plugin": "^1.7.0", - "@typescript-eslint/parser": "^1.7.0", - "@will-stone/prettier-config": "^1.0.0", - "electron-forge": "^5.2.4", - "electron-notarize": "^0.1.1", - "electron-packager": "^13.1.1", - "electron-prebuilt-compile": "4.0.0", - "eslint": "^5.16.0", - "eslint-config-prettier": "^4.2.0", - "eslint-plugin-jest": "^22.5.1", - "eslint-plugin-prettier": "^3.0.1", - "eslint-plugin-react": "^7.13.0", - "eslint-plugin-react-hooks": "^1.6.0", - "http-server": "^0.11.1", - "jest": "^24.0.0", - "jest-dom": "^3.1.4", - "prettier": "^1.17.0", - "react-testing-library": "^7.0.0", - "ts-node": "^8.2.0", - "typescript": "^3.4.0" - }, - "dependencies": { - "@artossystems/a": "^3.1.0", - "electron-compile": "^6.4.4", - "electron-store": "^3.2.0", - "execa": "^1.0.0", - "immer": "^3.0.0", - "jsonpath": "^1.0.1", - "lodash": "^4.17.11", - "mousetrap": "^1.6.3", - "react": "^16.8.4", - "react-dom": "^16.8.4", - "tslib": "^1.9.3", - "update-electron-app": "^1.3.0", - "xml2js": "^0.4.19" - }, "config": { "forge": { - "github_repository": { - "owner": "will-stone", - "name": "browserosaurus" - }, - "make_targets": { - "darwin": [ - "dmg", - "zip" - ] - }, - "electronPackagerConfig": { + "packagerConfig": { "appBundleId": "com.browserosaurus", "asar": true, "appCategoryType": "public.app-category.developer-tools", @@ -103,15 +45,7 @@ "entitlements": "build/entitlements.mac.plist", "entitlements-inherit": "build/entitlements.mac.plist" }, - "icon": "src/images/icon/icon.icns", - "ignore": [ - "docs", - "__mocks__", - "@types", - ".vscode", - "node_modules", - "designs" - ], + "icon": "src/main/static/icon/icon.icns", "protocols": [ { "name": "HTTP link", @@ -127,12 +61,111 @@ ] } ] - } + }, + "makers": [ + { + "name": "@electron-forge/maker-zip", + "platforms": [ + "darwin" + ] + }, + { + "name": "@electron-forge/maker-dmg", + "config": { + "format": "ULFO" + } + } + ], + "plugins": [ + [ + "@electron-forge/plugin-webpack", + { + "mainConfig": "./webpack.main.config.js", + "renderer": { + "config": "./webpack.renderer.config.js", + "entryPoints": [ + { + "html": "./src/renderer/index.html", + "js": "./src/renderer/index.tsx", + "name": "main_window" + } + ] + } + } + ] + ] } }, + "dependencies": { + "@artossystems/a": "^3.1.0", + "electron-squirrel-startup": "^1.0.0", + "electron-store": "^3.2.0", + "execa": "^1.0.0", + "immer": "^3.1.2", + "jsonpath": "^1.0.2", + "lodash": "^4.17.11", + "mousetrap": "^1.6.3", + "react": "^16.8.6", + "react-dom": "^16.8.6", + "styled-components": "^4.3.1", + "styled-system": "^4.0.0", + "update-electron-app": "^1.3.0", + "xml2js": "^0.4.19" + }, + "devDependencies": { + "@babel/core": "^7.4.5", + "@babel/preset-env": "^7.4.5", + "@babel/preset-react": "^7.0.0", + "@babel/preset-typescript": "^7.3.3", + "@electron-forge/cli": "6.0.0-beta.39", + "@electron-forge/maker-deb": "6.0.0-beta.39", + "@electron-forge/maker-dmg": "^6.0.0-beta.39", + "@electron-forge/maker-rpm": "6.0.0-beta.39", + "@electron-forge/maker-squirrel": "6.0.0-beta.39", + "@electron-forge/maker-zip": "6.0.0-beta.39", + "@electron-forge/plugin-webpack": "6.0.0-beta.39", + "@marshallofsound/webpack-asset-relocator-loader": "^0.5.0", + "@testing-library/react": "^8.0.1", + "@types/jest": "^24.0.13", + "@types/jsonpath": "^0.2.0", + "@types/lodash": "^4.14.133", + "@types/mousetrap": "^1.6.2", + "@types/node": "^12.0.4", + "@types/react": "^16.8.19", + "@types/react-dom": "^16.8.4", + "@types/styled-components": "^4.1.16", + "@types/styled-system": "^4.2.1", + "@types/xml2js": "^0.4.4", + "@typescript-eslint/eslint-plugin": "^1.9.0", + "@typescript-eslint/parser": "^1.9.0", + "@will-stone/prettier-config": "^1.0.0", + "babel-loader": "^8.0.6", + "browser-logos": "alrra/browser-logos#52.0.0", + "copy-webpack-plugin": "^5.0.3", + "css-loader": "^2.1.1", + "electron": "5.0.2", + "electron-notarize": "^0.1.1", + "eslint": "^5.16.0", + "eslint-config-prettier": "^4.3.0", + "eslint-plugin-jest": "^22.6.4", + "eslint-plugin-prettier": "^3.1.0", + "eslint-plugin-react": "^7.13.0", + "eslint-plugin-react-hooks": "^1.6.0", + "http-server": "^0.11.1", + "jest": "^24.8.0", + "jest-dom": "^3.4.0", + "node-loader": "^0.6.0", + "prettier": "^1.17.1", + "style-loader": "^0.23.1", + "ts-node": "^8.3.0", + "typescript": "^3.5.1", + "url-loader": "^2.0.0", + "webpack": "^4.34.0" + }, + "prettier": "@will-stone/prettier-config", "jest": { "setupFilesAfterEnv": [ - "react-testing-library/cleanup-after-each", + "@testing-library/react/cleanup-after-each", "jest-dom/extend-expect" ], "modulePathIgnorePatterns": [ diff --git a/src/images/icon/png2icns.sh b/scripts/png2icns.sh similarity index 100% rename from src/images/icon/png2icns.sh rename to scripts/png2icns.sh diff --git a/src/config/activities.ts b/src/config/activities.ts index 66657191..7f7d4695 100644 --- a/src/config/activities.ts +++ b/src/config/activities.ts @@ -1,4 +1,21 @@ import { Activity } from '../model' +import braveDev from 'browser-logos/src/brave-dev/brave-dev_256x256.png' +import brave from 'browser-logos/src/brave/brave_256x256.png' +import copyToClipboard from './copy-to-clipboard.png' +import chromium from 'browser-logos/src/chromium/chromium_256x256.png' +import firefox from 'browser-logos/src/firefox/firefox_256x256.png' +import firefoxDevEdition from 'browser-logos/src/firefox-developer-edition/firefox-developer-edition_256x256.png' +import firefoxNightly from 'browser-logos/src/firefox-nightly/firefox-nightly_256x256.png' +import googleChrome from 'browser-logos/src/chrome/chrome_256x256.png' +import googleChromeCanary from 'browser-logos/src/chrome-canary/chrome-canary_256x256.png' +import iridium from 'browser-logos/src/iridium/iridium_256x256.png' +import maxthon from 'browser-logos/src/maxthon/maxthon_256x256.png' +import min from 'browser-logos/src/min/min_256x256.png' +import opera from 'browser-logos/src/opera/opera_256x256.png' +import safari from 'browser-logos/src/safari/safari_256x256.png' +import safariTechnologyPreview from 'browser-logos/src/safari-technology-preview/safari-technology-preview_256x256.png' +import tor from 'browser-logos/src/tor/tor_256x256.png' +import vivaldi from 'browser-logos/src/vivaldi/vivaldi_256x256.png' export const activities: Activity[] = [ { @@ -6,105 +23,116 @@ export const activities: Activity[] = [ cmd: 'open "{URL}" -a Brave-Browser-Dev', hotKey: 'r', name: 'Brave Dev', + logo: braveDev, }, { appId: 'Brave Browser', cmd: 'open "{URL}" -a "Brave Browser"', hotKey: 'b', name: 'Brave Browser', + logo: brave, }, { appId: 'Chromium', cmd: 'open "{URL}" -a Chromium', hotKey: 'c', name: 'Chromium', + logo: chromium, }, { cmd: 'echo "{URL}" | pbcopy', hotKey: 'space', name: 'Copy To Clipboard', + logo: copyToClipboard, }, { appId: 'Firefox', cmd: 'open "{URL}" -a Firefox', hotKey: 'f', name: 'Firefox', + logo: firefox, }, { appId: 'Firefox Developer Edition', cmd: 'open "{URL}" -a "Firefox Developer Edition"', hotKey: 'd', name: 'Firefox Developer Edition', + logo: firefoxDevEdition, }, { appId: 'Firefox Nightly', cmd: 'open "{URL}" -a "Firefox Nightly"', hotKey: 'n', name: 'Firefox Nightly', + logo: firefoxNightly, }, { appId: 'Google Chrome', cmd: 'open "{URL}" -a "Google Chrome"', hotKey: 'g', name: 'Google Chrome', + logo: googleChrome, }, { appId: 'Google Chrome Canary', cmd: 'open "{URL}" -a "Google Chrome Canary"', hotKey: 'y', name: 'Google Chrome Canary', + logo: googleChromeCanary, }, { appId: 'Iridium', cmd: 'open "{URL}" -a Iridium', hotKey: 'i', name: 'Iridium', + logo: iridium, }, { appId: 'Maxthon', cmd: 'open "{URL}" -a Maxthon', hotKey: 'm', name: 'Maxthon', + logo: maxthon, }, { appId: 'Min', cmd: 'open "{URL}" -a Min', hotKey: '-', name: 'Min', - }, - { - appId: 'Microsoft Edge Dev', - cmd: 'open "{URL}" -a "Microsoft Edge Dev"', - hotKey: 'e', - name: 'Microsoft Edge Dev', + logo: min, }, { appId: 'Opera', cmd: 'open "{URL}" -a Opera', hotKey: 'o', name: 'Opera', + logo: opera, }, { cmd: 'open "{URL}" -a Safari', hotKey: 's', name: 'Safari', + logo: safari, }, { appId: 'Safari Technology Preview', cmd: 'open "{URL}" -a "Safari Technology Preview"', hotKey: 'p', name: 'Safari Technology Preview', + logo: safariTechnologyPreview, }, { appId: 'Tor Browser', cmd: 'open "{URL}" -a "Tor Browser"', hotKey: 't', name: 'Tor Browser', + logo: tor, }, { appId: 'Vivaldi', cmd: 'open "{URL}" -a Vivaldi', hotKey: 'v', name: 'Vivaldi', + logo: vivaldi, }, ] diff --git a/src/images/activity-icons/Copy To Clipboard.png b/src/config/copy-to-clipboard.png similarity index 100% rename from src/images/activity-icons/Copy To Clipboard.png rename to src/config/copy-to-clipboard.png diff --git a/src/images/activity-icons/Brave Browser.png b/src/images/activity-icons/Brave Browser.png deleted file mode 100644 index 08f52607..00000000 Binary files a/src/images/activity-icons/Brave Browser.png and /dev/null differ diff --git a/src/images/activity-icons/Brave Dev.png b/src/images/activity-icons/Brave Dev.png deleted file mode 100644 index dd39b7ba..00000000 Binary files a/src/images/activity-icons/Brave Dev.png and /dev/null differ diff --git a/src/images/activity-icons/Chromium.png b/src/images/activity-icons/Chromium.png deleted file mode 100644 index 97b75628..00000000 Binary files a/src/images/activity-icons/Chromium.png and /dev/null differ diff --git a/src/images/activity-icons/Firefox Developer Edition.png b/src/images/activity-icons/Firefox Developer Edition.png deleted file mode 100644 index ecf28e44..00000000 Binary files a/src/images/activity-icons/Firefox Developer Edition.png and /dev/null differ diff --git a/src/images/activity-icons/Firefox Nightly.png b/src/images/activity-icons/Firefox Nightly.png deleted file mode 100644 index 240f2870..00000000 Binary files a/src/images/activity-icons/Firefox Nightly.png and /dev/null differ diff --git a/src/images/activity-icons/Firefox.png b/src/images/activity-icons/Firefox.png deleted file mode 100644 index 6843e660..00000000 Binary files a/src/images/activity-icons/Firefox.png and /dev/null differ diff --git a/src/images/activity-icons/Google Chrome Canary.png b/src/images/activity-icons/Google Chrome Canary.png deleted file mode 100644 index fd8233c2..00000000 Binary files a/src/images/activity-icons/Google Chrome Canary.png and /dev/null differ diff --git a/src/images/activity-icons/Google Chrome.png b/src/images/activity-icons/Google Chrome.png deleted file mode 100644 index a8ae85e5..00000000 Binary files a/src/images/activity-icons/Google Chrome.png and /dev/null differ diff --git a/src/images/activity-icons/Iridium.png b/src/images/activity-icons/Iridium.png deleted file mode 100644 index 8e2562e6..00000000 Binary files a/src/images/activity-icons/Iridium.png and /dev/null differ diff --git a/src/images/activity-icons/Maxthon.png b/src/images/activity-icons/Maxthon.png deleted file mode 100644 index 939fd8e6..00000000 Binary files a/src/images/activity-icons/Maxthon.png and /dev/null differ diff --git a/src/images/activity-icons/Microsoft Edge Dev.png b/src/images/activity-icons/Microsoft Edge Dev.png deleted file mode 100644 index b3bb0fcf..00000000 Binary files a/src/images/activity-icons/Microsoft Edge Dev.png and /dev/null differ diff --git a/src/images/activity-icons/Min.png b/src/images/activity-icons/Min.png deleted file mode 100644 index dac29412..00000000 Binary files a/src/images/activity-icons/Min.png and /dev/null differ diff --git a/src/images/activity-icons/Opera.png b/src/images/activity-icons/Opera.png deleted file mode 100644 index f90cc72c..00000000 Binary files a/src/images/activity-icons/Opera.png and /dev/null differ diff --git a/src/images/activity-icons/Safari Technology Preview.png b/src/images/activity-icons/Safari Technology Preview.png deleted file mode 100644 index d5253b78..00000000 Binary files a/src/images/activity-icons/Safari Technology Preview.png and /dev/null differ diff --git a/src/images/activity-icons/Safari.png b/src/images/activity-icons/Safari.png deleted file mode 100644 index c09ac65d..00000000 Binary files a/src/images/activity-icons/Safari.png and /dev/null differ diff --git a/src/images/activity-icons/Tor Browser.png b/src/images/activity-icons/Tor Browser.png deleted file mode 100644 index 00dd0e4b..00000000 Binary files a/src/images/activity-icons/Tor Browser.png and /dev/null differ diff --git a/src/images/activity-icons/Vivaldi.png b/src/images/activity-icons/Vivaldi.png deleted file mode 100644 index ea67c336..00000000 Binary files a/src/images/activity-icons/Vivaldi.png and /dev/null differ diff --git a/src/main.ts b/src/main/main.ts similarity index 80% rename from src/main.ts rename to src/main/main.ts index e84cfd8c..74fcfd27 100644 --- a/src/main.ts +++ b/src/main/main.ts @@ -7,23 +7,23 @@ import { screen, Tray, } from 'electron' -import { activities } from './config/activities' +import * as Store from 'electron-store' +import { activities } from '../config/activities' import { ACTIVITIES_SET, ACTIVITY_RUN, + CLOSE_WINDOW, COPY_TO_CLIPBOARD, FAV_SET, - URL_RECEIVED, - CLOSE_WINDOW, - WINDOW_BLUR, LOG, - MOUSE_THROUGH_ENABLE, MOUSE_THROUGH_DISABLE, -} from './config/events' -import { copyToClipboard } from './utils/copyToClipboard' -import { getInstalledActivities } from './utils/getInstalledActivities' -import { runCommand } from './utils/runCommand' -import * as Store from 'electron-store' + MOUSE_THROUGH_ENABLE, + URL_RECEIVED, + WINDOW_BLUR, +} from '../config/events' +import { copyToClipboard } from '../utils/copyToClipboard' +import { getInstalledActivities } from '../utils/getInstalledActivities' +import { runCommand } from '../utils/runCommand' // Auto update require('update-electron-app')({ @@ -49,7 +49,7 @@ const createPickerWindow = () => fullscreenable: false, hasShadow: false, height: 50, - icon: `${__dirname}/images/icon/icon.png`, + icon: `${__dirname}/static/icon/icon.png`, maximizable: false, minimizable: false, movable: false, @@ -60,11 +60,16 @@ const createPickerWindow = () => transparent: true, webPreferences: { nodeIntegration: true, + // @ts-ignore + // eslint-disable-next-line no-undef + preload: MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY, }, width: 400, }) - pickerWindow.loadURL(`file://${__dirname}/picker/index.html`) + // @ts-ignore + // eslint-disable-next-line no-undef + pickerWindow.loadURL(MAIN_WINDOW_WEBPACK_ENTRY) pickerWindow.on('close', e => { e.preventDefault() @@ -84,16 +89,20 @@ const createPickerWindow = () => }) const urlRecevied = (url: string) => { - const display = screen.getDisplayNearestPoint(screen.getCursorScreenPoint()) - pickerWindow.setPosition(display.workArea.x, display.workArea.y, false) - pickerWindow.setSize(display.workArea.width, display.workArea.height, false) + const { + workArea: { x, y, width, height }, + } = screen.getDisplayNearestPoint(screen.getCursorScreenPoint()) + pickerWindow.setPosition(x, y, false) + pickerWindow.setSize(width, height, false) pickerWindow.webContents.send(URL_RECEIVED, url) pickerWindow.show() } ipcMain.on(ACTIVITY_RUN, (_: Event, name: string) => { const activity = activities.find(act => act.name === name) - activity && urlToOpen && runCommand(activity.cmd.replace('{URL}', urlToOpen)) + if (activity && urlToOpen) { + runCommand(activity.cmd.replace('{URL}', urlToOpen)) + } pickerWindow.webContents.send(WINDOW_BLUR) }) @@ -103,9 +112,16 @@ ipcMain.on(COPY_TO_CLIPBOARD, () => { ipcMain.on(CLOSE_WINDOW, () => { urlToOpen = undefined + pickerWindow.hide() app.hide() }) +/** + * LOG + * + * Utility listener used for debugging. + * Allows sending a string to the main process. + */ ipcMain.on(LOG, (_: Event, msg: string) => { // eslint-disable-next-line no-console console.log(msg) @@ -125,8 +141,8 @@ app.on('ready', async () => { const fav = store.get('fav') - tray = new Tray(`${__dirname}/images/icon/tray_iconTemplate.png`) - tray.setPressedImage(`${__dirname}/images/icon/tray_iconHighlight.png`) + tray = new Tray(`${__dirname}/static/icon/tray_iconTemplate.png`) + tray.setPressedImage(`${__dirname}/static/icon/tray_iconHighlight.png`) tray.setToolTip('Browserosaurus') const contextMenu: MenuItemConstructorOptions[] = [ { diff --git a/src/images/icon/icon.icns b/src/main/static/icon/icon.icns similarity index 100% rename from src/images/icon/icon.icns rename to src/main/static/icon/icon.icns diff --git a/src/images/icon/icon.png b/src/main/static/icon/icon.png similarity index 100% rename from src/images/icon/icon.png rename to src/main/static/icon/icon.png diff --git a/src/images/icon/tray_iconHighlight.png b/src/main/static/icon/tray_iconHighlight.png similarity index 100% rename from src/images/icon/tray_iconHighlight.png rename to src/main/static/icon/tray_iconHighlight.png diff --git a/src/images/icon/tray_iconHighlight@2x.png b/src/main/static/icon/tray_iconHighlight@2x.png similarity index 100% rename from src/images/icon/tray_iconHighlight@2x.png rename to src/main/static/icon/tray_iconHighlight@2x.png diff --git a/src/images/icon/tray_iconTemplate.png b/src/main/static/icon/tray_iconTemplate.png similarity index 100% rename from src/images/icon/tray_iconTemplate.png rename to src/main/static/icon/tray_iconTemplate.png diff --git a/src/images/icon/tray_iconTemplate@2x.png b/src/main/static/icon/tray_iconTemplate@2x.png similarity index 100% rename from src/images/icon/tray_iconTemplate@2x.png rename to src/main/static/icon/tray_iconTemplate@2x.png diff --git a/src/model.ts b/src/model.ts index 25d0ab97..d2edbe13 100644 --- a/src/model.ts +++ b/src/model.ts @@ -4,4 +4,5 @@ export interface Activity { hotKey: string cmd: string fav?: boolean + logo: string } diff --git a/src/picker/App.tsx b/src/picker/App.tsx deleted file mode 100644 index fdbc4793..00000000 --- a/src/picker/App.tsx +++ /dev/null @@ -1,367 +0,0 @@ -import a from '@artossystems/a' -import { ipcRenderer } from 'electron' -import produce from 'immer' -import * as mousetrap from 'mousetrap' -import * as React from 'react' -import * as url from 'url' -import { - ACTIVITIES_SET, - ACTIVITY_RUN, - CLOSE_WINDOW, - COPY_TO_CLIPBOARD, - FAV_SET, - MOUSE_THROUGH_DISABLE, - MOUSE_THROUGH_ENABLE, - URL_RECEIVED, - WINDOW_BLUR, -} from '../config/events' -import { Activity } from '../model' - -const { useMemo, useEffect, useCallback, useReducer } = React - -/** - * ACTIONS - */ -const ASetMouseTarget = a('MOUSE/SET_TARGET', {} as { target?: string }) -const AShow = a('SHOW', {} as { x: number; y: number }) -const AHide = a('HIDE') -const AUrlReceived = a(URL_RECEIVED, {} as { url: string }) -const AFavSet = a(FAV_SET, {} as { name: string }) -const AActivitiesSet = a(ACTIVITIES_SET, {} as { activities: Activity[] }) -type ASetMouseTarget = ReturnType