From 0771023f54001108e7f2497b90f6e641cfcd279c Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Fri, 8 Mar 2024 21:05:59 +0900
Subject: [PATCH] Separate invoke method for browser
---
.github/workflows/build.yml | 3 +++
package.json | 6 +++---
renderer/components/accounts/New.tsx | 3 ++-
renderer/components/detail/Profile.tsx | 5 +++--
renderer/components/timelines/status/Actions.tsx | 3 ++-
renderer/components/timelines/status/Card.tsx | 3 ++-
renderer/components/timelines/status/Status.tsx | 3 ++-
renderer/utils/invoke.tsx | 14 ++++++++++++++
8 files changed, 31 insertions(+), 9 deletions(-)
create mode 100644 renderer/utils/invoke.tsx
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index e82a367b..0189d771 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -22,3 +22,6 @@ jobs:
- name: typecheck
run: |
yarn run typecheck
+ - name: Build web
+ run: |
+ yarn run build:web
diff --git a/package.json b/package.json
index c67f13c4..40495ce9 100644
--- a/package.json
+++ b/package.json
@@ -7,16 +7,16 @@
"main": "app/background.js",
"scripts": {
"dev": "nextron",
- "dev:web": "next dev renderer",
"build": "nextron build",
- "build:web": "cd renderer && next build",
"build:mas": "nextron build --config ./electron-builder.mas.yml",
"build:appx2": "nextron build --win --x64 && electron-windows-store --assets ./resources/icons --input-directory ./dist/win-unpacked --output-directory ./dist/appx --package-name Whalebird --package-display-name Whalebird --package-version 6.0.3.0 --publisher-display-name h3poteto --identity-name 45610h3poteto.Whalebird",
"postinstall": "electron-builder install-app-deps",
"typecheck": "tsc -p renderer --noEmit && tsc -p main --noEmit",
"lint": "eslint renderer --ext ts,tsx",
"thirdparty": "license-checker --production --json > renderer/thirdparty.json",
- "start:web": "cd renderer && next start"
+ "dev:web": "NEXT_PUBLIC_CLIENT_ENV=browser next dev renderer",
+ "build:web": "NEXT_PUBLIC_CLIENT_ENV=browser next build renderer",
+ "start:web": "cd renderer && NEXT_PUBLIC_CLIENT_ENV=browser next start"
},
"dependencies": {
"@emoji-mart/react": "^1.1.1",
diff --git a/renderer/components/accounts/New.tsx b/renderer/components/accounts/New.tsx
index 4f9d5471..cf118490 100644
--- a/renderer/components/accounts/New.tsx
+++ b/renderer/components/accounts/New.tsx
@@ -3,6 +3,7 @@ import { useCallback, useEffect, useRef, useState } from 'react'
import { db } from '@/db'
import { FormattedMessage, useIntl } from 'react-intl'
import { Alert, Button, Dialog, DialogBody, DialogHeader, Input, Spinner, Typography } from '@material-tailwind/react'
+import { invoke } from '@/utils/invoke'
type NewProps = {
opened: boolean
@@ -57,7 +58,7 @@ export default function New(props: NewProps) {
return
}
setAppData(appData)
- global.ipc.invoke('open-browser', appData.url)
+ invoke('open-browser', appData.url)
}
const handleDomainSubmit = useCallback(
diff --git a/renderer/components/detail/Profile.tsx b/renderer/components/detail/Profile.tsx
index b59f1a60..c3a5d1f8 100644
--- a/renderer/components/detail/Profile.tsx
+++ b/renderer/components/detail/Profile.tsx
@@ -24,6 +24,7 @@ import {
TabsHeader
} from '@material-tailwind/react'
import { domainFromAcct } from '@/utils/domain'
+import { invoke } from '@/utils/invoke'
type Props = {
client: MegalodonInterface
@@ -67,7 +68,7 @@ export default function Profile(props: Props) {
}
const openOriginal = async (url: string) => {
- global.ipc.invoke('open-browser', url)
+ invoke('open-browser', url)
}
const block = async () => {
@@ -115,7 +116,7 @@ export default function Profile(props: Props) {
const profileClicked: MouseEventHandler = async e => {
const url = findLink(e.target as HTMLElement, 'profile')
if (url) {
- global.ipc.invoke('open-browser', url)
+ invoke('open-browser', url)
e.preventDefault()
e.stopPropagation()
}
diff --git a/renderer/components/timelines/status/Actions.tsx b/renderer/components/timelines/status/Actions.tsx
index a6821f0f..e9b0360d 100644
--- a/renderer/components/timelines/status/Actions.tsx
+++ b/renderer/components/timelines/status/Actions.tsx
@@ -7,6 +7,7 @@ import { Account } from '@/db'
import { FormattedMessage, useIntl } from 'react-intl'
import { IconButton, List, ListItem, Popover, PopoverContent, PopoverHandler } from '@material-tailwind/react'
import { useState } from 'react'
+import { invoke } from '@/utils/invoke'
type Props = {
status: Entity.Status
@@ -60,7 +61,7 @@ export default function Actions(props: Props) {
const original = () => {
setPopoverDetail(false)
- global.ipc.invoke('open-browser', props.status.url)
+ invoke('open-browser', props.status.url)
}
const report = () => {
diff --git a/renderer/components/timelines/status/Card.tsx b/renderer/components/timelines/status/Card.tsx
index 371731cf..4348312b 100644
--- a/renderer/components/timelines/status/Card.tsx
+++ b/renderer/components/timelines/status/Card.tsx
@@ -1,3 +1,4 @@
+import { invoke } from '@/utils/invoke'
import { Entity } from 'megalodon'
type Props = {
@@ -6,7 +7,7 @@ type Props = {
export default function Card(props: Props) {
const openCard = () => {
- global.ipc.invoke('open-browser', props.card.url)
+ invoke('open-browser', props.card.url)
}
return (
diff --git a/renderer/components/timelines/status/Status.tsx b/renderer/components/timelines/status/Status.tsx
index b80b76ab..af3f24d1 100644
--- a/renderer/components/timelines/status/Status.tsx
+++ b/renderer/components/timelines/status/Status.tsx
@@ -12,6 +12,7 @@ import { MouseEventHandler, useState } from 'react'
import { findAccount, findLink, ParsedAccount, accountMatch, findTag } from '@/utils/statusParser'
import { Account } from '@/db'
import { Avatar } from '@material-tailwind/react'
+import { invoke } from '@/utils/invoke'
type Props = {
status: Entity.Status
@@ -67,7 +68,7 @@ export default function Status(props: Props) {
const url = findLink(e.target as HTMLElement, 'status-body')
if (url) {
- global.ipc.invoke('open-browser', url)
+ invoke('open-browser', url)
e.preventDefault()
e.stopPropagation()
}
diff --git a/renderer/utils/invoke.tsx b/renderer/utils/invoke.tsx
new file mode 100644
index 00000000..7f914122
--- /dev/null
+++ b/renderer/utils/invoke.tsx
@@ -0,0 +1,14 @@
+export function invoke(event: string, data: any) {
+ if (process.env.NEXT_PUBLIC_CLIENT_ENV !== 'browser') {
+ global.ipc.invoke(event, data)
+ return
+ }
+ switch (event) {
+ case 'open-browser':
+ window.open(data, '_blank').focus()
+ return
+ default:
+ console.error(`Unknown event: ${event}`)
+ return
+ }
+}