addNoRetweetUserIds(ids: number[]) { const predicate = (i: Item) => { if (i instanceof Tweet) { return !i.isRetweet() || ids.indexOf(i.retweeted_status.user.id) === -1; } else { return true; } }; const next_home = this.home.filter(predicate).toList(); const next_mention = this.mention.filter(predicate).toList(); const next_no_retweet_ids = this.no_retweet_ids.merge(ids); // XXX: // Next focus index calculation is too complicated. I skipped it. return new TimelineState( this.kind, next_home, next_mention, this.user, this.notified, this.rejected_ids, next_no_retweet_ids, this.focus_index ); }
addRejectedIds(ids: number[]) { const will_added = ids.filter(id => !this.rejected_ids.contains(id)); if (will_added.length === 0) { return this; } const predicate = (i: Item) => { if (i instanceof Tweet) { const id = i.getMainStatus().user.id; return will_added.indexOf(id) === -1; } return true; }; const next_home = this.home.filter(predicate).toList(); const next_mention = this.mention.filter(predicate).toList(); const home_updated = next_home.size !== this.home.size; const mention_updated = next_mention.size !== this.mention.size; const next_rejected_ids = this.rejected_ids.merge(will_added); // XXX: // Next focus index calculation is too complicated. I skipped it. return new TimelineState( this.kind, home_updated ? next_home : this.home, mention_updated ? next_mention : this.mention, this.user, this.notified, next_rejected_ids, this.no_retweet_ids, this.focus_index ); }