metatext/ServiceLayer/Sources/ServiceLayer/Entities/AppEnvironment.swift
2021-03-05 18:25:18 -08:00

64 lines
2.2 KiB
Swift

// Copyright © 2020 Metabolist. All rights reserved.
import DB
import Foundation
import HTTP
import Keychain
import Mastodon
import UserNotifications
public struct AppEnvironment {
let session: URLSession
let webAuthSessionType: WebAuthSession.Type
let keychain: Keychain.Type
let userDefaults: UserDefaults
let userNotificationClient: UserNotificationClient
let reduceMotion: () -> Bool
let autoplayVideos: () -> Bool
let uuid: () -> UUID
let inMemoryContent: Bool
let fixtureDatabase: IdentityDatabase?
public init(session: URLSession,
webAuthSessionType: WebAuthSession.Type,
keychain: Keychain.Type,
userDefaults: UserDefaults,
userNotificationClient: UserNotificationClient,
reduceMotion: @escaping () -> Bool,
autoplayVideos: @escaping () -> Bool,
uuid: @escaping () -> UUID,
inMemoryContent: Bool,
fixtureDatabase: IdentityDatabase?) {
self.session = session
self.webAuthSessionType = webAuthSessionType
self.keychain = keychain
self.userDefaults = userDefaults
self.userNotificationClient = userNotificationClient
self.reduceMotion = reduceMotion
self.autoplayVideos = autoplayVideos
self.uuid = uuid
self.inMemoryContent = inMemoryContent
self.fixtureDatabase = fixtureDatabase
}
}
public extension AppEnvironment {
static let appGroup = "group.metabolist.metatext"
static func live(userNotificationCenter: UNUserNotificationCenter,
reduceMotion: @escaping () -> Bool,
autoplayVideos: @escaping () -> Bool) -> Self {
Self(
session: URLSession.shared,
webAuthSessionType: LiveWebAuthSession.self,
keychain: LiveKeychain.self,
userDefaults: UserDefaults(suiteName: appGroup)!,
userNotificationClient: .live(userNotificationCenter),
reduceMotion: reduceMotion,
autoplayVideos: autoplayVideos,
uuid: UUID.init,
inMemoryContent: false,
fixtureDatabase: nil)
}
}