Skip to content

Commit 618589a

Browse files
committed
Modify itmeline load more logic
1 parent 96f99a7 commit 618589a

17 files changed

Lines changed: 120 additions & 74 deletions

iosApp/iosApp/UI/DataLayer/PagingStateConverter.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ class PagingStateConverter {
99
/// 转换队列
1010
private let conversionQueue = DispatchQueue(label: "timeline.state.converter", qos: .userInitiated)
1111

12-
/// 缓存变量
1312
private var convertedItems: [TimelineItem] = []
1413

1514
init() {
@@ -108,7 +107,17 @@ class PagingStateConverter {
108107
// 执行增量转换:从当前缓存大小开始转换新数据
109108
let startIndex = convertedItems.count
110109
guard maxConvertibleIndex > startIndex else {
111-
FlareLog.debug("[PagingStateConverter] 无新数据需要转换")
110+
if maxConvertibleIndex > 0, let firstNewItem = successState.peek(index: 0) {
111+
let firstNewItemId = firstNewItem.itemKey
112+
let firstOldItemId = convertedItems.first?.id
113+
114+
if firstNewItemId != firstOldItemId {
115+
FlareLog.debug("[PagingStateConverter] 检测到数据内容变化,执行全量转换")
116+
return performConversion(successState, isFullConversion: true)
117+
}
118+
}
119+
120+
FlareLog.debug("[PagingStateConverter] 无新数据需要转换,当前缓存: \(startIndex), KMP总数: \(maxConvertibleIndex)")
112121
return generateFilteredState(successState)
113122
}
114123

iosApp/iosApp/UI/Navigation/FlareRootView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ struct FlareRootView: View {
4343
destination: destination,
4444
router: router
4545
).environment(theme)
46-
.applyTheme(theme)
46+
.applyTheme(theme)
4747
.environment(appState)
4848
}
4949
}

iosApp/iosApp/UI/Page/Compose/TimelineV2/TimelineItemsViewV2.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ struct TimelineItemsViewV2: View {
1717
ForEach(Array(items.enumerated()), id: \.element.id) { index, item in
1818
TimelineStatusViewV2(
1919
item: item,
20-
index: index,
20+
index: index
2121
// presenter: presenter,
2222
// scrollPositionID: $scrollPositionID,
2323
// onError: onError

iosApp/iosApp/UI/Page/Home/Data/AppBarNotificationService.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import SwiftUI
55

66
// 通知管理服务
77
class AppBarNotificationService {
8-
98
// 发送标签更新通知
109
func postTabsDidUpdateNotification(updatedTabKey: String? = nil, newTitle: String? = nil) {
1110
var userInfo: [String: Any]?

iosApp/iosApp/UI/Page/Home/Data/AppBarTabSettingStore.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ extension Notification.Name {
1010
}
1111

1212
class AppBarTabSettingStore: ObservableObject, TabStateProvider {
13-
1413
static let shared = AppBarTabSettingStore(accountType: AccountTypeGuest())
1514

1615
@Published var primaryHomeItems: [FLTabItem] = [] // 主要标签(不可更改状态)Appbar 第一个Home 标签

iosApp/iosApp/UI/Page/Home/Data/ListTabManager.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import shared
44
import SwiftUI
55

66
class ListTabManager {
7-
87
func moveListTab(
98
from source: IndexSet,
109
to destination: Int,

iosApp/iosApp/UI/Page/Home/Model/TimelineExtState.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ import SwiftUI
22

33
class TimelineExtState: ObservableObject {
44
@Published var scrollToTopTrigger = false
5-
@Published var showFloatingButton = false
5+
@Published var showFloatingButton = false
66
}

iosApp/iosApp/UI/Page/Home/View/AppBar/AppBarSettingTabItemRowView.swift

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import os
33
import shared
44
import SwiftUI
55

6-
76
struct AppBarSettingRow: View {
87
let tab: FLTabItem
98
let store: AppBarTabSettingStore
@@ -15,7 +14,6 @@ struct AppBarSettingRow: View {
1514

1615
@Environment(FlareTheme.self) private var theme
1716

18-
1917
init(tab: FLTabItem, store: AppBarTabSettingStore, isPrimary: Bool, defaultToggleValue: Bool = true) {
2018
self.tab = tab
2119
self.store = store
@@ -57,32 +55,32 @@ struct AppBarSettingRow: View {
5755

5856
if !isPrimary {
5957
Toggle(
60-
"",
61-
isOn: Binding(
62-
get: {
63-
let isEnabled = store.availableAppBarTabsItems.contains(
64-
where: { $0.key == tab.key
65-
})
66-
FlareLog
67-
.debug(
68-
"Toggle GET: tab=\(tab.key), isEnabled=\(isEnabled), defaultValue=\(defaultToggleValue)"
69-
)
70-
return isEnabled ? true : defaultToggleValue
71-
},
72-
set: { _ in
73-
if !isProcessing {
74-
isProcessing = true
75-
FlareLog.debug("Toggle SET: tab=\(tab.key), 开始切换状态")
76-
store.toggleTab(tab.key)
77-
// 设置短暂延迟避免频繁操作
78-
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
79-
isProcessing = false
80-
FlareLog.debug("Toggle SET: tab=\(tab.key), 切换完成")
58+
"",
59+
isOn: Binding(
60+
get: {
61+
let isEnabled = store.availableAppBarTabsItems.contains(
62+
where: { $0.key == tab.key
63+
})
64+
FlareLog
65+
.debug(
66+
"Toggle GET: tab=\(tab.key), isEnabled=\(isEnabled), defaultValue=\(defaultToggleValue)"
67+
)
68+
return isEnabled ? true : defaultToggleValue
69+
},
70+
set: { _ in
71+
if !isProcessing {
72+
isProcessing = true
73+
FlareLog.debug("Toggle SET: tab=\(tab.key), 开始切换状态")
74+
store.toggleTab(tab.key)
75+
// 设置短暂延迟避免频繁操作
76+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
77+
isProcessing = false
78+
FlareLog.debug("Toggle SET: tab=\(tab.key), 切换完成")
79+
}
8180
}
8281
}
83-
}
82+
)
8483
)
85-
)
8684
.disabled(isProcessing)
8785
}
8886
}
@@ -96,13 +94,12 @@ struct ListTabItemRowRow: View {
9694
let store: AppBarTabSettingStore
9795
let onRequestEdit: (String, String) -> Void
9896
let isBlueskyFeed: Bool
99-
let defaultToggleValue: Bool
97+
let defaultToggleValue: Bool
10098

10199
@Environment(FlareTheme.self) private var theme
102100
@State private var isProcessing = false
103101
@State private var currentTitle: String
104102

105-
106103
init(listId: String, title: String, store: AppBarTabSettingStore, onRequestEdit: @escaping (String, String) -> Void, isBlueskyFeed: Bool = false, defaultToggleValue: Bool = true) {
107104
self.listId = listId
108105
self.title = title

iosApp/iosApp/UI/Page/Home/View/AppBar/AppBarViewSwiftUI.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,8 @@ struct AppBarViewSwiftUI: View {
4343
}
4444
.frame(width: 44)
4545
.padding(.trailing, 8)
46-
}
46+
}
4747
}
4848
.frame(height: 44)
49-
5049
}
5150
}

iosApp/iosApp/UI/Page/Home/View/AppBar/HomeAppBarSettingsView.swift

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,33 @@ import os
33
import shared
44
import SwiftUI
55

6-
private let logger = Logger(subsystem: "com.flare.app", category: "HomeAppBarSettingsView")
7-
86
struct HomeAppBarSettingsView: View {
97
@Environment(\.dismiss) var dismiss
108
@ObservedObject var store: AppBarTabSettingStore = .shared
119

12-
// 添加列表 presenter 状态
10+
// 列表 presenter 状态
1311
@State private var listPresenter: AllListPresenter
1412
@State private var lastListState: AllListState?
1513
@State private var isActionInProgress = false
1614

17-
// 添加Feeds presenter状态(只用于Bluesky)
15+
// Feeds presenter状态(只用于Bluesky)
1816
@State private var feedsPresenter: PinnableTimelineTabPresenter?
1917
@State private var lastFeedsState: PinnableTimelineTabPresenterState?
2018
@State private var isBlueskyPlatform: Bool = false
2119

22-
// 添加编辑标题所需的状态
20+
// 编辑标题所需的状态
2321
@State private var isEditingTitle = false
2422
@State private var editingList: UiList?
2523
@State private var editedTitle = ""
2624

27-
// 添加使用ID和标题更新的状态
25+
// 使用ID和标题更新的状态
2826
@State private var editingListId: String?
2927
@State private var editingListTitle: String = ""
3028

31-
// 添加新字段以标识编辑的是Feed还是List
29+
// 新字段以标识编辑的是Feed还是List
3230
@State private var editingItemIsBlueskyFeed: Bool = false
3331

34-
// 添加折叠相关状态
32+
// 折叠相关状态
3533
@State private var isAvailableListsExpanded: Bool = false
3634
@State private var isAvailableFeedsExpanded: Bool = false
3735
@State private var availableListsLimit: Int = 5 // 默认显示数量限制
@@ -725,7 +723,7 @@ struct HomeAppBarSettingsView: View {
725723

726724
// 先设置处理状态,防止并发操作
727725
isActionInProgress = true
728-
logger.debug("更新列表标题: \(list.id) 从 '\(list.title)' 到 '\(newTitle)'")
726+
FlareLog.debug("更新列表标题: \(list.id) 从 '\(list.title)' 到 '\(newTitle)'")
729727

730728
// 这里只更新本地存储的标题,不调用API
731729
NotificationCenter.default.post(
@@ -755,7 +753,7 @@ struct HomeAppBarSettingsView: View {
755753

756754
// 先设置处理状态,防止并发操作
757755
isActionInProgress = true
758-
logger.debug("更新标题: \(listId) 从 '\(oldTitle)' 到 '\(newTitle)'")
756+
FlareLog.debug("更新标题: \(listId) 从 '\(oldTitle)' 到 '\(newTitle)'")
759757

760758
// 这里只更新本地存储的标题,不调用API
761759
NotificationCenter.default.post(

0 commit comments

Comments
 (0)