Browse Source

fix electron

imwald
Silberengel 2 weeks ago
parent
commit
bf049ee5f8
  1. 22
      electron/main.cjs
  2. 4
      package-lock.json
  3. 2
      package.json
  4. 19
      src/components/AdvancedEventLab/AdvancedEventLabDialog.tsx
  5. 13
      src/components/NoteOptions/useMenuActions.tsx

22
electron/main.cjs

@ -190,9 +190,19 @@ function loadRenderer(win) {
/** /**
* Packaged (and dev) renderer runs on http://127.0.0.1; hls.js and other fetches hit third-party * Packaged (and dev) renderer runs on http://127.0.0.1; hls.js and other fetches hit third-party
* streams without CORS. Chromium still enforces CORS, so inject a permissive ACAO on subresources only. * streams without CORS. Chromium still enforces CORS, so inject permissive CORS on subresources only.
* LanguageTool / LibreTranslate use POST + non-simple Content-Type → preflight must see Allow-Methods /
* Allow-Headers, not only ACAO.
*/ */
function relaxCorsForRendererSubresources() { function relaxCorsForRendererSubresources() {
const stripCors = new Set([
'access-control-allow-origin',
'access-control-allow-credentials',
'access-control-allow-methods',
'access-control-allow-headers',
'access-control-expose-headers',
'access-control-max-age'
])
session.defaultSession.webRequest.onHeadersReceived((details, callback) => { session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
if (details.resourceType === 'mainFrame' || details.resourceType === 'subFrame') { if (details.resourceType === 'mainFrame' || details.resourceType === 'subFrame') {
callback({ cancel: false, responseHeaders: details.responseHeaders }) callback({ cancel: false, responseHeaders: details.responseHeaders })
@ -205,15 +215,15 @@ function relaxCorsForRendererSubresources() {
} }
const responseHeaders = { ...raw } const responseHeaders = { ...raw }
for (const key of Object.keys(responseHeaders)) { for (const key of Object.keys(responseHeaders)) {
const lower = key.toLowerCase() if (stripCors.has(key.toLowerCase())) {
if (
lower === 'access-control-allow-origin' ||
lower === 'access-control-allow-credentials'
) {
delete responseHeaders[key] delete responseHeaders[key]
} }
} }
responseHeaders['Access-Control-Allow-Origin'] = ['*'] responseHeaders['Access-Control-Allow-Origin'] = ['*']
responseHeaders['Access-Control-Allow-Methods'] = ['GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS']
responseHeaders['Access-Control-Allow-Headers'] = [
'Authorization,Content-Type,Accept,Accept-Language,Origin,X-Requested-With'
]
callback({ cancel: false, responseHeaders }) callback({ cancel: false, responseHeaders })
}) })
} }

4
package-lock.json generated

