From 0a2034171ca21bc4ccc129d8b52d818e15445d1e Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Fri, 2 Apr 2021 16:25:14 -0700 Subject: [PATCH] Display custom max_toot_chars --- .../View Models/CompositionViewModel.swift | 18 +++++++++++------- .../View Models/NewStatusViewModel.swift | 6 ++++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ViewModels/Sources/ViewModels/View Models/CompositionViewModel.swift b/ViewModels/Sources/ViewModels/View Models/CompositionViewModel.swift index 8d0cad1..a64c94d 100644 --- a/ViewModels/Sources/ViewModels/View Models/CompositionViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/CompositionViewModel.swift @@ -26,14 +26,16 @@ public final class CompositionViewModel: AttachmentsRenderingViewModel, Observab @Published public private(set) var isPostable = false @Published public private(set) var canAddAttachment = true @Published public private(set) var canAddNonImageAttachment = true - @Published public private(set) var remainingCharacters = CompositionViewModel.maxCharacters + @Published public private(set) var remainingCharacters = CompositionViewModel.defaultMaxCharacters public let canRemoveAttachments = true private let eventsSubject: PassthroughSubject + private let maxCharacters: Int private var cancellables = Set() - init(eventsSubject: PassthroughSubject) { + init(eventsSubject: PassthroughSubject, maxCharacters: Int?) { self.eventsSubject = eventsSubject + self.maxCharacters = maxCharacters ?? Self.defaultMaxCharacters $text.map { !$0.isEmpty } .removeDuplicates() @@ -61,7 +63,7 @@ public final class CompositionViewModel: AttachmentsRenderingViewModel, Observab return tokens.map(\.countShorteningIfURL).reduce(tokens.count - 1, +) } .combineLatest($displayContentWarning, $contentWarning) - .map { Self.maxCharacters - ($0 + ($1 ? $2.count : 0)) } + .map { (maxCharacters ?? Self.defaultMaxCharacters) - ($0 + ($1 ? $2.count : 0)) } .assign(to: &$remainingCharacters) $displayContentWarning.filter { $0 }.assign(to: &$sensitive) @@ -87,7 +89,7 @@ public final class CompositionViewModel: AttachmentsRenderingViewModel, Observab } public extension CompositionViewModel { - static let maxCharacters = 500 + static let defaultMaxCharacters = 500 static let maxAttachmentCount = 4 static let minPollOptionCount = 2 static let maxPollOptionCount = 4 @@ -111,7 +113,7 @@ public extension CompositionViewModel { public let id = Id() @Published public var text: String @Published public var textToSelectedRange = "" - @Published public private(set) var remainingCharacters = CompositionViewModel.maxCharacters + @Published public private(set) var remainingCharacters = PollOption.maxCharacters @Published public private(set) var autocompleteQuery: String? public init(text: String) { @@ -129,7 +131,8 @@ public extension CompositionViewModel { convenience init(eventsSubject: PassthroughSubject, redraft: Status, identityContext: IdentityContext) { - self.init(eventsSubject: eventsSubject) + self.init(eventsSubject: eventsSubject, + maxCharacters: identityContext.identity.instance?.maxTootChars) if let text = redraft.text { self.text = text @@ -152,7 +155,8 @@ public extension CompositionViewModel { convenience init(eventsSubject: PassthroughSubject, extensionContext: NSExtensionContext, parentViewModel: NewStatusViewModel) { - self.init(eventsSubject: eventsSubject) + self.init(eventsSubject: eventsSubject, + maxCharacters: parentViewModel.identityContext.identity.instance?.maxTootChars) guard let inputItem = extensionContext.inputItems.first as? NSExtensionItem else { return } diff --git a/ViewModels/Sources/ViewModels/View Models/NewStatusViewModel.swift b/ViewModels/Sources/ViewModels/View Models/NewStatusViewModel.swift index 25849a0..b95e26d 100644 --- a/ViewModels/Sources/ViewModels/View Models/NewStatusViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/NewStatusViewModel.swift @@ -64,7 +64,8 @@ public final class NewStatusViewModel: ObservableObject { extensionContext: extensionContext, parentViewModel: self) } else { - compositionViewModel = CompositionViewModel(eventsSubject: compositionEventsSubject) + compositionViewModel = CompositionViewModel(eventsSubject: compositionEventsSubject, + maxCharacters: identityContext.identity.instance?.maxTootChars) } if let inReplyTo = inReplyTo, redraft == nil { @@ -162,7 +163,8 @@ public extension NewStatusViewModel { guard let index = compositionViewModels.firstIndex(where: { $0 === after }) else { return } - let newViewModel = CompositionViewModel(eventsSubject: compositionEventsSubject) + let newViewModel = CompositionViewModel(eventsSubject: compositionEventsSubject, + maxCharacters: identityContext.identity.instance?.maxTootChars) newViewModel.contentWarning = after.contentWarning newViewModel.displayContentWarning = after.displayContentWarning