@@ -102,57 +102,83 @@ export class NoteEntityService implements OnModuleInit {
102
102
}
103
103
104
104
@bindThis
105
- private async hideNote ( packedNote : Packed < 'Note' > , meId : MiUser [ 'id' ] | null ) {
105
+ private async hideNote ( packedNote : Packed < 'Note' > , meId : MiUser [ 'id' ] | null ) : Promise < void > {
106
+ // FIXME: このvisibility変更処理が当関数にあるのは若干不自然かもしれない(関数名を treatVisibility とかに変える手もある)
107
+ if ( packedNote . visibility === 'public' || packedNote . visibility === 'home' ) {
108
+ const followersOnlyBefore = packedNote . user . makeNotesFollowersOnlyBefore ;
109
+ if ( ( followersOnlyBefore != null )
110
+ && (
111
+ ( followersOnlyBefore <= 0 && ( Date . now ( ) - new Date ( packedNote . createdAt ) . getTime ( ) > 0 - ( followersOnlyBefore * 1000 ) ) )
112
+ || ( followersOnlyBefore > 0 && ( new Date ( packedNote . createdAt ) . getTime ( ) < followersOnlyBefore * 1000 ) )
113
+ )
114
+ ) {
115
+ packedNote . visibility = 'followers' ;
116
+ }
117
+ }
118
+
119
+ if ( meId === packedNote . userId ) return ;
120
+
106
121
// TODO: isVisibleForMe を使うようにしても良さそう(型違うけど)
107
122
let hide = false ;
108
123
109
- // visibility が specified かつ自分が指定されていなかったら非表示
110
- if ( packedNote . visibility === 'specified' ) {
111
- if ( meId == null ) {
124
+ if ( packedNote . user . requireSigninToViewContents && meId == null ) {
125
+ hide = true ;
126
+ }
127
+
128
+ if ( ! hide ) {
129
+ const hiddenBefore = packedNote . user . makeNotesHiddenBefore ;
130
+ if ( ( hiddenBefore != null )
131
+ && (
132
+ ( hiddenBefore <= 0 && ( Date . now ( ) - new Date ( packedNote . createdAt ) . getTime ( ) > 0 - ( hiddenBefore * 1000 ) ) )
133
+ || ( hiddenBefore > 0 && ( new Date ( packedNote . createdAt ) . getTime ( ) < hiddenBefore * 1000 ) )
134
+ )
135
+ ) {
112
136
hide = true ;
113
- } else if ( meId === packedNote . userId ) {
114
- hide = false ;
115
- } else {
116
- // 指定されているかどうか
117
- const specified = packedNote . visibleUserIds ! . some ( id => meId === id ) ;
137
+ }
138
+ }
118
139
119
- if ( specified ) {
120
- hide = false ;
121
- } else {
140
+ // visibility が specified かつ自分が指定されていなかったら非表示
141
+ if ( ! hide ) {
142
+ if ( packedNote . visibility === 'specified' ) {
143
+ if ( meId == null ) {
122
144
hide = true ;
145
+ } else {
146
+ // 指定されているかどうか
147
+ const specified = packedNote . visibleUserIds ! . some ( id => meId === id ) ;
148
+
149
+ if ( ! specified ) {
150
+ hide = true ;
151
+ }
123
152
}
124
153
}
125
154
}
126
155
127
156
// visibility が followers かつ自分が投稿者のフォロワーでなかったら非表示
128
- if ( packedNote . visibility === 'followers' ) {
129
- if ( meId == null ) {
130
- hide = true ;
131
- } else if ( meId === packedNote . userId ) {
132
- hide = false ;
133
- } else if ( packedNote . reply && ( meId === packedNote . reply . userId ) ) {
134
- // 自分の投稿に対するリプライ
135
- hide = false ;
136
- } else if ( packedNote . mentions && packedNote . mentions . some ( id => meId === id ) ) {
137
- // 自分へのメンション
138
- hide = false ;
139
- } else {
140
- // フォロワーかどうか
141
- const isFollowing = await this . followingsRepository . exists ( {
142
- where : {
143
- followeeId : packedNote . userId ,
144
- followerId : meId ,
145
- } ,
146
- } ) ;
157
+ if ( ! hide ) {
158
+ if ( packedNote . visibility === 'followers' ) {
159
+ if ( meId == null ) {
160
+ hide = true ;
161
+ } else if ( packedNote . reply && ( meId === packedNote . reply . userId ) ) {
162
+ // 自分の投稿に対するリプライ
163
+ hide = false ;
164
+ } else if ( packedNote . mentions && packedNote . mentions . some ( id => meId === id ) ) {
165
+ // 自分へのメンション
166
+ hide = false ;
167
+ } else {
168
+ // フォロワーかどうか
169
+ // TODO: 当関数呼び出しごとにクエリが走るのは重そうだからなんとかする
170
+ const isFollowing = await this . followingsRepository . exists ( {
171
+ where : {
172
+ followeeId : packedNote . userId ,
173
+ followerId : meId ,
174
+ } ,
175
+ } ) ;
147
176
148
- hide = ! isFollowing ;
177
+ hide = ! isFollowing ;
178
+ }
149
179
}
150
180
}
151
181
152
- if ( packedNote . user . requireSigninToViewContents && meId == null ) {
153
- hide = true ;
154
- }
155
-
156
182
if ( hide ) {
157
183
packedNote . visibleUserIds = undefined ;
158
184
packedNote . fileIds = [ ] ;
@@ -161,6 +187,7 @@ export class NoteEntityService implements OnModuleInit {
161
187
packedNote . poll = undefined ;
162
188
packedNote . cw = null ;
163
189
packedNote . isHidden = true ;
190
+ // TODO: hiddenReason みたいなのを提供しても良さそう
164
191
}
165
192
}
166
193
0 commit comments