diff --git a/src/client/components/timeline.vue b/src/client/components/timeline.vue index f5edb1855..15d0dab99 100644 --- a/src/client/components/timeline.vue +++ b/src/client/components/timeline.vue @@ -27,6 +27,7 @@ export default Vue.extend({ data() { return { connection: null, + connection2: null, pagination: null, baseQuery: { includeMyRenotes: this.$store.state.settings.showMyRenotes, @@ -40,6 +41,7 @@ export default Vue.extend({ created() { this.$once('hook:beforeDestroy', () => { this.connection.dispose(); + if (this.connection2) this.connection2.dispose(); }); const prepend = note => { @@ -54,6 +56,12 @@ export default Vue.extend({ (this.$refs.tl as any).reload(); }; + const onChangeFollowing = () => { + if (!this.$refs.tl.backed) { + this.$refs.tl.reload(); + } + }; + let endpoint; if (this.src == 'antenna') { @@ -67,13 +75,12 @@ export default Vue.extend({ this.connection.on('note', prepend); } else if (this.src == 'home') { endpoint = 'notes/timeline'; - const onChangeFollowing = () => { - this.fetch(); - }; this.connection = this.$root.stream.useSharedConnection('homeTimeline'); this.connection.on('note', prepend); - this.connection.on('follow', onChangeFollowing); - this.connection.on('unfollow', onChangeFollowing); + + this.connection2 = this.$root.stream.useSharedConnection('main'); + this.connection2.on('follow', onChangeFollowing); + this.connection2.on('unfollow', onChangeFollowing); } else if (this.src == 'local') { endpoint = 'notes/local-timeline'; this.connection = this.$root.stream.useSharedConnection('localTimeline'); diff --git a/src/client/scripts/paging.ts b/src/client/scripts/paging.ts index b24d705f1..172558805 100644 --- a/src/client/scripts/paging.ts +++ b/src/client/scripts/paging.ts @@ -8,7 +8,8 @@ export default (opts) => ({ fetching: true, moreFetching: false, inited: false, - more: false + more: false, + backed: false, }; }, @@ -78,6 +79,7 @@ export default (opts) => ({ async fetchMore() { if (!this.more || this.moreFetching || this.items.length === 0) return; this.moreFetching = true; + this.backed = true; let params = typeof this.pagination.params === 'function' ? this.pagination.params(false) : this.pagination.params; if (params && params.then) params = await params; const endpoint = typeof this.pagination.endpoint === 'function' ? this.pagination.endpoint() : this.pagination.endpoint;