mirror of
https://github.com/lumaa-dev/BubbleApp.git
synced 2025-02-03 11:57:57 +01:00
Usage of FetchTimeline
This commit is contained in:
parent
4b640c76a0
commit
7c059fa652
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user