🐛 Fix bugs

This commit is contained in:
2025-10-29 01:50:27 +08:00
parent 1a37d384e6
commit 926ae5402f
5 changed files with 43 additions and 40 deletions

View File

@@ -1,6 +1,7 @@
{ {
"images" : [ "images" : [
{ {
"filename" : "icon.png",
"idiom" : "universal", "idiom" : "universal",
"platform" : "watchos", "platform" : "watchos",
"size" : "1024x1024" "size" : "1024x1024"

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -19,6 +19,7 @@ class ActivityViewModel: ObservableObject {
private let networkService = NetworkService() private let networkService = NetworkService()
let filter: String let filter: String
private var isMock = false private var isMock = false
private var hasFetched = false // Add this
init(filter: String, mockActivities: [SnActivity]? = nil) { init(filter: String, mockActivities: [SnActivity]? = nil) {
self.filter = filter self.filter = filter
@@ -29,10 +30,11 @@ class ActivityViewModel: ObservableObject {
} }
func fetchActivities(token: String, serverUrl: String) async { func fetchActivities(token: String, serverUrl: String) async {
if isMock { return } if isMock || hasFetched { return } // Check hasFetched
guard !isLoading else { return } guard !isLoading else { return }
isLoading = true isLoading = true
errorMessage = nil errorMessage = nil
hasFetched = true // Set hasFetched
do { do {
let fetchedActivities = try await networkService.fetchActivities(filter: filter, token: token, serverUrl: serverUrl) let fetchedActivities = try await networkService.fetchActivities(filter: filter, token: token, serverUrl: serverUrl)
@@ -40,6 +42,7 @@ class ActivityViewModel: ObservableObject {
} catch { } catch {
self.errorMessage = error.localizedDescription self.errorMessage = error.localizedDescription
print("[watchOS] fetchActivities failed with error: \(error)") print("[watchOS] fetchActivities failed with error: \(error)")
hasFetched = false // Reset on error
} }
isLoading = false isLoading = false

View File

@@ -37,24 +37,27 @@ struct ActivityListView: View {
switch activity.type { switch activity.type {
case "posts.new", "posts.new.replies": case "posts.new", "posts.new.replies":
if case .post(let post) = activity.data { if case .post(let post) = activity.data {
NavigationLink(destination: PostDetailView(post: post)) { NavigationLink(
destination: PostDetailView(post: post).environmentObject(appState)
) {
PostRowView(post: post) PostRowView(post: post)
} }
} }
case "discovery": case "discovery":
if case .discovery(let discoveryData) = activity.data { if case .discovery(let discoveryData) = activity.data {
DiscoveryView(discoveryData: discoveryData) DiscoveryView(discoveryData: discoveryData)
} }
default: default:
Text("Unknown activity type: \(activity.type)") Text("Unknown activity type: \(activity.type)")
} }
} }
} }
} }
.task { .onAppear {
// Only fetch if appState is ready and token/serverUrl are available
if appState.isReady, let token = appState.token, let serverUrl = appState.serverUrl { if appState.isReady, let token = appState.token, let serverUrl = appState.serverUrl {
await viewModel.fetchActivities(token: token, serverUrl: serverUrl) Task.detached {
await viewModel.fetchActivities(token: token, serverUrl: serverUrl)
}
} }
} }
.navigationTitle(viewModel.filter) .navigationTitle(viewModel.filter)

View File

@@ -11,53 +11,49 @@ import SwiftUI
struct ExploreView: View { struct ExploreView: View {
@StateObject private var appState = AppState() @StateObject private var appState = AppState()
@State private var isComposing = false @State private var isComposing = false
@State private var selectedTab: String = "Explore"
var body: some View { var body: some View {
NavigationStack { NavigationStack {
Group { if appState.isReady {
if appState.isReady { TabView(selection: $selectedTab) {
TabView { ActivityListView(filter: "Explore")
NavigationStack { .tag("Explore")
ActivityListView(filter: "Explore")
}
.tabItem { .tabItem {
Label("Explore", systemImage: "safari") Label("Explore", systemImage: "safari")
} }
NavigationStack { ActivityListView(filter: "Subscriptions")
ActivityListView(filter: "Subscriptions") .tag("Subscriptions")
}
.tabItem { .tabItem {
Label("Subscriptions", systemImage: "star") Label("Subscriptions", systemImage: "star")
} }
NavigationStack { ActivityListView(filter: "Friends")
ActivityListView(filter: "Friends") .tag("Friends")
}
.tabItem { .tabItem {
Label("Friends", systemImage: "person.2") Label("Friends", systemImage: "person.2")
} }
} }
.environmentObject(appState) .navigationTitle(selectedTab)
} else { .toolbar {
ProgressView { Text("Connecting to phone...") } ToolbarItem(placement: .primaryAction) {
.onAppear { Button(action: { isComposing = true }) {
appState.requestData() Label("Compose", systemImage: "plus")
} }
}
}
.navigationTitle("Explore")
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button(action: { isComposing = true }) {
Label("Compose", systemImage: "plus")
} }
} }
.environmentObject(appState)
} else {
ProgressView { Text("Connecting to phone...") }
.onAppear {
appState.requestData()
}
} }
.sheet(isPresented: $isComposing) { }
ComposePostView() .sheet(isPresented: $isComposing) {
.environmentObject(appState) ComposePostView()
} .environmentObject(appState)
} }
} }
} }