// // ViewController.swift // dcav-uploader // // Created by Alexander Munch-hansen on 31/07/2017. // Copyright © 2017 Guava. All rights reserved. // import UIKit class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UITextFieldDelegate, URLSessionDelegate, URLSessionTaskDelegate, URLSessionDataDelegate { @IBOutlet weak var labell: UILabel! @IBOutlet weak var imageView: UIImageView! var imagePickerController : UIImagePickerController! @IBOutlet weak var dcavTextField: UITextField! var responseString : String! @IBOutlet weak var uploadProgressBar: UIProgressView! @IBOutlet weak var savedPhotoImageView: UIImageView! let pasteBoard = UIPasteboard.general override func viewDidLoad() { super.viewDidLoad() UserDefaults.standard.synchronize() dcavTextField.delegate = self labell.text = UserDefaults.standard.string(forKey: "username_preference") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func onLibraryButton(_ sender: Any) { imagePickerController = UIImagePickerController() imagePickerController.delegate = self imagePickerController.sourceType = .photoLibrary present(imagePickerController, animated: true, completion: nil) } @IBAction func onPhotoButton(_ sender: Any) { imagePickerController = UIImagePickerController() imagePickerController.delegate = self imagePickerController.sourceType = .camera present(imagePickerController, animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { imagePickerController.dismiss(animated: true, completion: nil) imageView.contentMode = .scaleAspectFit imageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage let image : UIImage = imageView.image!; var tempImage : UIImage? = nil; let targetSize : CGSize = CGSize(width: 1080, height: 1920); UIGraphicsBeginImageContext(targetSize); var thumbnailRect : CGRect = CGRect(x:0, y:0, width:0, height:0); thumbnailRect.origin = CGPoint(x:0.0,y:0.0); thumbnailRect.size.width = targetSize.width; thumbnailRect.size.height = targetSize.height; image.draw(in: thumbnailRect) tempImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); imageView.image = tempImage; } func setTextInField(path: String) { dcavTextField.text = path } @IBAction func onUploadButton(_ sender: Any) { guard let username : String = UserDefaults.standard.string(forKey: "username_preference") else { print("USERNAME, MOTHERFUCKER!") // TODO create proper pop-up return } guard let passphrase : String = UserDefaults.standard.string(forKey: "passphrase_preference") else { // TODO create proper pop-up print("PASSPHRASE, MOTHERFUCKER!") return } let request = generateRequest(user: username, pass: passphrase) let session = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: OperationQueue.main) let task = session.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { // check for fundamental networking error print("error=\(String(describing: error))") return } if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors print("statusCode should be 200, but is \(httpStatus.statusCode)") print("response = \(String(describing: response))") } self.responseString = String(data: data, encoding: .utf8)! print("responseString = \(String(describing: self.responseString))") DispatchQueue.main.async() { self.setTextInField(path: "https://dcav.pw/\(String(describing: self.labell.text![(self.labell.text!.startIndex)]))\(String(describing: self.responseString!))") self.pasteBoard.string = self.dcavTextField.text! } } task.resume() } func generateBoundaryString() -> String { return "Boundary-\(NSUUID().uuidString)" } func generateRequest(user: String, pass: String) -> URLRequest { let params : [String : String] = [ "user": user, "pass": pass ] let url = URL(string: UserDefaults.standard.string(forKey: "endpoint_preference")!) let boundary = generateBoundaryString() var request = URLRequest(url: url!) request.httpMethod = "POST" request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") let imageData: Data = UIImagePNGRepresentation(imageView.image!)! var body = Data() for (key, value) in params { body.append(Data("--\(boundary)\r\n".utf8)) body.append(Data("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".utf8)) body.append(Data("\(value)\r\n".utf8)) } let mimetype : String = "application/octet-stream" body.append(Data("--\(boundary)\r\n".utf8)) body.append(Data("Content-Disposition: form-data; name=\"imagedata\"; filename=\"lolfag.png\"\r\n".utf8)) body.append(Data("Content-Type: \(mimetype)\r\n\r\n".utf8)) body.append(imageData) body.append(Data("\r\n".utf8)) body.append(Data("--\(boundary)--\r\n".utf8)) request.httpBody = body return request } @IBAction func onSaveButton(_ sender: UIButton) { UIImageWriteToSavedPhotosAlbum(imageView.image!, nil, nil, nil); self.savedPhotoImageView.alpha = 0 self.savedPhotoImageView.isHidden = false UIView.animate(withDuration: 0.3, delay:0.0, options:UIViewAnimationOptions.transitionCrossDissolve, animations: { self.savedPhotoImageView.alpha = 1 }, completion: { finished in UIView.animate(withDuration: 0.3, delay:1, options:UIViewAnimationOptions.transitionCrossDissolve, animations: { self.savedPhotoImageView.alpha = 0 }, completion: { finished in self.savedPhotoImageView.isHidden = true }) }) } //MARK:Update progress bar func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) { uploadProgressBar.progress = Float(totalBytesSent) / Float(totalBytesExpectedToSend) print(String(describing: uploadProgressBar.progress)) } }