upd: fix poll editing

This commit is contained in:
Mar0xy 2023-10-04 02:24:20 +02:00
parent 19e077466a
commit 4ee3e45bf7
No known key found for this signature in database
GPG key ID: 56569BBE47D2C828
2 changed files with 39 additions and 16 deletions

View file

@ -5,7 +5,7 @@
import { setImmediate } from 'node:timers/promises'; import { setImmediate } from 'node:timers/promises';
import * as mfm from 'mfm-js'; import * as mfm from 'mfm-js';
import { In, LessThan } from 'typeorm'; import { DataSource, In, LessThan } from 'typeorm';
import * as Redis from 'ioredis'; import * as Redis from 'ioredis';
import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common'; import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';
import RE2 from 're2'; import RE2 from 're2';
@ -20,7 +20,7 @@ import type { MiApp } from '@/models/App.js';
import { concat } from '@/misc/prelude/array.js'; import { concat } from '@/misc/prelude/array.js';
import { IdService } from '@/core/IdService.js'; import { IdService } from '@/core/IdService.js';
import type { MiUser, MiLocalUser, MiRemoteUser } from '@/models/User.js'; import type { MiUser, MiLocalUser, MiRemoteUser } from '@/models/User.js';
import type { IPoll } from '@/models/Poll.js'; import { MiPoll, type IPoll } from '@/models/Poll.js';
import { checkWordMute } from '@/misc/check-word-mute.js'; import { checkWordMute } from '@/misc/check-word-mute.js';
import type { MiChannel } from '@/models/Channel.js'; import type { MiChannel } from '@/models/Channel.js';
import { normalizeForSearch } from '@/misc/normalize-for-search.js'; import { normalizeForSearch } from '@/misc/normalize-for-search.js';
@ -154,6 +154,9 @@ export class NoteEditService implements OnApplicationShutdown {
@Inject(DI.redis) @Inject(DI.redis)
private redisClient: Redis.Redis, private redisClient: Redis.Redis,
@Inject(DI.db)
private db: DataSource,
@Inject(DI.usersRepository) @Inject(DI.usersRepository)
private usersRepository: UsersRepository, private usersRepository: UsersRepository,
@ -419,7 +422,27 @@ export class NoteEditService implements OnApplicationShutdown {
})); }));
} }
await this.notesRepository.update(oldnote.id, note); if (data.poll != null) {
// Start transaction
await this.db.transaction(async transactionalEntityManager => {
await transactionalEntityManager.update(MiNote, oldnote.id, note);
const poll = new MiPoll({
noteId: note.id,
choices: data.poll!.choices,
expiresAt: data.poll!.expiresAt,
multiple: data.poll!.multiple,
votes: new Array(data.poll!.choices.length).fill(0),
noteVisibility: note.visibility,
userId: user.id,
userHost: user.host,
});
await transactionalEntityManager.update(MiPoll, oldnote.id, poll);
});
} else {
await this.notesRepository.update(oldnote.id, note);
};
if (data.channel) { if (data.channel) {
this.redisClient.xadd( this.redisClient.xadd(
@ -483,6 +506,7 @@ export class NoteEditService implements OnApplicationShutdown {
if (data.poll && data.poll.expiresAt) { if (data.poll && data.poll.expiresAt) {
const delay = data.poll.expiresAt.getTime() - Date.now(); const delay = data.poll.expiresAt.getTime() - Date.now();
this.queueService.endedPollNotificationQueue.remove(note.id);
this.queueService.endedPollNotificationQueue.add(note.id, { this.queueService.endedPollNotificationQueue.add(note.id, {
noteId: note.id, noteId: note.id,
}, { }, {
@ -521,11 +545,17 @@ export class NoteEditService implements OnApplicationShutdown {
// Pack the note // Pack the note
const noteObj = await this.noteEntityService.pack(note); const noteObj = await this.noteEntityService.pack(note);
if (data.poll != null) {
this.globalEventService.publishNoteStream(note.id, 'updated', { this.globalEventService.publishNoteStream(note.id, 'updated', {
cw: note.cw, cw: note.cw,
text: note.text!, text: note.text!,
}); });
} else {
this.globalEventService.publishNoteStream(note.id, 'updated', {
cw: note.cw,
text: note.text!
});
}
this.roleService.addNoteToRoleTimeline(noteObj); this.roleService.addNoteToRoleTimeline(noteObj);

View file

@ -72,19 +72,12 @@ export function useNoteCapture(props: {
break; break;
} }
case 'updated': {
note.value.updatedAt = new Date().toISOString();
note.value.cw = body.cw;
note.value.text = body.text;
break;
}
case 'deleted': { case 'deleted': {
props.isDeletedRef.value = true; props.isDeletedRef.value = true;
break; break;
} }
case "updated": { case 'updated': {
const editedNote = await os.api("notes/show", { const editedNote = await os.api("notes/show", {
noteId: id, noteId: id,
}); });