Small refactor for video uploader
This commit is contained in:
@@ -9,10 +9,23 @@ import Foundation
|
|||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
|
|
||||||
|
enum MediaUpload {
|
||||||
|
case image(UIImage)
|
||||||
|
case video(URL)
|
||||||
|
|
||||||
|
var is_image: Bool {
|
||||||
|
guard case .image = self else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class ImageUploadModel: NSObject, URLSessionTaskDelegate, ObservableObject {
|
class ImageUploadModel: NSObject, URLSessionTaskDelegate, ObservableObject {
|
||||||
@Published var progress: Double? = nil
|
@Published var progress: Double? = nil
|
||||||
|
|
||||||
func start(media: Any, uploader: MediaUploader) async -> ImageUploadResult {
|
func start(media: MediaUpload, uploader: MediaUploader) async -> ImageUploadResult {
|
||||||
let res = await create_upload_request(mediaToUpload: media, mediaUploader: uploader, progress: self)
|
let res = await create_upload_request(mediaToUpload: media, mediaUploader: uploader, progress: self)
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.progress = nil
|
self.progress = nil
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ fileprivate func create_upload_body(mediaData: Data, boundary: String, mediaUplo
|
|||||||
return body as Data
|
return body as Data
|
||||||
}
|
}
|
||||||
|
|
||||||
func create_upload_request(mediaToUpload: Any, mediaUploader: MediaUploader, progress: URLSessionTaskDelegate) async -> ImageUploadResult {
|
func create_upload_request(mediaToUpload: MediaUpload, mediaUploader: MediaUploader, progress: URLSessionTaskDelegate) async -> ImageUploadResult {
|
||||||
var mediaIsImage: Bool = false
|
var mediaIsImage: Bool = false
|
||||||
var mediaData: Data?
|
var mediaData: Data?
|
||||||
guard let url = URL(string: mediaUploader.postAPI) else {
|
guard let url = URL(string: mediaUploader.postAPI) else {
|
||||||
@@ -41,14 +41,18 @@ func create_upload_request(mediaToUpload: Any, mediaUploader: MediaUploader, pro
|
|||||||
let boundary = "Boundary-\(UUID().description)"
|
let boundary = "Boundary-\(UUID().description)"
|
||||||
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
|
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
|
||||||
|
|
||||||
if let imageToUpload = mediaToUpload as? UIImage {
|
switch mediaToUpload {
|
||||||
mediaData = imageToUpload.jpegData(compressionQuality: 0.8)
|
case .image(let img):
|
||||||
mediaIsImage = true
|
mediaData = img.jpegData(compressionQuality: 0.8)
|
||||||
} else if let videoToUpload = mediaToUpload as? URL {
|
case .video(let url):
|
||||||
mediaData = try? Data(contentsOf: videoToUpload)
|
do {
|
||||||
|
mediaData = try Data(contentsOf: url)
|
||||||
|
} catch {
|
||||||
|
return .failed(error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let mediaData = mediaData else {
|
guard let mediaData else {
|
||||||
return .failed(nil)
|
return .failed(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ struct PostView: View {
|
|||||||
post = combinedAttributedString
|
post = combinedAttributedString
|
||||||
}
|
}
|
||||||
|
|
||||||
func handle_upload(media: Any) {
|
func handle_upload(media: MediaUpload) {
|
||||||
let uploader = get_media_uploader(damus_state.pubkey)
|
let uploader = get_media_uploader(damus_state.pubkey)
|
||||||
|
|
||||||
Task.init {
|
Task.init {
|
||||||
@@ -216,9 +216,9 @@ struct PostView: View {
|
|||||||
.padding()
|
.padding()
|
||||||
.sheet(isPresented: $attach_media) {
|
.sheet(isPresented: $attach_media) {
|
||||||
ImagePicker(sourceType: .photoLibrary, damusState: damus_state) { img in
|
ImagePicker(sourceType: .photoLibrary, damusState: damus_state) { img in
|
||||||
handle_upload(media: img)
|
handle_upload(media: .image(img))
|
||||||
} onVideoPicked: { url in
|
} onVideoPicked: { url in
|
||||||
handle_upload(media: url)
|
handle_upload(media: .video(url))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.onAppear() {
|
.onAppear() {
|
||||||
|
|||||||
Reference in New Issue
Block a user