Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Drafts fixes (#9795)

* Allow saving quote post drafts

* Remove warning logs for failed media loading

* Fix threadgates

authored by

Eric Bailey and committed by
GitHub
e2a56b01 1eb09b72

+26 -36
+24 -34
src/view/com/composer/drafts/state/api.ts
··· 1 1 /** 2 2 * Type converters for Draft API - convert between ComposerState and server Draft types. 3 3 */ 4 - import {type AppBskyDraftDefs, RichText} from '@atproto/api' 4 + import {type AppBskyDraftDefs, AtUri, RichText} from '@atproto/api' 5 5 import {nanoid} from 'nanoid/non-secure' 6 6 7 + import {resolveLink} from '#/lib/api/resolve' 7 8 import {getImageDim} from '#/lib/media/manip' 8 9 import {mimeToExt} from '#/lib/media/video/util' 9 10 import {type ComposerImage} from '#/state/gallery' 10 11 import {type Gif} from '#/state/queries/tenor' 12 + import {threadgateAllowUISettingToAllowRecordValue} from '#/state/queries/threadgate/util' 13 + import {createPublicAgent} from '#/state/session/agent' 11 14 import { 12 15 type ComposerState, 13 16 type EmbedDraft, ··· 61 64 }), 62 65 ) 63 66 64 - // Convert threadgate settings to server format 65 - const threadgateAllow: AppBskyDraftDefs.Draft['threadgateAllow'] = [] 66 - for (const setting of state.thread.threadgate) { 67 - if (setting.type === 'mention') { 68 - threadgateAllow.push({ 69 - $type: 'app.bsky.feed.threadgate#mentionRule' as const, 70 - }) 71 - } else if (setting.type === 'following') { 72 - threadgateAllow.push({ 73 - $type: 'app.bsky.feed.threadgate#followingRule' as const, 74 - }) 75 - } else if (setting.type === 'followers') { 76 - threadgateAllow.push({ 77 - $type: 'app.bsky.feed.threadgate#followerRule' as const, 78 - }) 79 - } else if (setting.type === 'list') { 80 - threadgateAllow.push({ 81 - $type: 'app.bsky.feed.threadgate#listRule' as const, 82 - list: setting.list, 83 - }) 84 - } 85 - } 86 - 87 67 const draft: AppBskyDraftDefs.Draft = { 88 68 $type: 'app.bsky.draft.defs#draft', 89 69 posts, 90 - threadgateAllow: threadgateAllow.length > 0 ? threadgateAllow : undefined, 70 + threadgateAllow: threadgateAllowUISettingToAllowRecordValue( 71 + state.thread.threadgate, 72 + ), 91 73 postgateEmbeddingRules: 92 74 state.thread.postgate.embeddingRules && 93 75 state.thread.postgate.embeddingRules.length > 0 ··· 140 122 141 123 // Add quote record embed 142 124 if (post.embed.quote) { 143 - draftPost.embedRecords = [ 144 - { 145 - $type: 'app.bsky.draft.defs#draftEmbedRecord', 146 - record: { 147 - uri: post.embed.quote.uri, 148 - cid: '', // We don't have the CID at draft time 125 + const resolved = await resolveLink( 126 + createPublicAgent(), 127 + post.embed.quote.uri, 128 + ) 129 + if (resolved && resolved.type === 'record') { 130 + draftPost.embedRecords = [ 131 + { 132 + $type: 'app.bsky.draft.defs#draftEmbedRecord', 133 + record: { 134 + uri: resolved.record.uri, 135 + cid: resolved.record.cid, 136 + }, 149 137 }, 150 - }, 151 - ] 138 + ] 139 + } 152 140 } 153 141 154 142 // Add external link embed (only if no media, otherwise it's ignored) ··· 536 524 // Restore quote embed 537 525 if (post.embedRecords && post.embedRecords.length > 0) { 538 526 const record = post.embedRecords[0] 539 - embed.quote = {type: 'link', uri: record.record.uri} 527 + const urip = new AtUri(record.record.uri) 528 + const url = `https://bsky.app/profile/${urip.host}/post/${urip.rkey}` 529 + embed.quote = {type: 'link', uri: url} 540 530 } 541 531 542 532 // Restore link embed (only if not a GIF)
+2 -2
src/view/com/composer/drafts/state/queries.ts
··· 55 55 const url = await storage.loadMediaFromLocal(img.localRef.path) 56 56 loadedMedia.set(img.localRef.path, url) 57 57 } catch (e) { 58 - logger.warn('Failed to load draft image', { 58 + logger.debug('Failed to load draft image', { 59 59 path: img.localRef.path, 60 60 error: e, 61 61 }) ··· 69 69 const url = await storage.loadMediaFromLocal(vid.localRef.path) 70 70 loadedMedia.set(vid.localRef.path, url) 71 71 } catch (e) { 72 - logger.warn('Failed to load draft video', { 72 + logger.debug('Failed to load draft video', { 73 73 path: vid.localRef.path, 74 74 error: e, 75 75 })