added iOS source code
[wl-app.git] / iOS / WolneLektury / MainNavigator.swift
1 //
2 //  MainNavigator.swift
3 //  WolneLektury
4 //
5 //  Created by Pawel Dabrowski on 29/05/2018.
6 //  Copyright © 2018 Fundacja Nowoczesna Polska. All rights reserved.
7 //
8
9 import UIKit
10 import SideMenu
11 import OAuthSwift
12 import SafariServices
13
14 class MainNavigator: NSObject {
15     
16     fileprivate var window: UIWindow
17     fileprivate var navigator: WLNavigationController!
18     private var menuViewController: MenuViewController!
19
20     init(window: UIWindow){
21         self.window = window
22         super.init()
23         
24         SideMenuManager.default.menuPresentMode = .menuSlideIn
25         SideMenuManager.default.menuFadeStatusBar = false
26         SideMenuManager.default.menuWidth = 245
27         
28         navigator = WLNavigationController(rootViewController: LibraryViewController.instance())
29         window.rootViewController = navigator
30         window.makeKeyAndVisible()
31         
32         let menuLeftNavigationController = UISideMenuNavigationController.instance()
33         SideMenuManager.default.menuLeftNavigationController = menuLeftNavigationController
34         menuViewController = menuLeftNavigationController.viewControllers[0] as! MenuViewController
35     }
36     
37     func updateSettingsViewIfPresented() {
38         if let settingsViewController = navigator.viewControllers.last as? SettingsViewController {
39             settingsViewController.updateNotificationsSwitchValue()
40         }
41     }
42     
43     func setLoggedIn(){
44         menuViewController.setup()
45     }
46     
47     func reset(){
48         menuViewController.setup()
49         presentLibrary(dismissSideMenu: false)
50     }
51
52     
53     func presentLibrary(dismissSideMenu: Bool){
54         setRootViewController(controller: LibraryViewController.instance(), dismissSideMenu: dismissSideMenu, menuItem: .wolne_lektury)
55     }
56     
57     func presentSearch() {
58         setRootViewController(controller: SearchViewController.instance(type: .search), menuItem: .catalog)
59     }
60     
61     func presentNews() {
62         setRootViewController(controller: NewsViewController.instance(dataSource: nil), menuItem: .news)
63     }
64     
65     func presentPremiumBook(bookSlug: String) {
66         //TODO:
67         setRootViewController(controller: BookDetailsViewController.instance(bookSlug: bookSlug), menuItem: .premium)
68     }
69     
70     func presentPayPalForm() {
71         appDelegate.presentPaypal(fromViewController: navigator)
72     }
73     
74     func presentSettings() {
75         setRootViewController(controller: SettingsViewController.instance(), menuItem: .settings)
76     }
77     
78     func presentAbout() {
79         setRootViewController(controller: AboutViewController.instance(), menuItem: .about)
80     }
81     
82     func presentSupportUs() {
83         setRootViewController(controller: SupportUsViewController.instance())
84     }
85
86     func presentBookList(listViewControllerType: ListViewControllerType){
87         let vc = BookListViewController.instance(listViewControllerType: listViewControllerType, dataSource: nil)
88         
89         setRootViewController(controller: vc, menuItem: listViewControllerType.menuItem)
90     }
91     
92     func presentDownloaded(){
93         let vc = DownloadedListViewController.instance()
94         setRootViewController(controller: vc, menuItem: .downloaded)
95     }
96     
97     func presentLogin(push: Bool){
98         let vc = LoginViewController.instance()
99         if push {
100             navigator.pushViewController(vc, animated: true)
101         }
102         else {
103             setRootViewController(controller: vc)
104         }
105     }
106     
107     
108     public func setRootViewController(controller: UIViewController, dismissSideMenu: Bool = true, menuItem: MenuItem? = nil){
109         if appDelegate.sideMenuNavigationController != nil && dismissSideMenu{
110             appDelegate.sideMenuNavigationController?.dismiss(animated: true, completion: nil)
111         }
112         
113         if let menuItem = menuItem {
114             menuViewController.selectItem(menuItem: menuItem)
115         }
116         navigator.setViewControllers([controller], animated: false)
117     }
118 }