pref: 楼中楼 API 不强制要求 `forumId` 和 `postId`

This commit is contained in:
HuanCheng65 2023-07-17 12:45:39 +08:00
parent 2cf960e88a
commit f8c6df25cd
No known key found for this signature in database
GPG Key ID: 5EC9DD60A32C7360
6 changed files with 23 additions and 25 deletions

View File

@ -1285,9 +1285,9 @@ interface ITiebaApi {
* @param subPostId 楼中楼回复 ID * @param subPostId 楼中楼回复 ID
*/ */
fun pbFloorFlow( fun pbFloorFlow(
forumId: Long,
threadId: Long, threadId: Long,
postId: Long, postId: Long,
forumId: Long = 0L,
page: Int = 1, page: Int = 1,
subPostId: Long = 0L subPostId: Long = 0L
): Flow<PbFloorResponse> ): Flow<PbFloorResponse>

View File

@ -1110,9 +1110,9 @@ object MixedTiebaApiImpl : ITiebaApi {
} }
override fun pbFloorFlow( override fun pbFloorFlow(
forumId: Long,
threadId: Long, threadId: Long,
postId: Long, postId: Long,
forumId: Long,
page: Int, page: Int,
subPostId: Long subPostId: Long
): Flow<PbFloorResponse> { ): Flow<PbFloorResponse> {

View File

@ -63,10 +63,10 @@ import kotlinx.coroutines.delay
@Composable @Composable
fun SubPostsPage( fun SubPostsPage(
navigator: DestinationsNavigator, navigator: DestinationsNavigator,
forumId: Long,
threadId: Long, threadId: Long,
postId: Long, forumId: Long = 0L,
subPostsId: Long = 0L, postId: Long = 0L,
subPostId: Long = 0L,
loadFromSubPost: Boolean = false, loadFromSubPost: Boolean = false,
viewModel: SubPostsViewModel = pageViewModel() viewModel: SubPostsViewModel = pageViewModel()
) { ) {
@ -76,7 +76,7 @@ fun SubPostsPage(
forumId = forumId, forumId = forumId,
threadId = threadId, threadId = threadId,
postId = postId, postId = postId,
subPostsId = subPostsId, subPostId = subPostId,
loadFromSubPost = loadFromSubPost loadFromSubPost = loadFromSubPost
) )
} }
@ -88,10 +88,10 @@ fun SubPostsPage(
@Composable @Composable
fun SubPostsSheetPage( fun SubPostsSheetPage(
navigator: DestinationsNavigator, navigator: DestinationsNavigator,
forumId: Long,
threadId: Long, threadId: Long,
postId: Long, forumId: Long = 0L,
subPostsId: Long = 0L, postId: Long = 0L,
subPostId: Long = 0L,
loadFromSubPost: Boolean = false, loadFromSubPost: Boolean = false,
viewModel: SubPostsViewModel = pageViewModel() viewModel: SubPostsViewModel = pageViewModel()
) { ) {
@ -101,7 +101,7 @@ fun SubPostsSheetPage(
forumId = forumId, forumId = forumId,
threadId = threadId, threadId = threadId,
postId = postId, postId = postId,
subPostsId = subPostsId, subPostId = subPostId,
loadFromSubPost = loadFromSubPost loadFromSubPost = loadFromSubPost
) )
} }
@ -114,7 +114,7 @@ internal fun SubPostsContent(
forumId: Long, forumId: Long,
threadId: Long, threadId: Long,
postId: Long, postId: Long,
subPostsId: Long = 0L, subPostId: Long = 0L,
loadFromSubPost: Boolean = false, loadFromSubPost: Boolean = false,
) { ) {
val navigator = LocalNavigator.current val navigator = LocalNavigator.current
@ -125,7 +125,9 @@ internal fun SubPostsContent(
forumId, forumId,
threadId, threadId,
postId, postId,
subPostId = subPostsId.takeIf { loadFromSubPost } ?: 0L)) subPostId.takeIf { loadFromSubPost } ?: 0L
)
)
} }
val isRefreshing by viewModel.uiState.collectPartialAsState( val isRefreshing by viewModel.uiState.collectPartialAsState(
@ -164,12 +166,8 @@ internal fun SubPostsContent(
val lazyListState = rememberLazyListState() val lazyListState = rememberLazyListState()
viewModel.onEvent<SubPostsUiEvent.ScrollToSubPosts> { viewModel.onEvent<SubPostsUiEvent.ScrollToSubPosts> {
if (!loadFromSubPost) {
delay(20) delay(20)
lazyListState.scrollToItem(2 + subPosts.indexOfFirst { it.get { id } == subPostsId }) lazyListState.scrollToItem(2 + subPosts.indexOfFirst { it.get { id } == subPostId })
} else {
lazyListState.scrollToItem(1)
}
} }
StateScreen( StateScreen(
@ -206,8 +204,8 @@ internal fun SubPostsContent(
forumId, forumId,
threadId, threadId,
postId, postId,
subPostId,
currentPage + 1, currentPage + 1,
subPostsId,
) )
) )
} }

