wip
This commit is contained in:
		
							parent
							
								
									c7f80182c2
								
							
						
					
					
						commit
						4c9b4cb80d
					
				
					 4 changed files with 53 additions and 35 deletions
				
			
		
							
								
								
									
										17
									
								
								src/client/app/common/scripts/streaming/user-list.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/client/app/common/scripts/streaming/user-list.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
import Stream from './stream';
 | 
			
		||||
import MiOS from '../../mios';
 | 
			
		||||
 | 
			
		||||
export class UserListStream extends Stream {
 | 
			
		||||
	constructor(os: MiOS, me, listId) {
 | 
			
		||||
		super(os, 'user-list', {
 | 
			
		||||
			i: me.token,
 | 
			
		||||
			listId
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		(this as any).on('_connected_', () => {
 | 
			
		||||
			this.send({
 | 
			
		||||
				i: me.token
 | 
			
		||||
			});
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4,6 +4,7 @@
 | 
			
		|||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
import Vue from 'vue';
 | 
			
		||||
import { UserListStream } from '../../../common/scripts/streaming/user-list';
 | 
			
		||||
 | 
			
		||||
const fetchLimit = 10;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -21,21 +22,19 @@ export default Vue.extend({
 | 
			
		|||
		$route: 'fetch'
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
		this.fetch();
 | 
			
		||||
	},
 | 
			
		||||
	beforeDestroy() {
 | 
			
		||||
		this.connection.close();
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		fetch() {
 | 
			
		||||
			if (this.connection) this.connection.close();
 | 
			
		||||
			this.connection = new UserListStream((this as any).os, (this as any).os.i, this.list.id);
 | 
			
		||||
			this.connection.on('note', this.onNote);
 | 
			
		||||
			this.connection.on('userAdded', this.onUserAdded);
 | 
			
		||||
			this.connection.on('userRemoved', this.onUserRemoved);
 | 
			
		||||
 | 
			
		||||
		this.fetch();
 | 
			
		||||
	},
 | 
			
		||||
	beforeDestroy() {
 | 
			
		||||
		this.connection.off('note', this.onNote);
 | 
			
		||||
		this.connection.off('userAdded', this.onUserAdded);
 | 
			
		||||
		this.connection.off('userRemoved', this.onUserRemoved);
 | 
			
		||||
		this.connection.close();
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		fetch() {
 | 
			
		||||
			this.fetching = true;
 | 
			
		||||
 | 
			
		||||
			(this as any).api('notes/list-timeline', {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,8 @@
 | 
			
		|||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
import Vue from 'vue';
 | 
			
		||||
import { url } from '../../../config';
 | 
			
		||||
 | 
			
		||||
import XNote from './notes.note.vue';
 | 
			
		||||
 | 
			
		||||
const displayLimit = 30;
 | 
			
		||||
| 
						 | 
				
			
			@ -83,10 +85,35 @@ export default Vue.extend({
 | 
			
		|||
			this.notes = notes;
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		prepend(note) {
 | 
			
		||||
		prepend(note, silent = false) {
 | 
			
		||||
			//#region 弾く
 | 
			
		||||
			const isMyNote = note.userId == (this as any).os.i.id;
 | 
			
		||||
			const isPureRenote = note.renoteId != null && note.text == null && note.mediaIds.length == 0 && note.poll == null;
 | 
			
		||||
 | 
			
		||||
			if ((this as any).os.i.clientSettings.showMyRenotes === false) {
 | 
			
		||||
				if (isMyNote && isPureRenote) {
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if ((this as any).os.i.clientSettings.showRenotedMyNotes === false) {
 | 
			
		||||
				if (isPureRenote && (note.renote.userId == (this as any).os.i.id)) {
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//#endregion
 | 
			
		||||
 | 
			
		||||
			if (this.isScrollTop()) {
 | 
			
		||||
				// Prepend the note
 | 
			
		||||
				this.notes.unshift(note);
 | 
			
		||||
 | 
			
		||||
				// サウンドを再生する
 | 
			
		||||
				if ((this as any).os.isEnableSounds && !silent) {
 | 
			
		||||
					const sound = new Audio(`${url}/assets/post.mp3`);
 | 
			
		||||
					sound.volume = localStorage.getItem('soundVolume') ? parseInt(localStorage.getItem('soundVolume'), 10) / 100 : 0.5;
 | 
			
		||||
					sound.play();
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// オーバーフローしたら古い投稿は捨てる
 | 
			
		||||
				if (this.notes.length >= displayLimit) {
 | 
			
		||||
					this.notes = this.notes.slice(0, displayLimit);
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +132,7 @@ export default Vue.extend({
 | 
			
		|||
		},
 | 
			
		||||
 | 
			
		||||
		releaseQueue() {
 | 
			
		||||
			this.queue.forEach(n => this.prepend(n));
 | 
			
		||||
			this.queue.forEach(n => this.prepend(n, true));
 | 
			
		||||
			this.queue = [];
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,6 @@
 | 
			
		|||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
import Vue from 'vue';
 | 
			
		||||
import { url } from '../../../config';
 | 
			
		||||
 | 
			
		||||
const fetchLimit = 10;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -136,30 +135,6 @@ export default Vue.extend({
 | 
			
		|||
		},
 | 
			
		||||
 | 
			
		||||
		onNote(note) {
 | 
			
		||||
			//#region 弾く
 | 
			
		||||
			const isMyNote = note.userId == (this as any).os.i.id;
 | 
			
		||||
			const isPureRenote = note.renoteId != null && note.text == null && note.mediaIds.length == 0 && note.poll == null;
 | 
			
		||||
 | 
			
		||||
			if ((this as any).os.i.clientSettings.showMyRenotes === false) {
 | 
			
		||||
				if (isMyNote && isPureRenote) {
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if ((this as any).os.i.clientSettings.showRenotedMyNotes === false) {
 | 
			
		||||
				if (isPureRenote && (note.renote.userId == (this as any).os.i.id)) {
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//#endregion
 | 
			
		||||
 | 
			
		||||
			// サウンドを再生する
 | 
			
		||||
			if ((this as any).os.isEnableSounds) {
 | 
			
		||||
				const sound = new Audio(`${url}/assets/post.mp3`);
 | 
			
		||||
				sound.volume = localStorage.getItem('soundVolume') ? parseInt(localStorage.getItem('soundVolume'), 10) / 100 : 0.5;
 | 
			
		||||
				sound.play();
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Prepend a note
 | 
			
		||||
			(this.$refs.timeline as any).prepend(note);
 | 
			
		||||
		},
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue