wip
This commit is contained in:
parent
c7f80182c2
commit
4c9b4cb80d
|
@ -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">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import { UserListStream } from '../../../common/scripts/streaming/user-list';
|
||||||
|
|
||||||
const fetchLimit = 10;
|
const fetchLimit = 10;
|
||||||
|
|
||||||
|
@ -21,21 +22,19 @@ export default Vue.extend({
|
||||||
$route: 'fetch'
|
$route: 'fetch'
|
||||||
},
|
},
|
||||||
mounted() {
|
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();
|
this.fetch();
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
this.connection.off('note', this.onNote);
|
|
||||||
this.connection.off('userAdded', this.onUserAdded);
|
|
||||||
this.connection.off('userRemoved', this.onUserRemoved);
|
|
||||||
this.connection.close();
|
this.connection.close();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
fetch() {
|
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.fetching = true;
|
||||||
|
|
||||||
(this as any).api('notes/list-timeline', {
|
(this as any).api('notes/list-timeline', {
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import { url } from '../../../config';
|
||||||
|
|
||||||
import XNote from './notes.note.vue';
|
import XNote from './notes.note.vue';
|
||||||
|
|
||||||
const displayLimit = 30;
|
const displayLimit = 30;
|
||||||
|
@ -83,10 +85,35 @@ export default Vue.extend({
|
||||||
this.notes = notes;
|
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()) {
|
if (this.isScrollTop()) {
|
||||||
|
// Prepend the note
|
||||||
this.notes.unshift(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) {
|
if (this.notes.length >= displayLimit) {
|
||||||
this.notes = this.notes.slice(0, displayLimit);
|
this.notes = this.notes.slice(0, displayLimit);
|
||||||
|
@ -105,7 +132,7 @@ export default Vue.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
releaseQueue() {
|
releaseQueue() {
|
||||||
this.queue.forEach(n => this.prepend(n));
|
this.queue.forEach(n => this.prepend(n, true));
|
||||||
this.queue = [];
|
this.queue = [];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { url } from '../../../config';
|
|
||||||
|
|
||||||
const fetchLimit = 10;
|
const fetchLimit = 10;
|
||||||
|
|
||||||
|
@ -136,30 +135,6 @@ export default Vue.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
onNote(note) {
|
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
|
// Prepend a note
|
||||||
(this.$refs.timeline as any).prepend(note);
|
(this.$refs.timeline as any).prepend(note);
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue