qishibo/AnotherRedisDesktopManager · error
e.message
Error message
e.message
What it means
Element UI toast that displays the raw e.message from a rejected Electron dialog.showOpenDialog() promise in the protobuf viewer's selectProto(). showOpenDialog (via the remote/ipcRenderer bridge) rejects when the file picker cannot be created or the IPC round-trip fails — e.g. the parent window is closing, the dialog service is unavailable, or the renderer was reloading mid-call. The catch simply forwards whatever the rejection says, so the visible text is whatever Electron reported.
Source
Thrown at src/components/viewers/ViewerProtobuf.vue:141
copyContent() {
return JSON.stringify(this.newContent);
},
selectProto() {
dialog.showOpenDialog({
securityScopedBookmarks: true,
properties: ['openFile', 'multiSelections'],
filters: [
{
name: '.proto',
extensions: ['proto'],
},
],
}).then((result) => {
if (result.canceled) return;
this.loadProtoFiles(result.filePaths || [], result.bookmarks || [], true);
}).catch((e) => {
this.$message.error(e.message);
});
},
restoreBinding() {
const profile = storage.getProtobufProfileByRedisKey(this.keyHex);
if (!profile || !profile.paths) {
return;
}
this.loadProtoFiles(profile.paths, profile.bookmarks || [], false);
},
loadProtoFiles(paths, bookmarks = [], persist = false) {
if (!paths.length) {
return Promise.resolve(false);
}
// file not found
const missing = paths.filter(p => !fs.existsSync(p));
if (missing.length) {View on GitHub (pinned to c149855106)
Solutions
- Dismiss and click the select-proto button again once the window is stable
- Upgrade Electron — older versions had dialog promise rejections on window teardown
- If it reproduces consistently, drop 'securityScopedBookmarks' from the options on non-macOS platforms (bookmarks are macOS-only)
- Log the full error (e.message plus stack) via console/error monitoring to identify the actual cause
Example fix
// before
}).catch((e) => {
this.$message.error(e.message);
});
// after - tolerate teardown, surface real errors with context
}).catch((e) => {
if (!e || e.message === 'Object has been destroyed') return;
this.$message.error(`Open dialog failed: ${e.message}`);
}); Defensive patterns
Strategy: try-catch
Try / catch
dialog.showOpenDialog({...}).then((result) => {
if (result.canceled) return;
this.loadProtoFiles(result.filePaths || [], result.bookmarks || [], true);
}).catch((e) => {
// ignore teardown noise; surface actionable failures with context
if (!e || /Object has been destroyed/.test(e.message)) return;
this.$message.error(`Open dialog failed: ${e.message}`);
}); Prevention
- Check result.canceled before using filePaths (normal close path)
- Do not call showOpenDialog during window teardown/navigation
- Only request securityScopedBookmarks on macOS
When it happens
Trigger: Invoking the .proto file picker (selectProto button) and the underlying Electron dialog promise rejecting — commonly when the window is destroyed while the native dialog is open, or when securityScopedBookmarks:true is used on a non-macOS platform in an environment that errors on it.
Common situations: Closing the app window while the OS file dialog is open; running on Windows/Linux where 'securityScopedBookmarks' is not supported (normally ignored, but custom builds/older Electron versions can reject); dialog permission problems in sandboxed/Flatpak Linux packages.
Related errors
- File Input Error: ${e.message}
- ${vue.$t('message.key_no_permission')}\n[${e.message}]
- Select a correct .proto file
- Select a correct Type to encode
- this.$t('message.json_format_failed')
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/4fcad7ebc22bcf65.
Report an issue: GitHub.