mirror of
https://github.com/MisskeyIO/misskey
synced 2024-12-26 04:28:17 +09:00
commit
1bc856c451
13
CHANGELOG.md
13
CHANGELOG.md
@ -9,7 +9,18 @@
|
||||
You should also include the user name that made the change.
|
||||
-->
|
||||
|
||||
## 12.111.1 (2022/06/13)
|
||||
|
||||
### Bugfixes
|
||||
- some fixes of multiple notification read @tamaina
|
||||
- some GenerateVideoThumbnail failed @Johann150
|
||||
- Client: デッキでウィジェットの情報が保存されない問題を修正 @syuilo
|
||||
- Client: ギャラリーの投稿を開こうとすると編集画面が表示される @futchitwo
|
||||
|
||||
## 12.111.0 (2022/06/11)
|
||||
### Note
|
||||
- Node.js 16.15.0 or later is required
|
||||
|
||||
### Improvements
|
||||
- Supports Unicode Emoji 14.0 @mei23
|
||||
- プッシュ通知を複数アカウント対応に #7667 @tamaina
|
||||
@ -32,10 +43,8 @@ You should also include the user name that made the change.
|
||||
|
||||
### Bugfixes
|
||||
- Server: keep file order of note attachement @Johann150
|
||||
- Server: fix caching @Johann150
|
||||
- Server: fix missing foreign key for reports leading to reports page being unusable @Johann150
|
||||
- Server: fix internal in-memory caching @Johann150
|
||||
- Server: use correct order of attachments on notes @Johann150
|
||||
- Server: prevent crash when processing certain PNGs @syuilo
|
||||
- Server: Fix unable to generate video thumbnails @mei23
|
||||
- Server: Fix `Cannot find module` issue @mei23
|
||||
|
@ -842,6 +842,9 @@ oneDay: "1일"
|
||||
oneWeek: "일주일"
|
||||
reflectMayTakeTime: "반영되기까지 시간이 걸릴 수 있습니다."
|
||||
failedToFetchAccountInformation: "계정 정보를 가져오지 못했습니다"
|
||||
rateLimitExceeded: "요청 제한 횟수를 초과하였습니다"
|
||||
cropImage: "이미지 자르기"
|
||||
cropImageAsk: "이미지를 자르시겠습니까?"
|
||||
_emailUnavailable:
|
||||
used: "이 메일 주소는 사용중입니다"
|
||||
format: "형식이 올바르지 않습니다"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"version": "12.111.0",
|
||||
"version": "12.111.1",
|
||||
"codename": "indigo",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
@ -9,6 +9,8 @@ export async function readNotification(
|
||||
userId: User['id'],
|
||||
notificationIds: Notification['id'][]
|
||||
) {
|
||||
if (notificationIds.length === 0) return;
|
||||
|
||||
// Update documents
|
||||
await Notifications.update({
|
||||
id: In(notificationIds),
|
||||
|
@ -34,7 +34,11 @@ export const paramDef = {
|
||||
{
|
||||
type: 'object',
|
||||
properties: {
|
||||
notificationIds: { type: 'array', items: { type: 'string', format: 'misskey:id' } },
|
||||
notificationIds: {
|
||||
type: 'array',
|
||||
items: { type: 'string', format: 'misskey:id' },
|
||||
maxItems: 100,
|
||||
},
|
||||
},
|
||||
required: ['notificationIds'],
|
||||
},
|
||||
|
@ -24,7 +24,7 @@ export async function GenerateVideoThumbnail(source: string): Promise<IImage> {
|
||||
});
|
||||
|
||||
// JPEGに変換 (Webpでもいいが、MastodonはWebpをサポートせず表示できなくなる)
|
||||
return await convertToJpeg(498, 280);
|
||||
return await convertToJpeg(file, 498, 280);
|
||||
} finally {
|
||||
cleanup();
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ const defaultRoutes = [
|
||||
{ path: '/gallery', component: page(() => import('./pages/gallery/index.vue')) },
|
||||
{ path: '/gallery/new', component: page(() => import('./pages/gallery/edit.vue')) },
|
||||
{ path: '/gallery/:postId/edit', component: page(() => import('./pages/gallery/edit.vue')), props: route => ({ postId: route.params.postId }) },
|
||||
{ path: '/gallery/:postId', component: page(() => import('./pages/gallery/edit.vue')), props: route => ({ postId: route.params.postId }) },
|
||||
{ path: '/gallery/:postId', component: page(() => import('./pages/gallery/post.vue')), props: route => ({ postId: route.params.postId }) },
|
||||
{ path: '/channels', component: page('channels') },
|
||||
{ path: '/channels/new', component: page('channel-editor') },
|
||||
{ path: '/channels/:channelId/edit', component: page('channel-editor'), props: true },
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { throttle } from 'throttle-debounce';
|
||||
import { markRaw } from 'vue';
|
||||
import { notificationTypes } from 'misskey-js';
|
||||
import { Storage } from '../../pizzax';
|
||||
import { i18n } from '@/i18n';
|
||||
import { api } from '@/os';
|
||||
import { markRaw } from 'vue';
|
||||
import { Storage } from '../../pizzax';
|
||||
import { notificationTypes } from 'misskey-js';
|
||||
|
||||
type ColumnWidget = {
|
||||
name: string;
|
||||
@ -32,35 +32,35 @@ function copy<T>(x: T): T {
|
||||
export const deckStore = markRaw(new Storage('deck', {
|
||||
profile: {
|
||||
where: 'deviceAccount',
|
||||
default: 'default'
|
||||
default: 'default',
|
||||
},
|
||||
columns: {
|
||||
where: 'deviceAccount',
|
||||
default: [] as Column[]
|
||||
default: [] as Column[],
|
||||
},
|
||||
layout: {
|
||||
where: 'deviceAccount',
|
||||
default: [] as Column['id'][][]
|
||||
default: [] as Column['id'][][],
|
||||
},
|
||||
columnAlign: {
|
||||
where: 'deviceAccount',
|
||||
default: 'left' as 'left' | 'right' | 'center'
|
||||
default: 'left' as 'left' | 'right' | 'center',
|
||||
},
|
||||
alwaysShowMainColumn: {
|
||||
where: 'deviceAccount',
|
||||
default: true
|
||||
default: true,
|
||||
},
|
||||
navWindow: {
|
||||
where: 'deviceAccount',
|
||||
default: true
|
||||
default: true,
|
||||
},
|
||||
columnMargin: {
|
||||
where: 'deviceAccount',
|
||||
default: 16
|
||||
default: 16,
|
||||
},
|
||||
columnHeaderHeight: {
|
||||
where: 'deviceAccount',
|
||||
default: 42
|
||||
default: 42,
|
||||
},
|
||||
}));
|
||||
|
||||
@ -109,7 +109,7 @@ export const saveDeck = throttle(1000, () => {
|
||||
value: {
|
||||
columns: deckStore.reactiveState.columns.value,
|
||||
layout: deckStore.reactiveState.layout.value,
|
||||
}
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@ -276,7 +276,7 @@ export function setColumnWidgets(id: Column['id'], widgets: ColumnWidget[]) {
|
||||
saveDeck();
|
||||
}
|
||||
|
||||
export function updateColumnWidget(id: Column['id'], widgetId: string, WidgetData: any) {
|
||||
export function updateColumnWidget(id: Column['id'], widgetId: string, widgetData: any) {
|
||||
const columns = copy(deckStore.state.columns);
|
||||
const columnIndex = deckStore.state.columns.findIndex(c => c.id === id);
|
||||
const column = copy(deckStore.state.columns[columnIndex]);
|
||||
|
@ -10,9 +10,9 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { } from 'vue';
|
||||
import XWidgets from '@/components/widgets.vue';
|
||||
import XColumn from './column.vue';
|
||||
import { addColumnWidget, Column, removeColumnWidget, setColumnWidgets, updateColumnWidget } from './deck-store';
|
||||
import XWidgets from '@/components/widgets.vue';
|
||||
|
||||
const props = defineProps<{
|
||||
column: Column;
|
||||
|
@ -37,12 +37,22 @@ class SwNotificationReadManager {
|
||||
|
||||
account.queue.push(data.body.id as string);
|
||||
|
||||
if (account.queue.length >= 20) {
|
||||
if (account.timeout) clearTimeout(account.timeout);
|
||||
const notificationIds = account.queue;
|
||||
account.queue = [];
|
||||
await api('notifications/read', data.userId, { notificationIds });
|
||||
return;
|
||||
}
|
||||
|
||||
// 最後の呼び出しから200ms待ってまとめて処理する
|
||||
if (account.timeout) clearTimeout(account.timeout);
|
||||
account.timeout = setTimeout(() => {
|
||||
account.timeout = null;
|
||||
|
||||
api('notifications/read', data.userId, { notificationIds: account.queue });
|
||||
const notificationIds = account.queue;
|
||||
account.queue = [];
|
||||
api('notifications/read', data.userId, { notificationIds });
|
||||
}, 200);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user