mirror of https://github.com/oxen-io/session-ios
Clean
parent
7ecfedbf9a
commit
d5e56d9c9f
@ -1,54 +0,0 @@
|
|||||||
|
|
||||||
public final class LokiRSSFeedParser : NSObject, XMLParserDelegate {
|
|
||||||
private let url: URL
|
|
||||||
private var completion: (([Item]) -> Void)?
|
|
||||||
private var tag: Tag?
|
|
||||||
private var currentItem: Item?
|
|
||||||
private var items: [Item] = []
|
|
||||||
|
|
||||||
private enum Tag : String {
|
|
||||||
case item, title, description, date = "pubDate"
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct Item {
|
|
||||||
public var title: String? = nil
|
|
||||||
public var description: String? = nil
|
|
||||||
public var dateAsString: String? = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
public init(url: URL) {
|
|
||||||
self.url = url
|
|
||||||
super.init()
|
|
||||||
}
|
|
||||||
|
|
||||||
public func parse(completion: @escaping (([Item]) -> Void)) {
|
|
||||||
guard let parser = XMLParser(contentsOf: url) else { return }
|
|
||||||
self.completion = completion
|
|
||||||
parser.delegate = self
|
|
||||||
parser.parse()
|
|
||||||
}
|
|
||||||
|
|
||||||
public func parser(_ parser: XMLParser, didStartElement elementAsString: String, namespaceURI: String?, qualifiedName: String?, attributes: [String:String] = [:]) {
|
|
||||||
if let element = Tag(rawValue: elementAsString) { self.tag = element }
|
|
||||||
if tag == .item { currentItem = Item() }
|
|
||||||
}
|
|
||||||
|
|
||||||
public func parser(_ parser: XMLParser, foundCharacters string: String) {
|
|
||||||
guard let element = tag else { return }
|
|
||||||
switch element {
|
|
||||||
case .title: currentItem?.title = string
|
|
||||||
case .description: currentItem?.description = string
|
|
||||||
case .date: currentItem?.dateAsString = string
|
|
||||||
default: break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public func parser(_ parser: XMLParser, didEndElement elementAsString: String, namespaceURI: String?, qualifiedName: String?) {
|
|
||||||
guard let element = Tag(rawValue: elementAsString) else { return }
|
|
||||||
if element == .item, let currentItem = self.currentItem { items.append(currentItem) }
|
|
||||||
}
|
|
||||||
|
|
||||||
public func parserDidEndDocument(_ parser: XMLParser) {
|
|
||||||
completion?(items)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue