Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // HomeViewController.swift
- // SFL-NextGen-Unej
- //
- // Created by Rendy K.R on 12/04/20.
- // Copyright © 2020 Universitas Jember. All rights reserved.
- //
- import UIKit
- class HomeViewController: UIViewController {
- @IBOutlet weak var profileView: UIView!
- @IBOutlet weak var namaLabel: UILabel!
- @IBOutlet weak var nipNrpLabel: UILabel!
- @IBOutlet weak var fakultasLabel: PaddingLabel!
- @IBOutlet weak var profilePicture: UIImageView!
- @IBOutlet weak var menuCollectionView: UICollectionView!
- @IBOutlet weak var menuHeightConstraint: NSLayoutConstraint!
- let listMenu = ["Jadwal", "Kehadiran", "Entri Nilai", "Ganti Jadwal", "Perwalian", "Bimbingan", "UC3", "Monitoring", "More"]
- let menuIcons = [
- UIImage(named: "icon_jadwal"),
- UIImage(named: "icon_kehadiran"),
- UIImage(named: "icon_entryNilai"),
- UIImage(named: "icon_gantiJadwal"),
- UIImage(named: "icon_perwalian"),
- UIImage(named: "icon_bimbingan"),
- UIImage(named: "icon_uc3"),
- UIImage(named: "icon_monitoring"),
- UIImage(named: "icon_more")
- ]
- let customView = Bundle.main.loadNibNamed("MoreMenu", owner: nil, options: nil)?.first as! MoreMenuView
- var menuCollectionViewHeight: CGFloat {
- menuCollectionView.layoutIfNeeded()
- return menuCollectionView.contentSize.height
- }
- let locManager = deviceLocationManager.shared
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view.
- homeStyleConfigurations()
- menuCollectionView.delegate = self
- menuCollectionView.dataSource = self
- if #available(iOS 13.0, *) {
- let barAppearance = UINavigationBarAppearance()
- barAppearance.backgroundColor = globalConstants.mainGreen
- barAppearance.shadowImage = UIImage()
- barAppearance.shadowColor = globalConstants.mainGreen
- self.navigationController?.navigationBar.standardAppearance = barAppearance
- self.navigationController?.navigationBar.scrollEdgeAppearance = barAppearance
- self.navigationController?.navigationBar.shadowImage = UIImage()
- self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
- self.navigationController?.navigationBar.shadowImage = UIImage()
- } else {
- // Fallback on earlier versions
- }
- if #available(iOS 15.0, *) {
- let appearance = UITabBarAppearance()
- appearance.configureWithOpaqueBackground()
- appearance.backgroundColor = .white
- appearance.stackedLayoutAppearance.normal.iconColor = globalConstants.lightGrey
- appearance.stackedLayoutAppearance.normal.titleTextAttributes = [NSAttributedString.Key.foregroundColor: globalConstants.lightGrey]
- appearance.stackedLayoutAppearance.normal.badgeBackgroundColor = globalConstants.lightGrey
- appearance.stackedLayoutAppearance.selected.iconColor = globalConstants.mainGreen
- appearance.stackedLayoutAppearance.selected.titleTextAttributes = [NSAttributedString.Key.foregroundColor: globalConstants.mainGreen]
- self.tabBarController?.tabBar.standardAppearance = appearance
- self.tabBarController?.tabBar.scrollEdgeAppearance = appearance
- }
- locManager.retrieveCurrentLocation()
- getLocationData()
- }
- override func viewWillAppear(_ animated: Bool) {
- super.viewWillAppear(true)
- self.view.setNeedsLayout()
- self.view.layoutIfNeeded()
- collectionViewStyle()
- let profPicString = UserDefaults.standard.string(forKey: "profilePicture") ?? ""
- if profPicString.isEmpty == true || profPicString == "" {
- profilePicture.image = UIImage(named: "sampleProfilePicture")
- } else {
- let resize = CGSize(width: profilePicture.frame.size.width, height: profilePicture.frame.size.height)
- let photoData = Data(base64Encoded: profPicString)
- let photoImage = UIImage(data: photoData!)?.crop(to: resize)
- profilePicture.image = photoImage!
- }
- appVersionChecker.compareVersion(currentVersion: globalConstants.versiApp)
- checkIDFcm.updateFCM(idfcm: UserDefaults.standard.string(forKey: "idfcm") ?? "", perangkat: UIDevice.modelName, os: UIDevice.current.systemVersion, appVersion: globalConstants.versiApp)
- if socketManager.shared.socket != nil && socketManager.shared.manager != nil && socketManager.shared.socket.status == .connected {
- // print("SOCKET STATUS: ", socketManager.shared.socket.status)
- socketManager.shared.terminateConnection()
- }
- }
- override func viewDidLayoutSubviews() {
- super.viewDidLayoutSubviews()
- self.profilePicture.layer.cornerRadius = self.profilePicture.frame.size.height/2
- self.fakultasLabel.cornerRadius = self.fakultasLabel.frame.size.height/2
- }
- @IBAction func notifikasiButton(_ sender: Any) {
- self.pushViewController(sbName: "Notifikasi", sbID: "notifikasiSB")
- }
- @IBAction func settingButton(_ sender: Any) {
- self.pushViewController(sbName: "Setting", sbID: "settingSB")
- }
- /*
- // MARK: - Navigation
- // In a storyboard-based application, you will often want to do a little preparation before navigation
- override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
- // Get the new view controller using segue.destination.
- // Pass the selected object to the new view controller.
- }
- */
- }
- extension HomeViewController {
- private func getLocationData() {
- DispatchQueue.global().async(qos: .background) {
- let timer = Timer(timeInterval: 300, repeats: true) { _ in
- self.postLocations()
- }
- let runLoop = RunLoop.current
- runLoop.add(timer, forMode: .default)
- runLoop.run()
- }
- }
- func postLocations() {
- let locManager = deviceLocationManager.shared
- locManager.retrieveCurrentLocation()
- guard let location = locManager.locationArr.last else { return }
- let jsonLocation = location.toJSON()
- let encLocation = crypter.shared.encrypt(jsonLocation)
- // MARK: Post method ke server & local
- do {
- switch AppDelegate.canConnectInternet() {
- case false:
- UserLocationProcess.insertLocalLocationData(locations: encLocation, timelog: location["timelog"]!)
- break
- case true:
- // self.insertLocalLocationData(locations: encLocation, timelog: location["timelog"]!)
- // let now = Date()
- // let jamMasuk = now.timeAt(jam: 7, menit: 30)
- // let jamPulang = now.timeAt(jam: 14, menit: 00)
- // if now >= jamMasuk && now <= jamPulang {
- // print("MASUK DALAM TIME INTERVAL")
- let localDataNotSynced = self.getLocalLocationData()
- if localDataNotSynced.count > 0 {
- sendLocationsToServer(fromLocal: true, data: localDataNotSynced)
- sendLocationsToServer(fromLocal: false, data: [location])
- } else {
- sendLocationsToServer(fromLocal: false, data: [location])
- }
- break
- }
- }
- }
- func getLocalLocationData() -> [[String: String]] {
- do {
- let localData = try UserLocationProcess.readLocalLocationData()
- var notSynchronizedData = [[String: String]]()
- for i in 0..<localData.count {
- if localData[i].synchronized == false {
- let decryptedData = crypter.shared.decrypt(localData[i].data)
- let dictData = try JSONSerialization.jsonObject(with: decryptedData.data(using: .utf8)!, options: .allowFragments)
- notSynchronizedData.append(dictData as! [String : String])
- }
- }
- return notSynchronizedData
- } catch let error {
- print(error)
- }
- return []
- }
- func sendLocationsToServer(fromLocal: Bool, data: [[String: String]]) {
- let params = [
- "lokasi": data
- ]
- let encParams = crypter.shared.encrypt(params.toJSON())
- // print(crypter.shared.decrypt(encParams))
- let streams = [
- "streams": encParams
- ]
- let log = LogLocationHandler.init()
- log.fetchData(streams as Dictionary<String, AnyObject>, method: .post, headers: nHeaders.headerAfterLogin(), closure: {
- (res: globalResModel!, errorMsg) -> Void in
- if errorMsg != nil {
- print(errorMsg!)
- } else {
- if res.success == false {
- } else {
- if fromLocal == true {
- self.updateLocalLocationDataToSync(notSynchronizedData: data)
- }
- }
- }
- })
- }
- func updateLocalLocationDataToSync(notSynchronizedData: [[String: String]]) {
- // print("NOT SYNC DATA: ", Array(Set(notSynchronizedData)))
- for i in 0..<notSynchronizedData.count {
- UserLocationProcess.updateStatusIsSync(timelog: notSynchronizedData[i]["timelog"]!, synchronized: true)
- }
- }
- }
Add Comment
Please, Sign In to add comment