From a2b062017576a3f35c339700b9edf981e33e7d6d Mon Sep 17 00:00:00 2001 From: Swift Coder Date: Thu, 24 Oct 2024 10:36:34 -0400 Subject: [PATCH] fix: banner image upload There was a nostr.build auth issue when uploading banner images. This fixes that. Closes: #2614 Changelog-Fixed: Fix banner image uploa Signed-off-by: Swift Coder --- damus/Views/BannerImageView.swift | 2 +- damus/Views/CreateAccountView.swift | 2 +- damus/Views/MediaPicker.swift | 20 ++++++++++++++----- damus/Views/PostView.swift | 2 +- damus/Views/Profile/EditPictureControl.swift | 7 ++++--- .../Profile/ProfilePictureSelector.swift | 2 +- 6 files changed, 23 insertions(+), 12 deletions(-) diff --git a/damus/Views/BannerImageView.swift b/damus/Views/BannerImageView.swift index 3bb4e871..8923d7bd 100644 --- a/damus/Views/BannerImageView.swift +++ b/damus/Views/BannerImageView.swift @@ -31,7 +31,7 @@ struct EditBannerImageView: View { .onFailureImage(defaultImage) .kfClickable() - EditPictureControl(uploader: damus_state.settings.default_media_uploader, pubkey: damus_state.pubkey, image_url: $banner_image, uploadObserver: viewModel, callback: callback) + EditPictureControl(uploader: damus_state.settings.default_media_uploader, keypair: damus_state.keypair, pubkey: damus_state.pubkey, image_url: $banner_image, uploadObserver: viewModel, callback: callback) } } } diff --git a/damus/Views/CreateAccountView.swift b/damus/Views/CreateAccountView.swift index ef7f77df..e91c322f 100644 --- a/damus/Views/CreateAccountView.swift +++ b/damus/Views/CreateAccountView.swift @@ -28,7 +28,7 @@ struct CreateAccountView: View { Spacer() VStack(alignment: .center) { - EditPictureControl(uploader: .nostrBuild, pubkey: account.pubkey, size: 75, setup: true, image_url: $account.profile_image , uploadObserver: profileUploadObserver, callback: uploadedProfilePicture) + EditPictureControl(uploader: .nostrBuild, keypair: account.keypair, pubkey: account.pubkey, size: 75, setup: true, image_url: $account.profile_image , uploadObserver: profileUploadObserver, callback: uploadedProfilePicture) .shadow(radius: 2) .padding(.top, 100) diff --git a/damus/Views/MediaPicker.swift b/damus/Views/MediaPicker.swift index 025e24f1..bd878a81 100644 --- a/damus/Views/MediaPicker.swift +++ b/damus/Views/MediaPicker.swift @@ -9,15 +9,19 @@ import UIKit import SwiftUI import PhotosUI +enum MediaPickerEntry { + case editPictureControl + case postView +} + struct MediaPicker: UIViewControllerRepresentable { @Environment(\.presentationMode) @Binding private var presentationMode + let mediaPickerEntry: MediaPickerEntry @Binding var image_upload_confirm: Bool - var imagesOnly: Bool = false let onMediaPicked: (PreUploadedMedia) -> Void - final class Coordinator: NSObject, PHPickerViewControllerDelegate { var parent: MediaPicker @@ -138,9 +142,15 @@ struct MediaPicker: UIViewControllerRepresentable { func makeUIViewController(context: Context) -> PHPickerViewController { var configuration = PHPickerConfiguration(photoLibrary: .shared()) - configuration.selectionLimit = 0 // Allows multiple media selection - configuration.filter = imagesOnly ? .images : .any(of: [.images, .videos]) - configuration.selection = .ordered // images are returned in the order they were selected + numbered badge displayed + switch mediaPickerEntry { + case .postView: + configuration.selectionLimit = 0 // allows multiple media selection + configuration.filter = .any(of: [.images, .videos]) + configuration.selection = .ordered // images are returned in the order they were selected + numbered badge displayed + case .editPictureControl: + configuration.selectionLimit = 1 // allows one media selection + configuration.filter = .images // allows image only + } let picker = PHPickerViewController(configuration: configuration) picker.delegate = context.coordinator as any PHPickerViewControllerDelegate return picker diff --git a/damus/Views/PostView.swift b/damus/Views/PostView.swift index edb64bd5..1a17be19 100644 --- a/damus/Views/PostView.swift +++ b/damus/Views/PostView.swift @@ -437,7 +437,7 @@ struct PostView: View { } .background(DamusColors.adaptableWhite.edgesIgnoringSafeArea(.all)) .sheet(isPresented: $attach_media) { - MediaPicker(image_upload_confirm: $image_upload_confirm){ media in + MediaPicker(mediaPickerEntry: .postView, image_upload_confirm: $image_upload_confirm){ media in self.preUploadedMedia.append(media) } .alert(NSLocalizedString("Are you sure you want to upload the selected media?", comment: "Alert message asking if the user wants to upload media."), isPresented: $image_upload_confirm) { diff --git a/damus/Views/Profile/EditPictureControl.swift b/damus/Views/Profile/EditPictureControl.swift index 85d48290..04416133 100644 --- a/damus/Views/Profile/EditPictureControl.swift +++ b/damus/Views/Profile/EditPictureControl.swift @@ -14,6 +14,7 @@ class ImageUploadingObserver: ObservableObject { struct EditPictureControl: View { let uploader: MediaUploader + let keypair: Keypair? let pubkey: Pubkey var size: CGFloat? = 25 var setup: Bool? = false @@ -113,7 +114,7 @@ struct EditPictureControl: View { } } .sheet(isPresented: $show_library) { - MediaPicker(image_upload_confirm: $image_upload_confirm, imagesOnly: true) { media in + MediaPicker(mediaPickerEntry: .editPictureControl, image_upload_confirm: $image_upload_confirm) { media in self.preUploadedMedia = media } .alert(NSLocalizedString("Are you sure you want to upload this image?", comment: "Alert message asking if the user wants to upload an image."), isPresented: $image_upload_confirm) { @@ -195,7 +196,7 @@ struct EditPictureControl: View { private func handle_upload(media: MediaUpload) { uploadObserver.isLoading = true Task { - let res = await image_upload.start(media: media, uploader: uploader) + let res = await image_upload.start(media: media, uploader: uploader, keypair: keypair) switch res { case .success(let urlString): @@ -221,7 +222,7 @@ struct EditPictureControl_Previews: PreviewProvider { let observer = ImageUploadingObserver() ZStack { Color.gray - EditPictureControl(uploader: .nostrBuild, pubkey: test_pubkey, size: 100, setup: false, image_url: url, uploadObserver: observer) { _ in + EditPictureControl(uploader: .nostrBuild, keypair: test_keypair, pubkey: test_pubkey, size: 100, setup: false, image_url: url, uploadObserver: observer) { _ in // } } diff --git a/damus/Views/Profile/ProfilePictureSelector.swift b/damus/Views/Profile/ProfilePictureSelector.swift index 5cae27b7..1b050918 100644 --- a/damus/Views/Profile/ProfilePictureSelector.swift +++ b/damus/Views/Profile/ProfilePictureSelector.swift @@ -33,7 +33,7 @@ struct EditProfilePictureView: View { .scaledToFill() .kfClickable() - EditPictureControl(uploader: damus_state?.settings.default_media_uploader ?? .nostrBuild, pubkey: pubkey, image_url: $profile_url, uploadObserver: uploadObserver, callback: callback) + EditPictureControl(uploader: damus_state?.settings.default_media_uploader ?? .nostrBuild, keypair: damus_state?.keypair, pubkey: pubkey, image_url: $profile_url, uploadObserver: uploadObserver, callback: callback) } .frame(width: size, height: size) .clipShape(Circle())