bluesky appview implementation using microcosm and other services server.reddwarf.app
appview bluesky reddwarf microcosm

PostView_Embed is now more modular

Changed files
+417 -56
shims
lex
app
bsky
feed
+2 -2
main.go
··· 408 408 go func(i int, raw string) { 409 409 defer wg.Done() 410 410 411 - post, _, _ := appbskyfeeddefs.PostView(ctx, raw, sl, cs, BSKYIMAGECDN_URL, viewer) 411 + post, _, _ := appbskyfeeddefs.PostView(ctx, raw, sl, cs, BSKYIMAGECDN_URL, viewer, false) 412 412 413 413 results[i].view = post 414 414 }(i, raw) ··· 537 537 skeletonposts, 538 538 20, 539 539 func(ctx context.Context, raw *appbsky.FeedDefs_SkeletonFeedPost) (*appbsky.FeedDefs_FeedViewPost, error) { 540 - post, _, err := appbskyfeeddefs.PostView(ctx, raw.Post, sl, cs, BSKYIMAGECDN_URL, viewer) 540 + post, _, err := appbskyfeeddefs.PostView(ctx, raw.Post, sl, cs, BSKYIMAGECDN_URL, viewer, false) 541 541 if err != nil { 542 542 return nil, err 543 543 }
+403 -52
shims/lex/app/bsky/feed/defs/embed.go
··· 2 2 3 3 import ( 4 4 "context" 5 + "log" 5 6 7 + "github.com/bluesky-social/indigo/api/atproto" 6 8 appbsky "github.com/bluesky-social/indigo/api/bsky" 7 9 "github.com/bluesky-social/indigo/atproto/syntax" 8 10 "tangled.org/whey.party/red-dwarf-server/microcosm" 11 + appbskyactordefs "tangled.org/whey.party/red-dwarf-server/shims/lex/app/bsky/actor/defs" 9 12 "tangled.org/whey.party/red-dwarf-server/shims/utils" 10 13 ) 14 + 15 + func notFoundRecordEmbed(uri string) *appbsky.EmbedRecord_View_Record { 16 + return &appbsky.EmbedRecord_View_Record{ 17 + EmbedRecord_ViewNotFound: &appbsky.EmbedRecord_ViewNotFound{ 18 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.record#viewNotFound"` 19 + LexiconTypeID: "app.bsky.embed.record#viewNotFound", 20 + // NotFound bool `json:"notFound" cborgen:"notFound"` 21 + NotFound: true, 22 + // Uri string `json:"uri" cborgen:"uri"` 23 + Uri: uri, 24 + }} 25 + } 11 26 12 27 func PostView_Embed(ctx context.Context, postaturi string, feedPost *appbsky.FeedPost, sl *microcosm.MicrocosmClient, cs *microcosm.MicrocosmClient, imgcdn string, viewer *utils.DID) (*appbsky.FeedDefs_PostView_Embed, error) { 13 28 if feedPost.Embed == nil { ··· 21 36 22 37 // determine type 23 38 if feedPost.Embed.EmbedImages != nil { 24 - //embedType = "EmbedImages" 25 - 26 - // thumb: `https://${cdn}/img/feed_thumbnail/plain/${did}/${link}@jpeg`, 27 - // fullsize: `https://${cdn}/img/feed_fullsize/plain/${did}/${link}@jpeg`, 28 - var images []*appbsky.EmbedImages_ViewImage 29 - for _, rawimg := range feedPost.Embed.EmbedImages.Images { 30 - 31 - var feed_thumbnail string 32 - var feed_fullsize string 33 - if rawimg.Image != nil { 34 - u := utils.MakeImageCDN(utils.DID(aturi.Authority().String()), imgcdn, "feed_thumbnail", rawimg.Image.Ref.String()) 35 - feed_thumbnail = u 36 - uf := utils.MakeImageCDN(utils.DID(aturi.Authority().String()), imgcdn, "feed_fullsize", rawimg.Image.Ref.String()) 37 - feed_fullsize = uf 38 - } 39 - img := appbsky.EmbedImages_ViewImage{ 40 - // // alt: Alt text description of the image, for accessibility. 41 - // Alt string `json:"alt" cborgen:"alt"` 42 - Alt: rawimg.Alt, 43 - // AspectRatio *EmbedDefs_AspectRatio `json:"aspectRatio,omitempty" cborgen:"aspectRatio,omitempty"` 44 - AspectRatio: rawimg.AspectRatio, 45 - // // fullsize: Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View. 46 - // Fullsize string `json:"fullsize" cborgen:"fullsize"` 47 - Fullsize: feed_fullsize, 48 - // // thumb: Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. 49 - // Thumb string `json:"thumb" cborgen:"thumb"` 50 - Thumb: feed_thumbnail, 51 - } 52 - images = append(images, &img) 53 - } 54 - return &appbsky.FeedDefs_PostView_Embed{ 55 - // EmbedImages_View *EmbedImages_View 56 - EmbedImages_View: &appbsky.EmbedImages_View{ 57 - LexiconTypeID: "app.bsky.embed.images#view", 58 - Images: images, 59 - }, 60 - // EmbedVideo_View *EmbedVideo_View 61 - // EmbedExternal_View *EmbedExternal_View 62 - // EmbedRecord_View *EmbedRecord_View 63 - // EmbedRecordWithMedia_View *EmbedRecordWithMedia_View 64 - }, nil 39 + embedImage := EmbedImagesViewExtractor(ctx, aturi, feedPost.Embed.EmbedImages, sl, cs, imgcdn, viewer) 40 + return embedImage, nil 65 41 } 66 42 if feedPost.Embed.EmbedVideo != nil { 67 43 return nil, nil ··· 69 45 return &appbsky.FeedDefs_PostView_Embed{ 70 46 // EmbedImages_View *EmbedImages_View 71 47 // EmbedVideo_View *EmbedVideo_View 48 + EmbedVideo_View: &appbsky.EmbedVideo_View{ 49 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.video#view"` 50 + // Alt *string `json:"alt,omitempty" cborgen:"alt,omitempty"` 51 + // AspectRatio *EmbedDefs_AspectRatio `json:"aspectRatio,omitempty" cborgen:"aspectRatio,omitempty"` 52 + // Cid string `json:"cid" cborgen:"cid"` 53 + // Playlist string `json:"playlist" cborgen:"playlist"` 54 + // Thumbnail *string `json:"thumbnail,omitempty" cborgen:"thumbnail,omitempty"` 55 + }, 72 56 // EmbedExternal_View *EmbedExternal_View 73 57 // EmbedRecord_View *EmbedRecord_View 74 58 // EmbedRecordWithMedia_View *EmbedRecordWithMedia_View 75 59 }, nil 76 60 } 77 61 if feedPost.Embed.EmbedExternal != nil { 78 - return nil, nil 79 - //embedType = "EmbedExternal" 80 - return &appbsky.FeedDefs_PostView_Embed{ 81 - // EmbedImages_View *EmbedImages_View 82 - // EmbedVideo_View *EmbedVideo_View 83 - // EmbedExternal_View *EmbedExternal_View 84 - // EmbedRecord_View *EmbedRecord_View 85 - // EmbedRecordWithMedia_View *EmbedRecordWithMedia_View 86 - }, nil 62 + embedExternal := EmbedExternalViewExtractor(ctx, aturi, feedPost.Embed.EmbedExternal, sl, cs, imgcdn, viewer) 63 + return embedExternal, nil 87 64 } 88 65 if feedPost.Embed.EmbedRecord != nil { 89 - return nil, nil 66 + //return nil, nil 67 + // sigh this is a big one 90 68 //embedType = "EmbedRecord" 69 + 70 + /* 71 + const author: $Typed<AppBskyActorDefs.ProfileViewBasic> = asTyped({ 72 + $type: "app.bsky.actor.defs#profileViewBasic" as const, 73 + did: quotedIdentity.did, 74 + handle: quotedIdentity.handle, 75 + displayName: quotedProfile.value.displayName ?? quotedIdentity.handle, 76 + avatar: quotedProfile.value.avatar?.ref?.$link 77 + ? `https://${cdn}/img/avatar/plain/${quotedIdentity.did}/${quotedProfile.value.avatar.ref.$link}@jpeg` 78 + : undefined, 79 + viewer: {}, 80 + labels: [], 81 + }); 82 + 83 + const viewRecord: $Typed<AppBskyEmbedRecord.ViewRecord> = asTyped({ 84 + $type: "app.bsky.embed.record#viewRecord" as const, 85 + uri: quotedPost.uri, 86 + cid: quotedPost.cid, 87 + author, 88 + value: quotedPost.value, 89 + indexedAt: quotedPost.value.createdAt, 90 + embeds: quotedPost.value.embed ? [quotedPost.value.embed] : undefined, 91 + }); 92 + */ 93 + 94 + var record *appbsky.EmbedRecord_View_Record = EmbedRecordViewExtractor(ctx, feedPost.Embed.EmbedRecord.Record, sl, cs, imgcdn, viewer) 95 + if record == nil { 96 + return nil, nil 97 + } 98 + 91 99 return &appbsky.FeedDefs_PostView_Embed{ 92 100 // EmbedImages_View *EmbedImages_View 93 101 // EmbedVideo_View *EmbedVideo_View 94 102 // EmbedExternal_View *EmbedExternal_View 95 103 // EmbedRecord_View *EmbedRecord_View 104 + EmbedRecord_View: &appbsky.EmbedRecord_View{ 105 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.record#view"` 106 + LexiconTypeID: "app.bsky.embed.record#view", 107 + // Record *EmbedRecord_View_Record `json:"record" cborgen:"record"` 108 + Record: record, 109 + // Record: &appbsky.EmbedRecord_View_Record{ 110 + // // EmbedRecord_ViewRecord *EmbedRecord_ViewRecord 111 + // // EmbedRecord_ViewNotFound *EmbedRecord_ViewNotFound 112 + // // EmbedRecord_ViewBlocked *EmbedRecord_ViewBlocked 113 + // // EmbedRecord_ViewDetached *EmbedRecord_ViewDetached 114 + // // FeedDefs_GeneratorView *FeedDefs_GeneratorView 115 + // // GraphDefs_ListView *GraphDefs_ListView 116 + // // LabelerDefs_LabelerView *LabelerDefs_LabelerView 117 + // // GraphDefs_StarterPackViewBasic *GraphDefs_StarterPackViewBasic 118 + // }, 119 + }, 96 120 // EmbedRecordWithMedia_View *EmbedRecordWithMedia_View 97 121 }, nil 98 122 } 99 123 if feedPost.Embed.EmbedRecordWithMedia != nil { 100 - return nil, nil 124 + //return nil, nil 101 125 //embedType = "EmbedRecordWithMedia" 126 + 127 + var record *appbsky.EmbedRecord_View_Record = EmbedRecordViewExtractor(ctx, feedPost.Embed.EmbedRecordWithMedia.Record.Record, sl, cs, imgcdn, viewer) 128 + if record == nil { 129 + return nil, nil 130 + } 131 + var embedrecordview *appbsky.EmbedRecord_View 132 + if record.EmbedRecord_ViewRecord != nil { 133 + embedrecordview = &appbsky.EmbedRecord_View{ 134 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.record#view"` 135 + LexiconTypeID: "app.bsky.embed.record#view", 136 + // Record *EmbedRecord_View_Record `json:"record" cborgen:"record"` 137 + Record: record, 138 + } 139 + } 140 + 141 + var embedmediaview *appbsky.EmbedRecordWithMedia_View_Media 142 + 143 + if feedPost.Embed.EmbedRecordWithMedia.Media.EmbedImages != nil { 144 + embedImage := EmbedImagesViewExtractor(ctx, aturi, feedPost.Embed.EmbedRecordWithMedia.Media.EmbedImages, sl, cs, imgcdn, viewer) 145 + embedmediaview = &appbsky.EmbedRecordWithMedia_View_Media{ 146 + // EmbedImages_View *EmbedImages_View 147 + EmbedImages_View: &appbsky.EmbedImages_View{ 148 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.images#view"` 149 + LexiconTypeID: "app.bsky.embed.images#view", 150 + // Images []*EmbedImages_ViewImage `json:"images" cborgen:"images"` 151 + Images: embedImage.EmbedImages_View.Images, 152 + }, 153 + // EmbedVideo_View *EmbedVideo_View 154 + // EmbedExternal_View *EmbedExternal_View 155 + } 156 + } 157 + if feedPost.Embed.EmbedRecordWithMedia.Media.EmbedVideo != nil { 158 + // // video extractor 159 + // embedmediaview = &appbsky.EmbedRecordWithMedia_View_Media{ 160 + // // EmbedImages_View *EmbedImages_View 161 + // // EmbedVideo_View *EmbedVideo_View 162 + // // EmbedExternal_View *EmbedExternal_View 163 + // } 164 + } 165 + if feedPost.Embed.EmbedRecordWithMedia.Media.EmbedExternal != nil { 166 + embedExternal := EmbedExternalViewExtractor(ctx, aturi, feedPost.Embed.EmbedExternal, sl, cs, imgcdn, viewer) 167 + embedmediaview = &appbsky.EmbedRecordWithMedia_View_Media{ 168 + // EmbedImages_View *EmbedImages_View 169 + // EmbedVideo_View *EmbedVideo_View 170 + // EmbedExternal_View *EmbedExternal_View 171 + EmbedExternal_View: &appbsky.EmbedExternal_View{ 172 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.external#view"` 173 + LexiconTypeID: "app.bsky.embed.external#view", 174 + // External *EmbedExternal_ViewExternal `json:"external" cborgen:"external"` 175 + External: embedExternal.EmbedExternal_View.External, 176 + }, 177 + } 178 + } 179 + 102 180 return &appbsky.FeedDefs_PostView_Embed{ 103 181 // EmbedImages_View *EmbedImages_View 104 182 // EmbedVideo_View *EmbedVideo_View 105 183 // EmbedExternal_View *EmbedExternal_View 106 184 // EmbedRecord_View *EmbedRecord_View 107 185 // EmbedRecordWithMedia_View *EmbedRecordWithMedia_View 186 + EmbedRecordWithMedia_View: &appbsky.EmbedRecordWithMedia_View{ 187 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.recordWithMedia#view"` 188 + LexiconTypeID: "", 189 + // Media *EmbedRecordWithMedia_View_Media `json:"media" cborgen:"media"` 190 + Media: embedmediaview, 191 + // Record *EmbedRecord_View `json:"record" cborgen:"record"` 192 + Record: embedrecordview, 193 + }, 108 194 }, nil 109 195 } 110 196 111 197 return nil, nil 112 198 } 199 + 200 + func EmbedImagesViewExtractor(ctx context.Context, aturi syntax.ATURI, embedImages *appbsky.EmbedImages, sl *microcosm.MicrocosmClient, cs *microcosm.MicrocosmClient, imgcdn string, viewer *utils.DID) *appbsky.FeedDefs_PostView_Embed { 201 + //embedType = "EmbedImages" 202 + // thumb: `https://${cdn}/img/feed_thumbnail/plain/${did}/${link}@jpeg`, 203 + // fullsize: `https://${cdn}/img/feed_fullsize/plain/${did}/${link}@jpeg`, 204 + var images []*appbsky.EmbedImages_ViewImage 205 + for _, rawimg := range embedImages.Images { 206 + 207 + var feed_thumbnail string 208 + var feed_fullsize string 209 + if rawimg.Image != nil { 210 + u := utils.MakeImageCDN(utils.DID(aturi.Authority().String()), imgcdn, "feed_thumbnail", rawimg.Image.Ref.String()) 211 + feed_thumbnail = u 212 + uf := utils.MakeImageCDN(utils.DID(aturi.Authority().String()), imgcdn, "feed_fullsize", rawimg.Image.Ref.String()) 213 + feed_fullsize = uf 214 + } 215 + img := appbsky.EmbedImages_ViewImage{ 216 + // // alt: Alt text description of the image, for accessibility. 217 + // Alt string `json:"alt" cborgen:"alt"` 218 + Alt: rawimg.Alt, 219 + // AspectRatio *EmbedDefs_AspectRatio `json:"aspectRatio,omitempty" cborgen:"aspectRatio,omitempty"` 220 + AspectRatio: rawimg.AspectRatio, 221 + // // fullsize: Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View. 222 + // Fullsize string `json:"fullsize" cborgen:"fullsize"` 223 + Fullsize: feed_fullsize, 224 + // // thumb: Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. 225 + // Thumb string `json:"thumb" cborgen:"thumb"` 226 + Thumb: feed_thumbnail, 227 + } 228 + images = append(images, &img) 229 + } 230 + return &appbsky.FeedDefs_PostView_Embed{ 231 + // EmbedImages_View *EmbedImages_View 232 + EmbedImages_View: &appbsky.EmbedImages_View{ 233 + LexiconTypeID: "app.bsky.embed.images#view", 234 + Images: images, 235 + }, 236 + // EmbedVideo_View *EmbedVideo_View 237 + // EmbedExternal_View *EmbedExternal_View 238 + // EmbedRecord_View *EmbedRecord_View 239 + // EmbedRecordWithMedia_View *EmbedRecordWithMedia_View 240 + } 241 + 242 + } 243 + 244 + func EmbedExternalViewExtractor(ctx context.Context, aturi syntax.ATURI, embedExternal *appbsky.EmbedExternal, sl *microcosm.MicrocosmClient, cs *microcosm.MicrocosmClient, imgcdn string, viewer *utils.DID) *appbsky.FeedDefs_PostView_Embed { 245 + // todo: gif embeds needs special handling i think? maybe? 246 + //return nil, nil 247 + //embedType = "EmbedExternal" 248 + rawimg := embedExternal.External 249 + var thumbnail *string 250 + if rawimg.Thumb != nil { 251 + u := utils.MakeImageCDN(utils.DID(aturi.Authority().String()), imgcdn, "feed_thumbnail", rawimg.Thumb.Ref.String()) 252 + thumbnail = &u 253 + } 254 + return &appbsky.FeedDefs_PostView_Embed{ 255 + // EmbedImages_View *EmbedImages_View 256 + // EmbedVideo_View *EmbedVideo_View 257 + // EmbedExternal_View *EmbedExternal_View 258 + EmbedExternal_View: &appbsky.EmbedExternal_View{ 259 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.external#view"` 260 + LexiconTypeID: "app.bsky.embed.external#view", 261 + // External *EmbedExternal_ViewExternal `json:"external" cborgen:"external"` 262 + External: &appbsky.EmbedExternal_ViewExternal{ 263 + // Description string `json:"description" cborgen:"description"` 264 + Description: embedExternal.External.Description, 265 + // Thumb *string `json:"thumb,omitempty" cborgen:"thumb,omitempty"` 266 + Thumb: thumbnail, 267 + // Title string `json:"title" cborgen:"title"` 268 + Title: embedExternal.External.Title, 269 + // Uri string `json:"uri" cborgen:"uri"` 270 + Uri: embedExternal.External.Uri, 271 + }, 272 + }, 273 + // EmbedRecord_View *EmbedRecord_View 274 + // EmbedRecordWithMedia_View *EmbedRecordWithMedia_View 275 + } 276 + } 277 + 278 + func EmbedRecordViewExtractor(ctx context.Context, record *atproto.RepoStrongRef, sl *microcosm.MicrocosmClient, cs *microcosm.MicrocosmClient, imgcdn string, viewer *utils.DID) *appbsky.EmbedRecord_View_Record { 279 + if record == nil { 280 + log.Println("[EmbedRecord_View_Record] no record *(????)") 281 + return nil 282 + } 283 + raw := record.Uri 284 + aturi, err := syntax.ParseATURI(raw) 285 + if err != nil { 286 + log.Println("[EmbedRecord_View_Record] bad aturi") 287 + return nil 288 + } 289 + collection := aturi.Collection().String() 290 + 291 + if collection == "app.bsky.feed.post" { 292 + //t.EmbedRecord_ViewRecord.LexiconTypeID = "app.bsky.embed.record#viewRecord" 293 + profileViewBasic, _, err := appbskyactordefs.ProfileViewBasic(ctx, utils.DID(aturi.Authority().String()), sl, imgcdn) 294 + if err != nil { 295 + log.Println("[EmbedRecord_View_Record] profileviewbasic failed") 296 + return notFoundRecordEmbed(aturi.String()) 297 + } 298 + 299 + postView, _, err := PostView(ctx, aturi.String(), sl, cs, imgcdn, viewer, true) 300 + if err != nil { 301 + log.Println("[EmbedRecord_View_Record] postview failed") 302 + return notFoundRecordEmbed(aturi.String()) 303 + } 304 + 305 + // postRecordResponse, err_r := agnostic.RepoGetRecord(ctx, sl, "", "app.bsky.feed.post", aturi.Authority().String(), aturi.RecordKey().String()) 306 + // if err_r != nil { 307 + // return notFoundRecordEmbed(aturi.String()) 308 + // } 309 + // var postRecord appbsky.FeedPost 310 + // if err := json.Unmarshal(*postRecordResponse.Value, &postRecord); err != nil { 311 + // return notFoundRecordEmbed(aturi.String()) 312 + // } 313 + 314 + // lexicontypedecoder := &util.LexiconTypeDecoder{Val: &postRecord} 315 + 316 + return &appbsky.EmbedRecord_View_Record{ 317 + // EmbedRecord_ViewRecord *EmbedRecord_ViewRecord 318 + EmbedRecord_ViewRecord: &appbsky.EmbedRecord_ViewRecord{ 319 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.embed.record#viewRecord"` 320 + LexiconTypeID: "app.bsky.embed.record#viewRecord", 321 + // Author *ActorDefs_ProfileViewBasic `json:"author" cborgen:"author"` 322 + Author: profileViewBasic, 323 + // Cid string `json:"cid" cborgen:"cid"` 324 + Cid: postView.Cid, 325 + // Embeds []*EmbedRecord_ViewRecord_Embeds_Elem `json:"embeds,omitempty" cborgen:"embeds,omitempty"` 326 + Embeds: nil, 327 + // IndexedAt string `json:"indexedAt" cborgen:"indexedAt"` 328 + IndexedAt: postView.IndexedAt, 329 + // Labels []*comatproto.LabelDefs_Label `json:"labels,omitempty" cborgen:"labels,omitempty"` 330 + Labels: postView.Labels, 331 + // LikeCount *int64 `json:"likeCount,omitempty" cborgen:"likeCount,omitempty"` 332 + LikeCount: postView.LikeCount, 333 + // QuoteCount *int64 `json:"quoteCount,omitempty" cborgen:"quoteCount,omitempty"` 334 + QuoteCount: postView.QuoteCount, 335 + // ReplyCount *int64 `json:"replyCount,omitempty" cborgen:"replyCount,omitempty"` 336 + ReplyCount: postView.ReplyCount, 337 + // RepostCount *int64 `json:"repostCount,omitempty" cborgen:"repostCount,omitempty"` 338 + RepostCount: postView.RepostCount, 339 + // Uri string `json:"uri" cborgen:"uri"` 340 + Uri: postView.Uri, 341 + // // value: The record data itself. 342 + // Value *lexutil.LexiconTypeDecoder `json:"value" cborgen:"value"` 343 + Value: postView.Record, 344 + }, 345 + // EmbedRecord_ViewNotFound *EmbedRecord_ViewNotFound 346 + // EmbedRecord_ViewBlocked *EmbedRecord_ViewBlocked 347 + // EmbedRecord_ViewDetached *EmbedRecord_ViewDetached 348 + // FeedDefs_GeneratorView *FeedDefs_GeneratorView 349 + // GraphDefs_ListView *GraphDefs_ListView 350 + // LabelerDefs_LabelerView *LabelerDefs_LabelerView 351 + // GraphDefs_StarterPackViewBasic *GraphDefs_StarterPackViewBasic 352 + } 353 + } 354 + if collection == "app.bsky.feed.generator" { 355 + return notFoundRecordEmbed(aturi.String()) 356 + return nil 357 + //t.FeedDefs_GeneratorView.LexiconTypeID = "app.bsky.feed.defs#generatorView" 358 + return &appbsky.EmbedRecord_View_Record{ 359 + // EmbedRecord_ViewRecord *EmbedRecord_ViewRecord 360 + // EmbedRecord_ViewNotFound *EmbedRecord_ViewNotFound 361 + // EmbedRecord_ViewBlocked *EmbedRecord_ViewBlocked 362 + // EmbedRecord_ViewDetached *EmbedRecord_ViewDetached 363 + // FeedDefs_GeneratorView *FeedDefs_GeneratorView 364 + FeedDefs_GeneratorView: &appbsky.FeedDefs_GeneratorView{ 365 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#generatorView"` 366 + // AcceptsInteractions *bool `json:"acceptsInteractions,omitempty" cborgen:"acceptsInteractions,omitempty"` 367 + // Avatar *string `json:"avatar,omitempty" cborgen:"avatar,omitempty"` 368 + // Cid string `json:"cid" cborgen:"cid"` 369 + // ContentMode *string `json:"contentMode,omitempty" cborgen:"contentMode,omitempty"` 370 + // Creator *ActorDefs_ProfileView `json:"creator" cborgen:"creator"` 371 + // Description *string `json:"description,omitempty" cborgen:"description,omitempty"` 372 + // DescriptionFacets []*RichtextFacet `json:"descriptionFacets,omitempty" cborgen:"descriptionFacets,omitempty"` 373 + // Did string `json:"did" cborgen:"did"` 374 + // DisplayName string `json:"displayName" cborgen:"displayName"` 375 + // IndexedAt string `json:"indexedAt" cborgen:"indexedAt"` 376 + // Labels []*comatproto.LabelDefs_Label `json:"labels,omitempty" cborgen:"labels,omitempty"` 377 + // LikeCount *int64 `json:"likeCount,omitempty" cborgen:"likeCount,omitempty"` 378 + // Uri string `json:"uri" cborgen:"uri"` 379 + // Viewer *FeedDefs_GeneratorViewerState `json:"viewer,omitempty" cborgen:"viewer,omitempty"` 380 + }, 381 + // GraphDefs_ListView *GraphDefs_ListView 382 + // LabelerDefs_LabelerView *LabelerDefs_LabelerView 383 + // GraphDefs_StarterPackViewBasic *GraphDefs_StarterPackViewBasic 384 + } 385 + } 386 + if collection == "app.bsky.graph.list" { 387 + return notFoundRecordEmbed(aturi.String()) 388 + return nil 389 + //t.GraphDefs_ListView.LexiconTypeID = "app.bsky.graph.defs#listView" 390 + return &appbsky.EmbedRecord_View_Record{ 391 + // EmbedRecord_ViewRecord *EmbedRecord_ViewRecord 392 + // EmbedRecord_ViewNotFound *EmbedRecord_ViewNotFound 393 + // EmbedRecord_ViewBlocked *EmbedRecord_ViewBlocked 394 + // EmbedRecord_ViewDetached *EmbedRecord_ViewDetached 395 + // FeedDefs_GeneratorView *FeedDefs_GeneratorView 396 + // GraphDefs_ListView *GraphDefs_ListView 397 + GraphDefs_ListView: &appbsky.GraphDefs_ListView{ 398 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.graph.defs#listView"` 399 + // Avatar *string `json:"avatar,omitempty" cborgen:"avatar,omitempty"` 400 + // Cid string `json:"cid" cborgen:"cid"` 401 + // Creator *ActorDefs_ProfileView `json:"creator" cborgen:"creator"` 402 + // Description *string `json:"description,omitempty" cborgen:"description,omitempty"` 403 + // DescriptionFacets []*RichtextFacet `json:"descriptionFacets,omitempty" cborgen:"descriptionFacets,omitempty"` 404 + // IndexedAt string `json:"indexedAt" cborgen:"indexedAt"` 405 + // Labels []*comatproto.LabelDefs_Label `json:"labels,omitempty" cborgen:"labels,omitempty"` 406 + // ListItemCount *int64 `json:"listItemCount,omitempty" cborgen:"listItemCount,omitempty"` 407 + // Name string `json:"name" cborgen:"name"` 408 + // Purpose *string `json:"purpose" cborgen:"purpose"` 409 + // Uri string `json:"uri" cborgen:"uri"` 410 + // Viewer *GraphDefs_ListViewerState `json:"viewer,omitempty" cborgen:"viewer,omitempty"` 411 + }, 412 + // LabelerDefs_LabelerView *LabelerDefs_LabelerView 413 + // GraphDefs_StarterPackViewBasic *GraphDefs_StarterPackViewBasic 414 + } 415 + } 416 + // if t.LabelerDefs_LabelerView != nil { 417 + // t.LabelerDefs_LabelerView.LexiconTypeID = "app.bsky.labeler.defs#labelerView" 418 + // return json.Marshal(t.LabelerDefs_LabelerView) 419 + // } 420 + if collection == "app.bsky.graph.starterpack" { 421 + return notFoundRecordEmbed(aturi.String()) 422 + return nil 423 + //t.GraphDefs_StarterPackViewBasic.LexiconTypeID = "app.bsky.graph.defs#starterPackViewBasic" 424 + return &appbsky.EmbedRecord_View_Record{ 425 + // EmbedRecord_ViewRecord *EmbedRecord_ViewRecord 426 + // EmbedRecord_ViewNotFound *EmbedRecord_ViewNotFound 427 + // EmbedRecord_ViewBlocked *EmbedRecord_ViewBlocked 428 + // EmbedRecord_ViewDetached *EmbedRecord_ViewDetached 429 + // FeedDefs_GeneratorView *FeedDefs_GeneratorView 430 + // GraphDefs_ListView *GraphDefs_ListView 431 + // LabelerDefs_LabelerView *LabelerDefs_LabelerView 432 + // GraphDefs_StarterPackViewBasic *GraphDefs_StarterPackViewBasic 433 + GraphDefs_StarterPackViewBasic: &appbsky.GraphDefs_StarterPackViewBasic{ 434 + // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.graph.defs#starterPackViewBasic"` 435 + // Cid string `json:"cid" cborgen:"cid"` 436 + // Creator *ActorDefs_ProfileViewBasic `json:"creator" cborgen:"creator"` 437 + // IndexedAt string `json:"indexedAt" cborgen:"indexedAt"` 438 + // JoinedAllTimeCount *int64 `json:"joinedAllTimeCount,omitempty" cborgen:"joinedAllTimeCount,omitempty"` 439 + // JoinedWeekCount *int64 `json:"joinedWeekCount,omitempty" cborgen:"joinedWeekCount,omitempty"` 440 + // Labels []*comatproto.LabelDefs_Label `json:"labels,omitempty" cborgen:"labels,omitempty"` 441 + // ListItemCount *int64 `json:"listItemCount,omitempty" cborgen:"listItemCount,omitempty"` 442 + // Record *lexutil.LexiconTypeDecoder `json:"record" cborgen:"record"` 443 + // Uri string `json:"uri" cborgen:"uri"` 444 + }, 445 + } 446 + } 447 + 448 + // if t.EmbedRecord_ViewNotFound != nil { 449 + // t.EmbedRecord_ViewNotFound.LexiconTypeID = "app.bsky.embed.record#viewNotFound" 450 + // return json.Marshal(t.EmbedRecord_ViewNotFound) 451 + // } 452 + // if t.EmbedRecord_ViewBlocked != nil { 453 + // t.EmbedRecord_ViewBlocked.LexiconTypeID = "app.bsky.embed.record#viewBlocked" 454 + // return json.Marshal(t.EmbedRecord_ViewBlocked) 455 + // } 456 + // if t.EmbedRecord_ViewDetached != nil { 457 + // t.EmbedRecord_ViewDetached.LexiconTypeID = "app.bsky.embed.record#viewDetached" 458 + // return json.Marshal(t.EmbedRecord_ViewDetached) 459 + // } 460 + return notFoundRecordEmbed(aturi.String()) 461 + return nil 462 + 463 + }
+12 -2
shims/lex/app/bsky/feed/defs/postview.go
··· 5 5 "encoding/json" 6 6 7 7 "github.com/bluesky-social/indigo/api/agnostic" 8 + comatproto "github.com/bluesky-social/indigo/api/atproto" 8 9 appbsky "github.com/bluesky-social/indigo/api/bsky" 9 10 "github.com/bluesky-social/indigo/atproto/syntax" 10 11 "tangled.org/whey.party/red-dwarf-server/microcosm" ··· 17 18 "tangled.org/whey.party/red-dwarf-server/shims/utils" 18 19 ) 19 20 20 - func PostView(ctx context.Context, postaturi string, sl *microcosm.MicrocosmClient, cs *microcosm.MicrocosmClient, imgcdn string, viewer *utils.DID) (*appbsky.FeedDefs_PostView, *appbsky.FeedPost, error) { 21 + func PostView(ctx context.Context, postaturi string, sl *microcosm.MicrocosmClient, cs *microcosm.MicrocosmClient, imgcdn string, viewer *utils.DID, disableEmbed bool) (*appbsky.FeedDefs_PostView, *appbsky.FeedPost, error) { 21 22 aturi, err := syntax.ParseATURI(postaturi) 22 23 if err != nil { 23 24 return nil, nil, err ··· 39 40 if err := json.Unmarshal(*postRecordResponse.Value, &postRecord); err != nil { 40 41 return nil, nil, err 41 42 } 42 - postView_Embed, err := PostView_Embed(ctx, postaturi, &postRecord, sl, cs, imgcdn, viewer) 43 + var postView_Embed *appbsky.FeedDefs_PostView_Embed 44 + if !disableEmbed { 45 + postView_Embed, err = PostView_Embed(ctx, postaturi, &postRecord, sl, cs, imgcdn, viewer) 46 + if err != nil { 47 + postView_Embed = nil 48 + } 49 + } 43 50 44 51 profile, _, _ := appbskyactordefs.ProfileViewBasic(ctx, repoDID, sl, imgcdn) 45 52 ··· 157 164 //log.Println("viewer is nil") 158 165 } 159 166 167 + var emptyLabelsArray []*comatproto.LabelDefs_Label = []*comatproto.LabelDefs_Label{} 168 + 160 169 return &appbsky.FeedDefs_PostView{ 161 170 // LexiconTypeID string `json:"$type" cborgen:"$type,const=app.bsky.feed.defs#postView"` 162 171 LexiconTypeID: "app.bsky.feed.defs#postView", ··· 172 181 // IndexedAt string `json:"indexedAt" cborgen:"indexedAt"` 173 182 IndexedAt: postRecord.CreatedAt, 174 183 // Labels []*comatproto.LabelDefs_Label `json:"labels,omitempty" cborgen:"labels,omitempty"` 184 + Labels: emptyLabelsArray, 175 185 // LikeCount *int64 `json:"likeCount,omitempty" cborgen:"likeCount,omitempty"` 176 186 LikeCount: &likeCount, 177 187 // QuoteCount *int64 `json:"quoteCount,omitempty" cborgen:"quoteCount,omitempty"`