🐛 Fix bugs
This commit is contained in:
@@ -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 |
@@ -19,7 +19,8 @@ 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
|
||||||
if let mockActivities = mockActivities {
|
if let mockActivities = mockActivities {
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ import SwiftUI
|
|||||||
struct ActivityListView: View {
|
struct ActivityListView: View {
|
||||||
@StateObject private var viewModel: ActivityViewModel
|
@StateObject private var viewModel: ActivityViewModel
|
||||||
@EnvironmentObject var appState: AppState
|
@EnvironmentObject var appState: AppState
|
||||||
|
|
||||||
init(filter: String, mockActivities: [SnActivity]? = nil) {
|
init(filter: String, mockActivities: [SnActivity]? = nil) {
|
||||||
_viewModel = StateObject(wrappedValue: ActivityViewModel(filter: filter, mockActivities: mockActivities))
|
_viewModel = StateObject(wrappedValue: ActivityViewModel(filter: filter, mockActivities: mockActivities))
|
||||||
}
|
}
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
Group {
|
Group {
|
||||||
if viewModel.isLoading {
|
if viewModel.isLoading {
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user