···1import assert from 'assert'
2import {
3 Kysely,
4- KyselyPlugin,
5 Migrator,
6- PluginTransformQueryArgs,
7- PluginTransformResultArgs,
8 PostgresDialect,
9- QueryResult,
10- RootOperationNode,
11- UnknownRow,
12} from 'kysely'
13import {default as Pg} from 'pg'
1415import {dbLogger as log} from '../logger.js'
16import {default as migrations} from './migrations/index.js'
17import {DbMigrationProvider} from './migrations/provider.js'
18-import {DbSchema} from './schema.js'
1920export class Database {
21 migrator: Migrator
22 destroyed = false
2324- constructor(public db: Kysely<DbSchema>, public cfg: PgConfig) {
00025 this.migrator = new Migrator({
26 db,
27 migrationTableSchema: cfg.schema,
···1import assert from 'assert'
2import {
3 Kysely,
4+ type KyselyPlugin,
5 Migrator,
6+ type PluginTransformQueryArgs,
7+ type PluginTransformResultArgs,
8 PostgresDialect,
9+ type QueryResult,
10+ type RootOperationNode,
11+ type UnknownRow,
12} from 'kysely'
13import {default as Pg} from 'pg'
1415import {dbLogger as log} from '../logger.js'
16import {default as migrations} from './migrations/index.js'
17import {DbMigrationProvider} from './migrations/provider.js'
18+import {type DbSchema} from './schema.js'
1920export class Database {
21 migrator: Migrator
22 destroyed = false
2324+ constructor(
25+ public db: Kysely<DbSchema>,
26+ public cfg: PgConfig,
27+ ) {
28 this.migrator = new Migrator({
29 db,
30 migrationTableSchema: cfg.schema,
+7-4
bskylink/src/index.ts
···1import events from 'node:events'
2-import http from 'node:http'
34import cors from 'cors'
5import express from 'express'
6-import {createHttpTerminator, HttpTerminator} from 'http-terminator'
78-import {Config} from './config.js'
9import {AppContext} from './context.js'
10import {default as routes, errorHandler} from './routes/index.js'
11···17 public server?: http.Server
18 private terminator?: HttpTerminator
1920- constructor(public app: express.Application, public ctx: AppContext) {}
0002122 static async create(cfg: Config): Promise<LinkService> {
23 let app = express()
···1import events from 'node:events'
2+import type http from 'node:http'
34import cors from 'cors'
5import express from 'express'
6+import {createHttpTerminator, type HttpTerminator} from 'http-terminator'
78+import {type Config} from './config.js'
9import {AppContext} from './context.js'
10import {default as routes, errorHandler} from './routes/index.js'
11···17 public server?: http.Server
18 private terminator?: HttpTerminator
1920+ constructor(
21+ public app: express.Application,
22+ public ctx: AppContext,
23+ ) {}
2425 static async create(cfg: Config): Promise<LinkService> {
26 let app = express()
+7-4
bskyogcard/src/index.ts
···1import events from 'node:events'
2-import http from 'node:http'
34import express from 'express'
5-import {createHttpTerminator, HttpTerminator} from 'http-terminator'
67-import {Config} from './config.js'
8import {AppContext} from './context.js'
9import {default as routes, errorHandler} from './routes/index.js'
10···15 public server?: http.Server
16 private terminator?: HttpTerminator
1718- constructor(public app: express.Application, public ctx: AppContext) {}
0001920 static async create(cfg: Config): Promise<CardService> {
21 let app = express()
···1import events from 'node:events'
2+import type http from 'node:http'
34import express from 'express'
5+import {createHttpTerminator, type HttpTerminator} from 'http-terminator'
67+import {type Config} from './config.js'
8import {AppContext} from './context.js'
9import {default as routes, errorHandler} from './routes/index.js'
10···15 public server?: http.Server
16 private terminator?: HttpTerminator
1718+ constructor(
19+ public app: express.Application,
20+ public ctx: AppContext,
21+ ) {}
2223 static async create(cfg: Config): Promise<CardService> {
24 let app = express()
···1import React from 'react'
2-import {StyleProp, View, ViewStyle} from 'react-native'
3-import {ModerationUI} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6···148 modui.noOverride
149 ? _(msg`Learn more about the moderation applied to this content`)
150 : override
151- ? _(msg`Hides the content`)
152- : _(msg`Shows the content`)
153 }>
154 {state => (
155 <View
···1import React from 'react'
2+import {type StyleProp, View, type ViewStyle} from 'react-native'
3+import {type ModerationUI} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6···148 modui.noOverride
149 ? _(msg`Learn more about the moderation applied to this content`)
150 : override
151+ ? _(msg`Hides the content`)
152+ : _(msg`Shows the content`)
153 }>
154 {state => (
155 <View
···1import React from 'react'
2import {
3 BSKY_LABELER_DID,
4- ModerationCause,
5- ModerationCauseSource,
6} from '@atproto/api'
7import {msg} from '@lingui/macro'
8import {useLingui} from '@lingui/react'
···12import {useSession} from '#/state/session'
13import {CircleBanSign_Stroke2_Corner0_Rounded as CircleBanSign} from '#/components/icons/CircleBanSign'
14import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
15-import {Props as SVGIconProps} from '#/components/icons/common'
16import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlash} from '#/components/icons/EyeSlash'
17import {Warning_Stroke2_Corner0_Rounded as Warning} from '#/components/icons/Warning'
18-import {AppModerationCause} from '#/components/Pills'
19import {useGlobalLabelStrings} from './useGlobalLabelStrings'
20import {getDefinition, getLabelStrings} from './useLabelInfo'
21···153 def.identifier === '!no-unauthenticated'
154 ? EyeSlash
155 : def.severity === 'alert'
156- ? Warning
157- : CircleInfo,
158 name: strings.name,
159 description: strings.description,
160 source,
···1import React from 'react'
2import {
3 BSKY_LABELER_DID,
4+ type ModerationCause,
5+ type ModerationCauseSource,
6} from '@atproto/api'
7import {msg} from '@lingui/macro'
8import {useLingui} from '@lingui/react'
···12import {useSession} from '#/state/session'
13import {CircleBanSign_Stroke2_Corner0_Rounded as CircleBanSign} from '#/components/icons/CircleBanSign'
14import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
15+import {type Props as SVGIconProps} from '#/components/icons/common'
16import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlash} from '#/components/icons/EyeSlash'
17import {Warning_Stroke2_Corner0_Rounded as Warning} from '#/components/icons/Warning'
18+import {type AppModerationCause} from '#/components/Pills'
19import {useGlobalLabelStrings} from './useGlobalLabelStrings'
20import {getDefinition, getLabelStrings} from './useLabelInfo'
21···153 def.identifier === '!no-unauthenticated'
154 ? EyeSlash
155 : def.severity === 'alert'
156+ ? Warning
157+ : CircleInfo,
158 name: strings.name,
159 description: strings.description,
160 source,
+55-55
src/locale/locales/en/messages.po
···456msgid "<0>{0}</0> is included in your starter pack"
457msgstr ""
458459-#: src/components/WhoCanReply.tsx:296
460msgid "<0>{0}</0> members"
461msgstr ""
462···866msgid "An error occurred while compressing the video."
867msgstr ""
868869-#: src/state/queries/explore-feed-previews.tsx:184
870msgid "An error occurred while fetching the feed."
871msgstr ""
872···939msgid "an unknown labeler"
940msgstr ""
941942-#: src/components/WhoCanReply.tsx:317
943msgid "and"
944msgstr ""
945···1066msgid "Are you sure you want to delete the app password \"{0}\"?"
1067msgstr ""
10681069-#: src/components/dms/MessageContextMenu.tsx:189
1070msgid "Are you sure you want to delete this message? The message will be deleted for you, but not for the other participant."
1071msgstr ""
1072···1128msgid "At least 3 characters"
1129msgstr ""
11301131-#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:40
1132msgctxt "Name of app icon variant"
1133msgid "Aurora"
1134msgstr ""
···1302msgid "Bluesky cannot confirm the authenticity of the claimed date."
1303msgstr ""
13041305-#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:129
1306msgctxt "Name of app icon variant"
1307msgid "Bluesky Classic™"
1308msgstr ""
···2096msgid "Copy link to starter pack"
2097msgstr ""
20982099-#: src/components/dms/MessageContextMenu.tsx:150
2100-#: src/components/dms/MessageContextMenu.tsx:153
2101msgid "Copy message text"
2102msgstr ""
2103···2145msgid "Could not process your video"
2146msgstr ""
21472148-#: src/state/queries/notifications/settings.ts:50
2149msgid "Could not update notification settings"
2150msgstr ""
2151···2247msgid "Dark"
2248msgstr ""
22492250-#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:24
2251msgctxt "Name of app icon variant"
2252msgid "Dark"
2253msgstr ""
···2286msgid "Default icons"
2287msgstr ""
22882289-#: src/components/dms/MessageContextMenu.tsx:191
2290#: src/components/PostControls/PostMenu/PostMenuItems.tsx:701
2291#: src/screens/Messages/components/ChatStatusInfo.tsx:55
2292#: src/screens/Settings/AppPasswords.tsx:212
···2334msgid "Delete Conversation"
2335msgstr ""
23362337-#: src/components/dms/MessageContextMenu.tsx:164
2338msgid "Delete for me"
2339msgstr ""
2340···2342msgid "Delete list"
2343msgstr ""
23442345-#: src/components/dms/MessageContextMenu.tsx:187
2346msgid "Delete message"
2347msgstr ""
23482349-#: src/components/dms/MessageContextMenu.tsx:162
2350msgid "Delete message for me"
2351msgstr ""
2352···2433msgid "Developer options"
2434msgstr ""
24352436-#: src/components/WhoCanReply.tsx:179
2437msgid "Dialog: adjust who can interact with this post"
2438msgstr ""
2439···2759msgid "Edit User List"
2760msgstr ""
27612762-#: src/components/WhoCanReply.tsx:91
2763msgid "Edit who can reply"
2764msgstr ""
2765···2984msgid "Everybody"
2985msgstr ""
29862987-#: src/components/WhoCanReply.tsx:71
2988msgid "Everybody can reply"
2989msgstr ""
29902991-#: src/components/WhoCanReply.tsx:222
2992msgid "Everybody can reply to this post."
2993msgstr ""
2994···3409msgid "Fitness"
3410msgstr ""
34113412-#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:117
3413msgctxt "Name of app icon variant"
3414msgid "Flat Black"
3415msgstr ""
34163417-#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:93
3418msgctxt "Name of app icon variant"
3419msgid "Flat Blue"
3420msgstr ""
34213422-#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:105
3423msgctxt "Name of app icon variant"
3424msgid "Flat White"
3425msgstr ""
···3920msgid "Hides the content"
3921msgstr ""
39223923-#: src/view/com/posts/PostFeedErrorMessage.tsx:117
3924msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
3925msgstr ""
39263927-#: src/view/com/posts/PostFeedErrorMessage.tsx:105
3928msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue."
3929msgstr ""
39303931-#: src/view/com/posts/PostFeedErrorMessage.tsx:111
3932msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue."
3933msgstr ""
39343935-#: src/view/com/posts/PostFeedErrorMessage.tsx:108
3936msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue."
3937msgstr ""
39383939-#: src/view/com/posts/PostFeedErrorMessage.tsx:102
3940msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
3941msgstr ""
3942···4680msgid "Mention notifications"
4681msgstr ""
46824683-#: src/components/WhoCanReply.tsx:263
4684msgid "mentioned users"
4685msgstr ""
4686···4716msgid "Message from @{0}: {1}"
4717msgstr ""
47184719-#: src/view/com/posts/PostFeedErrorMessage.tsx:201
4720msgid "Message from server: {0}"
4721msgstr ""
4722···4737msgid "Messages"
4738msgstr ""
47394740-#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:81
4741msgctxt "Name of app icon variant"
4742msgid "Midnight"
4743msgstr ""
···5193msgid "No one"
5194msgstr ""
51955196-#: src/components/WhoCanReply.tsx:246
5197msgid "No one but the author can quote this post."
5198msgstr ""
5199···5419msgid "Only .jpg and .png files are supported"
5420msgstr ""
54215422-#: src/components/WhoCanReply.tsx:226
5423msgid "Only {0} can reply."
5424msgstr ""
5425···6057msgid "Posts can be muted based on their text, their tags, or both. We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
6058msgstr ""
60596060-#: src/view/com/posts/PostFeedErrorMessage.tsx:68
6061msgid "Posts hidden"
6062msgstr ""
6063···6361#: src/screens/Settings/Settings.tsx:556
6362#: src/view/com/feeds/FeedSourceCard.tsx:322
6363#: src/view/com/modals/UserAddRemoveLists.tsx:235
6364-#: src/view/com/posts/PostFeedErrorMessage.tsx:213
6365msgid "Remove"
6366msgstr ""
6367···63986399#: src/view/com/posts/FeedShutdownMsg.tsx:116
6400#: src/view/com/posts/FeedShutdownMsg.tsx:120
6401-#: src/view/com/posts/PostFeedErrorMessage.tsx:169
6402msgid "Remove feed"
6403msgstr ""
64046405-#: src/view/com/posts/PostFeedErrorMessage.tsx:210
6406msgid "Remove feed?"
6407msgstr ""
6408···6455msgid "Remove subtitle file"
6456msgstr ""
64576458-#: src/view/com/posts/PostFeedErrorMessage.tsx:211
6459msgid "Remove this feed from your saved feeds"
6460msgstr ""
6461···6517msgid "Replies"
6518msgstr ""
65196520-#: src/components/WhoCanReply.tsx:73
6521msgid "Replies disabled"
6522msgstr ""
65236524-#: src/components/WhoCanReply.tsx:224
6525msgid "Replies to this post are disabled."
6526msgstr ""
6527···6593msgid "Reply was successfully hidden"
6594msgstr ""
65956596-#: src/components/dms/MessageContextMenu.tsx:172
6597#: src/components/dms/MessagesListBlockedFooter.tsx:85
6598#: src/components/dms/MessagesListBlockedFooter.tsx:92
6599msgid "Report"
···6627msgid "Report list"
6628msgstr ""
66296630-#: src/components/dms/MessageContextMenu.tsx:170
6631msgid "Report message"
6632msgstr ""
6633···7646msgid "Some other feeds you might like"
7647msgstr ""
76487649-#: src/components/WhoCanReply.tsx:74
7650msgid "Some people can reply"
7651msgstr ""
7652···7871msgid "Suggestive"
7872msgstr ""
78737874-#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:60
7875msgctxt "Name of app icon variant"
7876msgid "Sunrise"
7877msgstr ""
78787879-#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:70
7880msgctxt "Name of app icon variant"
7881msgid "Sunset"
7882msgstr ""
···8165msgstr ""
81668167#: src/screens/Search/Explore.tsx:990
8168-#: src/view/com/posts/PostFeed.tsx:657
8169msgid "There was an issue fetching posts. Tap here to try again."
8170msgstr ""
8171···8186msgid "There was an issue fetching your service info"
8187msgstr ""
81888189-#: src/view/com/posts/PostFeedErrorMessage.tsx:145
8190msgid "There was an issue removing this feed. Please check your internet connection and try again."
8191msgstr ""
8192···8295msgid "This content is not available because one of the users involved has blocked the other."
8296msgstr ""
82978298-#: src/view/com/posts/PostFeedErrorMessage.tsx:114
8299msgid "This content is not viewable without a Bluesky account."
8300msgstr ""
8301···8319msgid "This feature is not available while using an App Password. Please sign in with your main password."
8320msgstr ""
83218322-#: src/view/com/posts/PostFeedErrorMessage.tsx:120
8323msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
8324msgstr ""
8325···8387msgid "This post claims to have been created on <0>{0}</0>, but was first seen by Bluesky on <1>{1}</1>."
8388msgstr ""
83898390-#: src/components/WhoCanReply.tsx:217
8391msgid "This post has an unknown type of threadgate on it. Your app may be out of date."
8392msgstr ""
8393···8558msgid "Topic"
8559msgstr ""
85608561-#: src/components/dms/MessageContextMenu.tsx:143
8562-#: src/components/dms/MessageContextMenu.tsx:145
8563#: src/components/PostControls/PostMenu/PostMenuItems.tsx:444
8564#: src/components/PostControls/PostMenu/PostMenuItems.tsx:446
8565#: src/screens/PostThread/components/ThreadItemAnchor.tsx:567
···8984msgid "Username or email address"
8985msgstr ""
89868987-#: src/components/WhoCanReply.tsx:280
8988msgid "users followed by <0>@{0}</0>"
8989msgstr ""
89908991-#: src/components/WhoCanReply.tsx:267
8992msgid "users following <0>@{0}</0>"
8993msgstr ""
8994···9188#: src/components/ProfileHoverCard/index.web.tsx:464
9189#: src/components/ProfileHoverCard/index.web.tsx:484
9190#: src/components/ProfileHoverCard/index.web.tsx:511
9191-#: src/view/com/posts/PostFeedErrorMessage.tsx:175
9192#: src/view/com/util/PostMeta.tsx:91
9193#: src/view/com/util/PostMeta.tsx:126
9194msgid "View profile"
···9416msgid "Which languages would you like to see in your algorithmic feeds?"
9417msgstr ""
94189419-#: src/components/WhoCanReply.tsx:183
9420msgid "Who can interact with this post?"
9421msgstr ""
94229423-#: src/components/WhoCanReply.tsx:91
9424msgid "Who can reply"
9425msgstr ""
9426
···456msgid "<0>{0}</0> is included in your starter pack"
457msgstr ""
458459+#: src/components/WhoCanReply.tsx:302
460msgid "<0>{0}</0> members"
461msgstr ""
462···866msgid "An error occurred while compressing the video."
867msgstr ""
868869+#: src/state/queries/explore-feed-previews.tsx:173
870msgid "An error occurred while fetching the feed."
871msgstr ""
872···939msgid "an unknown labeler"
940msgstr ""
941942+#: src/components/WhoCanReply.tsx:323
943msgid "and"
944msgstr ""
945···1066msgid "Are you sure you want to delete the app password \"{0}\"?"
1067msgstr ""
10681069+#: src/components/dms/MessageContextMenu.tsx:188
1070msgid "Are you sure you want to delete this message? The message will be deleted for you, but not for the other participant."
1071msgstr ""
1072···1128msgid "At least 3 characters"
1129msgstr ""
11301131+#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:48
1132msgctxt "Name of app icon variant"
1133msgid "Aurora"
1134msgstr ""
···1302msgid "Bluesky cannot confirm the authenticity of the claimed date."
1303msgstr ""
13041305+#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:165
1306msgctxt "Name of app icon variant"
1307msgid "Bluesky Classic™"
1308msgstr ""
···2096msgid "Copy link to starter pack"
2097msgstr ""
20982099+#: src/components/dms/MessageContextMenu.tsx:149
2100+#: src/components/dms/MessageContextMenu.tsx:152
2101msgid "Copy message text"
2102msgstr ""
2103···2145msgid "Could not process your video"
2146msgstr ""
21472148+#: src/state/queries/notifications/settings.ts:49
2149msgid "Could not update notification settings"
2150msgstr ""
2151···2247msgid "Dark"
2248msgstr ""
22492250+#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:28
2251msgctxt "Name of app icon variant"
2252msgid "Dark"
2253msgstr ""
···2286msgid "Default icons"
2287msgstr ""
22882289+#: src/components/dms/MessageContextMenu.tsx:190
2290#: src/components/PostControls/PostMenu/PostMenuItems.tsx:701
2291#: src/screens/Messages/components/ChatStatusInfo.tsx:55
2292#: src/screens/Settings/AppPasswords.tsx:212
···2334msgid "Delete Conversation"
2335msgstr ""
23362337+#: src/components/dms/MessageContextMenu.tsx:163
2338msgid "Delete for me"
2339msgstr ""
2340···2342msgid "Delete list"
2343msgstr ""
23442345+#: src/components/dms/MessageContextMenu.tsx:186
2346msgid "Delete message"
2347msgstr ""
23482349+#: src/components/dms/MessageContextMenu.tsx:161
2350msgid "Delete message for me"
2351msgstr ""
2352···2433msgid "Developer options"
2434msgstr ""
24352436+#: src/components/WhoCanReply.tsx:185
2437msgid "Dialog: adjust who can interact with this post"
2438msgstr ""
2439···2759msgid "Edit User List"
2760msgstr ""
27612762+#: src/components/WhoCanReply.tsx:97
2763msgid "Edit who can reply"
2764msgstr ""
2765···2984msgid "Everybody"
2985msgstr ""
29862987+#: src/components/WhoCanReply.tsx:77
2988msgid "Everybody can reply"
2989msgstr ""
29902991+#: src/components/WhoCanReply.tsx:228
2992msgid "Everybody can reply to this post."
2993msgstr ""
2994···3409msgid "Fitness"
3410msgstr ""
34113412+#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:149
3413msgctxt "Name of app icon variant"
3414msgid "Flat Black"
3415msgstr ""
34163417+#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:117
3418msgctxt "Name of app icon variant"
3419msgid "Flat Blue"
3420msgstr ""
34213422+#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:133
3423msgctxt "Name of app icon variant"
3424msgid "Flat White"
3425msgstr ""
···3920msgid "Hides the content"
3921msgstr ""
39223923+#: src/view/com/posts/PostFeedErrorMessage.tsx:121
3924msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
3925msgstr ""
39263927+#: src/view/com/posts/PostFeedErrorMessage.tsx:109
3928msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue."
3929msgstr ""
39303931+#: src/view/com/posts/PostFeedErrorMessage.tsx:115
3932msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue."
3933msgstr ""
39343935+#: src/view/com/posts/PostFeedErrorMessage.tsx:112
3936msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue."
3937msgstr ""
39383939+#: src/view/com/posts/PostFeedErrorMessage.tsx:106
3940msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
3941msgstr ""
3942···4680msgid "Mention notifications"
4681msgstr ""
46824683+#: src/components/WhoCanReply.tsx:269
4684msgid "mentioned users"
4685msgstr ""
4686···4716msgid "Message from @{0}: {1}"
4717msgstr ""
47184719+#: src/view/com/posts/PostFeedErrorMessage.tsx:205
4720msgid "Message from server: {0}"
4721msgstr ""
4722···4737msgid "Messages"
4738msgstr ""
47394740+#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:101
4741msgctxt "Name of app icon variant"
4742msgid "Midnight"
4743msgstr ""
···5193msgid "No one"
5194msgstr ""
51955196+#: src/components/WhoCanReply.tsx:252
5197msgid "No one but the author can quote this post."
5198msgstr ""
5199···5419msgid "Only .jpg and .png files are supported"
5420msgstr ""
54215422+#: src/components/WhoCanReply.tsx:232
5423msgid "Only {0} can reply."
5424msgstr ""
5425···6057msgid "Posts can be muted based on their text, their tags, or both. We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
6058msgstr ""
60596060+#: src/view/com/posts/PostFeedErrorMessage.tsx:72
6061msgid "Posts hidden"
6062msgstr ""
6063···6361#: src/screens/Settings/Settings.tsx:556
6362#: src/view/com/feeds/FeedSourceCard.tsx:322
6363#: src/view/com/modals/UserAddRemoveLists.tsx:235
6364+#: src/view/com/posts/PostFeedErrorMessage.tsx:217
6365msgid "Remove"
6366msgstr ""
6367···63986399#: src/view/com/posts/FeedShutdownMsg.tsx:116
6400#: src/view/com/posts/FeedShutdownMsg.tsx:120
6401+#: src/view/com/posts/PostFeedErrorMessage.tsx:173
6402msgid "Remove feed"
6403msgstr ""
64046405+#: src/view/com/posts/PostFeedErrorMessage.tsx:214
6406msgid "Remove feed?"
6407msgstr ""
6408···6455msgid "Remove subtitle file"
6456msgstr ""
64576458+#: src/view/com/posts/PostFeedErrorMessage.tsx:215
6459msgid "Remove this feed from your saved feeds"
6460msgstr ""
6461···6517msgid "Replies"
6518msgstr ""
65196520+#: src/components/WhoCanReply.tsx:79
6521msgid "Replies disabled"
6522msgstr ""
65236524+#: src/components/WhoCanReply.tsx:230
6525msgid "Replies to this post are disabled."
6526msgstr ""
6527···6593msgid "Reply was successfully hidden"
6594msgstr ""
65956596+#: src/components/dms/MessageContextMenu.tsx:171
6597#: src/components/dms/MessagesListBlockedFooter.tsx:85
6598#: src/components/dms/MessagesListBlockedFooter.tsx:92
6599msgid "Report"
···6627msgid "Report list"
6628msgstr ""
66296630+#: src/components/dms/MessageContextMenu.tsx:169
6631msgid "Report message"
6632msgstr ""
6633···7646msgid "Some other feeds you might like"
7647msgstr ""
76487649+#: src/components/WhoCanReply.tsx:80
7650msgid "Some people can reply"
7651msgstr ""
7652···7871msgid "Suggestive"
7872msgstr ""
78737874+#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:72
7875msgctxt "Name of app icon variant"
7876msgid "Sunrise"
7877msgstr ""
78787879+#: src/screens/Settings/AppIconSettings/useAppIconSets.ts:86
7880msgctxt "Name of app icon variant"
7881msgid "Sunset"
7882msgstr ""
···8165msgstr ""
81668167#: src/screens/Search/Explore.tsx:990
8168+#: src/view/com/posts/PostFeed.tsx:656
8169msgid "There was an issue fetching posts. Tap here to try again."
8170msgstr ""
8171···8186msgid "There was an issue fetching your service info"
8187msgstr ""
81888189+#: src/view/com/posts/PostFeedErrorMessage.tsx:149
8190msgid "There was an issue removing this feed. Please check your internet connection and try again."
8191msgstr ""
8192···8295msgid "This content is not available because one of the users involved has blocked the other."
8296msgstr ""
82978298+#: src/view/com/posts/PostFeedErrorMessage.tsx:118
8299msgid "This content is not viewable without a Bluesky account."
8300msgstr ""
8301···8319msgid "This feature is not available while using an App Password. Please sign in with your main password."
8320msgstr ""
83218322+#: src/view/com/posts/PostFeedErrorMessage.tsx:124
8323msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
8324msgstr ""
8325···8387msgid "This post claims to have been created on <0>{0}</0>, but was first seen by Bluesky on <1>{1}</1>."
8388msgstr ""
83898390+#: src/components/WhoCanReply.tsx:223
8391msgid "This post has an unknown type of threadgate on it. Your app may be out of date."
8392msgstr ""
8393···8558msgid "Topic"
8559msgstr ""
85608561+#: src/components/dms/MessageContextMenu.tsx:142
8562+#: src/components/dms/MessageContextMenu.tsx:144
8563#: src/components/PostControls/PostMenu/PostMenuItems.tsx:444
8564#: src/components/PostControls/PostMenu/PostMenuItems.tsx:446
8565#: src/screens/PostThread/components/ThreadItemAnchor.tsx:567
···8984msgid "Username or email address"
8985msgstr ""
89868987+#: src/components/WhoCanReply.tsx:286
8988msgid "users followed by <0>@{0}</0>"
8989msgstr ""
89908991+#: src/components/WhoCanReply.tsx:273
8992msgid "users following <0>@{0}</0>"
8993msgstr ""
8994···9188#: src/components/ProfileHoverCard/index.web.tsx:464
9189#: src/components/ProfileHoverCard/index.web.tsx:484
9190#: src/components/ProfileHoverCard/index.web.tsx:511
9191+#: src/view/com/posts/PostFeedErrorMessage.tsx:179
9192#: src/view/com/util/PostMeta.tsx:91
9193#: src/view/com/util/PostMeta.tsx:126
9194msgid "View profile"
···9416msgid "Which languages would you like to see in your algorithmic feeds?"
9417msgstr ""
94189419+#: src/components/WhoCanReply.tsx:189
9420msgid "Who can interact with this post?"
9421msgstr ""
94229423+#: src/components/WhoCanReply.tsx:97
9424msgid "Who can reply"
9425msgstr ""
9426
···1+export function GlobalGestureEventsProvider(_props: {
2+ children: React.ReactNode
3+}) {
4+ throw new Error('GlobalGestureEventsProvider is not supported on web.')
5+}
6+7+export function useGlobalGestureEvents() {
8+ throw new Error('useGlobalGestureEvents is not supported on web.')
9+}
···1import {useCallback, useEffect, useState} from 'react'
2import {MMKV} from 'react-native-mmkv'
34-import {Account, Device} from '#/storage/schema'
56export * from '#/storage/schema'
7···83 }
84}
8586-type StorageSchema<T extends Storage<any, any>> = T extends Storage<
87- any,
88- infer U
89->
90- ? U
91- : never
92-type StorageScopes<T extends Storage<any, any>> = T extends Storage<
93- infer S,
94- any
95->
96- ? S
97- : never
9899/**
100 * Hook to use a storage instance. Acts like a useState hook, but persists the
···1import {useCallback, useEffect, useState} from 'react'
2import {MMKV} from 'react-native-mmkv'
34+import {type Account, type Device} from '#/storage/schema'
56export * from '#/storage/schema'
7···83 }
84}
8586+type StorageSchema<T extends Storage<any, any>> =
87+ T extends Storage<any, infer U> ? U : never
88+type StorageScopes<T extends Storage<any, any>> =
89+ T extends Storage<infer S, any> ? S : never
000000009091/**
92 * Hook to use a storage instance. Acts like a useState hook, but persists the
···1import React, {useCallback, useEffect, useState} from 'react'
2import {
3 Image,
4- ImageStyle,
5 Pressable,
6 StyleSheet,
7 TouchableOpacity,
8 TouchableWithoutFeedback,
9 View,
10- ViewStyle,
11} from 'react-native'
12import {
13 FontAwesomeIcon,
14- FontAwesomeIconStyle,
15} from '@fortawesome/react-native-fontawesome'
16import {msg} from '@lingui/macro'
17import {useLingui} from '@lingui/react'
···21import {colors, s} from '#/lib/styles'
22import {useLightbox, useLightboxControls} from '#/state/lightbox'
23import {Text} from '../util/text/Text'
24-import {ImageSource} from './ImageViewing/@types'
25import ImageDefaultHeader from './ImageViewing/components/ImageDefaultHeader'
2627export function Lightbox() {
···121 img.type === 'circle-avi'
122 ? '50%'
123 : img.type === 'rect-avi'
124- ? '10%'
125- : 0,
126 } as ImageStyle
127 }
128 alt={img.alt}
···1import React, {useCallback, useEffect, useState} from 'react'
2import {
3 Image,
4+ type ImageStyle,
5 Pressable,
6 StyleSheet,
7 TouchableOpacity,
8 TouchableWithoutFeedback,
9 View,
10+ type ViewStyle,
11} from 'react-native'
12import {
13 FontAwesomeIcon,
14+ type FontAwesomeIconStyle,
15} from '@fortawesome/react-native-fontawesome'
16import {msg} from '@lingui/macro'
17import {useLingui} from '@lingui/react'
···21import {colors, s} from '#/lib/styles'
22import {useLightbox, useLightboxControls} from '#/state/lightbox'
23import {Text} from '../util/text/Text'
24+import {type ImageSource} from './ImageViewing/@types'
25import ImageDefaultHeader from './ImageViewing/components/ImageDefaultHeader'
2627export function Lightbox() {
···121 img.type === 'circle-avi'
122 ? '50%'
123 : img.type === 'rect-avi'
124+ ? '10%'
125+ : 0,
126 } as ImageStyle
127 }
128 alt={img.alt}
+2-2
src/view/com/post-thread/PostThreadItem.tsx
···630 showChildReplyLine && !isThreadedChild
631 ? 0
632 : isThreadedChildAdjacentBot
633- ? 4
634- : 8,
635 },
636 ]}>
637 {/* If we are in threaded mode, the avatar is rendered in PostMeta */}
···630 showChildReplyLine && !isThreadedChild
631 ? 0
632 : isThreadedChildAdjacentBot
633+ ? 4
634+ : 8,
635 },
636 ]}>
637 {/* If we are in threaded mode, the avatar is rendered in PostMeta */}
+8-4
src/view/com/posts/PostFeedErrorMessage.tsx
···1import React from 'react'
2import {View} from 'react-native'
3-import {AppBskyActorDefs, AppBskyFeedGetAuthorFeed, AtUri} from '@atproto/api'
00004import {msg as msgLingui, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6import {useNavigation} from '@react-navigation/native'
78import {usePalette} from '#/lib/hooks/usePalette'
9-import {NavigationProp} from '#/lib/routes/types'
10import {cleanError} from '#/lib/strings/errors'
11import {logger} from '#/logger'
12-import {FeedDescriptor} from '#/state/queries/post-feed'
13import {useRemoveFeedMutation} from '#/state/queries/preferences'
14import * as Prompt from '#/components/Prompt'
15import {EmptyState} from '../util/EmptyState'
···119 [KnownError.FeedTooManyRequests]: _l(
120 msgLingui`This feed is currently receiving high traffic and is temporarily unavailable. Please try again later.`,
121 ),
122- }[knownError]),
123 [_l, knownError],
124 )
125 const [_, uri] = feedDesc.split('|')
···1import React from 'react'
2import {View} from 'react-native'
3+import {
4+ type AppBskyActorDefs,
5+ AppBskyFeedGetAuthorFeed,
6+ AtUri,
7+} from '@atproto/api'
8import {msg as msgLingui, Trans} from '@lingui/macro'
9import {useLingui} from '@lingui/react'
10import {useNavigation} from '@react-navigation/native'
1112import {usePalette} from '#/lib/hooks/usePalette'
13+import {type NavigationProp} from '#/lib/routes/types'
14import {cleanError} from '#/lib/strings/errors'
15import {logger} from '#/logger'
16+import {type FeedDescriptor} from '#/state/queries/post-feed'
17import {useRemoveFeedMutation} from '#/state/queries/preferences'
18import * as Prompt from '#/components/Prompt'
19import {EmptyState} from '../util/EmptyState'
···123 [KnownError.FeedTooManyRequests]: _l(
124 msgLingui`This feed is currently receiving high traffic and is temporarily unavailable. Please try again later.`,
125 ),
126+ })[knownError],
127 [_l, knownError],
128 )
129 const [_, uri] = feedDesc.split('|')
+6-6
src/view/com/profile/ProfileMenu.tsx
···495 msg`The account will be able to interact with you after unblocking.`,
496 )
497 : profile.associated?.labeler
498- ? _(
499- msg`Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you.`,
500- )
501- : _(
502- msg`Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.`,
503- )
504 }
505 onConfirm={blockAccount}
506 confirmButtonCta={
···495 msg`The account will be able to interact with you after unblocking.`,
496 )
497 : profile.associated?.labeler
498+ ? _(
499+ msg`Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you.`,
500+ )
501+ : _(
502+ msg`Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.`,
503+ )
504 }
505 onConfirm={blockAccount}
506 confirmButtonCta={
+8-3
src/view/com/util/List.web.tsx
···1import React, {isValidElement, memo, startTransition, useRef} from 'react'
2-import {FlatListProps, StyleSheet, View, ViewProps} from 'react-native'
3-import {ReanimatedScrollEvent} from 'react-native-reanimated/lib/typescript/hook/commonTypes'
0000045import {batchedUpdates} from '#/lib/batchedUpdates'
6import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
···205 behavior: animated ? 'smooth' : 'instant',
206 })
207 },
208- } as any), // TODO: Better types.
209 [getScrollableNode],
210 )
211
···1import React, {isValidElement, memo, startTransition, useRef} from 'react'
2+import {
3+ type FlatListProps,
4+ StyleSheet,
5+ View,
6+ type ViewProps,
7+} from 'react-native'
8+import {type ReanimatedScrollEvent} from 'react-native-reanimated/lib/typescript/hook/commonTypes'
910import {batchedUpdates} from '#/lib/batchedUpdates'
11import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
···210 behavior: animated ? 'smooth' : 'instant',
211 })
212 },
213+ }) as any, // TODO: Better types.
214 [getScrollableNode],
215 )
216