commit a2b062017576a3f35c339700b9edf981e33e7d6d
parent 8c6bee3d90d9019b8d561d814d5c8bc9916fde4b
Author: Swift Coder <scoder1747@gmail.com>
Date: Thu, 24 Oct 2024 10:36:34 -0400
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 <scoder1747@gmail.com>
Diffstat:
6 files changed, 23 insertions(+), 12 deletions(-)
diff --git 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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())