Skip to content
Snippets Groups Projects
AppEnvironment+Live.swift 4.56 KiB
Newer Older
import AppCore
import BackupFeature
import ChatFeature
import CheckContactAuthFeature
import ConfirmRequestFeature
Dariusz Rybicki's avatar
Dariusz Rybicki committed
import ContactFeature
Dariusz Rybicki's avatar
Dariusz Rybicki committed
import ContactLookupFeature
import ContactsFeature
import Foundation
import HomeFeature
import MyContactFeature
import RegisterFeature
import RestoreFeature
import SendRequestFeature
import UserSearchFeature
import VerifyContactFeature
import WelcomeFeature
import XXMessengerClient
import XXModels

extension AppEnvironment {
  static func live() -> AppEnvironment {
    let dbManager = DBManager.live()
    let messengerEnv = MessengerEnvironment.live()
    let messenger = Messenger.live(messengerEnv)
    let authHandler = AuthCallbackHandler.live(
      messenger: messenger,
      handleRequest: .live(db: dbManager.getDB, now: Date.init),
      handleConfirm: .live(db: dbManager.getDB),
      handleReset: .live(db: dbManager.getDB)
    )
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let backupStorage = BackupStorage.onDisk()
    let mainQueue = DispatchQueue.main.eraseToAnyScheduler()
    let bgQueue = DispatchQueue.global(qos: .background).eraseToAnyScheduler()

    let contactEnvironment = ContactEnvironment(
      messenger: messenger,
      db: dbManager.getDB,
      mainQueue: mainQueue,
      bgQueue: bgQueue,
      lookup: {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
        ContactLookupEnvironment(
          messenger: messenger,
          mainQueue: mainQueue,
          bgQueue: bgQueue
        )
      sendRequest: {
        SendRequestEnvironment(
          messenger: messenger,
          db: dbManager.getDB,
          mainQueue: mainQueue,
          bgQueue: bgQueue
        )
      },
      verifyContact: {
        VerifyContactEnvironment(
          messenger: messenger,
          db: dbManager.getDB,
          mainQueue: mainQueue,
          bgQueue: bgQueue
        )
      confirmRequest: {
        ConfirmRequestEnvironment(
          messenger: messenger,
          db: dbManager.getDB,
          mainQueue: mainQueue,
          bgQueue: bgQueue
        )
      },
      checkAuth: {
        CheckContactAuthEnvironment(
          messenger: messenger,
          db: dbManager.getDB,
          mainQueue: mainQueue,
          bgQueue: bgQueue
        )
      },
      chat: {
        ChatEnvironment(
          messenger: messenger,
          db: dbManager.getDB,
          sendMessage: .live(
            messenger: messenger,
            db: dbManager.getDB,
            now: Date.init
          ),
          mainQueue: mainQueue,
          bgQueue: bgQueue
        )
    return AppEnvironment(
      dbManager: dbManager,
      messenger: messenger,
      authHandler: authHandler,
      messageListener: .live(
        messenger: messenger,
        db: dbManager.getDB
      ),
      backupStorage: backupStorage,
      log: .live(),
      mainQueue: mainQueue,
      bgQueue: bgQueue,
      welcome: {
        WelcomeEnvironment(
          messenger: messenger,
          mainQueue: mainQueue,
          bgQueue: bgQueue
        RestoreEnvironment(
          messenger: messenger,
Dariusz Rybicki's avatar
Dariusz Rybicki committed
          db: dbManager.getDB,
          loadData: .live,
Dariusz Rybicki's avatar
Dariusz Rybicki committed
          now: Date.init,
          mainQueue: mainQueue,
          bgQueue: bgQueue
        )
      home: {
        HomeEnvironment(
          messenger: messenger,
          dbManager: dbManager,
          mainQueue: mainQueue,
Dariusz Rybicki's avatar
Dariusz Rybicki committed
          bgQueue: bgQueue,
          register: {
            RegisterEnvironment(
              messenger: messenger,
              db: dbManager.getDB,
              now: Date.init,
Dariusz Rybicki's avatar
Dariusz Rybicki committed
              mainQueue: mainQueue,
              bgQueue: bgQueue
            )
          contacts: {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
            ContactsEnvironment(
              messenger: messenger,
Dariusz Rybicki's avatar
Dariusz Rybicki committed
              db: dbManager.getDB,
              mainQueue: mainQueue,
              bgQueue: bgQueue,
              contact: { contactEnvironment },
              myContact: {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
                MyContactEnvironment(
                  messenger: messenger,
                  db: dbManager.getDB,
                  mainQueue: mainQueue,
                  bgQueue: bgQueue
                )
Dariusz Rybicki's avatar
Dariusz Rybicki committed
            )
          userSearch: {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
            UserSearchEnvironment(
              messenger: messenger,
              mainQueue: mainQueue,
              contact: { contactEnvironment }
          },
          backup: {
            BackupEnvironment(
              messenger: messenger,
              db: dbManager.getDB,
              backupStorage: backupStorage,
              mainQueue: mainQueue,
              bgQueue: bgQueue
            )
Dariusz Rybicki's avatar
Dariusz Rybicki committed
          }