--- /dev/null
+//
+// MenuViewController.swift
+// WolneLektury
+//
+// Created by Pawel Dabrowski on 29/05/2018.
+// Copyright © 2018 Fundacja Nowoczesna Polska. All rights reserved.
+//
+
+import UIKit
+import OAuthSwift
+import SafariServices
+
+class MenuViewController: UIViewController {
+
+ @IBOutlet weak var tableView: UITableView!
+
+ var cellsArray: [WLTableViewCell]!
+ var loggedIn = false
+
+ @IBOutlet weak var bottomView: UIView!
+ @IBOutlet weak var bottomViewBgView: UIView!
+
+ @IBOutlet weak var guestBottomView: UIView!
+ @IBOutlet weak var loginButton: UIButton!
+
+ @IBOutlet weak var userBottomView: UIView!
+ @IBOutlet weak var loggedInLabel: UILabel!
+ @IBOutlet weak var logoutButton: UIButton!
+
+ @IBOutlet weak var bottomViewHeightConstraint: NSLayoutConstraint!
+
+ var selectedRow: IndexPath?
+ var wlRow: Int = 0
+ var firstAppear = true
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ tableView.separatorStyle = .none
+
+ var contentInset = tableView.contentInset
+ contentInset.top = 10
+ tableView.contentInset = contentInset
+
+ loginButton.text = "menu_login".localized
+ logoutButton.text = "sign_out".localized
+ loginButton.layer.cornerRadius = 15
+ loginButton.layer.borderColor = UIColor.white.cgColor
+ loginButton.layer.borderWidth = 1
+ logoutButton.layer.cornerRadius = 15
+ logoutButton.layer.borderColor = UIColor.white.cgColor
+ logoutButton.layer.borderWidth = 1
+
+ bottomView.backgroundColor = Constants.Colors.menuTintColor()
+ bottomViewBgView.backgroundColor = Constants.Colors.menuTintColor()
+
+
+ setup()
+
+ appDelegate.sideMenuNavigationController = self.navigationController
+
+ }
+
+ override func viewDidAppear(_ animated: Bool) {
+ super.viewDidAppear(animated)
+ if firstAppear{
+ tableView.selectRow(at: IndexPath(row: wlRow, section: 0), animated: false, scrollPosition: .none)
+ firstAppear = false
+ }
+ }
+ func setup() {
+ if syncManager.isLoggedIn(){
+ cellsArray = [WLTableViewCell]()
+
+ if DatabaseManager.shared.isUserPremium() == false && Constants.donateEnabled{
+ cellsArray.append(MenuSupportUsTableViewCell.instance(delegate: self))
+ }
+
+ if selectedRow == nil {
+ selectedRow = IndexPath(row: cellsArray.count, section: 0)
+ tableView.selectRow(at: selectedRow, animated: false, scrollPosition: .none)
+ }
+
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .wolne_lektury))
+ wlRow = cellsArray.count - 1
+ cellsArray.append(MenuLineTableViewCell.instance())
+ if Constants.donateEnabled {
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .premium))
+ }
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .catalog))
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .audiobooks))
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .reading))
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .favourites))
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .completed))
+ cellsArray.append(MenuLineTableViewCell.instance())
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .downloaded))
+ cellsArray.append(MenuLineTableViewCell.instance())
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .news))
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .settings))
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .about))
+
+ }
+ else{
+ cellsArray = [WLTableViewCell]()
+
+ if Constants.donateEnabled {
+ cellsArray.append(MenuSupportUsTableViewCell.instance(delegate: self))
+ }
+
+ if selectedRow == nil {
+ selectedRow = IndexPath(row: cellsArray.count, section: 0)
+ tableView.selectRow(at: selectedRow, animated: false, scrollPosition: .none)
+ }
+
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .wolne_lektury))
+ wlRow = cellsArray.count - 1
+ cellsArray.append(MenuLineTableViewCell.instance())
+ if Constants.donateEnabled {
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .premium))
+ }
+
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .catalog))
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .audiobooks))
+ cellsArray.append(MenuLineTableViewCell.instance())
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .downloaded))
+ cellsArray.append(MenuLineTableViewCell.instance())
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .news))
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .settings))
+ cellsArray.append(MenuTableViewCell.instance(menuItem: .about))
+ }
+ tableView.reloadData()
+
+ refreshBottomView()
+ }
+
+ func selectItem(menuItem: MenuItem){
+ var index = 0
+ for cell in cellsArray {
+ if let cell = cell as? MenuTableViewCell, cell.menuItem == menuItem {
+ tableView.selectRow(at: IndexPath(row: index, section: 0), animated: false, scrollPosition: .none)
+ return
+ }
+ index += 1
+ }
+ }
+
+ func refreshBottomView() {
+
+ userBottomView.isHidden = true
+ guestBottomView.isHidden = true
+
+ if syncManager.isLoggedIn(){
+
+ var titleText = NSMutableAttributedString(string: "")
+
+ if let user = DatabaseManager.shared.rlmApplication?.user {
+
+ titleText = NSMutableAttributedString(attributedString: NSAttributedString(string: "logged_as".localized + "\n", font: UIFont.systemFont(ofSize: 10)))
+ titleText.append(NSAttributedString(string: user.username, font: UIFont.systemFont(ofSize: 12)))
+ loggedInLabel.attributedText = titleText
+ }
+
+ userBottomView.isHidden = false
+ bottomViewHeightConstraint.constant = userBottomView.frame.size.height
+ }
+ else{
+ guestBottomView.isHidden = false
+ bottomViewHeightConstraint.constant = guestBottomView.frame.size.height
+ }
+ }
+
+ func getPreview() {
+ appDelegate.showWindowHud()
+ syncManager.getPreview { [weak self] (result) in
+
+ guard let strongSelf = self else { return }
+ strongSelf.appDelegate.hideWindowHud()
+ switch result {
+ case .success(let model):
+ let array = model as! [BookModel]
+ if array.count > 0 {
+ let book = array[0]
+
+ strongSelf.appDelegate.mainNavigator.presentPremiumBook(bookSlug: book.slug)
+ }
+ else {
+ strongSelf.presentNoPremiereAlert()
+ }
+
+ case .failure/*(let error)*/:
+ strongSelf.presentToast(message: "fetching_premium_failed".localized)
+ }
+ }
+ }
+
+ func presentNoPremiereAlert() {
+
+ let message = syncManager.isLoggedIn() ? "no_prapremiere_message_logged".localized : "no_prapremiere_message".localized
+
+ let alertController = UIAlertController(
+ title: "no_prapremiere_title".localized,
+ message: message,
+ preferredStyle: UIAlertControllerStyle.alert
+ )
+
+ if syncManager.isLoggedIn() {
+ let action = UIAlertAction(title: "OK".localized, style: UIAlertActionStyle.cancel, handler: nil)
+ alertController.addAction(action)
+ }
+ else{
+ let cancelAction = UIAlertAction(title: "no_thanks".localized, style: UIAlertActionStyle.cancel, handler: nil)
+ alertController.addAction(cancelAction)
+
+ let okAction = UIAlertAction(title: "become_a_friend".localized, style: UIAlertActionStyle.default) { [weak self]
+ (result : UIAlertAction) -> Void in
+ self?.onBecomeAFriendClick()
+ }
+ alertController.addAction(okAction)
+ }
+ present(alertController, animated: true, completion: nil)
+ }
+
+ func onBecomeAFriendClick() {
+ if syncManager.isLoggedIn() {
+ showPremiumForm()
+ }
+ else {
+ showLoginFirst()
+ }
+ }
+
+ func showPremiumForm() {
+ showPayPalForm()
+ }
+
+ func showPayPalForm() {
+
+ if syncManager.isLoggedIn() {
+ appDelegate.mainNavigator.presentPayPalForm()
+ }
+ else {
+ presentToast(message: "login_first".localized)
+ }
+ }
+
+ func showLoginFirst() {
+
+ let alertController = UIAlertController(
+ title: "login".localized,
+ message: "login_first".localized,
+ preferredStyle: UIAlertControllerStyle.alert
+ )
+
+ let cancelAction = UIAlertAction(title: "no_thanks".localized, style: UIAlertActionStyle.cancel, handler: nil)
+ alertController.addAction(cancelAction)
+
+ let loginAction = UIAlertAction(title: "login".localized, style: UIAlertActionStyle.default) { [weak self]
+ (result : UIAlertAction) -> Void in
+ self?.onLoginClicked()
+ }
+ alertController.addAction(loginAction)
+
+ self.present(alertController, animated: true, completion: nil)
+ }
+
+ func onLoginClicked() {
+ appDelegate.login(fromViewController: self)
+ }
+
+ deinit {
+ print("deinit")
+ appDelegate.sideMenuNavigationController = nil
+ }
+
+ @IBAction func logoutButtonAction(_ sender: Any) {
+ syncManager.logout()
+ appDelegate.mainNavigator.reset()
+ }
+
+ @IBAction func loginButtonAction(_ sender: Any) {
+ onLoginClicked()
+ }
+}
+
+extension MenuViewController: UITableViewDataSource{
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ return cellsArray[indexPath.row]
+ }
+
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return cellsArray.count
+ }
+ func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
+ return cellsArray[indexPath.row].getHeight()
+ }
+}
+
+extension MenuViewController: UITableViewDelegate{
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+
+ if let cell = cellsArray[indexPath.row] as? MenuTableViewCell{
+ switch cell.menuItem{
+ case .wolne_lektury:
+ appDelegate.mainNavigator.presentLibrary(dismissSideMenu: true)
+ case .premium:
+ getPreview()
+ if let selectedRow = selectedRow{
+ tableView.selectRow(at: selectedRow, animated: false, scrollPosition: .none)
+ }
+ return
+ case .audiobooks:
+ appDelegate.mainNavigator.presentBookList(listViewControllerType: .audiobooks)
+ case .downloaded:
+ appDelegate.mainNavigator.presentDownloaded()
+ case .catalog:
+ appDelegate.mainNavigator.presentSearch()
+ case .news:
+ appDelegate.mainNavigator.presentNews()
+ case .settings:
+ appDelegate.mainNavigator.presentSettings()
+ case .about:
+ appDelegate.mainNavigator.presentAbout()
+ case .reading:
+ appDelegate.mainNavigator.presentBookList(listViewControllerType: .reading_now)
+ case .favourites:
+ appDelegate.mainNavigator.presentBookList(listViewControllerType: .favourites)
+ case .completed:
+ appDelegate.mainNavigator.presentBookList(listViewControllerType: .completed)
+ default:
+ break
+ }
+ selectedRow = indexPath
+ }
+ else if cellsArray[indexPath.row] is MenuSupportUsTableViewCell{
+ selectedRow = indexPath
+ }
+ else {
+ if let selectedRow = selectedRow{
+ tableView.selectRow(at: selectedRow, animated: false, scrollPosition: .none)
+ }
+ }
+ }
+}
+
+extension MenuViewController: MenuSupportUsTableViewCellDelegate{
+ func menuSupportUsButtonTapped(){
+ appDelegate.mainNavigator.presentSupportUs()
+ }
+}
+