feat: メディアタイムラインを輸入 (#103)

* メディアタイムラインの実装

* refactor(stream): ストリーミングにwithFilesオプションを実装

---------

Co-authored-by: tar_bin <tar.bin.master@gmail.com>
This commit is contained in:
まっちゃとーにゅ
2023-07-24 02:48:01 +09:00
committed by GitHub
parent bf06af04c8
commit 6d3f64f606
12 changed files with 47 additions and 1 deletions

View File

@@ -14,6 +14,7 @@ class GlobalTimelineChannel extends Channel {
public static shouldShare = true;
public static requireCredential = false;
private withReplies: boolean;
private withFiles: boolean;
constructor(
private metaService: MetaService,
@@ -33,6 +34,7 @@ class GlobalTimelineChannel extends Channel {
if (!policies.gtlAvailable) return;
this.withReplies = params.withReplies as boolean;
this.withFiles = params.withFiles as boolean;
// Subscribe events
this.subscriber.on('notesStream', this.onNote);
@@ -43,6 +45,9 @@ class GlobalTimelineChannel extends Channel {
if (note.visibility !== 'public') return;
if (note.channelId != null) return;
// ファイルを含まない投稿は除外
if (this.withFiles && (note.files === undefined || note.files.length === 0)) return;
// リプライなら再pack
if (note.replyId != null) {
note.reply = await this.noteEntityService.pack(note.replyId, this.user, {

View File

@@ -12,6 +12,7 @@ class HomeTimelineChannel extends Channel {
public static shouldShare = true;
public static requireCredential = true;
private withReplies: boolean;
private withFiles: boolean;
constructor(
private noteEntityService: NoteEntityService,
@@ -26,6 +27,7 @@ class HomeTimelineChannel extends Channel {
@bindThis
public async init(params: any) {
this.withReplies = params.withReplies as boolean;
this.withFiles = params.withFiles as boolean;
this.subscriber.on('notesStream', this.onNote);
}
@@ -42,6 +44,9 @@ class HomeTimelineChannel extends Channel {
// Ignore notes from instances the user has muted
if (isInstanceMuted(note, new Set<string>(this.userProfile!.mutedInstances ?? []))) return;
// ファイルを含まない投稿は除外
if (this.withFiles && (note.files === undefined || note.files.length === 0)) return;
if (['followers', 'specified'].includes(note.visibility)) {
note = await this.noteEntityService.pack(note.id, this.user!, {
detail: true,

View File

@@ -14,6 +14,7 @@ class HybridTimelineChannel extends Channel {
public static shouldShare = true;
public static requireCredential = true;
private withReplies: boolean;
private withFiles: boolean;
constructor(
private metaService: MetaService,
@@ -33,6 +34,7 @@ class HybridTimelineChannel extends Channel {
if (!policies.ltlAvailable) return;
this.withReplies = params.withReplies as boolean;
this.withFiles = params.withFiles as boolean;
// Subscribe events
this.subscriber.on('notesStream', this.onNote);
@@ -51,6 +53,9 @@ class HybridTimelineChannel extends Channel {
(note.channelId != null && this.followingChannels.has(note.channelId))
)) return;
// ファイルを含まない投稿は除外
if (this.withFiles && (note.files === undefined || note.files.length === 0)) return;
if (['followers', 'specified'].includes(note.visibility)) {
note = await this.noteEntityService.pack(note.id, this.user!, {
detail: true,

View File

@@ -13,6 +13,7 @@ class LocalTimelineChannel extends Channel {
public static shouldShare = true;
public static requireCredential = false;
private withReplies: boolean;
private withFiles: boolean;
constructor(
private metaService: MetaService,
@@ -32,6 +33,7 @@ class LocalTimelineChannel extends Channel {
if (!policies.ltlAvailable) return;
this.withReplies = params.withReplies as boolean;
this.withFiles = params.withFiles as boolean;
// Subscribe events
this.subscriber.on('notesStream', this.onNote);
@@ -43,6 +45,9 @@ class LocalTimelineChannel extends Channel {
if (note.visibility !== 'public') return;
if (note.channelId != null && !this.followingChannels.has(note.channelId)) return;
// ファイルを含まない投稿は除外
if (this.withFiles && (note.files === undefined || note.files.length === 0)) return;
// リプライなら再pack
if (note.replyId != null) {
note.reply = await this.noteEntityService.pack(note.replyId, this.user, {