Add a fast refresh option

This commit is contained in:
Thomas Ricouard 2023-12-01 08:51:19 +01:00
parent f89b3d2761
commit b249b37612
4 changed files with 136 additions and 3 deletions

View file

@ -200,6 +200,9 @@ struct SettingsTabs: View {
Toggle(isOn: $preferences.soundEffectEnabled) { Toggle(isOn: $preferences.soundEffectEnabled) {
Label("settings.other.sound-effect", systemImage: "hifispeaker") Label("settings.other.sound-effect", systemImage: "hifispeaker")
} }
Toggle(isOn: $preferences.fastRefreshEnabled) {
Label("settings.other.fast-refresh", systemImage: "arrow.clockwise")
}
} }
.listRowBackground(theme.primaryBackgroundColor) .listRowBackground(theme.primaryBackgroundColor)
} }

View file

@ -47199,6 +47199,124 @@
} }
} }
}, },
"settings.other.fast-refresh" : {
"localizations" : {
"be" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"ca" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"de" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Fast refresh"
}
},
"en-GB" : {
"stringUnit" : {
"state" : "translated",
"value" : "Fast refresh"
}
},
"es" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"eu" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Fast refresh"
}
},
"it" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"ja" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"ko" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"nb" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"nl" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"pl" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"tr" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"uk" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "Fast refresh"
}
}
}
},
"settings.other.hide-openai" : { "settings.other.hide-openai" : {
"localizations" : { "localizations" : {
"be" : { "be" : {
@ -71483,4 +71601,4 @@
} }
}, },
"version" : "1.0" "version" : "1.0"
} }

View file

@ -53,6 +53,8 @@ import SwiftUI
@AppStorage("collapse-long-posts") public var collapseLongPosts = true @AppStorage("collapse-long-posts") public var collapseLongPosts = true
@AppStorage("share-button-behavior") public var shareButtonBehavior: PreferredShareButtonBehavior = .linkAndText @AppStorage("share-button-behavior") public var shareButtonBehavior: PreferredShareButtonBehavior = .linkAndText
@AppStorage("fast_refresh") public var fastRefreshEnabled: Bool = false
init() {} init() {}
} }
@ -289,6 +291,12 @@ import SwiftUI
storage.shareButtonBehavior = shareButtonBehavior storage.shareButtonBehavior = shareButtonBehavior
} }
} }
public var fastRefreshEnabled: Bool {
didSet {
storage.fastRefreshEnabled = fastRefreshEnabled
}
}
public enum SwipeActionsIconStyle: String, CaseIterable { public enum SwipeActionsIconStyle: String, CaseIterable {
case iconWithText, iconOnly case iconWithText, iconOnly
@ -455,5 +463,6 @@ import SwiftUI
shareButtonBehavior = storage.shareButtonBehavior shareButtonBehavior = storage.shareButtonBehavior
pendingShownAtBottom = storage.pendingShownAtBottom pendingShownAtBottom = storage.pendingShownAtBottom
pendingShownLeft = storage.pendingShownLeft pendingShownLeft = storage.pendingShownLeft
fastRefreshEnabled = storage.fastRefreshEnabled
} }
} }

View file

@ -159,7 +159,7 @@ extension TimelineViewModel {
extension TimelineViewModel: StatusesFetcher { extension TimelineViewModel: StatusesFetcher {
func pullToRefresh() async { func pullToRefresh() async {
timelineTask?.cancel() timelineTask?.cancel()
if !timeline.supportNewestPagination { if !timeline.supportNewestPagination || UserPreferences.shared.fastRefreshEnabled {
await reset() await reset()
} }
await fetchNewestStatuses() await fetchNewestStatuses()
@ -168,6 +168,9 @@ extension TimelineViewModel: StatusesFetcher {
func refreshTimeline() { func refreshTimeline() {
timelineTask?.cancel() timelineTask?.cancel()
timelineTask = Task { timelineTask = Task {
if UserPreferences.shared.fastRefreshEnabled {
await reset()
}
await fetchNewestStatuses() await fetchNewestStatuses()
} }
} }
@ -199,7 +202,7 @@ extension TimelineViewModel: StatusesFetcher {
// Else we fetch top most page from the API. // Else we fetch top most page from the API.
if let cachedStatuses = await getCachedStatuses(), if let cachedStatuses = await getCachedStatuses(),
!cachedStatuses.isEmpty, !cachedStatuses.isEmpty,
timeline == .home timeline == .home && !UserPreferences.shared.fastRefreshEnabled
{ {
await datasource.set(cachedStatuses) await datasource.set(cachedStatuses)
if let latestSeenId = await cache.getLatestSeenStatus(for: client)?.last, if let latestSeenId = await cache.getLatestSeenStatus(for: client)?.last,