diff --git a/Mastodon.xcodeproj/project.pbxproj b/Mastodon.xcodeproj/project.pbxproj index 2693eb55a..4db188f6f 100644 --- a/Mastodon.xcodeproj/project.pbxproj +++ b/Mastodon.xcodeproj/project.pbxproj @@ -407,7 +407,6 @@ DB98EB6027B10E150082E365 /* ReportCommentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB5F27B10E150082E365 /* ReportCommentTableViewCell.swift */; }; DB98EB6227B215EB0082E365 /* ReportResultViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB6127B215EB0082E365 /* ReportResultViewController.swift */; }; DB98EB6527B216500082E365 /* ReportResultViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB6427B216500082E365 /* ReportResultViewModel.swift */; }; - DB98EB6927B21A7C0082E365 /* ReportResultActionTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB6827B21A7C0082E365 /* ReportResultActionTableViewCell.swift */; }; DB9D6BE925E4F5340051B173 /* SearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D6BE825E4F5340051B173 /* SearchViewController.swift */; }; DB9D6BF825E4F5690051B173 /* NotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D6BF725E4F5690051B173 /* NotificationViewController.swift */; }; DB9D6BFF25E4F5940051B173 /* ProfileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D6BFE25E4F5940051B173 /* ProfileViewController.swift */; }; @@ -1132,7 +1131,6 @@ DB98EB5F27B10E150082E365 /* ReportCommentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportCommentTableViewCell.swift; sourceTree = ""; }; DB98EB6127B215EB0082E365 /* ReportResultViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportResultViewController.swift; sourceTree = ""; }; DB98EB6427B216500082E365 /* ReportResultViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportResultViewModel.swift; sourceTree = ""; }; - DB98EB6827B21A7C0082E365 /* ReportResultActionTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportResultActionTableViewCell.swift; sourceTree = ""; }; DB9D6BE825E4F5340051B173 /* SearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchViewController.swift; sourceTree = ""; }; DB9D6BF725E4F5690051B173 /* NotificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationViewController.swift; sourceTree = ""; }; DB9D6BFE25E4F5940051B173 /* ProfileViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewController.swift; sourceTree = ""; }; @@ -2685,7 +2683,6 @@ DB98EB4827B0F0CD0082E365 /* ReportStatusTableViewCell.swift */, DB98EB4B27B0F2BC0082E365 /* ReportStatusTableViewCell+ViewModel.swift */, DB98EB5F27B10E150082E365 /* ReportCommentTableViewCell.swift */, - DB98EB6827B21A7C0082E365 /* ReportResultActionTableViewCell.swift */, ); path = Cell; sourceTree = ""; @@ -3891,7 +3888,6 @@ 2D76319F25C1521200929FB9 /* StatusSection.swift in Sources */, DBA5A53526F0A36A00CACBAA /* AddAccountTableViewCell.swift in Sources */, 2D35237A26256D920031AF25 /* NotificationSection.swift in Sources */, - DB98EB6927B21A7C0082E365 /* ReportResultActionTableViewCell.swift in Sources */, DB9282B225F3222800823B15 /* PickServerEmptyStateView.swift in Sources */, DB697DDF278F524F004EF2F7 /* DataSourceFacade+Profile.swift in Sources */, DB1FD45025F26FA1004CFCFC /* MastodonPickServerViewModel+Diffable.swift in Sources */, diff --git a/Mastodon/Diffable/Report/ReportItem.swift b/Mastodon/Diffable/Report/ReportItem.swift index ed083f427..cd5d9e9cf 100644 --- a/Mastodon/Diffable/Report/ReportItem.swift +++ b/Mastodon/Diffable/Report/ReportItem.swift @@ -13,7 +13,6 @@ enum ReportItem: Hashable { case header(context: HeaderContext) case status(record: MastodonStatus) case comment(context: CommentContext) - case result(record: ManagedObjectRecord) case bottomLoader } diff --git a/Mastodon/Diffable/Report/ReportSection.swift b/Mastodon/Diffable/Report/ReportSection.swift index 94161f28c..4461dc2f6 100644 --- a/Mastodon/Diffable/Report/ReportSection.swift +++ b/Mastodon/Diffable/Report/ReportSection.swift @@ -35,7 +35,6 @@ extension ReportSection { tableView.register(ReportHeadlineTableViewCell.self, forCellReuseIdentifier: String(describing: ReportHeadlineTableViewCell.self)) tableView.register(ReportStatusTableViewCell.self, forCellReuseIdentifier: String(describing: ReportStatusTableViewCell.self)) tableView.register(ReportCommentTableViewCell.self, forCellReuseIdentifier: String(describing: ReportCommentTableViewCell.self)) - tableView.register(ReportResultActionTableViewCell.self, forCellReuseIdentifier: String(describing: ReportResultActionTableViewCell.self)) tableView.register(TimelineBottomLoaderTableViewCell.self, forCellReuseIdentifier: String(describing: TimelineBottomLoaderTableViewCell.self)) return UITableViewDiffableDataSource(tableView: tableView) { tableView, indexPath, item -> UITableViewCell? in @@ -72,13 +71,6 @@ extension ReportSection { } .store(in: &cell.disposeBag) return cell - case .result(let record): - let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: ReportResultActionTableViewCell.self), for: indexPath) as! ReportResultActionTableViewCell - context.managedObjectContext.performAndWait { - guard let user = record.object(in: context.managedObjectContext) else { return } - cell.avatarImageView.configure(configuration: .init(url: user.avatarImageURL())) - } - return cell case .bottomLoader: let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: TimelineBottomLoaderTableViewCell.self), for: indexPath) as! TimelineBottomLoaderTableViewCell cell.activityIndicatorView.startAnimating() diff --git a/Mastodon/Scene/Report/Share/Cell/ReportResultActionTableViewCell.swift b/Mastodon/Scene/Report/Share/Cell/ReportResultActionTableViewCell.swift deleted file mode 100644 index 1828035a6..000000000 --- a/Mastodon/Scene/Report/Share/Cell/ReportResultActionTableViewCell.swift +++ /dev/null @@ -1,140 +0,0 @@ -// -// ReportResultActionTableViewCell.swift -// Mastodon -// -// Created by MainasuK on 2022-2-8. -// - -import UIKit -import Combine -import MastodonAsset -import MastodonUI -import MastodonLocalization - -final class ReportResultActionTableViewCell: UITableViewCell { - - var disposeBag = Set() - - let containerView: UIStackView = { - let stackView = UIStackView() - stackView.axis = .vertical - return stackView - }() - - let avatarImageView: AvatarImageView = { - let imageView = AvatarImageView() - imageView.configure(cornerConfiguration: .init(corner: .fixed(radius: 27))) - return imageView - }() - - let reportBannerShadowContainer = ShadowBackgroundContainer() - let reportBannerLabel: UILabel = { - let label = UILabel() - let padding = Array(repeating: " ", count: 2).joined() - label.text = padding + L10n.Scene.Report.reported + padding - label.textColor = Asset.Scene.Report.reportBanner.color - label.font = FontFamily.Staatliches.regular.font(size: 49) - label.backgroundColor = Asset.Scene.Report.background.color - label.layer.borderColor = Asset.Scene.Report.reportBanner.color.cgColor - label.layer.borderWidth = 6 - label.layer.masksToBounds = true - label.layer.cornerRadius = 12 - return label - }() - - override func prepareForReuse() { - super.prepareForReuse() - - disposeBag.removeAll() - } - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - _init() - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - _init() - } - -} - -extension ReportResultActionTableViewCell { - - private func _init() { - selectionStyle = .none - backgroundColor = .clear - - containerView.translatesAutoresizingMaskIntoConstraints = false - contentView.addSubview(containerView) - NSLayoutConstraint.activate([ - containerView.topAnchor.constraint(equalTo: contentView.topAnchor), - containerView.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor), - containerView.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor), - containerView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), - ]) - - let avatarContainer = UIStackView() - avatarContainer.axis = .horizontal - containerView.addArrangedSubview(avatarContainer) - - let avatarLeadingPaddingView = UIView() - let avatarTrailingPaddingView = UIView() - avatarLeadingPaddingView.translatesAutoresizingMaskIntoConstraints = false - avatarContainer.addArrangedSubview(avatarLeadingPaddingView) - avatarImageView.translatesAutoresizingMaskIntoConstraints = false - avatarContainer.addArrangedSubview(avatarImageView) - avatarTrailingPaddingView.translatesAutoresizingMaskIntoConstraints = false - avatarContainer.addArrangedSubview(avatarTrailingPaddingView) - NSLayoutConstraint.activate([ - avatarImageView.widthAnchor.constraint(equalToConstant: 106).priority(.required - 1), - avatarImageView.heightAnchor.constraint(equalToConstant: 106).priority(.required - 1), - avatarLeadingPaddingView.widthAnchor.constraint(equalTo: avatarTrailingPaddingView.widthAnchor).priority(.defaultHigh), - ]) - - reportBannerShadowContainer.translatesAutoresizingMaskIntoConstraints = false - avatarContainer.addSubview(reportBannerShadowContainer) - NSLayoutConstraint.activate([ - reportBannerShadowContainer.centerXAnchor.constraint(equalTo: avatarImageView.centerXAnchor), - reportBannerShadowContainer.centerYAnchor.constraint(equalTo: avatarImageView.centerYAnchor), - ]) - reportBannerShadowContainer.transform = CGAffineTransform(rotationAngle: -(.pi / 180 * 5)) - - reportBannerLabel.translatesAutoresizingMaskIntoConstraints = false - reportBannerShadowContainer.addSubview(reportBannerLabel) - reportBannerLabel.pinToParent() - - } - - override func layoutSubviews() { - super.layoutSubviews() - - reportBannerShadowContainer.layer.setupShadow( - color: .black, - alpha: 0.25, - x: 1, - y: 0.64, - blur: 0.64, - spread: 0, - roundedRect: reportBannerShadowContainer.bounds, - byRoundingCorners: .allCorners, - cornerRadii: CGSize(width: 12, height: 12) - ) - } - -} - -#if DEBUG -import SwiftUI -struct ReportResultActionTableViewCell_Preview: PreviewProvider { - static var previews: some View { - UIViewPreview(width: 375) { - let cell = ReportResultActionTableViewCell() - cell.avatarImageView.configure(configuration: .init(image: .placeholder(color: .blue))) - return cell - } - .previewLayout(.fixed(width: 375, height: 106)) - } -} -#endif diff --git a/MastodonSDK/Sources/MastodonCore/Extension/CoreDataStack/MastodonUser.swift b/MastodonSDK/Sources/MastodonCore/Extension/CoreDataStack/MastodonUser.swift deleted file mode 100644 index 6d952726c..000000000 --- a/MastodonSDK/Sources/MastodonCore/Extension/CoreDataStack/MastodonUser.swift +++ /dev/null @@ -1,102 +0,0 @@ -// -// MastodonUser.swift -// Mastodon -// -// Created by MainasuK Cirno on 2021/2/3. -// - -import Foundation -import CoreDataStack -import MastodonSDK -import MastodonMeta - -extension MastodonUser { - - public var displayNameWithFallback: String { - return !displayName.isEmpty ? displayName : username - } - - public var acctWithDomain: String { - if !acct.contains("@") { - // Safe concat due to username cannot contains "@" - return username + "@" + domain - } else { - return acct - } - } - - public var domainFromAcct: String { - if !acct.contains("@") { - return domain - } else { - let domain = acct.split(separator: "@").last - return String(domain!) - } - } - -} - -extension MastodonUser { - - public func headerImageURL() -> URL? { - return URL(string: header) - } - - public func headerImageURLWithFallback(domain: String) -> URL { - return URL(string: header) ?? URL(string: "https://\(domain)/headers/original/missing.png")! - } - - public func avatarImageURL() -> URL? { - let string = UserDefaults.shared.preferredStaticAvatar ? avatarStatic ?? avatar : avatar - return URL(string: string) - } - - public func avatarImageURLWithFallback(domain: String) -> URL { - return avatarImageURL() ?? URL(string: "https://\(domain)/avatars/original/missing.png")! - } - -} - -extension MastodonUser { - - public var profileURL: URL { - if let urlString = self.url, - let url = URL(string: urlString) { - return url - } else { - return URL(string: "https://\(self.domain)/@\(username)")! - } - } - - public var activityItems: [Any] { - var items: [Any] = [] - items.append(profileURL) - return items - } - -} - -extension MastodonUser { - public var nameMetaContent: MastodonMetaContent? { - do { - let content = MastodonContent(content: displayNameWithFallback, emojis: emojis.asDictionary) - let metaContent = try MastodonMetaContent.convert(document: content) - return metaContent - } catch { - assertionFailure() - return nil - } - } - - public var bioMetaContent: MastodonMetaContent? { - guard let note = note else { return nil } - do { - let content = MastodonContent(content: note, emojis: emojis.asDictionary) - let metaContent = try MastodonMetaContent.convert(document: content) - return metaContent - } catch { - assertionFailure() - return nil - } - } -}