Usage of FetchTimeline

This commit is contained in:
Lumaa 2024-01-06 02:51:07 +01:00
parent 4b640c76a0
commit 7c059fa652

View File

@ -3,8 +3,8 @@
import Foundation
struct FetchTimeline {
var client: Client
private var datasource: [Status] = []
var client: Client?
public private(set) var datasource: [Status] = []
public var statusesState: LoadingState = .loading
private var timeline: TimelineFilter = .home
@ -13,14 +13,39 @@ struct FetchTimeline {
self.client = client
}
public mutating func fetch(client: Client) async {
self.statusesState = .loading
self.datasource = await fetchNewestStatuses()
init() {
self.client = nil
}
private mutating func fetchNewestStatuses() async -> [Status] {
public mutating func fetch(client: Client) async -> [Status] {
self.client = client
self.statusesState = .loading
self.datasource = await fetchNewestStatuses()
self.statusesState = .loaded
return self.datasource
}
public mutating func addStatuses(lastStatusIndex: Int) async -> [Status] {
print("i: \(lastStatusIndex)\ndatasource-6: \(self.datasource.count - 6)")
guard client != nil && lastStatusIndex >= self.datasource.count - 6 else { return self.datasource }
self.statusesState = .loading
let lastStatus = self.datasource.last!
let newStatuses: [Status] = await fetchNewestStatuses(lastStatusId: lastStatus.id)
self.datasource.append(contentsOf: newStatuses)
self.statusesState = .loaded
print("added posts")
return self.datasource
}
private mutating func fetchNewestStatuses(lastStatusId: String? = nil) async -> [Status] {
guard client != nil else { return [] }
do {
let statuses: [Status] = try await client.get(endpoint: timeline.endpoint(sinceId: nil, maxId: nil, minId: nil, offset: 0))
let statuses: [Status] = try await client!.get(endpoint: timeline.endpoint(sinceId: nil, maxId: lastStatusId, minId: nil, offset: 0))
if lastStatusId == nil {
self.datasource = statuses
}
self.statusesState = .loaded
return statuses
} catch {