diff --git a/app.json b/app.json
index 0e5bb2e038..bc0483c267 100644
--- a/app.json
+++ b/app.json
@@ -2,7 +2,7 @@
"expo": {
"name": "bluesky",
"slug": "bluesky",
- "version": "1.11.0",
+ "version": "1.12.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "light",
diff --git a/ios/bluesky/Info.plist b/ios/bluesky/Info.plist
index f58ed1b557..28a15c6f04 100644
--- a/ios/bluesky/Info.plist
+++ b/ios/bluesky/Info.plist
@@ -21,7 +21,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 1.11
+ 1.12
CFBundleSignature
????
CFBundleURLTypes
diff --git a/package.json b/package.json
index 2ac5367a4c..3c99d35101 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "bsky.app",
- "version": "1.11.0",
+ "version": "1.12.0",
"private": true,
"scripts": {
"postinstall": "patch-package",
@@ -21,7 +21,7 @@
"e2e:run": "detox test --configuration ios.sim.debug --take-screenshots all"
},
"dependencies": {
- "@atproto/api": "0.2.0",
+ "@atproto/api": "0.2.1",
"@bam.tech/react-native-image-resizer": "^3.0.4",
"@expo/webpack-config": "^18.0.1",
"@fortawesome/fontawesome-svg-core": "^6.1.1",
diff --git a/src/state/models/cache/my-follows.ts b/src/state/models/cache/my-follows.ts
index 14eeaae21f..eaab829bc4 100644
--- a/src/state/models/cache/my-follows.ts
+++ b/src/state/models/cache/my-follows.ts
@@ -57,6 +57,7 @@ export class MyFollowsCache {
await this.rootStore.agent.app.bsky.graph.follow.list({
repo: this.rootStore.me.did,
rkeyStart,
+ reverse: true,
})
records = records.concat(res.records)
rkeyStart = res.cursor
diff --git a/src/state/models/feed-view.ts b/src/state/models/feed-view.ts
index 8b62c958fe..349723fbbc 100644
--- a/src/state/models/feed-view.ts
+++ b/src/state/models/feed-view.ts
@@ -5,6 +5,7 @@ import {
AppBskyFeedPost,
AppBskyFeedGetAuthorFeed as GetAuthorFeed,
RichText,
+ jsonToLex,
} from '@atproto/api'
import AwaitLock from 'await-lock'
import {bundleAsync} from 'lib/async/bundle'
@@ -50,12 +51,16 @@ export class FeedItemModel {
this.postRecord = this.post.record
this.richText = new RichText(this.postRecord, {cleanNewlines: true})
} else {
+ this.postRecord = undefined
+ this.richText = undefined
rootStore.log.warn(
'Received an invalid app.bsky.feed.post record',
valid.error,
)
}
} else {
+ this.postRecord = undefined
+ this.richText = undefined
rootStore.log.warn(
'app.bsky.feed.getTimeline or app.bsky.feed.getAuthorFeed served an unexpected record type',
this.post.record,
@@ -634,6 +639,6 @@ async function getGoodStuff(
return {
success: res.status === 200,
headers: resHeaders,
- data: resBody,
+ data: jsonToLex(resBody),
}
}
diff --git a/src/state/models/likes-view.ts b/src/state/models/likes-view.ts
index 5f9df692ef..80e0be0ef4 100644
--- a/src/state/models/likes-view.ts
+++ b/src/state/models/likes-view.ts
@@ -97,7 +97,7 @@ export class LikesViewModel {
this.hasLoaded = true
this.error = cleanError(err)
if (err) {
- this.rootStore.log.error('Failed to fetch votes', err)
+ this.rootStore.log.error('Failed to fetch likes', err)
}
}
diff --git a/src/state/models/notifications-view.ts b/src/state/models/notifications-view.ts
index 4f7a52fd9c..7089f0125a 100644
--- a/src/state/models/notifications-view.ts
+++ b/src/state/models/notifications-view.ts
@@ -13,7 +13,7 @@ import {RootStoreModel} from './root-store'
import {PostThreadViewModel} from './post-thread-view'
import {cleanError} from 'lib/strings/errors'
-const GROUPABLE_REASONS = ['vote', 'repost', 'follow']
+const GROUPABLE_REASONS = ['like', 'repost', 'follow']
const PAGE_SIZE = 30
const MS_1HR = 1e3 * 60 * 60
const MS_2DAY = MS_1HR * 48
diff --git a/src/view/com/post-thread/PostLikedBy.tsx b/src/view/com/post-thread/PostLikedBy.tsx
index 9fb46702e7..3ca147b8dd 100644
--- a/src/view/com/post-thread/PostLikedBy.tsx
+++ b/src/view/com/post-thread/PostLikedBy.tsx
@@ -8,7 +8,7 @@ import {ProfileCardWithFollowBtn} from '../profile/ProfileCard'
import {useStores} from 'state/index'
import {usePalette} from 'lib/hooks/usePalette'
-export const PostLikedBy = observer(function PostVotedBy({uri}: {uri: string}) {
+export const PostLikedBy = observer(function ({uri}: {uri: string}) {
const pal = usePalette('default')
const store = useStores()
const view = React.useMemo(
@@ -17,7 +17,7 @@ export const PostLikedBy = observer(function PostVotedBy({uri}: {uri: string}) {
)
useEffect(() => {
- view.loadMore().catch(err => store.log.error('Failed to fetch votes', err))
+ view.loadMore().catch(err => store.log.error('Failed to fetch likes', err))
}, [view, store.log])
const onRefresh = () => {
@@ -26,7 +26,7 @@ export const PostLikedBy = observer(function PostVotedBy({uri}: {uri: string}) {
const onEndReached = () => {
view
.loadMore()
- .catch(err => view?.rootStore.log.error('Failed to load more votes', err))
+ .catch(err => view?.rootStore.log.error('Failed to load more likes', err))
}
if (!view.hasLoaded) {
diff --git a/yarn.lock b/yarn.lock
index 111e800f64..bfad9d5b3f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -19,7 +19,7 @@
jsonpointer "^5.0.0"
leven "^3.1.0"
-"@atproto/api@*", "@atproto/api@0.2.0":
+"@atproto/api@*":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.2.0.tgz#4a60f8f1de91105ad93526d69abcf011bbeaa3be"
integrity sha512-AntqYOVrMalBJapnNBV0akh/PWcsKdWq8zfuvv8hZW/jwOkJTVPTRFOP2OHJFcfz4WezytX43ml/L2kSG9z4+Q==
@@ -30,6 +30,17 @@
tlds "^1.234.0"
typed-emitter "^2.1.0"
+"@atproto/api@0.2.1":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.2.1.tgz#034cab5928e1a6b0059e7237f6a82c57daadb264"
+ integrity sha512-ub92BFrHrm/r1En9IedqRc9r9BZy0i7J8mmFZ5EMxRJwdCJeMYB8CdmLfgNXQcsTPswbYF94pyZkrpeQNJWr1A==
+ dependencies:
+ "@atproto/common-web" "*"
+ "@atproto/uri" "*"
+ "@atproto/xrpc" "*"
+ tlds "^1.234.0"
+ typed-emitter "^2.1.0"
+
"@atproto/auth@*":
version "0.0.1"
resolved "https://registry.yarnpkg.com/@atproto/auth/-/auth-0.0.1.tgz#0ae07bfb6e4e86605504a20f0302e448ba3f8b0e"