summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/frontend/src/os.ts27
1 files changed, 25 insertions, 2 deletions
diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts
index 639f4eaf17..6bff12661f 100644
--- a/packages/frontend/src/os.ts
+++ b/packages/frontend/src/os.ts
@@ -17,6 +17,7 @@ import MkEmojiPickerWindow from '@/components/MkEmojiPickerWindow.vue';
import MkPopupMenu from '@/components/MkPopupMenu.vue';
import MkContextMenu from '@/components/MkContextMenu.vue';
import { MenuItem } from '@/types/menu';
+import copyToClipboard from './scripts/copy-to-clipboard';
export const openingWindowsCount = ref(0);
@@ -26,10 +27,32 @@ export const apiWithDialog = ((
token?: string | null | undefined,
) => {
const promise = api(endpoint, data, token);
- promiseDialog(promise, null, (err) => {
+ promiseDialog(promise, null, async (err) => {
let title = null;
let text = err.message + '\n' + (err as any).id;
- if (err.code === 'RATE_LIMIT_EXCEEDED') {
+ if (err.code === 'INTERNAL_ERROR') {
+ title = i18n.ts.internalServerError;
+ text = i18n.ts.internalServerErrorDescription;
+ const date = new Date().toISOString();
+ const { result } = await actions({
+ type: 'error',
+ title,
+ text,
+ actions: [{
+ value: 'ok',
+ text: i18n.ts.gotIt,
+ primary: true,
+ }, {
+ value: 'copy',
+ text: i18n.ts.copyErrorInfo,
+ }],
+ });
+ if (result === 'copy') {
+ copyToClipboard(`Endpoint: ${endpoint}\nInfo: ${JSON.stringify(err.info)}\nDate: ${date}`);
+ success();
+ }
+ return;
+ } else if (err.code === 'RATE_LIMIT_EXCEEDED') {
title = i18n.ts.cannotPerformTemporary;
text = i18n.ts.cannotPerformTemporaryDescription;
} else if (err.code.startsWith('TOO_MANY')) {