45 lines
1.5 KiB
Swift
45 lines
1.5 KiB
Swift
//
|
|
// StatusStateResolver.swift
|
|
// Tusker
|
|
//
|
|
// Created by Shadowfacts on 9/15/20.
|
|
// Copyright © 2020 Shadowfacts. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import Pachyderm
|
|
|
|
extension CollapseState {
|
|
|
|
func resolveFor(status: StatusMO, height: CGFloat, textLength: Int? = nil) {
|
|
let longEnoughToCollapse: Bool
|
|
if Preferences.shared.collapseLongPosts,
|
|
height > 500 || (textLength != nil && textLength! > 500) {
|
|
longEnoughToCollapse = true
|
|
} else {
|
|
longEnoughToCollapse = false
|
|
}
|
|
|
|
let contentWarningCollapsible = !status.spoilerText.isEmpty
|
|
|
|
let collapseDueToContentWarning: Bool?
|
|
if contentWarningCollapsible {
|
|
let lowercased = status.spoilerText.lowercased()
|
|
let opposite = Preferences.shared.oppositeCollapseKeywords.contains { lowercased.contains($0.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()) }
|
|
|
|
if Preferences.shared.expandAllContentWarnings {
|
|
collapseDueToContentWarning = opposite
|
|
} else {
|
|
collapseDueToContentWarning = !opposite
|
|
}
|
|
} else {
|
|
collapseDueToContentWarning = nil
|
|
}
|
|
|
|
self.collapsible = contentWarningCollapsible || longEnoughToCollapse
|
|
// use ?? instead of || because the content warnig pref takes priority over length
|
|
self.collapsed = collapseDueToContentWarning ?? longEnoughToCollapse
|
|
}
|
|
|
|
}
|