View File

@ -61,7 +61,7 @@ class SubPostsViewModel @Inject constructor() :
private fun SubPostsUiIntent.Load.producePartialChange(): Flow<SubPostsPartialChange.Load> = private fun SubPostsUiIntent.Load.producePartialChange(): Flow<SubPostsPartialChange.Load> =
TiebaApi.getInstance() TiebaApi.getInstance()
.pbFloorFlow(forumId, threadId, postId, page, subPostId) .pbFloorFlow(threadId, postId, forumId, page, subPostId)
.map<PbFloorResponse, SubPostsPartialChange.Load> { response -> .map<PbFloorResponse, SubPostsPartialChange.Load> { response ->
val post = checkNotNull(response.data_?.post) val post = checkNotNull(response.data_?.post)
val page = checkNotNull(response.data_?.page) val page = checkNotNull(response.data_?.page)
@ -81,7 +81,7 @@ class SubPostsViewModel @Inject constructor() :
private fun SubPostsUiIntent.LoadMore.producePartialChange(): Flow<SubPostsPartialChange.LoadMore> = private fun SubPostsUiIntent.LoadMore.producePartialChange(): Flow<SubPostsPartialChange.LoadMore> =
TiebaApi.getInstance() TiebaApi.getInstance()
.pbFloorFlow(forumId, threadId, postId, page, subPostId) .pbFloorFlow(threadId, postId, forumId, page, subPostId)
.map<PbFloorResponse, SubPostsPartialChange.LoadMore> { response -> .map<PbFloorResponse, SubPostsPartialChange.LoadMore> { response ->
val post = checkNotNull(response.data_?.post) val post = checkNotNull(response.data_?.post)
val page = checkNotNull(response.data_?.page) val page = checkNotNull(response.data_?.page)
@ -118,16 +118,16 @@ sealed interface SubPostsUiIntent : UiIntent {
val forumId: Long, val forumId: Long,
val threadId: Long, val threadId: Long,
val postId: Long, val postId: Long,
val subPostId: Long = 0L,
val page: Int = 1, val page: Int = 1,
val subPostId: Long = 0L
) : SubPostsUiIntent ) : SubPostsUiIntent
data class LoadMore( data class LoadMore(
val forumId: Long, val forumId: Long,
val threadId: Long, val threadId: Long,
val postId: Long, val postId: Long,
val subPostId: Long = 0L,
val page: Int = 1, val page: Int = 1,
val subPostId: Long = 0L
) : SubPostsUiIntent ) : SubPostsUiIntent
data class Agree( data class Agree(

View File

@ -1026,7 +1026,7 @@ fun ThreadPage(
forumId = curForumId, forumId = curForumId,
threadId = threadId, threadId = threadId,
postId = item.get { id }, postId = item.get { id },
subPostsId = it, subPostId = it,
loadFromSubPost = false loadFromSubPost = false
) )
) )

View File

@ -8,7 +8,7 @@ import "CommonRequest.proto";
message PbFloorRequestData { message PbFloorRequestData {
int64 kz = 1; int64 kz = 1;
int64 pid = 2; optional int64 pid = 2;
optional int64 spid = 3; optional int64 spid = 3;
int32 pn = 4; int32 pn = 4;
int32 scr_w = 5; int32 scr_w = 5;