AppCoordinator.swift 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 medialibraryService = 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.medialibraryService.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. DispatchQueue.main.async {
  64. [migrationViewController] in
  65. migrationViewController.dismiss(animated: true, completion: nil)
  66. }
  67. }
  68. func medialibraryDidStopMigration(_ medialibrary: MediaLibraryService) {
  69. if tabBarController.presentedViewController === migrationViewController {
  70. DispatchQueue.main.async {
  71. [tabBarController] in
  72. tabBarController.dismiss(animated: true, completion: nil)
  73. }
  74. }
  75. }
  76. }