mirror of
https://github.com/mastodon/mastodon-ios
synced 2025-04-11 22:58:02 +02:00
Make caption changable (#1138)
This commit is contained in:
parent
d55800d71a
commit
89b7df25ea
@ -284,7 +284,8 @@ extension ComposeViewController {
|
||||
authContext: viewModel.authContext,
|
||||
input: .image(image),
|
||||
sizeLimit: composeContentViewModel.sizeLimit,
|
||||
delegate: composeContentViewModel
|
||||
delegate: composeContentViewModel,
|
||||
caption: nil
|
||||
)
|
||||
}
|
||||
composeContentViewModel.attachmentViewModels += attachmentViewModels
|
||||
|
@ -120,15 +120,12 @@ extension AttachmentViewModel {
|
||||
}
|
||||
|
||||
let attachment = output.asAttachment
|
||||
|
||||
|
||||
let query = Mastodon.API.Media.UploadMediaQuery(
|
||||
file: attachment,
|
||||
thumbnail: nil,
|
||||
description: {
|
||||
let caption = caption.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
return caption.isEmpty ? nil : caption
|
||||
}(),
|
||||
focus: nil // TODO:
|
||||
description: caption.trimmingCharacters(in: .whitespacesAndNewlines),
|
||||
focus: nil
|
||||
)
|
||||
|
||||
// upload + N * check upload
|
||||
|
@ -45,8 +45,10 @@ final public class AttachmentViewModel: NSObject, ObservableObject, Identifiable
|
||||
public let authContext: AuthContext
|
||||
public let input: Input
|
||||
public let sizeLimit: SizeLimit
|
||||
let originalCaption: String?
|
||||
@Published var caption = ""
|
||||
@Published public private(set) var isCaptionEditable = true
|
||||
let isEditing: Bool
|
||||
|
||||
// output
|
||||
@Published public private(set) var output: Output?
|
||||
@ -75,15 +77,21 @@ final public class AttachmentViewModel: NSObject, ObservableObject, Identifiable
|
||||
authContext: AuthContext,
|
||||
input: Input,
|
||||
sizeLimit: SizeLimit,
|
||||
delegate: AttachmentViewModelDelegate
|
||||
delegate: AttachmentViewModelDelegate,
|
||||
isEditing: Bool = false,
|
||||
caption: String?
|
||||
) {
|
||||
self.api = api
|
||||
self.authContext = authContext
|
||||
self.input = input
|
||||
self.sizeLimit = sizeLimit
|
||||
self.delegate = delegate
|
||||
self.isEditing = isEditing
|
||||
|
||||
self.originalCaption = caption
|
||||
self.caption = caption ?? ""
|
||||
|
||||
super.init()
|
||||
// end init
|
||||
|
||||
Timer.publish(every: 1.0 / 60.0, on: .main, in: .common) // 60 FPS
|
||||
.autoconnect()
|
||||
@ -134,7 +142,9 @@ final public class AttachmentViewModel: NSObject, ObservableObject, Identifiable
|
||||
|
||||
switch input {
|
||||
case .mastodonAssetUrl:
|
||||
self.isCaptionEditable = false
|
||||
if self.isEditing == false {
|
||||
self.isCaptionEditable = false
|
||||
}
|
||||
self.uploadState = .finish
|
||||
self.output = output
|
||||
self.uploadResult = .exists
|
||||
@ -258,7 +268,7 @@ extension AttachmentViewModel {
|
||||
public enum Input: Hashable {
|
||||
case image(UIImage)
|
||||
case url(URL)
|
||||
case mastodonAssetUrl(URL, String)
|
||||
case mastodonAssetUrl(url: URL, attachmentId: String)
|
||||
case pickerResult(PHPickerResult)
|
||||
case itemProvider(NSItemProvider)
|
||||
}
|
||||
@ -321,4 +331,5 @@ extension AttachmentViewModel {
|
||||
func update(uploadResult: UploadResult) {
|
||||
self.uploadResult = uploadResult
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -473,7 +473,8 @@ extension ComposeContentViewController: PHPickerViewControllerDelegate {
|
||||
authContext: viewModel.authContext,
|
||||
input: .pickerResult(result),
|
||||
sizeLimit: viewModel.sizeLimit,
|
||||
delegate: viewModel
|
||||
delegate: viewModel,
|
||||
caption: nil
|
||||
)
|
||||
}
|
||||
viewModel.attachmentViewModels += attachmentViewModels
|
||||
@ -492,7 +493,8 @@ extension ComposeContentViewController: UIImagePickerControllerDelegate & UINavi
|
||||
authContext: viewModel.authContext,
|
||||
input: .image(image),
|
||||
sizeLimit: viewModel.sizeLimit,
|
||||
delegate: viewModel
|
||||
delegate: viewModel,
|
||||
caption: nil
|
||||
)
|
||||
viewModel.attachmentViewModels += [attachmentViewModel]
|
||||
}
|
||||
@ -512,7 +514,8 @@ extension ComposeContentViewController: UIDocumentPickerDelegate {
|
||||
authContext: viewModel.authContext,
|
||||
input: .url(url),
|
||||
sizeLimit: viewModel.sizeLimit,
|
||||
delegate: viewModel
|
||||
delegate: viewModel,
|
||||
caption: nil
|
||||
)
|
||||
viewModel.attachmentViewModels += [attachmentViewModel]
|
||||
}
|
||||
|
@ -265,14 +265,16 @@ public final class ComposeContentViewModel: NSObject, ObservableObject {
|
||||
self.isVisibilityButtonEnabled = false
|
||||
self.attachmentViewModels = status.entity.mastodonAttachments.compactMap {
|
||||
guard let assetURL = $0.assetURL, let url = URL(string: assetURL) else { return nil }
|
||||
|
||||
let attachmentViewModel = AttachmentViewModel(
|
||||
api: context.apiService,
|
||||
authContext: authContext,
|
||||
input: .mastodonAssetUrl(url, $0.id),
|
||||
input: .mastodonAssetUrl(url: url, attachmentId: $0.id),
|
||||
sizeLimit: sizeLimit,
|
||||
delegate: self
|
||||
delegate: self,
|
||||
isEditing: true,
|
||||
caption: $0.altDescription
|
||||
)
|
||||
attachmentViewModel.caption = $0.altDescription ?? ""
|
||||
return attachmentViewModel
|
||||
}
|
||||
}
|
||||
|
@ -124,17 +124,14 @@ extension MastodonStatusPublisher: StatusPublisher {
|
||||
break
|
||||
case let .uploadedMastodonAttachment(attachment):
|
||||
attachmentIDs.append(attachment.id)
|
||||
|
||||
let caption = attachmentViewModel.caption
|
||||
guard !caption.isEmpty else { continue }
|
||||
|
||||
|
||||
_ = try await api.updateMedia(
|
||||
domain: authContext.mastodonAuthenticationBox.domain,
|
||||
attachmentID: attachment.id,
|
||||
query: .init(
|
||||
file: nil,
|
||||
thumbnail: nil,
|
||||
description: caption,
|
||||
description: attachmentViewModel.caption,
|
||||
focus: nil
|
||||
),
|
||||
mastodonAuthenticationBox: authContext.mastodonAuthenticationBox
|
||||
|
@ -260,7 +260,8 @@ extension ShareViewController {
|
||||
authContext: authContext,
|
||||
input: .itemProvider(movieProvider),
|
||||
sizeLimit: .init(image: nil, video: nil),
|
||||
delegate: composeContentViewModel
|
||||
delegate: composeContentViewModel,
|
||||
caption: nil
|
||||
)
|
||||
composeContentViewModel.attachmentViewModels.append(attachmentViewModel)
|
||||
} else if !imageProviders.isEmpty {
|
||||
@ -270,7 +271,8 @@ extension ShareViewController {
|
||||
authContext: authContext,
|
||||
input: .itemProvider(provider),
|
||||
sizeLimit: .init(image: nil, video: nil),
|
||||
delegate: composeContentViewModel
|
||||
delegate: composeContentViewModel,
|
||||
caption: nil
|
||||
)
|
||||
}
|
||||
composeContentViewModel.attachmentViewModels.append(contentsOf: attachmentViewModels)
|
||||
|
Loading…
x
Reference in New Issue
Block a user