wip
This commit is contained in:
		| @@ -53,6 +53,7 @@ import XFolder from './drive.folder.vue'; | |||||||
| import XFile from './drive.file.vue'; | import XFile from './drive.file.vue'; | ||||||
| import MkButton from './ui/button.vue'; | import MkButton from './ui/button.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	components: { | 	components: { | ||||||
| @@ -140,7 +141,7 @@ export default defineComponent({ | |||||||
| 			}); | 			}); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		this.connection = markRaw(os.stream.useChannel('drive')); | 		this.connection = markRaw(stream.useChannel('drive')); | ||||||
|  |  | ||||||
| 		this.connection.on('fileCreated', this.onStreamDriveFileCreated); | 		this.connection.on('fileCreated', this.onStreamDriveFileCreated); | ||||||
| 		this.connection.on('fileUpdated', this.onStreamDriveFileUpdated); | 		this.connection.on('fileUpdated', this.onStreamDriveFileUpdated); | ||||||
|   | |||||||
| @@ -30,6 +30,7 @@ | |||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { defineComponent, markRaw } from 'vue'; | import { defineComponent, markRaw } from 'vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	props: { | 	props: { | ||||||
| @@ -71,7 +72,7 @@ export default defineComponent({ | |||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| 	mounted() { | 	mounted() { | ||||||
| 		this.connection = markRaw(os.stream.useChannel('main')); | 		this.connection = markRaw(stream.useChannel('main')); | ||||||
|  |  | ||||||
| 		this.connection.on('follow', this.onFollowChange); | 		this.connection.on('follow', this.onFollowChange); | ||||||
| 		this.connection.on('unfollow', this.onFollowChange); | 		this.connection.on('unfollow', this.onFollowChange); | ||||||
|   | |||||||
| @@ -140,6 +140,7 @@ import { checkWordMute } from '@/scripts/check-word-mute'; | |||||||
| import { userPage } from '@/filters/user'; | import { userPage } from '@/filters/user'; | ||||||
| import { notePage } from '@/filters/note'; | import { notePage } from '@/filters/note'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import { noteActions, noteViewInterruptors } from '@/store'; | import { noteActions, noteViewInterruptors } from '@/store'; | ||||||
| import { reactionPicker } from '@/scripts/reaction-picker'; | import { reactionPicker } from '@/scripts/reaction-picker'; | ||||||
| import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm'; | import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm'; | ||||||
| @@ -260,7 +261,7 @@ export default defineComponent({ | |||||||
|  |  | ||||||
| 	async created() { | 	async created() { | ||||||
| 		if (this.$i) { | 		if (this.$i) { | ||||||
| 			this.connection = os.stream; | 			this.connection = stream; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		this.muted = await checkWordMute(this.appearNote, this.$i, this.$store.state.mutedWords); | 		this.muted = await checkWordMute(this.appearNote, this.$i, this.$store.state.mutedWords); | ||||||
|   | |||||||
| @@ -122,6 +122,7 @@ import copyToClipboard from '@/scripts/copy-to-clipboard'; | |||||||
| import { checkWordMute } from '@/scripts/check-word-mute'; | import { checkWordMute } from '@/scripts/check-word-mute'; | ||||||
| import { userPage } from '@/filters/user'; | import { userPage } from '@/filters/user'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import { noteActions, noteViewInterruptors } from '@/store'; | import { noteActions, noteViewInterruptors } from '@/store'; | ||||||
| import { reactionPicker } from '@/scripts/reaction-picker'; | import { reactionPicker } from '@/scripts/reaction-picker'; | ||||||
| import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm'; | import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm'; | ||||||
| @@ -245,7 +246,7 @@ export default defineComponent({ | |||||||
|  |  | ||||||
| 	async created() { | 	async created() { | ||||||
| 		if (this.$i) { | 		if (this.$i) { | ||||||
| 			this.connection = os.stream; | 			this.connection = stream; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		this.collapsed = this.appearNote.cw == null && this.appearNote.text && ( | 		this.collapsed = this.appearNote.cw == null && this.appearNote.text && ( | ||||||
|   | |||||||
| @@ -74,6 +74,7 @@ import { notePage } from '@/filters/note'; | |||||||
| import { userPage } from '@/filters/user'; | import { userPage } from '@/filters/user'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import { useTooltip } from '@/scripts/use-tooltip'; | import { useTooltip } from '@/scripts/use-tooltip'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| @@ -106,7 +107,7 @@ export default defineComponent({ | |||||||
| 			if (!props.notification.isRead) { | 			if (!props.notification.isRead) { | ||||||
| 				const readObserver = new IntersectionObserver((entries, observer) => { | 				const readObserver = new IntersectionObserver((entries, observer) => { | ||||||
| 					if (!entries.some(entry => entry.isIntersecting)) return; | 					if (!entries.some(entry => entry.isIntersecting)) return; | ||||||
| 					os.stream.send('readNotification', { | 					stream.send('readNotification', { | ||||||
| 						id: props.notification.id | 						id: props.notification.id | ||||||
| 					}); | 					}); | ||||||
| 					observer.disconnect(); | 					observer.disconnect(); | ||||||
| @@ -114,7 +115,7 @@ export default defineComponent({ | |||||||
|  |  | ||||||
| 				readObserver.observe(elRef.value); | 				readObserver.observe(elRef.value); | ||||||
|  |  | ||||||
| 				const connection = os.stream.useChannel('main'); | 				const connection = stream.useChannel('main'); | ||||||
| 				connection.on('readAllNotifications', () => readObserver.disconnect()); | 				connection.on('readAllNotifications', () => readObserver.disconnect()); | ||||||
|  |  | ||||||
| 				onUnmounted(() => { | 				onUnmounted(() => { | ||||||
|   | |||||||
| @@ -28,6 +28,7 @@ import XList from './date-separated-list.vue'; | |||||||
| import XNote from './note.vue'; | import XNote from './note.vue'; | ||||||
| import { notificationTypes } from 'misskey-js'; | import { notificationTypes } from 'misskey-js'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import MkButton from '@/components/ui/button.vue'; | import MkButton from '@/components/ui/button.vue'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| @@ -100,7 +101,7 @@ export default defineComponent({ | |||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| 	mounted() { | 	mounted() { | ||||||
| 		this.connection = markRaw(os.stream.useChannel('main')); | 		this.connection = markRaw(stream.useChannel('main')); | ||||||
| 		this.connection.on('notification', this.onNotification); | 		this.connection.on('notification', this.onNotification); | ||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| @@ -112,7 +113,7 @@ export default defineComponent({ | |||||||
| 		onNotification(notification) { | 		onNotification(notification) { | ||||||
| 			const isMuted = !this.allIncludeTypes.includes(notification.type); | 			const isMuted = !this.allIncludeTypes.includes(notification.type); | ||||||
| 			if (isMuted || document.visibilityState === 'visible') { | 			if (isMuted || document.visibilityState === 'visible') { | ||||||
| 				os.stream.send('readNotification', { | 				stream.send('readNotification', { | ||||||
| 					id: notification.id | 					id: notification.id | ||||||
| 				}); | 				}); | ||||||
| 			} | 			} | ||||||
|   | |||||||
| @@ -74,11 +74,11 @@ import { formatTimeString } from '@/scripts/format-time-string'; | |||||||
| import { Autocomplete } from '@/scripts/autocomplete'; | import { Autocomplete } from '@/scripts/autocomplete'; | ||||||
| import { noteVisibilities } from 'misskey-js'; | import { noteVisibilities } from 'misskey-js'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import { selectFiles } from '@/scripts/select-file'; | import { selectFiles } from '@/scripts/select-file'; | ||||||
| import { defaultStore, notePostInterruptors, postFormActions } from '@/store'; | import { defaultStore, notePostInterruptors, postFormActions } from '@/store'; | ||||||
| import { throttle } from 'throttle-debounce'; | import { throttle } from 'throttle-debounce'; | ||||||
| import MkInfo from '@/components/ui/info.vue'; | import MkInfo from '@/components/ui/info.vue'; | ||||||
| import { defaultStore } from '@/store'; |  | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	components: { | 	components: { | ||||||
| @@ -176,7 +176,7 @@ export default defineComponent({ | |||||||
| 			imeText: '', | 			imeText: '', | ||||||
| 			typing: throttle(3000, () => { | 			typing: throttle(3000, () => { | ||||||
| 				if (this.channel) { | 				if (this.channel) { | ||||||
| 					os.stream.send('typingOnChannel', { channel: this.channel.id }); | 					stream.send('typingOnChannel', { channel: this.channel.id }); | ||||||
| 				} | 				} | ||||||
| 			}), | 			}), | ||||||
| 			postFormActions, | 			postFormActions, | ||||||
|   | |||||||
| @@ -83,6 +83,7 @@ import MkTab from '@/components/tab.vue'; | |||||||
| import MkButton from '@/components/ui/button.vue'; | import MkButton from '@/components/ui/button.vue'; | ||||||
| import follow from '@/directives/follow-append'; | import follow from '@/directives/follow-append'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	components: { | 	components: { | ||||||
| @@ -104,15 +105,15 @@ export default defineComponent({ | |||||||
| 		const connections = shallowRef([]); | 		const connections = shallowRef([]); | ||||||
| 		const pools = shallowRef([]); | 		const pools = shallowRef([]); | ||||||
| 		const refreshStreamInfo = () => { | 		const refreshStreamInfo = () => { | ||||||
| 			console.log(os.stream.sharedConnectionPools, os.stream.sharedConnections, os.stream.nonSharedConnections); | 			console.log(stream.sharedConnectionPools, stream.sharedConnections, stream.nonSharedConnections); | ||||||
| 			const conn = os.stream.sharedConnections.map(c => ({ | 			const conn = stream.sharedConnections.map(c => ({ | ||||||
| 				id: c.id, name: c.name, channel: c.channel, users: c.pool.users, in: c.inCount, out: c.outCount, | 				id: c.id, name: c.name, channel: c.channel, users: c.pool.users, in: c.inCount, out: c.outCount, | ||||||
| 			})).concat(os.stream.nonSharedConnections.map(c => ({ | 			})).concat(stream.nonSharedConnections.map(c => ({ | ||||||
| 				id: c.id, name: c.name, channel: c.channel, users: null, in: c.inCount, out: c.outCount, | 				id: c.id, name: c.name, channel: c.channel, users: null, in: c.inCount, out: c.outCount, | ||||||
| 			}))); | 			}))); | ||||||
| 			conn.sort((a, b) => (a.id > b.id) ? 1 : -1); | 			conn.sort((a, b) => (a.id > b.id) ? 1 : -1); | ||||||
| 			connections.value = conn; | 			connections.value = conn; | ||||||
| 			pools.value = os.stream.sharedConnectionPools; | 			pools.value = stream.sharedConnectionPools; | ||||||
| 		}; | 		}; | ||||||
| 		const interval = setInterval(refreshStreamInfo, 1000); | 		const interval = setInterval(refreshStreamInfo, 1000); | ||||||
| 		onBeforeUnmount(() => { | 		onBeforeUnmount(() => { | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ | |||||||
| import { defineComponent, markRaw } from 'vue'; | import { defineComponent, markRaw } from 'vue'; | ||||||
| import XNotes from './notes.vue'; | import XNotes from './notes.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import * as sound from '@/scripts/sound'; | import * as sound from '@/scripts/sound'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| @@ -92,33 +93,33 @@ export default defineComponent({ | |||||||
| 			this.query = { | 			this.query = { | ||||||
| 				antennaId: this.antenna | 				antennaId: this.antenna | ||||||
| 			}; | 			}; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('antenna', { | 			this.connection = markRaw(stream.useChannel('antenna', { | ||||||
| 				antennaId: this.antenna | 				antennaId: this.antenna | ||||||
| 			})); | 			})); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
| 		} else if (this.src == 'home') { | 		} else if (this.src == 'home') { | ||||||
| 			endpoint = 'notes/timeline'; | 			endpoint = 'notes/timeline'; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('homeTimeline')); | 			this.connection = markRaw(stream.useChannel('homeTimeline')); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
|  |  | ||||||
| 			this.connection2 = markRaw(os.stream.useChannel('main')); | 			this.connection2 = markRaw(stream.useChannel('main')); | ||||||
| 			this.connection2.on('follow', onChangeFollowing); | 			this.connection2.on('follow', onChangeFollowing); | ||||||
| 			this.connection2.on('unfollow', onChangeFollowing); | 			this.connection2.on('unfollow', onChangeFollowing); | ||||||
| 		} else if (this.src == 'local') { | 		} else if (this.src == 'local') { | ||||||
| 			endpoint = 'notes/local-timeline'; | 			endpoint = 'notes/local-timeline'; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('localTimeline')); | 			this.connection = markRaw(stream.useChannel('localTimeline')); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
| 		} else if (this.src == 'social') { | 		} else if (this.src == 'social') { | ||||||
| 			endpoint = 'notes/hybrid-timeline'; | 			endpoint = 'notes/hybrid-timeline'; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('hybridTimeline')); | 			this.connection = markRaw(stream.useChannel('hybridTimeline')); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
| 		} else if (this.src == 'global') { | 		} else if (this.src == 'global') { | ||||||
| 			endpoint = 'notes/global-timeline'; | 			endpoint = 'notes/global-timeline'; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('globalTimeline')); | 			this.connection = markRaw(stream.useChannel('globalTimeline')); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
| 		} else if (this.src == 'mentions') { | 		} else if (this.src == 'mentions') { | ||||||
| 			endpoint = 'notes/mentions'; | 			endpoint = 'notes/mentions'; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('main')); | 			this.connection = markRaw(stream.useChannel('main')); | ||||||
| 			this.connection.on('mention', prepend); | 			this.connection.on('mention', prepend); | ||||||
| 		} else if (this.src == 'directs') { | 		} else if (this.src == 'directs') { | ||||||
| 			endpoint = 'notes/mentions'; | 			endpoint = 'notes/mentions'; | ||||||
| @@ -130,14 +131,14 @@ export default defineComponent({ | |||||||
| 					prepend(note); | 					prepend(note); | ||||||
| 				} | 				} | ||||||
| 			}; | 			}; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('main')); | 			this.connection = markRaw(stream.useChannel('main')); | ||||||
| 			this.connection.on('mention', onNote); | 			this.connection.on('mention', onNote); | ||||||
| 		} else if (this.src == 'list') { | 		} else if (this.src == 'list') { | ||||||
| 			endpoint = 'notes/user-list-timeline'; | 			endpoint = 'notes/user-list-timeline'; | ||||||
| 			this.query = { | 			this.query = { | ||||||
| 				listId: this.list | 				listId: this.list | ||||||
| 			}; | 			}; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('userList', { | 			this.connection = markRaw(stream.useChannel('userList', { | ||||||
| 				listId: this.list | 				listId: this.list | ||||||
| 			})); | 			})); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
| @@ -148,7 +149,7 @@ export default defineComponent({ | |||||||
| 			this.query = { | 			this.query = { | ||||||
| 				channelId: this.channel | 				channelId: this.channel | ||||||
| 			}; | 			}; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('channel', { | 			this.connection = markRaw(stream.useChannel('channel', { | ||||||
| 				channelId: this.channel | 				channelId: this.channel | ||||||
| 			})); | 			})); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
|   | |||||||
| @@ -12,8 +12,6 @@ import { resolve } from '@/router'; | |||||||
| import { $i } from '@/account'; | import { $i } from '@/account'; | ||||||
| import { defaultStore } from '@/store'; | import { defaultStore } from '@/store'; | ||||||
|  |  | ||||||
| export const stream = markRaw(new Misskey.Stream(url, $i)); |  | ||||||
|  |  | ||||||
| export const pendingApiRequestsCount = ref(0); | export const pendingApiRequestsCount = ref(0); | ||||||
| let apiRequestsCount = 0; // for debug | let apiRequestsCount = 0; // for debug | ||||||
| export const apiRequests = ref([]); // for debug | export const apiRequests = ref([]); // for debug | ||||||
|   | |||||||
| @@ -101,6 +101,7 @@ const alpha = (hex, a) => { | |||||||
| 	return `rgba(${r}, ${g}, ${b}, ${a})`; | 	return `rgba(${r}, ${g}, ${b}, ${a})`; | ||||||
| }; | }; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	components: { | 	components: { | ||||||
| @@ -119,7 +120,7 @@ export default defineComponent({ | |||||||
| 			stats: null, | 			stats: null, | ||||||
| 			serverInfo: null, | 			serverInfo: null, | ||||||
| 			connection: null, | 			connection: null, | ||||||
| 			queueConnection: markRaw(os.stream.useChannel('queueStats')), | 			queueConnection: markRaw(stream.useChannel('queueStats')), | ||||||
| 			memUsage: 0, | 			memUsage: 0, | ||||||
| 			chartCpuMem: null, | 			chartCpuMem: null, | ||||||
| 			chartNet: null, | 			chartNet: null, | ||||||
| @@ -150,7 +151,7 @@ export default defineComponent({ | |||||||
| 		os.api('admin/server-info', {}).then(res => { | 		os.api('admin/server-info', {}).then(res => { | ||||||
| 			this.serverInfo = res; | 			this.serverInfo = res; | ||||||
|  |  | ||||||
| 			this.connection = markRaw(os.stream.useChannel('serverStats')); | 			this.connection = markRaw(stream.useChannel('serverStats')); | ||||||
| 			this.connection.on('stats', this.onStats); | 			this.connection.on('stats', this.onStats); | ||||||
| 			this.connection.on('statsLog', this.onStatsLog); | 			this.connection.on('statsLog', this.onStatsLog); | ||||||
| 			this.connection.send('requestLog', { | 			this.connection.send('requestLog', { | ||||||
|   | |||||||
| @@ -81,6 +81,7 @@ import number from '@/filters/number'; | |||||||
| import MkInstanceInfo from './instance.vue'; | import MkInstanceInfo from './instance.vue'; | ||||||
| import XMetrics from './metrics.vue'; | import XMetrics from './metrics.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import * as symbols from '@/symbols'; | import * as symbols from '@/symbols'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| @@ -113,7 +114,7 @@ export default defineComponent({ | |||||||
| 			notesComparedToThePrevDay: null, | 			notesComparedToThePrevDay: null, | ||||||
| 			fetchJobs: () => os.api('admin/queue/deliver-delayed', {}), | 			fetchJobs: () => os.api('admin/queue/deliver-delayed', {}), | ||||||
| 			fetchModLogs: () => os.api('admin/show-moderation-logs', {}), | 			fetchModLogs: () => os.api('admin/show-moderation-logs', {}), | ||||||
| 			queueStatsConnection: markRaw(os.stream.useChannel('queueStats')), | 			queueStatsConnection: markRaw(stream.useChannel('queueStats')), | ||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ import XQueue from './queue.chart.vue'; | |||||||
| import FormBase from '@/components/debobigego/base.vue'; | import FormBase from '@/components/debobigego/base.vue'; | ||||||
| import FormButton from '@/components/debobigego/button.vue'; | import FormButton from '@/components/debobigego/button.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import * as symbols from '@/symbols'; | import * as symbols from '@/symbols'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| @@ -36,7 +37,7 @@ export default defineComponent({ | |||||||
| 				icon: 'fas fa-clipboard-list', | 				icon: 'fas fa-clipboard-list', | ||||||
| 				bg: 'var(--bg)', | 				bg: 'var(--bg)', | ||||||
| 			}, | 			}, | ||||||
| 			connection: markRaw(os.stream.useChannel('queueStats')), | 			connection: markRaw(stream.useChannel('queueStats')), | ||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -44,6 +44,7 @@ import * as Acct from 'misskey-js/built/acct'; | |||||||
| import MkButton from '@/components/ui/button.vue'; | import MkButton from '@/components/ui/button.vue'; | ||||||
| import { acct } from '@/filters/user'; | import { acct } from '@/filters/user'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import * as symbols from '@/symbols'; | import * as symbols from '@/symbols'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| @@ -66,7 +67,7 @@ export default defineComponent({ | |||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| 	mounted() { | 	mounted() { | ||||||
| 		this.connection = markRaw(os.stream.useChannel('messagingIndex')); | 		this.connection = markRaw(stream.useChannel('messagingIndex')); | ||||||
|  |  | ||||||
| 		this.connection.on('message', this.onMessage); | 		this.connection.on('message', this.onMessage); | ||||||
| 		this.connection.on('read', this.onRead); | 		this.connection.on('read', this.onRead); | ||||||
|   | |||||||
| @@ -28,6 +28,7 @@ import * as autosize from 'autosize'; | |||||||
| import { formatTimeString } from '@/scripts/format-time-string'; | import { formatTimeString } from '@/scripts/format-time-string'; | ||||||
| import { selectFile } from '@/scripts/select-file'; | import { selectFile } from '@/scripts/select-file'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import { Autocomplete } from '@/scripts/autocomplete'; | import { Autocomplete } from '@/scripts/autocomplete'; | ||||||
| import { throttle } from 'throttle-debounce'; | import { throttle } from 'throttle-debounce'; | ||||||
|  |  | ||||||
| @@ -48,7 +49,7 @@ export default defineComponent({ | |||||||
| 			file: null, | 			file: null, | ||||||
| 			sending: false, | 			sending: false, | ||||||
| 			typing: throttle(3000, () => { | 			typing: throttle(3000, () => { | ||||||
| 				os.stream.send('typingOnMessaging', this.user ? { partner: this.user.id } : { group: this.group.id }); | 				stream.send('typingOnMessaging', this.user ? { partner: this.user.id } : { group: this.group.id }); | ||||||
| 			}), | 			}), | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
|   | |||||||
| @@ -43,6 +43,7 @@ import XForm from './messaging-room.form.vue'; | |||||||
| import * as Acct from 'misskey-js/built/acct'; | import * as Acct from 'misskey-js/built/acct'; | ||||||
| import { isBottom, onScrollBottom, scroll } from '@/scripts/scroll'; | import { isBottom, onScrollBottom, scroll } from '@/scripts/scroll'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import { popout } from '@/scripts/popout'; | import { popout } from '@/scripts/popout'; | ||||||
| import * as sound from '@/scripts/sound'; | import * as sound from '@/scripts/sound'; | ||||||
| import * as symbols from '@/symbols'; | import * as symbols from '@/symbols'; | ||||||
| @@ -141,7 +142,7 @@ const Component = defineComponent({ | |||||||
| 				this.group = group; | 				this.group = group; | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			this.connection = markRaw(os.stream.useChannel('messaging', { | 			this.connection = markRaw(stream.useChannel('messaging', { | ||||||
| 				otherparty: this.user ? this.user.id : undefined, | 				otherparty: this.user ? this.user.id : undefined, | ||||||
| 				group: this.group ? this.group.id : undefined, | 				group: this.group ? this.group.id : undefined, | ||||||
| 			})); | 			})); | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ import { defineComponent, markRaw } from 'vue'; | |||||||
| import GameSetting from './game.setting.vue'; | import GameSetting from './game.setting.vue'; | ||||||
| import GameBoard from './game.board.vue'; | import GameBoard from './game.board.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import * as symbols from '@/symbols'; | import * as symbols from '@/symbols'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| @@ -61,7 +62,7 @@ export default defineComponent({ | |||||||
| 				if (this.connection) { | 				if (this.connection) { | ||||||
| 					this.connection.dispose(); | 					this.connection.dispose(); | ||||||
| 				} | 				} | ||||||
| 				this.connection = markRaw(os.stream.useChannel('gamesReversiGame', { | 				this.connection = markRaw(stream.useChannel('gamesReversiGame', { | ||||||
| 					gameId: this.game.id | 					gameId: this.game.id | ||||||
| 				})); | 				})); | ||||||
| 				this.connection.on('started', this.onStarted); | 				this.connection.on('started', this.onStarted); | ||||||
|   | |||||||
| @@ -62,6 +62,7 @@ | |||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { defineComponent, markRaw } from 'vue'; | import { defineComponent, markRaw } from 'vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import MkButton from '@/components/ui/button.vue'; | import MkButton from '@/components/ui/button.vue'; | ||||||
| import MkFolder from '@/components/ui/folder.vue'; | import MkFolder from '@/components/ui/folder.vue'; | ||||||
| import * as symbols from '@/symbols'; | import * as symbols from '@/symbols'; | ||||||
| @@ -92,7 +93,7 @@ export default defineComponent({ | |||||||
|  |  | ||||||
| 	mounted() { | 	mounted() { | ||||||
| 		if (this.$i) { | 		if (this.$i) { | ||||||
| 			this.connection = markRaw(os.stream.useChannel('gamesReversi')); | 			this.connection = markRaw(stream.useChannel('gamesReversi')); | ||||||
|  |  | ||||||
| 			this.connection.on('invited', this.onInvited); | 			this.connection.on('invited', this.onInvited); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| import { onUnmounted, Ref, ref, watch } from 'vue'; | import { onUnmounted, Ref, ref, watch } from 'vue'; | ||||||
| import { $i } from './account'; | import { $i } from './account'; | ||||||
| import { api, stream } from './os'; | import { api } from './os'; | ||||||
|  | import { stream } from './stream'; | ||||||
|  |  | ||||||
| type StateDef = Record<string, { | type StateDef = Record<string, { | ||||||
| 	where: 'account' | 'device' | 'deviceAccount'; | 	where: 'account' | 'device' | 'deviceAccount'; | ||||||
| @@ -70,7 +71,7 @@ export class Storage<T extends StateDef> { | |||||||
| 					} | 					} | ||||||
| 					localStorage.setItem(this.keyForLocalStorage + '::cache::' + $i.id, JSON.stringify(cache)); | 					localStorage.setItem(this.keyForLocalStorage + '::cache::' + $i.id, JSON.stringify(cache)); | ||||||
| 				}); | 				}); | ||||||
|  | 			}, 1); | ||||||
| 			// streamingのuser storage updateイベントを監視して更新 | 			// streamingのuser storage updateイベントを監視して更新 | ||||||
| 			this.connection.on('registryUpdated', ({ scope, key, value }: { scope: string[], key: keyof T, value: T[typeof key]['default'] }) => { | 			this.connection.on('registryUpdated', ({ scope, key, value }: { scope: string[], key: keyof T, value: T[typeof key]['default'] }) => { | ||||||
| 				if (scope[1] !== this.key || this.state[key] === value) return; | 				if (scope[1] !== this.key || this.state[key] === value) return; | ||||||
| @@ -84,7 +85,6 @@ export class Storage<T extends StateDef> { | |||||||
| 					localStorage.setItem(this.keyForLocalStorage + '::cache::' + $i.id, JSON.stringify(cache)); | 					localStorage.setItem(this.keyForLocalStorage + '::cache::' + $i.id, JSON.stringify(cache)); | ||||||
| 				} | 				} | ||||||
| 			}); | 			}); | ||||||
| 			}, 1); |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
| import { defaultStore } from '@/store'; | import { defaultStore } from '@/store'; | ||||||
| import { DriveFile } from 'misskey-js/built/entities'; | import { DriveFile } from 'misskey-js/built/entities'; | ||||||
| @@ -48,7 +49,7 @@ function select(src: any, label: string | null, multiple: boolean): Promise<Driv | |||||||
|  |  | ||||||
| 				const marker = Math.random().toString(); // TODO: UUIDとか使う | 				const marker = Math.random().toString(); // TODO: UUIDとか使う | ||||||
|  |  | ||||||
| 				const connection = os.stream.useChannel('main'); | 				const connection = stream.useChannel('main'); | ||||||
| 				connection.on('urlUploadFinished', data => { | 				connection.on('urlUploadFinished', data => { | ||||||
| 					if (data.marker === marker) { | 					if (data.marker === marker) { | ||||||
| 						res(multiple ? [data.file] : data.file); | 						res(multiple ? [data.file] : data.file); | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								packages/client/src/stream.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								packages/client/src/stream.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | import * as Misskey from 'misskey-js'; | ||||||
|  | import { markRaw } from 'vue'; | ||||||
|  | import { $i } from '@/account'; | ||||||
|  | import { url } from '@/config'; | ||||||
|  |  | ||||||
|  | export const stream = markRaw(new Misskey.Stream(url, $i)); | ||||||
| @@ -11,6 +11,7 @@ | |||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { defineComponent } from 'vue'; | import { defineComponent } from 'vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	data() { | 	data() { | ||||||
| @@ -20,14 +21,14 @@ export default defineComponent({ | |||||||
| 	}, | 	}, | ||||||
| 	computed: { | 	computed: { | ||||||
| 		stream() { | 		stream() { | ||||||
| 			return os.stream; | 			return stream; | ||||||
| 		}, | 		}, | ||||||
| 	}, | 	}, | ||||||
| 	created() { | 	created() { | ||||||
| 		os.stream.on('_disconnected_', this.onDisconnected); | 		stream.on('_disconnected_', this.onDisconnected); | ||||||
| 	}, | 	}, | ||||||
| 	beforeUnmount() { | 	beforeUnmount() { | ||||||
| 		os.stream.off('_disconnected_', this.onDisconnected); | 		stream.off('_disconnected_', this.onDisconnected); | ||||||
| 	}, | 	}, | ||||||
| 	methods: { | 	methods: { | ||||||
| 		onDisconnected() { | 		onDisconnected() { | ||||||
|   | |||||||
| @@ -118,6 +118,7 @@ import copyToClipboard from '@/scripts/copy-to-clipboard'; | |||||||
| import { checkWordMute } from '@/scripts/check-word-mute'; | import { checkWordMute } from '@/scripts/check-word-mute'; | ||||||
| import { userPage } from '@/filters/user'; | import { userPage } from '@/filters/user'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import { noteActions, noteViewInterruptors } from '@/store'; | import { noteActions, noteViewInterruptors } from '@/store'; | ||||||
| import { reactionPicker } from '@/scripts/reaction-picker'; | import { reactionPicker } from '@/scripts/reaction-picker'; | ||||||
| import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm'; | import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm'; | ||||||
| @@ -243,7 +244,7 @@ export default defineComponent({ | |||||||
|  |  | ||||||
| 	async created() { | 	async created() { | ||||||
| 		if (this.$i) { | 		if (this.$i) { | ||||||
| 			this.connection = os.stream; | 			this.connection = stream; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		this.collapsed = this.appearNote.cw == null && this.appearNote.text && ( | 		this.collapsed = this.appearNote.cw == null && this.appearNote.text && ( | ||||||
|   | |||||||
| @@ -26,6 +26,7 @@ import { computed, defineComponent, markRaw } from 'vue'; | |||||||
| import * as Misskey from 'misskey-js'; | import * as Misskey from 'misskey-js'; | ||||||
| import XNotes from '../notes.vue'; | import XNotes from '../notes.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import * as sound from '@/scripts/sound'; | import * as sound from '@/scripts/sound'; | ||||||
| import { scrollToBottom, getScrollPosition, getScrollContainer } from '@/scripts/scroll'; | import { scrollToBottom, getScrollPosition, getScrollContainer } from '@/scripts/scroll'; | ||||||
| import follow from '@/directives/follow-append'; | import follow from '@/directives/follow-append'; | ||||||
| @@ -106,7 +107,7 @@ export default defineComponent({ | |||||||
| 			sound.play(note.userId === this.$i.id ? 'noteMy' : 'note'); | 			sound.play(note.userId === this.$i.id ? 'noteMy' : 'note'); | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		this.connection = markRaw(os.stream.useChannel('channel', { | 		this.connection = markRaw(stream.useChannel('channel', { | ||||||
| 			channelId: this.channelId | 			channelId: this.channelId | ||||||
| 		})); | 		})); | ||||||
| 		this.connection.on('note', prepend); | 		this.connection.on('note', prepend); | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ | |||||||
| import { computed, defineComponent, markRaw } from 'vue'; | import { computed, defineComponent, markRaw } from 'vue'; | ||||||
| import XNotes from '../notes.vue'; | import XNotes from '../notes.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import * as sound from '@/scripts/sound'; | import * as sound from '@/scripts/sound'; | ||||||
| import { scrollToBottom, getScrollPosition, getScrollContainer } from '@/scripts/scroll'; | import { scrollToBottom, getScrollPosition, getScrollContainer } from '@/scripts/scroll'; | ||||||
| import follow from '@/directives/follow-append'; | import follow from '@/directives/follow-append'; | ||||||
| @@ -90,23 +91,23 @@ export default defineComponent({ | |||||||
|  |  | ||||||
| 		if (this.src == 'home') { | 		if (this.src == 'home') { | ||||||
| 			endpoint = 'notes/timeline'; | 			endpoint = 'notes/timeline'; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('homeTimeline')); | 			this.connection = markRaw(stream.useChannel('homeTimeline')); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
|  |  | ||||||
| 			this.connection2 = markRaw(os.stream.useChannel('main')); | 			this.connection2 = markRaw(stream.useChannel('main')); | ||||||
| 			this.connection2.on('follow', onChangeFollowing); | 			this.connection2.on('follow', onChangeFollowing); | ||||||
| 			this.connection2.on('unfollow', onChangeFollowing); | 			this.connection2.on('unfollow', onChangeFollowing); | ||||||
| 		} else if (this.src == 'local') { | 		} else if (this.src == 'local') { | ||||||
| 			endpoint = 'notes/local-timeline'; | 			endpoint = 'notes/local-timeline'; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('localTimeline')); | 			this.connection = markRaw(stream.useChannel('localTimeline')); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
| 		} else if (this.src == 'social') { | 		} else if (this.src == 'social') { | ||||||
| 			endpoint = 'notes/hybrid-timeline'; | 			endpoint = 'notes/hybrid-timeline'; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('hybridTimeline')); | 			this.connection = markRaw(stream.useChannel('hybridTimeline')); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
| 		} else if (this.src == 'global') { | 		} else if (this.src == 'global') { | ||||||
| 			endpoint = 'notes/global-timeline'; | 			endpoint = 'notes/global-timeline'; | ||||||
| 			this.connection = markRaw(os.stream.useChannel('globalTimeline')); | 			this.connection = markRaw(stream.useChannel('globalTimeline')); | ||||||
| 			this.connection.on('note', prepend); | 			this.connection.on('note', prepend); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -59,6 +59,7 @@ import * as Acct from 'misskey-js/built/acct'; | |||||||
| import { formatTimeString } from '@/scripts/format-time-string'; | import { formatTimeString } from '@/scripts/format-time-string'; | ||||||
| import { Autocomplete } from '@/scripts/autocomplete'; | import { Autocomplete } from '@/scripts/autocomplete'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import { selectFiles } from '@/scripts/select-file'; | import { selectFiles } from '@/scripts/select-file'; | ||||||
| import { notePostInterruptors, postFormActions } from '@/store'; | import { notePostInterruptors, postFormActions } from '@/store'; | ||||||
| import { throttle } from 'throttle-debounce'; | import { throttle } from 'throttle-debounce'; | ||||||
| @@ -130,7 +131,7 @@ export default defineComponent({ | |||||||
| 			imeText: '', | 			imeText: '', | ||||||
| 			typing: throttle(3000, () => { | 			typing: throttle(3000, () => { | ||||||
| 				if (this.channel) { | 				if (this.channel) { | ||||||
| 					os.stream.send('typingOnChannel', { channel: this.channel }); | 					stream.send('typingOnChannel', { channel: this.channel }); | ||||||
| 				} | 				} | ||||||
| 			}), | 			}), | ||||||
| 			postFormActions, | 			postFormActions, | ||||||
|   | |||||||
| @@ -49,6 +49,7 @@ | |||||||
| import { defineComponent, markRaw } from 'vue'; | import { defineComponent, markRaw } from 'vue'; | ||||||
| import define from './define'; | import define from './define'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
| import number from '@/filters/number'; | import number from '@/filters/number'; | ||||||
| import * as sound from '@/scripts/sound'; | import * as sound from '@/scripts/sound'; | ||||||
|  |  | ||||||
| @@ -70,7 +71,7 @@ export default defineComponent({ | |||||||
| 	extends: widget, | 	extends: widget, | ||||||
| 	data() { | 	data() { | ||||||
| 		return { | 		return { | ||||||
| 			connection: markRaw(os.stream.useChannel('queueStats')), | 			connection: markRaw(stream.useChannel('queueStats')), | ||||||
| 			inbox: { | 			inbox: { | ||||||
| 				activeSincePrevTick: 0, | 				activeSincePrevTick: 0, | ||||||
| 				active: 0, | 				active: 0, | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ import MkContainer from '@/components/ui/container.vue'; | |||||||
| import define from './define'; | import define from './define'; | ||||||
| import { getStaticImageUrl } from '@/scripts/get-static-image-url'; | import { getStaticImageUrl } from '@/scripts/get-static-image-url'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
|  |  | ||||||
| const widget = define({ | const widget = define({ | ||||||
| 	name: 'photos', | 	name: 'photos', | ||||||
| @@ -48,7 +49,7 @@ export default defineComponent({ | |||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
| 	mounted() { | 	mounted() { | ||||||
| 		this.connection = markRaw(os.stream.useChannel('main')); | 		this.connection = markRaw(stream.useChannel('main')); | ||||||
|  |  | ||||||
| 		this.connection.on('driveFileCreated', this.onDriveFileCreated); | 		this.connection.on('driveFileCreated', this.onDriveFileCreated); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ import XCpu from './cpu.vue'; | |||||||
| import XMemory from './mem.vue'; | import XMemory from './mem.vue'; | ||||||
| import XDisk from './disk.vue'; | import XDisk from './disk.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  | import { stream } from '@/stream'; | ||||||
|  |  | ||||||
| const widget = define({ | const widget = define({ | ||||||
| 	name: 'serverMetric', | 	name: 'serverMetric', | ||||||
| @@ -63,7 +64,7 @@ export default defineComponent({ | |||||||
| 		os.api('server-info', {}).then(res => { | 		os.api('server-info', {}).then(res => { | ||||||
| 			this.meta = res; | 			this.meta = res; | ||||||
| 		}); | 		}); | ||||||
| 		this.connection = markRaw(os.stream.useChannel('serverStats')); | 		this.connection = markRaw(stream.useChannel('serverStats')); | ||||||
| 	}, | 	}, | ||||||
| 	unmounted() { | 	unmounted() { | ||||||
| 		this.connection.dispose(); | 		this.connection.dispose(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 tamaina
					tamaina