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:
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()