Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
37 changes: 37 additions & 0 deletions App/App/AppLifeCycles/SceneDelegate.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//
// SceneDelegate.swift
// App
//
// Created by jung on 11/4/24.
//

import Core
import Data
import Feature
import Interfaces
import P2PSocket
import UIKit
import UseCase

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
let container = MainContainer()
var coordinator: Coordinator?

func scene(
_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions
) {
guard let windowScene = (scene as? UIWindowScene) else { return }

let coordinator = container.coordinator()
self.coordinator = coordinator
coordinator.start(nil)
let window = UIWindow(windowScene: windowScene)
window.rootViewController = coordinator.viewController

self.window = window
window.makeKeyAndVisible()
}
}
83 changes: 83 additions & 0 deletions App/App/MainContainer.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
//
// MainContainer.swift
// App
//
// Created by jung on 12/6/24.
//

import Core
import Feature
import P2PSocket
import UseCase
import Data
import Interfaces

final class MainContainer:
ConnectionDependency,
VideoListDependency,
GroupInfoDependency,
SharedEditVideoDependency,
PreviewDependency {
let socketProvider = SocketProvider()

func coordinator() -> Coordinator {
let groupInfoContainer = GroupInfoContainer(dependency: self)
let connectionContainer = ConnectionContainer(dependency: self)

return MainCoordinator(
groupInfoContainer: groupInfoContainer,
connectionContainer: connectionContainer
)
}

// MARK: - Containable
var videoListContaiable: VideoListContainable {
return VideoListContainer(dependency: self)
}

var sharedEditVideoContainer: SharedEditVideoContainable {
return SharedVideoEditContainer(dependency: self)
}

var previewContainer: PreviewContainable {
return PreviewContainer(dependency: self)
}

// MARK: - Repository
var browsingUserRepository: BrowsingUserRepositoryInterface {
return BrowsingUserRepository(socketProvider: socketProvider)
}

var connectedUserRepository: ConnectedUserRepositoryInterface {
return ConnectedUserRepository(socketProvider: socketProvider)
}

var sharingVideoRepository: SharingVideoRepositoryInterface {
return SharingVideoRepository(socketProvider: socketProvider)
}

var editVideoRepository: EditVideoRepositoryInterface {
return EditVideoRepository(socketProvider: socketProvider)
}

// MARK: - UseCase
var browsingUseCase: BrowsingUserUseCaseInterface {
return BrowsingUserUseCase(repository: browsingUserRepository)
}

var connectedUserUseCase: ConnectedUserUseCaseInterface {
return ConnectedUserUseCase(repository: connectedUserRepository)
}

lazy var videoUseCase: VideoUseCase = {
return VideoUseCase(sharingVideoRepository: sharingVideoRepository, editVideoRepository: editVideoRepository)
}()

var sharingVideoUseCase: SharingVideoUseCaseInterface {
videoUseCase
}

var editVideoUseCase: EditVideoUseCaseInterface {
videoUseCase
}
}
73 changes: 73 additions & 0 deletions App/App/MainCoordinator.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
//
// MainCoordinator.swift
// App
//
// Created by jung on 12/6/24.
//

import Core
import Feature
import UIKit

public final class MainCoordinator: Coordinator {
private var bottomNavigationController: UINavigationController?

// MARK: - Coordinatables
private let groupInfoContainer: GroupInfoContainable
private var groupInfoCoordinatable: Coordinatable?

private let connectionContainer: ConnectionContainable
private var connectionCoordinatable: Coordinatable?

// MARK: - Initializer
public init(
groupInfoContainer: GroupInfoContainable,
connectionContainer: ConnectionContainable
) {
self.groupInfoContainer = groupInfoContainer
self.connectionContainer = connectionContainer
super.init(viewController: MainViewController())
}

public override func start(_ navigationController: UINavigationController?) {
guard let viewController = viewController as? MainViewController else { return }

let topViewController = groupInfoViewController()
let bottomViewController = connectionViewController()
viewController.attachTopViewController(topViewController)
viewController.attachBottomViewController(bottomViewController)
}
}

private extension MainCoordinator {
func connectionViewController() -> UIViewController {
let coordinator = connectionContainer.coordinator(listener: self)
connectionCoordinatable = coordinator
let navigation = UINavigationController(rootViewController: coordinator.viewController)
bottomNavigationController = navigation
coordinator.start(navigation)

return navigation
}

func groupInfoViewController() -> UIViewController {
let coordinator = groupInfoContainer.coordinator(listener: self)
groupInfoCoordinatable = coordinator
let navigation = UINavigationController(rootViewController: coordinator.viewController)
coordinator.start(navigation)

return navigation
}
}

// MARK: - ConnectionListener
extension MainCoordinator: ConnectionListener { }

// MARK: - GroupInfoListener
extension MainCoordinator: GroupInfoListener {
public func exitGroupButtonDidTap() {
FileSystemManager.shared.deleteAllFiles()
bottomNavigationController?.popToRootViewController(animated: true)
connectionCoordinatable?.start(bottomNavigationController)
}
}
40 changes: 40 additions & 0 deletions App/App/MainViewController.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
//
// MainViewController.swift
// App
//
// Created by jung on 12/6/24.
//

import SnapKit
import UIKit

final class MainViewController: UIViewController {
private enum Constants {
static let topViewHeight: CGFloat = 200
}

func attachTopViewController(_ viewController: UIViewController) {
addChild(viewController)
view.addSubview(viewController.view)
viewController.didMove(toParent: self)
viewController.view.backgroundColor = .red
viewController.view.snp.makeConstraints { make in
make.top.equalTo(view.safeAreaLayoutGuide)
make.leading.equalToSuperview()
make.trailing.equalToSuperview()
make.height.equalTo(Constants.topViewHeight)
}
}

func attachBottomViewController(_ viewController: UIViewController) {
addChild(viewController)
view.addSubview(viewController.view)
viewController.didMove(toParent: self)

viewController.view.snp.makeConstraints { make in
make.top.equalToSuperview().offset(Constants.topViewHeight)
make.leading.trailing.equalToSuperview()
make.bottom.equalTo(view.safeAreaLayoutGuide)
}
}
}
15 changes: 0 additions & 15 deletions App/App/RootViewController.swift

This file was deleted.

145 changes: 0 additions & 145 deletions App/App/SceneDelegate.swift

This file was deleted.

Loading
Loading