diff options
Diffstat (limited to 'Juick/MessageFetcher.swift')
-rw-r--r-- | Juick/MessageFetcher.swift | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Juick/MessageFetcher.swift b/Juick/MessageFetcher.swift new file mode 100644 index 0000000..b478e9e --- /dev/null +++ b/Juick/MessageFetcher.swift @@ -0,0 +1,46 @@ +// +// MessageFetcher.swift +// tst +// +// Created by Vitaly Takmazov on 10.12.2019. +// Copyright © 2019 com.juick. All rights reserved. +// + +import Foundation +import Combine + +class MessageFetcher: ObservableObject { + + typealias Feed = [MessageData] + + struct MessageData : Identifiable { + var id : String { + get { + return "\(message.mid.stringValue)-\(message.rid?.intValue ?? 0)" + } + } + var message : Message + } + + @Published var state: LoadableState<Feed> = .loading + + init(url: String) { + guard let apiUrl = URL(string: url) else { + state = .fetched(.failure(.error("Malformed API URL."))) + return + } + + AppDelegate.shared.api.pullNext(fromPath: url, params: nil) { (messages, error) in + if let error = error { + self.state = .fetched(.failure(.error(error.localizedDescription))) + return + } + + guard let messages = messages else { + self.state = .fetched(.failure(.error("Malformed response data"))) + return + } + self.state = .fetched(.success(messages.map { return MessageData(message: $0) } )) + } + } +} |