Skip to content

Commit 9faa24c

Browse files
committed
fix bluesky bookmark state
1 parent 3e310a4 commit 9faa24c

File tree

3 files changed

+62
-2
lines changed

3 files changed

+62
-2
lines changed

shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDataSource.kt

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2361,10 +2361,23 @@ internal class BlueskyDataSource(
23612361
)
23622362

23632363
override fun bookmark(
2364+
statusKey: MicroBlogKey,
23642365
uri: String,
23652366
cid: String,
23662367
) {
23672368
coroutineScope.launch {
2369+
updateStatusUseCase<StatusContent.Bluesky>(
2370+
statusKey = statusKey,
2371+
accountKey = accountKey,
2372+
cacheDatabase = database,
2373+
) { content ->
2374+
content.copy(
2375+
data =
2376+
content.data.copy(
2377+
viewer = content.data.viewer?.copy(bookmarked = true),
2378+
),
2379+
)
2380+
}
23682381
tryRun {
23692382
service
23702383
.createBookmark(
@@ -2375,12 +2388,40 @@ internal class BlueskyDataSource(
23752388
).requireResponse()
23762389
}.onFailure {
23772390
it.printStackTrace()
2391+
// rollback
2392+
updateStatusUseCase<StatusContent.Bluesky>(
2393+
statusKey = statusKey,
2394+
accountKey = accountKey,
2395+
cacheDatabase = database,
2396+
) { content ->
2397+
content.copy(
2398+
data =
2399+
content.data.copy(
2400+
viewer = content.data.viewer?.copy(bookmarked = false),
2401+
),
2402+
)
2403+
}
23782404
}
23792405
}
23802406
}
23812407

2382-
override fun unbookmark(uri: String) {
2408+
override fun unbookmark(
2409+
statusKey: MicroBlogKey,
2410+
uri: String,
2411+
) {
23832412
coroutineScope.launch {
2413+
updateStatusUseCase<StatusContent.Bluesky>(
2414+
statusKey = statusKey,
2415+
accountKey = accountKey,
2416+
cacheDatabase = database,
2417+
) { content ->
2418+
content.copy(
2419+
data =
2420+
content.data.copy(
2421+
viewer = content.data.viewer?.copy(bookmarked = false),
2422+
),
2423+
)
2424+
}
23842425
tryRun {
23852426
service
23862427
.deleteBookmark(
@@ -2390,6 +2431,19 @@ internal class BlueskyDataSource(
23902431
).requireResponse()
23912432
}.onFailure {
23922433
it.printStackTrace()
2434+
// rollback
2435+
updateStatusUseCase<StatusContent.Bluesky>(
2436+
statusKey = statusKey,
2437+
accountKey = accountKey,
2438+
cacheDatabase = database,
2439+
) { content ->
2440+
content.copy(
2441+
data =
2442+
content.data.copy(
2443+
viewer = content.data.viewer?.copy(bookmarked = true),
2444+
),
2445+
)
2446+
}
23932447
}
23942448
}
23952449
}

shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/StatusEvent.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,15 @@ internal sealed interface StatusEvent {
117117
)
118118

119119
fun bookmark(
120+
statusKey: MicroBlogKey,
120121
uri: String,
121122
cid: String,
122123
)
123124

124-
fun unbookmark(uri: String)
125+
fun unbookmark(
126+
statusKey: MicroBlogKey,
127+
uri: String,
128+
)
125129

126130
fun likeWithResult(
127131
statusKey: MicroBlogKey,

shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Bluesky.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,10 +510,12 @@ internal fun PostView.renderStatus(
510510
onClicked = {
511511
if (viewer?.bookmarked == true) {
512512
event.unbookmark(
513+
statusKey = statusKey,
513514
uri = uri.atUri,
514515
)
515516
} else {
516517
event.bookmark(
518+
statusKey = statusKey,
517519
uri = uri.atUri,
518520
cid = cid.cid,
519521
)

0 commit comments

Comments
 (0)