import Foundation import UIKit import GeneralUtils import Alamofire class CellMucChupWithCamera: BaseTableViewCellUI { var tvTitle: UILabel!, imv: UIImageView! var shootItem: ShootItem! static func registerClass(tableView: UITableView, forCellReuseIdentifier: String) { tableView.register(CellMucChupWithCamera.self, forCellReuseIdentifier: forCellReuseIdentifier) } override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) initView() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) initView() } private func initView() { let stackView = UIStackView() stackView.axis = UILayoutConstraintAxis.horizontal stackView.translatesAutoresizingMaskIntoConstraints = false self.contentView.addSubview(stackView) NSLayoutConstraint.activate([stackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8), stackView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 8), stackView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -8), stackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -8)]) tvTitle = UILabel() tvTitle.numberOfLines = 0 stackView.addArrangedSubview(tvTitle) tvTitle.isUserInteractionEnabled = true let tapTitle = UITapGestureRecognizer(target: self, action: #selector(CellMucChupWithCamera.titleClick)) tvTitle.addGestureRecognizer(tapTitle) imv = UIImageView() imv.contentMode = .scaleAspectFit imv.isUserInteractionEnabled = true stackView.addArrangedSubview(imv) imv.widthAnchor.constraint(equalToConstant: 80).isActive = true imv.heightAnchor.constraint(equalToConstant: 60).isActive = true imv.image = #imageLiteral(resourceName:"camera_black_ic").imageWithInsets(insetDimen: 10) ?? #imageLiteral(resourceName:"camera_black_ic") let tap = UITapGestureRecognizer(target: self, action: #selector(CellMucChupWithCamera.btnImvClick)) imv.addGestureRecognizer(tap) } func titleClick() { guard let viewController = self.viewController as? VCShootItemList else { return } let cTruong = viewController.cTruong; if let imgs = shootItem.imgs, imgs.count > 0 { VCPageImgs.openController(viewController, imgObjs: imgs, cTruong: cTruong!, shootItem: self.shootItem); } } func btnImvClick() { guard let viewController = self.viewController as? VCShootItemList else { return } // if let imgs = shootItem.imgs, imgs.count > 0 { // DialogUtils.showQuestion(titleParam: <#T##String?##Swift.String?#>, messageParam: <#T##String?##Swift.String?#>, type: <#T##TypeDialog##GeneralUtils.TypeDialog#>, yesTitle: <#T##String##Swift.String#>, noTitle: <#T##String##Swift.String#>, yesAction: <#T##@escaping () -> Void##@escaping () -> Swift.Void#>) // } let cTruong = viewController.cTruong; let userData = BoardObj(cTruong: cTruong, shootItem: self.shootItem); let cameraViewController = CameraViewController(croppingEnabled: false, allowsLibraryAccess: true, userData: userData) { image, asset in viewController.dismiss(animated: true, completion: nil) guard let image = image else { return } self.imv?.image = image guard let id = self.shootItem.id, let data = UIImageJPEGRepresentation(image, 1.0) else { return } let signboard = self.shootItem?.signboard ?? 1 self.uploadImage(id: id, signboard: signboard, date: self.shootItem?.date, note: self.shootItem.note, data: data) } viewController.present(cameraViewController, animated: true, completion: nil) } override func configCellWithData(baseObj: Any, index: Int) { super.configCellWithData(baseObj: baseObj, index: index) shootItem = baseObj as! ShootItem tvTitle.text = shootItem.name if let imgs = shootItem.imgs, imgs.count > 0, let imgUrl = imgs[0].url { setImageUrl(imv: imv, imageUrl: imgUrl) } else { imv.image = #imageLiteral(resourceName:"camera_black_ic").imageWithInsets(insetDimen: 10) ?? #imageLiteral(resourceName:"camera_black_ic") } } //region upload ======= fileprivate func uploadImage(id: Int, signboard: Int, date: Double?, note: String?, data: Data) { let tvProgress = SwiftOverlays.showBlockingWaitOverlayWithText(LocalizedString("Uploading") + ".....") Alamofire.upload(multipartFormData: { (multipartFormData: MultipartFormData) in multipartFormData.append(data, withName: "file", fileName: "file_\(DataTypeUtils.getCurrentTimeSecond()).jpg", mimeType: "image/jpeg") multipartFormData.append("\(id)".data(using: String.Encoding.utf8)!, withName: "idShooting") multipartFormData.append("\(signboard)".data(using: String.Encoding.utf8)!, withName: "signboard") if let note = note { multipartFormData.append(note.data(using: String.Encoding.utf8)!, withName: "note") } if let date = date { let dateInt = Int(date) println("Upload: date: \(dateInt)") multipartFormData.append("\(dateInt)".data(using: String.Encoding.utf8)!, withName: "date") } }, to: Constants.PathManager.ROOT_SERVER + "api/board/store", method: .post, encodingCompletion: { (encodingResult: SessionManager.MultipartFormDataEncodingResult) in switch encodingResult { case .success(let upload, _, _): upload.uploadProgress(closure: { progress in CommonUtils.excuteOnMainThread({ tvProgress.text = (LocalizedString("Uploading") + " \(Int(progress.fractionCompleted * 100))%") }) }) .responseString { response in SwiftOverlays.removeAllBlockingOverlays() debugPrint("SUCCESS RESPONSE: \(response.result.value)") if let value = response.result.value { let json = JSON.parse(value) if let isSuccess = json["isSuccess"].bool, isSuccess, let url = json["url"].string { var dateInt: Int?; if let date = date { dateInt = Int(date) } else { dateInt = nil; } self.shootItem.addImg(img: ImgObj(url: url, signboard: signboard, date: dateInt, note: note)) CommonUtils.showToastLong(text: LocalizedString("successful")) return } } self.handleError() } case .failure(let encodingError): SwiftOverlays.removeAllBlockingOverlays() self.handleError() print("ERROR RESPONSE: \(encodingError)") } }) } fileprivate func handleError() { //DialogUtils.showQuestion(messageParam: <#T##String?##Swift.String?#>, yesAction: <#T##@escaping () -> Void##@escaping () -> Swift.Void#>) } //endregion }