Skip to content

Commit

Permalink
add special error dialog for the case that deltachat-rpc-server is no…
Browse files Browse the repository at this point in the history
…t found

closes #4469
  • Loading branch information
Simon-Laux committed Jan 11, 2025
1 parent 96383b9 commit e66345b
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
- accessibility: arrow-key navigation for gallery and sticker picker #4376, #4372
- accessibility: arrow-key navigation: handle "End" and "Home" keys to go to last / first item #4438
- add show_app_in_chat option to webxdc info message context menu #4459
- add special error dialog for the case that deltachat-rpc-server is not found

## Changed
- dev: upgrade react to v18 and react pinch pan zoom to v3
Expand Down
2 changes: 1 addition & 1 deletion packages/target-electron/src/deltachat/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ export default class DeltaChatController extends EventEmitter {
serverPath
)

await this.account_manager.start()
this.account_manager.start()
log.info('HI')

//todo? multiple instances, accounts is always writable
Expand Down
41 changes: 40 additions & 1 deletion packages/target-electron/src/deltachat/stdio_server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { ChildProcessWithoutNullStreams, spawn } from 'child_process'
import { app, dialog } from 'electron/main'
import { BuildInfo } from '../get-build-info'
import { arch, platform } from 'os'
import { getLogsPath } from '../application-constants'

const log = getLogger('DC-RPC')

Expand All @@ -16,14 +17,52 @@ export class StdioServer {
this.serverProcess = null
}

async start() {
start() {
this.serverProcess = spawn(this.cmd_path, {
env: {
DC_ACCOUNTS_PATH: this.accounts_path,
RUST_LOG: process.env.RUST_LOG,
},
})

this.serverProcess.on('error', err => {
// The 'error' event is emitted whenever:
// - The process could not be spawned.
// - The process could not be killed.
// - Sending a message to the child process failed.
// - The child process was aborted via the signal option.
// ~ https://nodejs.org/api/child_process.html#event-error

if (err.message.endsWith('ENOENT')) {
dialog.showErrorBox(
'Fatal Error: Core Library Missing',
`The DeltaChat Module is missing! It should be located at "${
this.cmd_path
}".
This could be due to your antivirus program. Please check the quarantine to restore it and notify the developer about this issue.
You can reach us on [email protected] or on github.com/deltachat/deltachat-desktop/issues .
The Log file is located in this folder: ${getLogsPath()}
--------------------
Error: ${err.message}
`
)
} else {
dialog.showErrorBox(
'Fatal Error',
`Error with core has been detected, please contact developers: You can reach us on [email protected] or on github.com/deltachat/deltachat-desktop/issues .
${err.name}: ${err.message}
The Log file is located in this folder: ${getLogsPath()}\n
`
)
}
// I think we can exit in all the cases, because all errors here are serious
app.exit(1)
})

let buffer = ''
this.serverProcess.stdout.on('data', data => {
// console.log(`stdout: ${data}`)
Expand Down
10 changes: 6 additions & 4 deletions packages/target-electron/src/ipc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,16 @@ export async function init(cwd: string, logHandler: LogHandler) {
error,
dcController.rpcServerPath
)

dialog.showErrorBox(
'Fatal Error',
`The DeltaChat Module couldn't be loaded.
Please check if all dependencies for deltachat-core are installed!
The Log file is located in this folder: ${getLogsPath()}\n
${dcController.rpcServerPath}\n
${error instanceof Error ? error.message : inspect(error, { depth: null })}`
Please check if all dependencies for deltachat-core are installed!
The Log file is located in this folder: ${getLogsPath()}\n
${dcController.rpcServerPath}\n
${error instanceof Error ? error.message : inspect(error, { depth: null })}`
)

rawApp.exit(1)
}

Expand Down

0 comments on commit e66345b

Please sign in to comment.