damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit deedf5577d5bdfeef934b930e8dbd333bb06c84f
parent 4ddf647d5f63a21e04544ae8f1dfd392ef8d150e
Author: William Casarin <jb55@jb55.com>
Date:   Thu, 25 Jan 2024 14:11:19 -0800

Revert "camera: switch to new custom view"

This reverts commit ca779d472d2c9f975b43941d89055ea068ac16cc.

Diffstat:
Mdamus.xcodeproj/project.pbxproj | 6------
Ddamus/Views/Camera/CameraView.swift | 212-------------------------------------------------------------------------------
Mdamus/Views/PostView.swift | 42++++++++++++++++++++----------------------
3 files changed, 20 insertions(+), 240 deletions(-)

diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj @@ -438,7 +438,6 @@ BA4AB0AE2A63B9270070A32A /* AddEmojiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA4AB0AD2A63B9270070A32A /* AddEmojiView.swift */; }; BA4AB0B02A63B94D0070A32A /* EmojiListItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA4AB0AF2A63B94D0070A32A /* EmojiListItemView.swift */; }; BA693074295D649800ADDB87 /* UserSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA693073295D649800ADDB87 /* UserSettingsStore.swift */; }; - BAA578D52AED7F4000EA8BE3 /* CameraView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAA578D42AED7F4000EA8BE3 /* CameraView.swift */; }; BAB68BED29543FA3007BA466 /* SelectWalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */; }; D2277EEA2A089BD5006C3807 /* Router.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2277EE92A089BD5006C3807 /* Router.swift */; }; D70A3B172B02DCE5008BD568 /* NotificationFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70A3B162B02DCE5008BD568 /* NotificationFormatter.swift */; }; @@ -1333,7 +1332,6 @@ BA4AB0AD2A63B9270070A32A /* AddEmojiView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddEmojiView.swift; sourceTree = "<group>"; }; BA4AB0AF2A63B94D0070A32A /* EmojiListItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiListItemView.swift; sourceTree = "<group>"; }; BA693073295D649800ADDB87 /* UserSettingsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSettingsStore.swift; sourceTree = "<group>"; }; - BAA578D42AED7F4000EA8BE3 /* CameraView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraView.swift; sourceTree = "<group>"; }; BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectWalletView.swift; sourceTree = "<group>"; }; D2277EE92A089BD5006C3807 /* Router.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Router.swift; sourceTree = "<group>"; }; D70A3B162B02DCE5008BD568 /* NotificationFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationFormatter.swift; sourceTree = "<group>"; }; @@ -2622,7 +2620,6 @@ isa = PBXGroup; children = ( BA3759962ABCCF360018D73B /* CameraPreview.swift */, - BAA578D42AED7F4000EA8BE3 /* CameraView.swift */, ); path = Camera; sourceTree = "<group>"; @@ -2632,8 +2629,6 @@ children = ( D72A2D042AD9C1B5002AFF62 /* MockDamusState.swift */, D72A2D062AD9C1FB002AFF62 /* MockProfiles.swift */, - BAA8C3262AEC570800696158 /* CameraView.swift */, - BA3759962ABCCF360018D73B /* CameraPreview.swift */, ); path = Mocking; sourceTree = "<group>"; @@ -3133,7 +3128,6 @@ 4CC7AAF8297F1CEE00430951 /* EventProfile.swift in Sources */, 5CF2DCCC2AA3AF0B00984B8D /* RelayPicView.swift in Sources */, 4C687C242A5FA86D0092C550 /* SearchHeaderView.swift in Sources */, - BAA578D52AED7F4000EA8BE3 /* CameraView.swift in Sources */, 64FBD06F296255C400D9D3B2 /* Theme.swift in Sources */, 4C1A9A2329DDDB8100516EAC /* IconLabel.swift in Sources */, 4CA352AC2A76C07F003BB08B /* NewUnmutesNotify.swift in Sources */, diff --git a/damus/Views/Camera/CameraView.swift b/damus/Views/Camera/CameraView.swift @@ -1,212 +0,0 @@ -// -// CameraView.swift -// damus -// -// Created by Suhail Saqan on 8/5/23. -// - -import SwiftUI -import Combine -import AVFoundation - -struct CameraView: View { - let damus_state: DamusState - let action: (([MediaItem]) -> Void) - - @Environment(\.presentationMode) var presentationMode - - @StateObject var model: CameraModel - - @State var currentZoomFactor: CGFloat = 1.0 - - public init(damus_state: DamusState, action: @escaping (([MediaItem]) -> Void)) { - self.damus_state = damus_state - self.action = action - _model = StateObject(wrappedValue: CameraModel()) - } - - var captureButton: some View { - Button { - if model.isRecording { - withAnimation { - model.stopRecording() - } - } else { - withAnimation { - model.capturePhoto() - } - } - UIImpactFeedbackGenerator(style: .medium).impactOccurred() - } label: { - ZStack { - Circle() - .fill( model.isRecording ? .red : DamusColors.black) - .frame(width: model.isRecording ? 85 : 65, height: model.isRecording ? 85 : 65, alignment: .center) - - Circle() - .stroke( model.isRecording ? .red : DamusColors.white, lineWidth: 4) - .frame(width: model.isRecording ? 95 : 75, height: model.isRecording ? 95 : 75, alignment: .center) - } - .frame(alignment: .center) - } - .simultaneousGesture( - LongPressGesture(minimumDuration: 0.5).onEnded({ value in - if (!model.isCameraButtonDisabled) { - withAnimation { - model.startRecording() - model.captureMode = .video - } - } - }) - ) - .buttonStyle(.plain) - } - - var capturedPhotoThumbnail: some View { - ZStack { - if model.thumbnail != nil { - Image(uiImage: model.thumbnail.thumbnailImage!) - .resizable() - .aspectRatio(contentMode: .fill) - .frame(width: 60, height: 60) - .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) - } - if model.isPhotoProcessing { - ProgressView() - .progressViewStyle(CircularProgressViewStyle(tint: DamusColors.white)) - } - } - } - - var closeButton: some View { - Button { - presentationMode.wrappedValue.dismiss() - model.stop() - } label: { - HStack { - Image(systemName: "xmark") - .font(.system(size: 24)) - } - .frame(minWidth: 40, minHeight: 40) - } - .accentColor(DamusColors.white) - } - - var flipCameraButton: some View { - Button(action: { - model.flipCamera() - }, label: { - HStack { - Image(systemName: "camera.rotate.fill") - .font(.system(size: 20)) - } - .frame(minWidth: 40, minHeight: 40) - }) - .accentColor(DamusColors.white) - } - - var toggleFlashButton: some View { - Button(action: { - model.switchFlash() - }, label: { - HStack { - Image(systemName: model.isFlashOn ? "bolt.fill" : "bolt.slash.fill") - .font(.system(size: 20)) - } - .frame(minWidth: 40, minHeight: 40) - }) - .accentColor(model.isFlashOn ? .yellow : DamusColors.white) - } - - var body: some View { - NavigationView { - GeometryReader { reader in - ZStack { - DamusColors.black.edgesIgnoringSafeArea(.all) - - CameraPreview(session: model.session) - .padding(.bottom, 175) - .edgesIgnoringSafeArea(.all) - .gesture( - DragGesture().onChanged({ (val) in - if abs(val.translation.height) > abs(val.translation.width) { - let percentage: CGFloat = -(val.translation.height / reader.size.height) - let calc = currentZoomFactor + percentage - let zoomFactor: CGFloat = min(max(calc, 1), 5) - - currentZoomFactor = zoomFactor - model.zoom(with: zoomFactor) - } - }) - ) - .onAppear { - model.configure() - } - .alert(isPresented: $model.showAlertError, content: { - Alert(title: Text(model.alertError.title), message: Text(model.alertError.message), dismissButton: .default(Text(model.alertError.primaryButtonTitle), action: { - model.alertError.primaryAction?() - })) - }) - .overlay( - Group { - if model.willCapturePhoto { - Color.black - } - } - ) - - VStack { - if !model.isRecording { - HStack { - closeButton - - Spacer() - - HStack { - flipCameraButton - toggleFlashButton - } - } - .padding(.horizontal, 20) - } - - Spacer() - - HStack(alignment: .center) { - if !model.mediaItems.isEmpty { - NavigationLink(destination: Text(model.mediaItems.map { $0.url.absoluteString }.joined(separator: ", "))) { - capturedPhotoThumbnail - } - .frame(width: 100, alignment: .leading) - } - - Spacer() - - captureButton - - Spacer() - - if !model.mediaItems.isEmpty { - Button(action: { - action(model.mediaItems) - presentationMode.wrappedValue.dismiss() - model.stop() - }) { - Text("Upload") - .frame(width: 100, height: 40, alignment: .center) - .foregroundColor(DamusColors.white) - .overlay { - RoundedRectangle(cornerRadius: 24) - .stroke(DamusColors.white, lineWidth: 2) - } - } - } - } - .frame(height: 100) - .padding([.horizontal, .vertical], 20) - } - } - } - } - } -} diff --git a/damus/Views/PostView.swift b/damus/Views/PostView.swift @@ -57,7 +57,7 @@ struct PostView: View { @State var newCursorIndex: Int? @State var textHeight: CGFloat? = nil - @State var mediaToUpload: [MediaUpload] = [] + @State var mediaToUpload: MediaUpload? = nil @StateObject var image_upload: ImageUploadModel = ImageUploadModel() @StateObject var tagModel: TagModel = TagModel() @@ -379,15 +379,6 @@ struct PostView: View { pks.append(pk) } } - - func addToMediaToUpload(mediaItem: MediaItem) { - switch mediaItem.type { - case .image: - mediaToUpload.append(.image(mediaItem.url)) - case .video: - mediaToUpload.append(.video(mediaItem.url)) - } - } var body: some View { GeometryReader { (deviceSize: GeometryProxy) in @@ -430,29 +421,36 @@ struct PostView: View { .background(DamusColors.adaptableWhite.edgesIgnoringSafeArea(.all)) .sheet(isPresented: $attach_media) { ImagePicker(uploader: damus_state.settings.default_media_uploader, sourceType: .photoLibrary, pubkey: damus_state.pubkey, image_upload_confirm: $image_upload_confirm) { img in - self.mediaToUpload.append(.image(img)) + self.mediaToUpload = .image(img) } onVideoPicked: { url in - self.mediaToUpload.append(.video(url)) + self.mediaToUpload = .video(url) } .alert(NSLocalizedString("Are you sure you want to upload this media?", comment: "Alert message asking if the user wants to upload media."), isPresented: $image_upload_confirm) { Button(NSLocalizedString("Upload", comment: "Button to proceed with uploading."), role: .none) { - if !mediaToUpload.isEmpty { - self.handle_upload(media: mediaToUpload[0]) + if let mediaToUpload { + self.handle_upload(media: mediaToUpload) self.attach_media = false } } Button(NSLocalizedString("Cancel", comment: "Button to cancel the upload."), role: .cancel) {} } } - .fullScreenCover(isPresented: $attach_camera) { - CameraView(damus_state: damus_state, action: { items in - for item in items { - addToMediaToUpload(mediaItem: item) - } - for media in mediaToUpload { - self.handle_upload(media: media) + .sheet(isPresented: $attach_camera) { + + ImagePicker(uploader: damus_state.settings.default_media_uploader, sourceType: .camera, pubkey: damus_state.pubkey, image_upload_confirm: $image_upload_confirm) { img in + self.mediaToUpload = .image(img) + } onVideoPicked: { url in + self.mediaToUpload = .video(url) + } + .alert(NSLocalizedString("Are you sure you want to upload this media?", comment: "Alert message asking if the user wants to upload media."), isPresented: $image_upload_confirm) { + Button(NSLocalizedString("Upload", comment: "Button to proceed with uploading."), role: .none) { + if let mediaToUpload { + self.handle_upload(media: mediaToUpload) + self.attach_camera = false + } } - }) + Button(NSLocalizedString("Cancel", comment: "Button to cancel the upload."), role: .cancel) {} + } } .onAppear() { let loaded_draft = load_draft()