This commit is contained in:
syuilo 2018-04-25 13:48:02 +09:00
parent c7f80182c2
commit 4c9b4cb80d
4 changed files with 53 additions and 35 deletions
src/client/app
common/scripts/streaming
desktop/views/components

View 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
});
});
}
}

View file

@ -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.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() {
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.fetching = true;
(this as any).api('notes/list-timeline', {

View file

@ -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 = [];
},

View file

@ -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);
},