@@ -48,7 +48,7 @@ function fromPost(response) {
48
48
return docs ;
49
49
}
50
50
51
- function fromUser ( queryIdx , response , params ) {
51
+ function fromUser ( query , queryIdx , response , params ) {
52
52
let docs = [ ] ;
53
53
let feed = response . feed ;
54
54
if ( Array . isArray ( feed ) ) {
@@ -57,12 +57,10 @@ function fromUser(queryIdx, response, params) {
57
57
for ( let itemIdx = 0 ; itemIdx < feed . length ; itemIdx ++ ) {
58
58
let feedItem = feed [ itemIdx ] ;
59
59
if ( feedItem . post !== undefined && feedItem . post . record !== undefined ) {
60
- // TODO allow replies
61
- if ( feedItem . reply !== undefined ) {
60
+ if ( feedItem . reply !== undefined && query . includeReplies !== true ) {
62
61
continue ;
63
62
}
64
- // TODO allow reposts
65
- if ( feedItem . reason !== undefined ) {
63
+ if ( feedItem . reason !== undefined && query . includeReposts !== true ) {
66
64
continue ;
67
65
}
68
66
filteredFeed . push ( feedItem ) ;
@@ -74,10 +72,21 @@ function fromUser(queryIdx, response, params) {
74
72
let nextCursor = response . cursor ;
75
73
for ( let itemIdx = 0 ; itemIdx < feed . length ; itemIdx ++ ) {
76
74
let feedItem = feed [ itemIdx ] ;
75
+ let postReason = null ;
77
76
if ( feedItem . post !== undefined && feedItem . post . record !== undefined ) {
78
- let timestampStr = feedItem . post . record . createdAt ;
79
- let timestamp = new Date ( timestampStr ) . valueOf ( ) * 1000000 ;
80
77
let atURL = feedItem . post . uri ;
78
+ let timestamp = null ;
79
+ if ( feedItem . reason !== undefined ) {
80
+ let timestampStr = feedItem . reason . indexedAt ;
81
+ timestamp = new Date ( timestampStr ) . valueOf ( ) * 1000000 ;
82
+ postReason = {
83
+ $type : "app.bsky.feed.defs#skeletonReasonRepost" ,
84
+ // TODO: add repost URI field
85
+ } ;
86
+ } else {
87
+ let timestampStr = feedItem . post . record . createdAt ;
88
+ timestamp = new Date ( timestampStr ) . valueOf ( ) * 1000000 ;
89
+ }
81
90
82
91
docs . push ( {
83
92
type : "user" ,
@@ -88,6 +97,7 @@ function fromUser(queryIdx, response, params) {
88
97
total : feed . length ,
89
98
cursor : cursor ,
90
99
nextCursor : nextCursor ,
100
+ postReason : postReason ,
91
101
} ) ;
92
102
}
93
103
}
@@ -285,7 +295,7 @@ export async function getFeedSkeleton(request, env) {
285
295
let cursor = objSafeGet ( queryCursor , "cursor" , null ) ;
286
296
let response = await fetchUser ( session , query . value , cursor ) ;
287
297
if ( response !== null ) {
288
- items . push ( ...fromUser ( queryIdx , response , { cursor : cursor } ) ) ;
298
+ items . push ( ...fromUser ( query , queryIdx , response , { cursor : cursor } ) ) ;
289
299
}
290
300
} else if ( query . type === "post" ) {
291
301
if ( showPins ) {
@@ -307,7 +317,12 @@ export async function getFeedSkeleton(request, env) {
307
317
308
318
let feed = [ ] ;
309
319
for ( let item of items ) {
310
- feed . push ( { post : item . atURL } ) ;
320
+ let postReason = item . postReason ;
321
+ let feedItem = { post : item . atURL } ;
322
+ if ( postReason !== null ) {
323
+ // TODO add feedItem["reason"]
324
+ }
325
+ feed . push ( feedItem ) ;
311
326
}
312
327
313
328
let cursor = saveCursor ( items , numQueries ) ;
@@ -361,11 +376,25 @@ function buildQueries(allTerms, cursorParam = null) {
361
376
value : term ,
362
377
} ) ;
363
378
} else {
364
- let userDid = term . replace ( "at://" , "" ) ;
379
+ let userDid = null ;
380
+ let includeReplies = false ;
381
+ let includeReposts = false ;
382
+ let words = term . split ( " " ) ;
383
+ for ( let word of words ) {
384
+ if ( word . indexOf ( "at://" ) > - 1 ) {
385
+ userDid = word . replace ( "at://" , "" ) ;
386
+ } else if ( word === "+replies" ) {
387
+ includeReplies = true ;
388
+ } else if ( word === "+reposts" ) {
389
+ includeReposts = true ;
390
+ }
391
+ }
365
392
queries . push ( {
366
393
type : "user" ,
367
394
value : userDid ,
368
395
cursor : cursor ,
396
+ includeReplies : includeReplies ,
397
+ includeReposts : includeReposts ,
369
398
} ) ;
370
399
}
371
400
} else {
0 commit comments