107 lines
3.9 KiB
Swift
107 lines
3.9 KiB
Swift
|
public struct NavigationState: Codable {
|
||
|
static let libraryKey = "nav_state"
|
||
|
|
||
|
public var viewControllers: [ViewController]
|
||
|
public var shouldAttemptLogin: Bool
|
||
|
|
||
|
public init(viewControllers: [ViewController], shouldAttemptLogin: Bool) {
|
||
|
self.viewControllers = viewControllers
|
||
|
self.shouldAttemptLogin = shouldAttemptLogin
|
||
|
}
|
||
|
|
||
|
public struct ViewController: Codable {
|
||
|
public var kind: Kind
|
||
|
public var presentation: Presentation
|
||
|
public var info: Info?
|
||
|
public var children: [ViewController]
|
||
|
|
||
|
public mutating func updateChildren(_ children: [ViewController]) {
|
||
|
self.children = children
|
||
|
}
|
||
|
|
||
|
public init?(kind: Kind?, presentation: Presentation, info: Info? = nil, children: [ViewController] = []) {
|
||
|
guard let kind = kind else {
|
||
|
return nil
|
||
|
}
|
||
|
self.kind = kind
|
||
|
self.presentation = presentation
|
||
|
self.info = info
|
||
|
self.children = children
|
||
|
}
|
||
|
|
||
|
public enum Kind: Int, Codable {
|
||
|
case tab
|
||
|
|
||
|
case article
|
||
|
case random
|
||
|
case themeableNavigationController
|
||
|
case settings
|
||
|
|
||
|
case account
|
||
|
case talkPage
|
||
|
case talkPageReplyList
|
||
|
|
||
|
case singleWebPage
|
||
|
|
||
|
case readingListDetail
|
||
|
|
||
|
case detail
|
||
|
|
||
|
init?(from rawValue: Int?) {
|
||
|
guard let rawValue = rawValue else {
|
||
|
return nil
|
||
|
}
|
||
|
self.init(rawValue: rawValue)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public enum Presentation: Int, Codable {
|
||
|
case push
|
||
|
case modal
|
||
|
}
|
||
|
|
||
|
public struct Info: Codable {
|
||
|
public var selectedIndex: Int?
|
||
|
|
||
|
public var articleKey: String?
|
||
|
public var articleSectionAnchor: String?
|
||
|
|
||
|
public var talkPageSiteURLString: String?
|
||
|
public var talkPageTitle: String?
|
||
|
public var talkPageTypeRawValue: Int?
|
||
|
|
||
|
public var currentSavedViewRawValue: Int?
|
||
|
|
||
|
public var readingListURIString: String?
|
||
|
|
||
|
public var searchTerm: String?
|
||
|
|
||
|
public var shouldShowNavigationBar: Bool?
|
||
|
|
||
|
public var contentGroupIDURIString: String?
|
||
|
|
||
|
public var presentedContentGroupKey: String?
|
||
|
|
||
|
public var url: URL?
|
||
|
|
||
|
// TODO: Remove after moving to Swift 5.1 -
|
||
|
// https://github.com/apple/swift-evolution/blob/master/proposals/0242-default-values-memberwise.md
|
||
|
public init(url: URL? = nil, selectedIndex: Int? = nil, articleKey: String? = nil, articleSectionAnchor: String? = nil, talkPageSiteURLString: String? = nil, talkPageTitle: String? = nil, talkPageTypeRawValue: Int? = nil, currentSavedViewRawValue: Int? = nil, readingListURIString: String? = nil, searchTerm: String? = nil, shouldShowNavigationBar: Bool? = nil, contentGroupIDURIString: String? = nil, presentedContentGroupKey: String? = nil) {
|
||
|
self.url = url
|
||
|
self.selectedIndex = selectedIndex
|
||
|
self.articleKey = articleKey
|
||
|
self.articleSectionAnchor = articleSectionAnchor
|
||
|
self.talkPageSiteURLString = talkPageSiteURLString
|
||
|
self.talkPageTitle = talkPageTitle
|
||
|
self.talkPageTypeRawValue = talkPageTypeRawValue
|
||
|
self.currentSavedViewRawValue = currentSavedViewRawValue
|
||
|
self.readingListURIString = readingListURIString
|
||
|
self.searchTerm = searchTerm
|
||
|
self.shouldShowNavigationBar = shouldShowNavigationBar
|
||
|
self.contentGroupIDURIString = contentGroupIDURIString
|
||
|
self.presentedContentGroupKey = presentedContentGroupKey
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|