Ask permission before uploading media
Changelog-Changed: Ask permission before uploading media Closes: #886
This commit is contained in:
@@ -15,6 +15,7 @@ struct ImagePicker: UIViewControllerRepresentable {
|
|||||||
|
|
||||||
let sourceType: UIImagePickerController.SourceType
|
let sourceType: UIImagePickerController.SourceType
|
||||||
let pubkey: String
|
let pubkey: String
|
||||||
|
@Binding var image_upload_confirm: Bool
|
||||||
var imagesOnly: Bool = false
|
var imagesOnly: Bool = false
|
||||||
let onImagePicked: (URL) -> Void
|
let onImagePicked: (URL) -> Void
|
||||||
let onVideoPicked: (URL) -> Void
|
let onVideoPicked: (URL) -> Void
|
||||||
@@ -24,15 +25,18 @@ struct ImagePicker: UIViewControllerRepresentable {
|
|||||||
private let sourceType: UIImagePickerController.SourceType
|
private let sourceType: UIImagePickerController.SourceType
|
||||||
private let onImagePicked: (URL) -> Void
|
private let onImagePicked: (URL) -> Void
|
||||||
private let onVideoPicked: (URL) -> Void
|
private let onVideoPicked: (URL) -> Void
|
||||||
|
@Binding var image_upload_confirm: Bool
|
||||||
|
|
||||||
init(presentationMode: Binding<PresentationMode>,
|
init(presentationMode: Binding<PresentationMode>,
|
||||||
sourceType: UIImagePickerController.SourceType,
|
sourceType: UIImagePickerController.SourceType,
|
||||||
onImagePicked: @escaping (URL) -> Void,
|
onImagePicked: @escaping (URL) -> Void,
|
||||||
onVideoPicked: @escaping (URL) -> Void) {
|
onVideoPicked: @escaping (URL) -> Void,
|
||||||
|
image_upload_confirm: Binding<Bool>) {
|
||||||
_presentationMode = presentationMode
|
_presentationMode = presentationMode
|
||||||
self.sourceType = sourceType
|
self.sourceType = sourceType
|
||||||
self.onImagePicked = onImagePicked
|
self.onImagePicked = onImagePicked
|
||||||
self.onVideoPicked = onVideoPicked
|
self.onVideoPicked = onVideoPicked
|
||||||
|
self._image_upload_confirm = image_upload_confirm
|
||||||
}
|
}
|
||||||
|
|
||||||
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
|
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
|
||||||
@@ -51,9 +55,9 @@ struct ImagePicker: UIViewControllerRepresentable {
|
|||||||
onImagePicked(editedImageURL)
|
onImagePicked(editedImageURL)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
presentationMode.dismiss()
|
image_upload_confirm = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
|
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
|
||||||
presentationMode.dismiss()
|
presentationMode.dismiss()
|
||||||
}
|
}
|
||||||
@@ -98,7 +102,7 @@ struct ImagePicker: UIViewControllerRepresentable {
|
|||||||
onVideoPicked: { videoURL in
|
onVideoPicked: { videoURL in
|
||||||
// Handle the selected video URL
|
// Handle the selected video URL
|
||||||
onVideoPicked(videoURL)
|
onVideoPicked(videoURL)
|
||||||
})
|
}, image_upload_confirm: $image_upload_confirm)
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
|
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
|
||||||
|
|||||||
@@ -23,8 +23,11 @@ struct PostView: View {
|
|||||||
@State var attach_camera: Bool = false
|
@State var attach_camera: Bool = false
|
||||||
@State var error: String? = nil
|
@State var error: String? = nil
|
||||||
@State var uploadedMedias: [UploadedMedia] = []
|
@State var uploadedMedias: [UploadedMedia] = []
|
||||||
|
@State var image_upload_confirm: Bool = false
|
||||||
@State var originalReferences: [ReferencedId] = []
|
@State var originalReferences: [ReferencedId] = []
|
||||||
@State var references: [ReferencedId] = []
|
@State var references: [ReferencedId] = []
|
||||||
|
|
||||||
|
@State var mediaToUpload: MediaUpload? = nil
|
||||||
|
|
||||||
@StateObject var image_upload: ImageUploadModel = ImageUploadModel()
|
@StateObject var image_upload: ImageUploadModel = ImageUploadModel()
|
||||||
|
|
||||||
@@ -254,14 +257,22 @@ struct PostView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.sheet(isPresented: $attach_media) {
|
.sheet(isPresented: $attach_media) {
|
||||||
ImagePicker(sourceType: .photoLibrary, pubkey: damus_state.pubkey) { img in
|
ImagePicker(sourceType: .photoLibrary, pubkey: damus_state.pubkey, image_upload_confirm: $image_upload_confirm) { img in
|
||||||
handle_upload(media: .image(img))
|
self.mediaToUpload = .image(img)
|
||||||
} onVideoPicked: { url in
|
} onVideoPicked: { url in
|
||||||
handle_upload(media: .video(url))
|
self.mediaToUpload = .video(url)
|
||||||
|
}
|
||||||
|
.alert("Confirm upload?", isPresented: $image_upload_confirm) {
|
||||||
|
Button(NSLocalizedString("Upload", comment: "Button to proceed with uploading."), role: .none) {
|
||||||
|
self.handle_upload(media: mediaToUpload!)
|
||||||
|
self.attach_media = false
|
||||||
|
}
|
||||||
|
Button(NSLocalizedString("Cancel", comment: "Button to cancel the upload."), role: .cancel) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.sheet(isPresented: $attach_camera) {
|
.sheet(isPresented: $attach_camera) {
|
||||||
ImagePicker(sourceType: .camera, pubkey: damus_state.pubkey) { img in
|
// image_upload_confirm isn't handled here, I don't know we need to display it here too tbh
|
||||||
|
ImagePicker(sourceType: .camera, pubkey: damus_state.pubkey, image_upload_confirm: $image_upload_confirm) { img in
|
||||||
handle_upload(media: .image(img))
|
handle_upload(media: .image(img))
|
||||||
} onVideoPicked: { url in
|
} onVideoPicked: { url in
|
||||||
handle_upload(media: .video(url))
|
handle_upload(media: .video(url))
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ struct EditProfilePictureControl: View {
|
|||||||
|
|
||||||
@State private var show_camera = false
|
@State private var show_camera = false
|
||||||
@State private var show_library = false
|
@State private var show_library = false
|
||||||
|
@State var image_upload_confirm: Bool = false
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
Menu {
|
Menu {
|
||||||
Button(action: {
|
Button(action: {
|
||||||
@@ -44,14 +45,16 @@ struct EditProfilePictureControl: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.sheet(isPresented: $show_camera) {
|
.sheet(isPresented: $show_camera) {
|
||||||
ImagePicker(sourceType: .camera, pubkey: pubkey, imagesOnly: true) { img in
|
// The alert may not be required for the profile pic upload case. Not showing the confirm check alert for this scenario
|
||||||
|
ImagePicker(sourceType: .camera, pubkey: pubkey, image_upload_confirm: $image_upload_confirm, imagesOnly: true) { img in
|
||||||
handle_upload(media: .image(img))
|
handle_upload(media: .image(img))
|
||||||
} onVideoPicked: { url in
|
} onVideoPicked: { url in
|
||||||
print("Cannot upload videos as profile image")
|
print("Cannot upload videos as profile image")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.sheet(isPresented: $show_library) {
|
.sheet(isPresented: $show_library) {
|
||||||
ImagePicker(sourceType: .photoLibrary, pubkey: pubkey, imagesOnly: true) { img in
|
// The alert may not be required for the profile pic upload case. Not showing the confirm check alert for this scenario
|
||||||
|
ImagePicker(sourceType: .photoLibrary, pubkey: pubkey, image_upload_confirm: $image_upload_confirm, imagesOnly: true) { img in
|
||||||
handle_upload(media: .image(img))
|
handle_upload(media: .image(img))
|
||||||
} onVideoPicked: { url in
|
} onVideoPicked: { url in
|
||||||
print("Cannot upload videos as profile image")
|
print("Cannot upload videos as profile image")
|
||||||
|
|||||||
Reference in New Issue
Block a user