diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c92bc1808..38be0b873c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - fix `target=_blank` links in html emails don't work #3408 - add description for enableChatAuditLog setting - fix: import key from file instead of folder, fixes #1863 +- fix webxdc title not updated in document title changes #3412 diff --git a/src/main/deltachat/webxdc.ts b/src/main/deltachat/webxdc.ts index 1f0ad034e4..fe47cea82b 100644 --- a/src/main/deltachat/webxdc.ts +++ b/src/main/deltachat/webxdc.ts @@ -25,6 +25,7 @@ import { DesktopSettings } from '../desktop_settings' import { window as main_window } from '../windows/main' import { writeTempFileFromBase64 } from '../ipc' import { refresh as refreshTitleMenu } from '../menu' +import { T } from '@deltachat/jsonrpc-client' const open_apps: { [instanceId: string]: { @@ -233,11 +234,7 @@ export default class DCWebxdc extends SplitOut { 'webxdc-preload.js' ), }, - title: `${ - webxdcInfo.document - ? truncateText(webxdcInfo.document, 32) + ' - ' - : '' - }${truncateText(webxdcInfo.name, 42)} – ${chatName}`, + title: makeTitle(webxdcInfo, chatName), icon: app_icon || undefined, width: 375, height: 667, @@ -604,6 +601,23 @@ If you think that's a bug and you need that permission, then please open an issu } } ) + + ipcMain.handle( + 'webxdc:message-changed', + async (_ev, accountId: number, instanceId: number) => { + const instance = open_apps[`${accountId}.${instanceId}`] + if (instance) { + const { chatId, webxdcInfo } = await this.rpc.getMessage( + accountId, + instanceId + ) + const { name } = await this.rpc.getBasicChatInfo(accountId, chatId) + if (instance.win && webxdcInfo) { + instance.win.title = makeTitle(webxdcInfo, name) + } + } + } + ) ipcMain.handle( 'webxdc:instance-deleted', (_ev, accountId: number, instanceId: number) => { @@ -627,6 +641,12 @@ If you think that's a bug and you need that permission, then please open an issu } } +function makeTitle(webxdcInfo: T.WebxdcMessageInfo, chatName: string): string { + return `${ + webxdcInfo.document ? truncateText(webxdcInfo.document, 32) + ' - ' : '' + }${truncateText(webxdcInfo.name, 42)} – ${chatName}` +} + function partitionFromAccountId(accountId: number) { return `persist:webxdc_${accountId}` } diff --git a/src/renderer/runtime.ts b/src/renderer/runtime.ts index f2b2f22923..a9cef8d1d3 100644 --- a/src/renderer/runtime.ts +++ b/src/renderer/runtime.ts @@ -89,6 +89,7 @@ interface Runtime { deleteWebxdcAccountData(accountId: number): Promise closeAllWebxdcInstances(): void notifyWebxdcStatusUpdate(accountId: number, instanceId: number): void + notifyWebxdcMessageChanged(accountId: number, instanceId: number): void notifyWebxdcInstanceDeleted(accountId: number, instanceId: number): void // control app @@ -179,6 +180,9 @@ class Browser implements Runtime { notifyWebxdcStatusUpdate(_accountId: number, _instanceId: number): void { throw new Error('Method not implemented.') } + notifyWebxdcMessageChanged(_accountId: number, _instanceId: number): void { + throw new Error('Method not implemented.') + } notifyWebxdcInstanceDeleted(_accountId: number, _instanceId: number): void { throw new Error('Method not implemented.') } @@ -366,6 +370,9 @@ class Electron implements Runtime { notifyWebxdcStatusUpdate(accountId: number, instanceId: number): void { ipcBackend.invoke('webxdc:status-update', accountId, instanceId) } + notifyWebxdcMessageChanged(accountId: number, instanceId: number): void { + ipcBackend.invoke('webxdc:message-changed', accountId, instanceId) + } notifyWebxdcInstanceDeleted(accountId: number, instanceId: number): void { ipcBackend.invoke('webxdc:instance-deleted', accountId, instanceId) } diff --git a/src/renderer/system-integration/webxdc.ts b/src/renderer/system-integration/webxdc.ts index 511d23f703..f45fa44f6e 100644 --- a/src/renderer/system-integration/webxdc.ts +++ b/src/renderer/system-integration/webxdc.ts @@ -9,6 +9,9 @@ export function initWebxdc() { BackendRemote.on('WebxdcStatusUpdate', (accountId, { msgId }) => { runtime.notifyWebxdcStatusUpdate(accountId, msgId) }) + BackendRemote.on('MsgsChanged', (accountId, { msgId }) => { + runtime.notifyWebxdcMessageChanged(accountId, msgId) + }) BackendRemote.on('WebxdcInstanceDeleted', (accountId, { msgId }) => { runtime.notifyWebxdcInstanceDeleted(accountId, msgId) })