AppCoordinator.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*****************************************************************************
  2. * AppCoordinator.swift
  3. * VLC for iOS
  4. *****************************************************************************
  5. * Copyright (c) 2018 VideoLAN. All rights reserved.
  6. * $Id$
  7. *
  8. * Authors: Carola Nitz <nitz.carola # gmail.com>
  9. *
  10. * Refer to the COPYING file of the official project for license.
  11. *****************************************************************************/
  12. @objc(VLCService)
  13. class Services: NSObject {
  14. @objc let medialibraryManager = MediaLibraryService()
  15. @objc let rendererDiscovererManager = VLCRendererDiscovererManager(presentingViewController: nil)
  16. }
  17. @objc class AppCoordinator: NSObject {
  18. private var childCoordinators: [NSObject] = []
  19. private var viewController: UIViewController
  20. private var playerController: VLCPlayerDisplayController
  21. private var tabBarController: UITabBarController
  22. private var services = Services()
  23. private var migrationViewController = VLCMigrationViewController(nibName: String(describing: VLCMigrationViewController.self),
  24. bundle: nil)
  25. @objc init(viewController: UIViewController) {
  26. self.viewController = viewController
  27. self.playerController = VLCPlayerDisplayController(services: services)
  28. self.tabBarController = UITabBarController()
  29. super.init()
  30. setupChildViewControllers()
  31. // Init the HTTP Server and clean its cache
  32. // FIXME: VLCHTTPUploaderController should perhaps be a service?
  33. VLCHTTPUploaderController.sharedInstance().cleanCache()
  34. services.medialibraryManager.migrationDelegate = self
  35. }
  36. private func setupChildViewControllers() {
  37. viewController.addChild(tabBarController)
  38. viewController.view.addSubview(tabBarController.view)
  39. tabBarController.view.frame = viewController.view.frame
  40. tabBarController.didMove(toParent: viewController)
  41. viewController.addChild(playerController)
  42. viewController.view.addSubview(playerController.view)
  43. playerController.view.layoutMargins = UIEdgeInsets(top: 0,
  44. left: 0,
  45. bottom: tabBarController.tabBar.frame.size.height,
  46. right: 0)
  47. playerController.realBottomAnchor = tabBarController.tabBar.topAnchor
  48. playerController.didMove(toParent: viewController)
  49. }
  50. @objc func start() {
  51. let tabbarCoordinator = VLCTabBarCoordinator(tabBarController: tabBarController, services: services)
  52. childCoordinators.append(tabbarCoordinator)
  53. }
  54. }
  55. extension AppCoordinator: MediaLibraryMigrationDelegate {
  56. func medialibraryDidStartMigration(_ medialibrary: MediaLibraryService) {
  57. DispatchQueue.main.async {
  58. [tabBarController, migrationViewController] in
  59. tabBarController.present(migrationViewController, animated: true, completion: nil)
  60. }
  61. }
  62. func medialibraryDidFinishMigration(_ medialibrary: MediaLibraryService) {
  63. if tabBarController.presentedViewController === migrationViewController {
  64. DispatchQueue.main.async {
  65. [tabBarController] in
  66. tabBarController.dismiss(animated: true, completion: nil)
  67. }
  68. }
  69. }
  70. func medialibraryDidStopMigration(_ medialibrary: MediaLibraryService) {
  71. if tabBarController.presentedViewController === migrationViewController {
  72. DispatchQueue.main.async {
  73. [tabBarController] in
  74. tabBarController.dismiss(animated: true, completion: nil)
  75. }
  76. }
  77. }
  78. }