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

PostView_Embed images!!

Changed files
+113
shims
lex
app
bsky
feed
+111
shims/lex/app/bsky/feed/defs/embed.go
··· 1 1 package appbskyfeeddefs 2 + 3 + import ( 4 + "context" 5 + 6 + appbsky "github.com/bluesky-social/indigo/api/bsky" 7 + "github.com/bluesky-social/indigo/atproto/syntax" 8 + "tangled.org/whey.party/red-dwarf-server/microcosm" 9 + "tangled.org/whey.party/red-dwarf-server/shims/utils" 10 + ) 11 + 12 + func PostView_Embed(ctx context.Context, postaturi string, feedPost *appbsky.FeedPost, sl *microcosm.MicrocosmClient, cs *microcosm.MicrocosmClient, imgcdn string) (*appbsky.FeedDefs_PostView_Embed, error) { 13 + if feedPost.Embed == nil { 14 + return nil, nil 15 + } 16 + 17 + aturi, err := syntax.ParseATURI(postaturi) 18 + if err != nil { 19 + return nil, err 20 + } 21 + 22 + // determine type 23 + 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 65 + } 66 + if feedPost.Embed.EmbedVideo != nil { 67 + return nil, nil 68 + //embedType = "EmbedVideo" 69 + return &appbsky.FeedDefs_PostView_Embed{ 70 + // EmbedImages_View *EmbedImages_View 71 + // EmbedVideo_View *EmbedVideo_View 72 + // EmbedExternal_View *EmbedExternal_View 73 + // EmbedRecord_View *EmbedRecord_View 74 + // EmbedRecordWithMedia_View *EmbedRecordWithMedia_View 75 + }, nil 76 + } 77 + 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 87 + } 88 + if feedPost.Embed.EmbedRecord != nil { 89 + return nil, nil 90 + //embedType = "EmbedRecord" 91 + return &appbsky.FeedDefs_PostView_Embed{ 92 + // EmbedImages_View *EmbedImages_View 93 + // EmbedVideo_View *EmbedVideo_View 94 + // EmbedExternal_View *EmbedExternal_View 95 + // EmbedRecord_View *EmbedRecord_View 96 + // EmbedRecordWithMedia_View *EmbedRecordWithMedia_View 97 + }, nil 98 + } 99 + if feedPost.Embed.EmbedRecordWithMedia != nil { 100 + return nil, nil 101 + //embedType = "EmbedRecordWithMedia" 102 + return &appbsky.FeedDefs_PostView_Embed{ 103 + // EmbedImages_View *EmbedImages_View 104 + // EmbedVideo_View *EmbedVideo_View 105 + // EmbedExternal_View *EmbedExternal_View 106 + // EmbedRecord_View *EmbedRecord_View 107 + // EmbedRecordWithMedia_View *EmbedRecordWithMedia_View 108 + }, nil 109 + } 110 + 111 + return nil, nil 112 + }
+2
shims/lex/app/bsky/feed/defs/postview.go
··· 39 39 if err := json.Unmarshal(*postRecordResponse.Value, &postRecord); err != nil { 40 40 return nil, nil, err 41 41 } 42 + postView_Embed, err := PostView_Embed(ctx, postaturi, &postRecord, sl, cs, imgcdn) 42 43 43 44 profile, _, _ := appbskyactordefs.ProfileViewBasic(ctx, repoDID, sl, imgcdn) 44 45 ··· 120 121 // // debug: Debug information for internal development 121 122 // Debug *interface{} `json:"debug,omitempty" cborgen:"debug,omitempty"` 122 123 // Embed *FeedDefs_PostView_Embed `json:"embed,omitempty" cborgen:"embed,omitempty"` 124 + Embed: postView_Embed, 123 125 // IndexedAt string `json:"indexedAt" cborgen:"indexedAt"` 124 126 IndexedAt: postRecord.CreatedAt, 125 127 // Labels []*comatproto.LabelDefs_Label `json:"labels,omitempty" cborgen:"labels,omitempty"`