mirror of
https://github.com/Dimillian/IceCubesApp.git
synced 2024-11-22 08:20:59 +00:00
Swiftformat
This commit is contained in:
parent
94d50fafc4
commit
b259b6739e
31 changed files with 164 additions and 165 deletions
|
@ -3,12 +3,12 @@ import AppAccount
|
|||
import Conversations
|
||||
import DesignSystem
|
||||
import Env
|
||||
import LinkPresentation
|
||||
import Lists
|
||||
import Models
|
||||
import Status
|
||||
import SwiftUI
|
||||
import Timeline
|
||||
import LinkPresentation
|
||||
import Models
|
||||
|
||||
@MainActor
|
||||
extension View {
|
||||
|
@ -124,7 +124,7 @@ struct ActivityView: UIViewControllerRepresentable {
|
|||
self.status = status
|
||||
}
|
||||
|
||||
func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {
|
||||
func activityViewControllerLinkMetadata(_: UIActivityViewController) -> LPLinkMetadata? {
|
||||
let imageProvider = NSItemProvider(object: image)
|
||||
let metadata = LPLinkMetadata()
|
||||
metadata.imageProvider = imageProvider
|
||||
|
@ -132,20 +132,21 @@ struct ActivityView: UIViewControllerRepresentable {
|
|||
return metadata
|
||||
}
|
||||
|
||||
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
|
||||
func activityViewControllerPlaceholderItem(_: UIActivityViewController) -> Any {
|
||||
image
|
||||
}
|
||||
|
||||
func activityViewController(_ activityViewController: UIActivityViewController,
|
||||
itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
|
||||
func activityViewController(_: UIActivityViewController,
|
||||
itemForActivityType _: UIActivity.ActivityType?) -> Any?
|
||||
{
|
||||
nil
|
||||
}
|
||||
}
|
||||
|
||||
func makeUIViewController(context: UIViewControllerRepresentableContext<ActivityView>) -> UIActivityViewController {
|
||||
func makeUIViewController(context _: UIViewControllerRepresentableContext<ActivityView>) -> UIActivityViewController {
|
||||
return UIActivityViewController(activityItems: [image, LinkDelegate(image: image, status: status)],
|
||||
applicationActivities: nil)
|
||||
}
|
||||
|
||||
func updateUIViewController(_ uiViewController: UIActivityViewController, context: UIViewControllerRepresentableContext<ActivityView>) {}
|
||||
func updateUIViewController(_: UIActivityViewController, context _: UIViewControllerRepresentableContext<ActivityView>) {}
|
||||
}
|
||||
|
|
|
@ -100,7 +100,8 @@ struct IceCubesApp: App {
|
|||
|
||||
private func badgeFor(tab: Tab) -> Int {
|
||||
if tab == .notifications && selectedTab != tab,
|
||||
let token = appAccountsManager.currentAccount.oauthToken {
|
||||
let token = appAccountsManager.currentAccount.oauthToken
|
||||
{
|
||||
return watcher.unreadNotificationsCount + userPreferences.getNotificationsCount(for: token)
|
||||
}
|
||||
return 0
|
||||
|
@ -169,7 +170,8 @@ struct IceCubesApp: App {
|
|||
}
|
||||
selectedTab = newTab
|
||||
if selectedTab == .notifications,
|
||||
let token = appAccountsManager.currentAccount.oauthToken {
|
||||
let token = appAccountsManager.currentAccount.oauthToken
|
||||
{
|
||||
userPreferences.setNotification(count: 0, token: token)
|
||||
watcher.unreadNotificationsCount = 0
|
||||
}
|
||||
|
|
|
@ -58,14 +58,14 @@ private struct SafariRouter: ViewModifier {
|
|||
|
||||
private class InAppSafariManager: NSObject, ObservableObject, SFSafariViewControllerDelegate {
|
||||
var windowScene: UIWindowScene?
|
||||
let viewController: UIViewController = UIViewController()
|
||||
let viewController: UIViewController = .init()
|
||||
var window: UIWindow?
|
||||
|
||||
@MainActor
|
||||
func open(_ url: URL) -> OpenURLAction.Result {
|
||||
guard let windowScene = windowScene else { return .systemAction }
|
||||
|
||||
self.window = setupWindow(windowScene: windowScene)
|
||||
window = setupWindow(windowScene: windowScene)
|
||||
|
||||
let configuration = SFSafariViewController.Configuration()
|
||||
configuration.entersReaderIfAvailable = UserPreferences.shared.inAppBrowserReaderView
|
||||
|
@ -99,7 +99,7 @@ private class InAppSafariManager: NSObject, ObservableObject, SFSafariViewContro
|
|||
return window
|
||||
}
|
||||
|
||||
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
|
||||
func safariViewControllerDidFinish(_: SFSafariViewController) {
|
||||
window?.resignKey()
|
||||
window?.isHidden = false
|
||||
window = nil
|
||||
|
@ -109,12 +109,11 @@ private class InAppSafariManager: NSObject, ObservableObject, SFSafariViewContro
|
|||
private struct WindowReader: UIViewRepresentable {
|
||||
var onUpdate: (UIWindow) -> Void
|
||||
|
||||
func makeUIView(context: Context) -> InjectView {
|
||||
func makeUIView(context _: Context) -> InjectView {
|
||||
InjectView(onUpdate: onUpdate)
|
||||
}
|
||||
|
||||
func updateUIView(_ uiView: InjectView, context: Context) {
|
||||
}
|
||||
func updateUIView(_: InjectView, context _: Context) {}
|
||||
|
||||
class InjectView: UIView {
|
||||
var onUpdate: (UIWindow) -> Void
|
||||
|
@ -127,7 +126,7 @@ private struct WindowReader: UIViewRepresentable {
|
|||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder: NSCoder) {
|
||||
required init?(coder _: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,8 @@ struct SideBarView<Content: View>: View {
|
|||
|
||||
private func badgeFor(tab: Tab) -> Int {
|
||||
if tab == .notifications && selectedTab != tab,
|
||||
let token = appAccounts.currentAccount.oauthToken {
|
||||
let token = appAccounts.currentAccount.oauthToken
|
||||
{
|
||||
return watcher.unreadNotificationsCount + userPreferences.getNotificationsCount(for: token)
|
||||
}
|
||||
return 0
|
||||
|
@ -78,8 +79,9 @@ struct SideBarView<Content: View>: View {
|
|||
ZStack(alignment: .topTrailing) {
|
||||
AppAccountView(viewModel: .init(appAccount: account, isCompact: true))
|
||||
if showBadge,
|
||||
let token = account.oauthToken,
|
||||
userPreferences.getNotificationsCount(for: token) > 0 {
|
||||
let token = account.oauthToken,
|
||||
userPreferences.getNotificationsCount(for: token) > 0
|
||||
{
|
||||
makeBadgeView(count: userPreferences.getNotificationsCount(for: token))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ struct DisplaySettingsView: View {
|
|||
theme.chosenFont = UIFont(name: "OpenDyslexic", size: 1)
|
||||
case .hyperLegible:
|
||||
theme.chosenFont = UIFont(name: "Atkinson Hyperlegible", size: 1)
|
||||
case.SFRounded:
|
||||
case .SFRounded:
|
||||
theme.chosenFont = UIFont.systemFont(ofSize: 1).rounded()
|
||||
case .custom:
|
||||
isFontSelectorPresented = true
|
||||
|
|
|
@ -64,7 +64,7 @@ class NotificationService: UNNotificationServiceExtension {
|
|||
bestAttemptContent.sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: "glass.caf"))
|
||||
|
||||
let preferences = UserPreferences.shared
|
||||
if let token = AppAccountsManager.shared.availableAccounts.first(where: { $0.oauthToken?.accessToken == notification.accessToken})?.oauthToken {
|
||||
if let token = AppAccountsManager.shared.availableAccounts.first(where: { $0.oauthToken?.accessToken == notification.accessToken })?.oauthToken {
|
||||
var currentCount = preferences.getNotificationsCount(for: token)
|
||||
currentCount += 1
|
||||
preferences.setNotification(count: currentCount, token: token)
|
||||
|
|
|
@ -152,7 +152,8 @@ struct AccountDetailHeaderView: View {
|
|||
}
|
||||
|
||||
if let note = viewModel.relationship?.note, !note.isEmpty,
|
||||
!viewModel.isCurrentUser {
|
||||
!viewModel.isCurrentUser
|
||||
{
|
||||
makeNoteView(note)
|
||||
}
|
||||
|
||||
|
|
|
@ -485,8 +485,7 @@ public struct AccountDetailView: View {
|
|||
|
||||
private extension View {
|
||||
func applyAccountDetailsRowStyle(theme: Theme) -> some View {
|
||||
self
|
||||
.listRowInsets(.init())
|
||||
listRowInsets(.init())
|
||||
.listRowSeparator(.hidden)
|
||||
.listRowBackground(theme.primaryBackgroundColor)
|
||||
}
|
||||
|
|
|
@ -31,8 +31,8 @@ public struct EditRelationshipNoteView: View {
|
|||
.alert("account.relation.note.edit.error.save.title",
|
||||
isPresented: $viewModel.saveError,
|
||||
actions: {
|
||||
Button("alert.button.ok", action: {})
|
||||
}, message: { Text("account.relation.note.edit.error.save.message") })
|
||||
Button("alert.button.ok", action: {})
|
||||
}, message: { Text("account.relation.note.edit.error.save.message") })
|
||||
.task {
|
||||
viewModel.client = client
|
||||
viewModel.relatedAccountId = accountDetailViewModel.accountId
|
||||
|
|
|
@ -14,7 +14,8 @@ class EditRelationshipNoteViewModel: ObservableObject {
|
|||
|
||||
func save() async {
|
||||
if relatedAccountId != nil,
|
||||
client != nil {
|
||||
client != nil
|
||||
{
|
||||
isSaving = true
|
||||
do {
|
||||
let _ = try await client!.post(endpoint: Accounts.relationshipNote(id: relatedAccountId!, json: RelationshipNoteData(note: note)))
|
||||
|
|
|
@ -92,7 +92,8 @@ public struct AppAccountsSelectorView: View {
|
|||
Image(uiImage: image)
|
||||
}
|
||||
if let token = viewModel.appAccount.oauthToken,
|
||||
preferences.getNotificationsCount(for: token) > 0 {
|
||||
preferences.getNotificationsCount(for: token) > 0
|
||||
{
|
||||
Text("\(viewModel.account?.displayName ?? "") (\(preferences.getNotificationsCount(for: token)))")
|
||||
} else {
|
||||
Text("\(viewModel.account?.displayName ?? "")")
|
||||
|
|
|
@ -15,12 +15,10 @@ public extension Font {
|
|||
private static let onMac = ProcessInfo.processInfo.isiOSAppOnMac
|
||||
|
||||
private static func customFont(size: CGFloat, relativeTo textStyle: TextStyle) -> Font {
|
||||
|
||||
if let chosenFont = Theme.shared.chosenFont {
|
||||
if chosenFont.fontName == ".AppleSystemUIFontRounded-Regular" {
|
||||
return .system(size: size, design: .rounded)
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return .custom(chosenFont.fontName, size: size, relativeTo: textStyle)
|
||||
}
|
||||
}
|
||||
|
@ -72,13 +70,11 @@ public extension Font {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
extension UIFont {
|
||||
public func rounded() -> UIFont {
|
||||
guard let descriptor = fontDescriptor.withDesign(.rounded) else {
|
||||
return self
|
||||
}
|
||||
return UIFont(descriptor: descriptor, size: pointSize)
|
||||
public extension UIFont {
|
||||
func rounded() -> UIFont {
|
||||
guard let descriptor = fontDescriptor.withDesign(.rounded) else {
|
||||
return self
|
||||
}
|
||||
return UIFont(descriptor: descriptor, size: pointSize)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ public class Theme: ObservableObject {
|
|||
case .hyperLegible:
|
||||
return "Hyper Legible"
|
||||
case .SFRounded:
|
||||
return "SF Rounded"
|
||||
return "SF Rounded"
|
||||
case .custom:
|
||||
return "settings.display.font.custom"
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import NukeUI
|
||||
import Nuke
|
||||
import NukeUI
|
||||
import Shimmer
|
||||
import SwiftUI
|
||||
|
||||
|
@ -97,17 +97,17 @@ public struct AvatarView: View {
|
|||
}
|
||||
|
||||
private struct AvatarPlaceholderView: View {
|
||||
let size: AvatarView.Size
|
||||
let size: AvatarView.Size
|
||||
|
||||
var body: some View {
|
||||
if size == .badge {
|
||||
Circle()
|
||||
.fill(.gray)
|
||||
.frame(width: size.size.width, height: size.size.height)
|
||||
} else {
|
||||
RoundedRectangle(cornerRadius: size.cornerRadius)
|
||||
.fill(.gray)
|
||||
.frame(width: size.size.width, height: size.size.height)
|
||||
}
|
||||
var body: some View {
|
||||
if size == .badge {
|
||||
Circle()
|
||||
.fill(.gray)
|
||||
.frame(width: size.size.width, height: size.size.height)
|
||||
} else {
|
||||
RoundedRectangle(cornerRadius: size.cornerRadius)
|
||||
.fill(.gray)
|
||||
.frame(width: size.size.width, height: size.size.height)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ public class UserPreferences: ObservableObject {
|
|||
}
|
||||
|
||||
public func getNotificationsTotalCount(for tokens: [OauthToken]) -> Int {
|
||||
var count: Int = 0
|
||||
var count = 0
|
||||
for token in tokens {
|
||||
count += getNotificationsCount(for: token)
|
||||
}
|
||||
|
@ -134,6 +134,3 @@ public class UserPreferences: ObservableObject {
|
|||
recentlyUsedLanguages = Array(copy.prefix(3))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -31,10 +31,8 @@ public struct Poll: Codable, Equatable, Hashable {
|
|||
|
||||
// the votersCount can be null according to the docs when multiple is false.
|
||||
// Didn't find that to be true, but we make sure
|
||||
public var safeVotersCount: Int {
|
||||
get {
|
||||
return votersCount ?? votesCount
|
||||
}
|
||||
public var safeVotersCount: Int {
|
||||
return votersCount ?? votesCount
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -56,8 +56,8 @@ public protocol AnyStatus {
|
|||
}
|
||||
|
||||
public struct StatusViewId: Hashable {
|
||||
let id: String
|
||||
let editedAt: ServerDate?
|
||||
let id: String
|
||||
let editedAt: ServerDate?
|
||||
}
|
||||
|
||||
public extension AnyStatus {
|
||||
|
|
|
@ -46,7 +46,7 @@ public class StatusRowViewModel: ObservableObject {
|
|||
|
||||
var isThread: Bool {
|
||||
status.reblog?.inReplyToId != nil || status.reblog?.inReplyToAccountId != nil ||
|
||||
status.inReplyToId != nil || status.inReplyToAccountId != nil
|
||||
status.inReplyToId != nil || status.inReplyToAccountId != nil
|
||||
}
|
||||
|
||||
var highlightRowColor: Color {
|
||||
|
|
|
@ -10,7 +10,7 @@ struct StatusRowActionsView: View {
|
|||
@ObservedObject var viewModel: StatusRowViewModel
|
||||
|
||||
func privateBoost() -> Bool {
|
||||
return self.viewModel.status.visibility == .priv && self.viewModel.status.account.id == self.currentAccount.account?.id
|
||||
return viewModel.status.visibility == .priv && viewModel.status.account.id == currentAccount.account?.id
|
||||
}
|
||||
|
||||
@MainActor
|
||||
|
@ -22,7 +22,7 @@ struct StatusRowActionsView: View {
|
|||
case .respond:
|
||||
return "arrowshape.turn.up.left"
|
||||
case .boost:
|
||||
if (privateBoost) {
|
||||
if privateBoost {
|
||||
return viewModel.isReblogged ? "arrow.left.arrow.right.circle.fill" : "lock.rotation"
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,7 @@ struct StatusRowActionsView: View {
|
|||
}
|
||||
.buttonStyle(.borderless)
|
||||
.disabled(action == .boost &&
|
||||
(viewModel.status.visibility == .direct || viewModel.status.visibility == .priv && viewModel.status.account.id != currentAccount.account?.id))
|
||||
(viewModel.status.visibility == .direct || viewModel.status.visibility == .priv && viewModel.status.account.id != currentAccount.account?.id))
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import DesignSystem
|
||||
import Env
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
import DesignSystem
|
||||
import Network
|
||||
import SwiftUI
|
||||
|
||||
struct StatusRowContextMenu: View {
|
||||
@Environment(\.displayScale) var displayScale
|
||||
|
@ -201,9 +201,9 @@ struct StatusRowContextMenu: View {
|
|||
struct ActivityView: UIViewControllerRepresentable {
|
||||
let image: Image
|
||||
|
||||
func makeUIViewController(context: UIViewControllerRepresentableContext<ActivityView>) -> UIActivityViewController {
|
||||
func makeUIViewController(context _: UIViewControllerRepresentableContext<ActivityView>) -> UIActivityViewController {
|
||||
return UIActivityViewController(activityItems: [image], applicationActivities: nil)
|
||||
}
|
||||
|
||||
func updateUIViewController(_ uiViewController: UIActivityViewController, context: UIViewControllerRepresentableContext<ActivityView>) {}
|
||||
func updateUIViewController(_: UIActivityViewController, context _: UIViewControllerRepresentableContext<ActivityView>) {}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import DesignSystem
|
||||
import Env
|
||||
import Models
|
||||
import SwiftUI
|
||||
import Env
|
||||
|
||||
struct StatusRowHeaderView: View {
|
||||
@Environment(\.isInCaptureMode) private var isInCaptureMode: Bool
|
||||
|
@ -57,9 +57,9 @@ struct StatusRowHeaderView: View {
|
|||
}
|
||||
if theme.avatarPosition == .top {
|
||||
dateView
|
||||
.font(.scaledFootnote)
|
||||
.foregroundColor(.gray)
|
||||
.lineLimit(1)
|
||||
.font(.scaledFootnote)
|
||||
.foregroundColor(.gray)
|
||||
.lineLimit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -67,9 +67,9 @@ struct StatusRowHeaderView: View {
|
|||
|
||||
private var dateView: Text {
|
||||
Text(viewModel.status.account.bot ? "🤖 " : "") +
|
||||
Text(status.createdAt.relativeFormatted) +
|
||||
Text(" ⸱ ") +
|
||||
Text(Image(systemName: viewModel.status.visibility.iconName))
|
||||
Text(status.createdAt.relativeFormatted) +
|
||||
Text(" ⸱ ") +
|
||||
Text(Image(systemName: viewModel.status.visibility.iconName))
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
|
|
|
@ -156,7 +156,8 @@ public struct StatusRowMediaPreviewView: View {
|
|||
case .image:
|
||||
if isInCaptureMode,
|
||||
let image = Nuke.ImagePipeline.shared.cache.cachedImage(for: .init(url: attachment.url,
|
||||
processors: processors))?.image {
|
||||
processors: processors))?.image
|
||||
{
|
||||
Image(uiImage: image)
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fill)
|
||||
|
@ -243,10 +244,11 @@ public struct StatusRowMediaPreviewView: View {
|
|||
cornerSensitiveButton
|
||||
}
|
||||
if !isInCaptureMode,
|
||||
let alt = attachment.description,
|
||||
let alt = attachment.description,
|
||||
!alt.isEmpty,
|
||||
!isNotifications,
|
||||
preferences.showAltTextForMedia {
|
||||
preferences.showAltTextForMedia
|
||||
{
|
||||
Button {
|
||||
altTextDisplayed = alt
|
||||
isAltAlertDisplayed = true
|
||||
|
|
|
@ -27,7 +27,7 @@ struct StatusRowTranslateView: View {
|
|||
|
||||
var body: some View {
|
||||
if !isInCaptureMode,
|
||||
let userLang = preferences.serverPreferences?.postLanguage,
|
||||
let userLang = preferences.serverPreferences?.postLanguage,
|
||||
shouldShowTranslateButton
|
||||
{
|
||||
Button {
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
import SwiftUI
|
||||
import UIKit
|
||||
import Models
|
||||
import Nuke
|
||||
import SwiftUI
|
||||
import UIKit
|
||||
|
||||
final class TimelinePrefetcher: NSObject, ObservableObject, UICollectionViewDataSourcePrefetching {
|
||||
private let prefetcher = ImagePrefetcher()
|
||||
|
||||
weak var viewModel: TimelineViewModel?
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {
|
||||
func collectionView(_: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {
|
||||
let imageURLs = getImageURLs(for: indexPaths)
|
||||
prefetcher.startPrefetching(with: imageURLs)
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, cancelPrefetchingForItemsAt indexPaths: [IndexPath]) {
|
||||
func collectionView(_: UICollectionView, cancelPrefetchingForItemsAt indexPaths: [IndexPath]) {
|
||||
let imageURLs = getImageURLs(for: indexPaths)
|
||||
prefetcher.stopPrefetching(with: imageURLs)
|
||||
}
|
||||
|
||||
private func getImageURLs(for indexPaths: [IndexPath]) -> [URL] {
|
||||
guard let viewModel, case .display(let statuses, _) = viewModel.statusesState else {
|
||||
guard let viewModel, case let .display(statuses, _) = viewModel.statusesState else {
|
||||
return []
|
||||
}
|
||||
return indexPaths.compactMap {
|
||||
|
|
|
@ -231,7 +231,7 @@ extension TimelineViewModel: StatusesFetcher {
|
|||
var newStatuses: [Status] = await fetchNewPages(minId: latestStatus.id, maxPages: 10)
|
||||
|
||||
// Dedup statuses, a status with the same id could have been streamed in.
|
||||
let ids = await datasource.get().map{ $0.id }
|
||||
let ids = await datasource.get().map { $0.id }
|
||||
newStatuses = newStatuses.filter { status in
|
||||
!ids.contains(where: { $0 == status.id })
|
||||
}
|
||||
|
@ -322,10 +322,10 @@ extension TimelineViewModel: StatusesFetcher {
|
|||
var latestMinId = minId
|
||||
do {
|
||||
while var newStatuses: [Status] =
|
||||
try await client.get(endpoint: timeline.endpoint(sinceId: nil,
|
||||
maxId: nil,
|
||||
minId: latestMinId,
|
||||
offset: datasource.get().count)),
|
||||
try await client.get(endpoint: timeline.endpoint(sinceId: nil,
|
||||
maxId: nil,
|
||||
minId: latestMinId,
|
||||
offset: datasource.get().count)),
|
||||
!newStatuses.isEmpty,
|
||||
pagesLoaded < maxPages
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue