mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 15:34:13 +00:00 
			
		
		
		
	fix(frontend): /iのレスポンスに含まれないプロパティが消えずに残り続ける問題を修正
This commit is contained in:
		
							parent
							
								
									c4f1ca2fd9
								
							
						
					
					
						commit
						70b2a8f72e
					
				
					 6 changed files with 34 additions and 23 deletions
				
			
		| 
						 | 
					@ -5,12 +5,12 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { defineAsyncComponent, reactive, ref } from 'vue';
 | 
					import { defineAsyncComponent, reactive, ref } from 'vue';
 | 
				
			||||||
import * as Misskey from 'misskey-js';
 | 
					import * as Misskey from 'misskey-js';
 | 
				
			||||||
 | 
					import { apiUrl } from '@@/js/config.js';
 | 
				
			||||||
 | 
					import type { MenuItem, MenuButton } from '@/types/menu.js';
 | 
				
			||||||
import { showSuspendedDialog } from '@/scripts/show-suspended-dialog.js';
 | 
					import { showSuspendedDialog } from '@/scripts/show-suspended-dialog.js';
 | 
				
			||||||
import { i18n } from '@/i18n.js';
 | 
					import { i18n } from '@/i18n.js';
 | 
				
			||||||
import { miLocalStorage } from '@/local-storage.js';
 | 
					import { miLocalStorage } from '@/local-storage.js';
 | 
				
			||||||
import type { MenuItem, MenuButton } from '@/types/menu.js';
 | 
					 | 
				
			||||||
import { del, get, set } from '@/scripts/idb-proxy.js';
 | 
					import { del, get, set } from '@/scripts/idb-proxy.js';
 | 
				
			||||||
import { apiUrl } from '@@/js/config.js';
 | 
					 | 
				
			||||||
import { waiting, popup, popupMenu, success, alert } from '@/os.js';
 | 
					import { waiting, popup, popupMenu, success, alert } from '@/os.js';
 | 
				
			||||||
import { misskeyApi } from '@/scripts/misskey-api.js';
 | 
					import { misskeyApi } from '@/scripts/misskey-api.js';
 | 
				
			||||||
import { unisonReload, reloadChannel } from '@/scripts/unison-reload.js';
 | 
					import { unisonReload, reloadChannel } from '@/scripts/unison-reload.js';
 | 
				
			||||||
| 
						 | 
					@ -165,7 +165,18 @@ function fetchAccount(token: string, id?: string, forceShowDialog?: boolean): Pr
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function updateAccount(accountData: Partial<Account>) {
 | 
					export function updateAccount(accountData: Account) {
 | 
				
			||||||
 | 
						if (!$i) return;
 | 
				
			||||||
 | 
						for (const key of Object.keys($i)) {
 | 
				
			||||||
 | 
							delete $i[key];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for (const [key, value] of Object.entries(accountData)) {
 | 
				
			||||||
 | 
							$i[key] = value;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						miLocalStorage.setItem('account', JSON.stringify($i));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function updateAccountPartial(accountData: Partial<Account>) {
 | 
				
			||||||
	if (!$i) return;
 | 
						if (!$i) return;
 | 
				
			||||||
	for (const [key, value] of Object.entries(accountData)) {
 | 
						for (const [key, value] of Object.entries(accountData)) {
 | 
				
			||||||
		$i[key] = value;
 | 
							$i[key] = value;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,14 +4,14 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { createApp, defineAsyncComponent, markRaw } from 'vue';
 | 
					import { createApp, defineAsyncComponent, markRaw } from 'vue';
 | 
				
			||||||
 | 
					import { ui } from '@@/js/config.js';
 | 
				
			||||||
import { common } from './common.js';
 | 
					import { common } from './common.js';
 | 
				
			||||||
import type * as Misskey from 'misskey-js';
 | 
					import type * as Misskey from 'misskey-js';
 | 
				
			||||||
import { ui } from '@@/js/config.js';
 | 
					 | 
				
			||||||
import { i18n } from '@/i18n.js';
 | 
					import { i18n } from '@/i18n.js';
 | 
				
			||||||
import { alert, confirm, popup, post, toast } from '@/os.js';
 | 
					import { alert, confirm, popup, post, toast } from '@/os.js';
 | 
				
			||||||
import { useStream } from '@/stream.js';
 | 
					import { useStream } from '@/stream.js';
 | 
				
			||||||
import * as sound from '@/scripts/sound.js';
 | 
					import * as sound from '@/scripts/sound.js';
 | 
				
			||||||
import { $i, signout, updateAccount } from '@/account.js';
 | 
					import { $i, signout, updateAccountPartial } from '@/account.js';
 | 
				
			||||||
import { instance } from '@/instance.js';
 | 
					import { instance } from '@/instance.js';
 | 
				
			||||||
import { ColdDeviceStorage, defaultStore } from '@/store.js';
 | 
					import { ColdDeviceStorage, defaultStore } from '@/store.js';
 | 
				
			||||||
import { reactionPicker } from '@/scripts/reaction-picker.js';
 | 
					import { reactionPicker } from '@/scripts/reaction-picker.js';
 | 
				
			||||||
| 
						 | 
					@ -291,11 +291,11 @@ export async function mainBoot() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// 自分の情報が更新されたとき
 | 
							// 自分の情報が更新されたとき
 | 
				
			||||||
		main.on('meUpdated', i => {
 | 
							main.on('meUpdated', i => {
 | 
				
			||||||
			updateAccount(i);
 | 
								updateAccountPartial(i);
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		main.on('readAllNotifications', () => {
 | 
							main.on('readAllNotifications', () => {
 | 
				
			||||||
			updateAccount({
 | 
								updateAccountPartial({
 | 
				
			||||||
				hasUnreadNotification: false,
 | 
									hasUnreadNotification: false,
 | 
				
			||||||
				unreadNotificationsCount: 0,
 | 
									unreadNotificationsCount: 0,
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
| 
						 | 
					@ -303,39 +303,39 @@ export async function mainBoot() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		main.on('unreadNotification', () => {
 | 
							main.on('unreadNotification', () => {
 | 
				
			||||||
			const unreadNotificationsCount = ($i?.unreadNotificationsCount ?? 0) + 1;
 | 
								const unreadNotificationsCount = ($i?.unreadNotificationsCount ?? 0) + 1;
 | 
				
			||||||
			updateAccount({
 | 
								updateAccountPartial({
 | 
				
			||||||
				hasUnreadNotification: true,
 | 
									hasUnreadNotification: true,
 | 
				
			||||||
				unreadNotificationsCount,
 | 
									unreadNotificationsCount,
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		main.on('unreadMention', () => {
 | 
							main.on('unreadMention', () => {
 | 
				
			||||||
			updateAccount({ hasUnreadMentions: true });
 | 
								updateAccountPartial({ hasUnreadMentions: true });
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		main.on('readAllUnreadMentions', () => {
 | 
							main.on('readAllUnreadMentions', () => {
 | 
				
			||||||
			updateAccount({ hasUnreadMentions: false });
 | 
								updateAccountPartial({ hasUnreadMentions: false });
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		main.on('unreadSpecifiedNote', () => {
 | 
							main.on('unreadSpecifiedNote', () => {
 | 
				
			||||||
			updateAccount({ hasUnreadSpecifiedNotes: true });
 | 
								updateAccountPartial({ hasUnreadSpecifiedNotes: true });
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		main.on('readAllUnreadSpecifiedNotes', () => {
 | 
							main.on('readAllUnreadSpecifiedNotes', () => {
 | 
				
			||||||
			updateAccount({ hasUnreadSpecifiedNotes: false });
 | 
								updateAccountPartial({ hasUnreadSpecifiedNotes: false });
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		main.on('readAllAntennas', () => {
 | 
							main.on('readAllAntennas', () => {
 | 
				
			||||||
			updateAccount({ hasUnreadAntenna: false });
 | 
								updateAccountPartial({ hasUnreadAntenna: false });
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		main.on('unreadAntenna', () => {
 | 
							main.on('unreadAntenna', () => {
 | 
				
			||||||
			updateAccount({ hasUnreadAntenna: true });
 | 
								updateAccountPartial({ hasUnreadAntenna: true });
 | 
				
			||||||
			sound.playMisskeySfx('antenna');
 | 
								sound.playMisskeySfx('antenna');
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		main.on('readAllAnnouncements', () => {
 | 
							main.on('readAllAnnouncements', () => {
 | 
				
			||||||
			updateAccount({ hasUnreadAnnouncement: false });
 | 
								updateAccountPartial({ hasUnreadAnnouncement: false });
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// 個人宛てお知らせが発行されたとき
 | 
							// 個人宛てお知らせが発行されたとき
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,7 @@ import { misskeyApi } from '@/scripts/misskey-api.js';
 | 
				
			||||||
import MkModal from '@/components/MkModal.vue';
 | 
					import MkModal from '@/components/MkModal.vue';
 | 
				
			||||||
import MkButton from '@/components/MkButton.vue';
 | 
					import MkButton from '@/components/MkButton.vue';
 | 
				
			||||||
import { i18n } from '@/i18n.js';
 | 
					import { i18n } from '@/i18n.js';
 | 
				
			||||||
import { $i, updateAccount } from '@/account.js';
 | 
					import { $i, updateAccountPartial } from '@/account.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const props = withDefaults(defineProps<{
 | 
					const props = withDefaults(defineProps<{
 | 
				
			||||||
	announcement: Misskey.entities.Announcement;
 | 
						announcement: Misskey.entities.Announcement;
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,7 @@ async function ok() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	modal.value?.close();
 | 
						modal.value?.close();
 | 
				
			||||||
	misskeyApi('i/read-announcement', { announcementId: props.announcement.id });
 | 
						misskeyApi('i/read-announcement', { announcementId: props.announcement.id });
 | 
				
			||||||
	updateAccount({
 | 
						updateAccountPartial({
 | 
				
			||||||
		unreadAnnouncements: $i!.unreadAnnouncements.filter(a => a.id !== props.announcement.id),
 | 
							unreadAnnouncements: $i!.unreadAnnouncements.filter(a => a.id !== props.announcement.id),
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,7 @@ import * as os from '@/os.js';
 | 
				
			||||||
import { misskeyApi } from '@/scripts/misskey-api.js';
 | 
					import { misskeyApi } from '@/scripts/misskey-api.js';
 | 
				
			||||||
import { i18n } from '@/i18n.js';
 | 
					import { i18n } from '@/i18n.js';
 | 
				
			||||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
 | 
					import { definePageMetadata } from '@/scripts/page-metadata.js';
 | 
				
			||||||
import { $i, updateAccount } from '@/account.js';
 | 
					import { $i, updateAccountPartial } from '@/account.js';
 | 
				
			||||||
import { defaultStore } from '@/store.js';
 | 
					import { defaultStore } from '@/store.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const props = defineProps<{
 | 
					const props = defineProps<{
 | 
				
			||||||
| 
						 | 
					@ -90,7 +90,7 @@ async function read(target: Misskey.entities.Announcement): Promise<void> {
 | 
				
			||||||
	target.isRead = true;
 | 
						target.isRead = true;
 | 
				
			||||||
	await misskeyApi('i/read-announcement', { announcementId: target.id });
 | 
						await misskeyApi('i/read-announcement', { announcementId: target.id });
 | 
				
			||||||
	if ($i) {
 | 
						if ($i) {
 | 
				
			||||||
		updateAccount({
 | 
							updateAccountPartial({
 | 
				
			||||||
			unreadAnnouncements: $i.unreadAnnouncements.filter((a: { id: string; }) => a.id !== target.id),
 | 
								unreadAnnouncements: $i.unreadAnnouncements.filter((a: { id: string; }) => a.id !== target.id),
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,7 +56,7 @@ import * as os from '@/os.js';
 | 
				
			||||||
import { misskeyApi } from '@/scripts/misskey-api.js';
 | 
					import { misskeyApi } from '@/scripts/misskey-api.js';
 | 
				
			||||||
import { i18n } from '@/i18n.js';
 | 
					import { i18n } from '@/i18n.js';
 | 
				
			||||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
 | 
					import { definePageMetadata } from '@/scripts/page-metadata.js';
 | 
				
			||||||
import { $i, updateAccount } from '@/account.js';
 | 
					import { $i, updateAccountPartial } from '@/account.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const paginationCurrent = {
 | 
					const paginationCurrent = {
 | 
				
			||||||
	endpoint: 'announcements' as const,
 | 
						endpoint: 'announcements' as const,
 | 
				
			||||||
| 
						 | 
					@ -94,7 +94,7 @@ async function read(target) {
 | 
				
			||||||
		return a;
 | 
							return a;
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
	misskeyApi('i/read-announcement', { announcementId: target.id });
 | 
						misskeyApi('i/read-announcement', { announcementId: target.id });
 | 
				
			||||||
	updateAccount({
 | 
						updateAccountPartial({
 | 
				
			||||||
		unreadAnnouncements: $i!.unreadAnnouncements.filter(a => a.id !== target.id),
 | 
							unreadAnnouncements: $i!.unreadAnnouncements.filter(a => a.id !== target.id),
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,7 +84,7 @@ import FormSection from '@/components/form/section.vue';
 | 
				
			||||||
import MkFolder from '@/components/MkFolder.vue';
 | 
					import MkFolder from '@/components/MkFolder.vue';
 | 
				
			||||||
import MkLink from '@/components/MkLink.vue';
 | 
					import MkLink from '@/components/MkLink.vue';
 | 
				
			||||||
import * as os from '@/os.js';
 | 
					import * as os from '@/os.js';
 | 
				
			||||||
import { signinRequired, updateAccount } from '@/account.js';
 | 
					import { signinRequired, updateAccountPartial } from '@/account.js';
 | 
				
			||||||
import { i18n } from '@/i18n.js';
 | 
					import { i18n } from '@/i18n.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const $i = signinRequired();
 | 
					const $i = signinRequired();
 | 
				
			||||||
| 
						 | 
					@ -123,7 +123,7 @@ async function unregisterTOTP(): Promise<void> {
 | 
				
			||||||
		password: auth.result.password,
 | 
							password: auth.result.password,
 | 
				
			||||||
		token: auth.result.token,
 | 
							token: auth.result.token,
 | 
				
			||||||
	}).then(res => {
 | 
						}).then(res => {
 | 
				
			||||||
		updateAccount({
 | 
							updateAccountPartial({
 | 
				
			||||||
			twoFactorEnabled: false,
 | 
								twoFactorEnabled: false,
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}).catch(error => {
 | 
						}).catch(error => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue