// // SyncManager.swift // WolneLektury // // Created by Pawel Dabrowski on 30/05/2018. // Copyright © 2018 Fundacja Nowoczesna Polska. All rights reserved. // import UIKit class SyncManager: NSObject { private var networkService = NetworkService() override init() { } func isLoggedIn() -> Bool { return networkService.isLoggedIn() } func logout() { networkService.logout() DatabaseManager.shared.updateUser(usernameModel: nil) } func updateUserCredentials(oAuthTokenModel: OAuthTokenModel?){ networkService.updateUserCredentials(oAuthTokenModel: oAuthTokenModel) } func requestToken(completionHandler: ConnectionCompletionHandler?){ networkService.requestToken(completionHandler: completionHandler) } func accessToken(completionHandler: ConnectionCompletionHandler?){ networkService.requestAccessToken(completionHandler: completionHandler) } func getUsername(completionHandler: ConnectionCompletionHandler?){ networkService.performRequest(with: .username, responseModelType: UsernameModel.self, params: nil, completionHandler: completionHandler) } func filterBooks(params: FilterBooksParameters, completionHandler: ConnectionCompletionHandler?){ networkService.performRequest(with: .filterBooks, responseModelType: [BookModel].self, params: params.parameters(), completionHandler: completionHandler) } func getNews(after: String?, completionHandler: ConnectionCompletionHandler?){ var params = [String: Any]() if let after = after { params["after"] = after } params["count"] = 20 networkService.performRequest(with: .blog, responseModelType: [NewsModel].self, params: params, completionHandler: completionHandler) } func getCategories(filterSection: FilterSection, bookOnly: Bool, completionHandler: ConnectionCompletionHandler?){ var method = RestAction.epochs if filterSection == .genres{ method = .genres } else if filterSection == .kinds{ method = .kinds } networkService.performRequest(with: method, responseModelType: [CategoryModel].self, params: ["book_only": bookOnly ? "true" : "false"], completionHandler: completionHandler) } func getDataForLibrary(libraryCollectionType: LibraryCollectionType, completionHandler: ConnectionCompletionHandler?){ var method: RestAction! switch libraryCollectionType { case .newest: method = .newest case .recommended: method = .recommended case .reading_now: method = .getReadingBooks } networkService.performRequest(with: method, responseModelType: [BookModel].self, params: nil, completionHandler: completionHandler) } func getPreview(completionHandler: ConnectionCompletionHandler?){ networkService.performRequest(with: .preview, responseModelType: [BookModel].self, params: nil, completionHandler: completionHandler) } func getDataForListType(listViewControllerType: ListViewControllerType, params: FilterBooksParameters? = nil, completionHandler: ConnectionCompletionHandler?){ var method: RestAction! switch listViewControllerType { case .newest: method = .newest case .recommended: method = .recommended case .reading_now: method = .getReadingBooks case .audiobooks: method = .audiobooks case .news: method = .blog case .favourites: method = .getFavourites case .completed: method = .getReadenBooks } if method == .blog { networkService.performRequest(with: method, responseModelType: [NewsModel].self, params: params?.parameters(), completionHandler: completionHandler) } else { networkService.performRequest(with: method, responseModelType: [BookModel].self, params: params?.parameters(), completionHandler: completionHandler) } } func getBookDetails(bookSlug: String, completionHandler: ConnectionCompletionHandler?){ networkService.performRequest(with: .books, responseModelType: BookDetailsModel.self, urlSuffix: bookSlug + "/", completionHandler: completionHandler) } func getFavouriteState(slug: String, completionHandler: ConnectionCompletionHandler?){ networkService.performRequest(with: .getFavouriteState, responseModelType: LikeModel.self, urlSuffix: slug + "/", params: nil, completionHandler: completionHandler) } func setFavouriteState(slug: String, favourite: Bool, completionHandler: ConnectionCompletionHandler?){ networkService.performRequest(with: .setFavouriteState, responseModelType: LikeModel.self, urlSuffix: slug + "/", params: ["action" : favourite ? "like" : "unlike"], completionHandler: completionHandler) } func setReadingState(slug: String, readingState: ReadingStateModel.ReadingState, completionHandler: ConnectionCompletionHandler?){ networkService.performRequest(with: .setReadingState, responseModelType: ReadingStateModel.self, urlSuffix: slug + "/" + readingState.rawValue + "/", params: nil, completionHandler: completionHandler) } func getReadingState(slug: String, completionHandler: ConnectionCompletionHandler?){ networkService.performRequest(with: .getReadingState, responseModelType: ReadingStateModel.self, urlSuffix: slug + "/", params: nil, completionHandler: completionHandler) } }