@ -1,12 +1,12 @@
{ {
"name": "imwald", "name": "imwald",
"version": "23.0.5", "version": "23.0.8",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "imwald", "name": "imwald",
"version": "23.0.5", "version": "23.0.8",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@asciidoctor/core": "^3.0.4", "@asciidoctor/core": "^3.0.4",

2
package.json

@ -1,6 +1,6 @@
{ {
"name": "imwald", "name": "imwald",
"version": "23.0.7", "version": "23.0.8",
"description": "Imwald — a user-friendly Nostr client focused on relay feed browsing, publications, and relay discovery", "description": "Imwald — a user-friendly Nostr client focused on relay feed browsing, publications, and relay discovery",
"private": true, "private": true,
"type": "module", "type": "module",

19
src/components/AdvancedEventLab/AdvancedEventLabDialog.tsx

@ -21,6 +21,7 @@ import { languageToolLintExtension, requestAdvancedLabGrammarLint } from '@/lib/
import { pickLanguageToolCodeForTranslateTarget } from '@/lib/languagetool-language-order' import { pickLanguageToolCodeForTranslateTarget } from '@/lib/languagetool-language-order'
import { import {
filterTranslateLanguagesWithGrammarCatalog, filterTranslateLanguagesWithGrammarCatalog,
TRANSLATE_GRAMMAR_LANGUAGE_OPTIONS,
translateLanguageOptionMatchesQuery translateLanguageOptionMatchesQuery
} from '@/lib/language-display-meta' } from '@/lib/language-display-meta'
import { LanguageSelectOptionLines } from '@/lib/language-select-option-lines' import { LanguageSelectOptionLines } from '@/lib/language-select-option-lines'
@ -536,21 +537,29 @@ export default function AdvancedEventLabDialog({
void fetchTranslateLanguages() void fetchTranslateLanguages()
.then((list) => { .then((list) => {
if (cancelled) return if (cancelled) return
const filtered = filterTranslateLanguagesWithGrammarCatalog(list) const base = list.length > 0 ? list : TRANSLATE_GRAMMAR_LANGUAGE_OPTIONS
if (!filtered.length) { const filtered = filterTranslateLanguagesWithGrammarCatalog(base)
const resolved = filtered.length > 0 ? filtered : TRANSLATE_GRAMMAR_LANGUAGE_OPTIONS
if (!resolved.length) {
setTranslateLangs([]) setTranslateLangs([])
setTranslateLoad('empty') setTranslateLoad('empty')
return return
} }
setTranslateLangs(filtered) setTranslateLangs([...resolved])
setTranslateSource('auto') setTranslateSource('auto')
const codes = filtered.map((l) => l.code) const codes = resolved.map((l) => l.code)
const tgt = codes.includes('en') ? 'en' : codes[0]! const tgt = codes.includes('en') ? 'en' : codes[0]!
setTranslateTarget(tgt) setTranslateTarget(tgt)
setTranslateLoad('ready') setTranslateLoad('ready')
}) })
.catch(() => { .catch(() => {
if (!cancelled) setTranslateLoad('error') if (cancelled) return
const resolved = TRANSLATE_GRAMMAR_LANGUAGE_OPTIONS
setTranslateLangs([...resolved])
setTranslateSource('auto')
const codes = resolved.map((l) => l.code)
setTranslateTarget(codes.includes('en') ? 'en' : codes[0]!)
setTranslateLoad('ready')
}) })
return () => { return () => {
cancelled = true cancelled = true

13
src/components/NoteOptions/useMenuActions.tsx

@ -70,6 +70,7 @@ import {
import { import {
filterTranslateLanguagesWithGrammarCatalog, filterTranslateLanguagesWithGrammarCatalog,
languageSelectSingleLine, languageSelectSingleLine,
TRANSLATE_GRAMMAR_LANGUAGE_OPTIONS,
TRANSLATE_LANGUAGE_MENU_ITEM_CLASS TRANSLATE_LANGUAGE_MENU_ITEM_CLASS
} from '@/lib/language-display-meta' } from '@/lib/language-display-meta'
@ -187,9 +188,17 @@ export function useMenuActions({
return return
} }
let cancelled = false let cancelled = false
void fetchTranslateLanguages().then((list) => { void fetchTranslateLanguages()
.then((list) => {
if (cancelled) return if (cancelled) return
setTranslateMenuOptions(filterTranslateLanguagesWithGrammarCatalog(list)) const base = list.length > 0 ? list : TRANSLATE_GRAMMAR_LANGUAGE_OPTIONS
const filtered = filterTranslateLanguagesWithGrammarCatalog(base)
setTranslateMenuOptions(
filtered.length > 0 ? filtered : TRANSLATE_GRAMMAR_LANGUAGE_OPTIONS
)
})
.catch(() => {
if (!cancelled) setTranslateMenuOptions(TRANSLATE_GRAMMAR_LANGUAGE_OPTIONS)
}) })
return () => { return () => {
cancelled = true cancelled = true

Loading…
Cancel
Save