metatext-app-ios-iphone-ipad/Model/Identity.swift

74 lines
2.2 KiB
Swift
Raw Normal View History

// Copyright © 2020 Metabolist. All rights reserved.
import Foundation
2020-08-31 01:33:11 +02:00
import Mastodon
2020-08-04 22:26:09 +02:00
struct Identity: Codable, Hashable, Identifiable {
let id: UUID
let url: URL
2020-08-04 22:26:09 +02:00
let lastUsedAt: Date
2020-08-07 03:41:59 +02:00
let preferences: Identity.Preferences
let instance: Identity.Instance?
let account: Identity.Account?
2020-08-14 03:24:53 +02:00
let lastRegisteredDeviceToken: String?
let pushSubscriptionAlerts: PushSubscription.Alerts
}
extension Identity {
struct Instance: Codable, Hashable {
let uri: String
let streamingAPI: URL
let title: String
let thumbnail: URL?
}
struct Account: Codable, Hashable {
let id: String
let identityID: UUID
let username: String
2020-08-08 11:10:05 +02:00
let displayName: String
let url: URL
let avatar: URL
let avatarStatic: URL
let header: URL
let headerStatic: URL
2020-08-08 11:10:05 +02:00
let emojis: [Emoji]
}
2020-08-07 03:41:59 +02:00
struct Preferences: Codable, Hashable {
2020-08-24 01:39:52 +02:00
@DecodableDefault.True var useServerPostingReadingPreferences
@DecodableDefault.StatusVisibilityPublic var postingDefaultVisibility: Status.Visibility
@DecodableDefault.False var postingDefaultSensitive
2020-08-07 03:41:59 +02:00
var postingDefaultLanguage: String?
2020-08-24 01:39:52 +02:00
@DecodableDefault.ExpandMediaDefault var readingExpandMedia: MastodonPreferences.ExpandMedia
@DecodableDefault.False var readingExpandSpoilers
2020-08-07 03:41:59 +02:00
}
}
extension Identity {
var handle: String {
if let account = account, let host = account.url.host {
return account.url.lastPathComponent + "@" + host
}
return instance?.title ?? url.host ?? url.absoluteString
}
2020-08-03 17:20:51 +02:00
var image: URL? { account?.avatar ?? instance?.thumbnail }
}
2020-08-07 12:14:14 +02:00
extension Identity.Preferences {
func updated(from serverPreferences: MastodonPreferences) -> Self {
var mutable = self
2020-08-07 12:59:48 +02:00
if useServerPostingReadingPreferences {
2020-08-07 12:14:14 +02:00
mutable.postingDefaultVisibility = serverPreferences.postingDefaultVisibility
mutable.postingDefaultSensitive = serverPreferences.postingDefaultSensitive
mutable.readingExpandMedia = serverPreferences.readingExpandMedia
mutable.readingExpandSpoilers = serverPreferences.readingExpandSpoilers
}
return mutable
}
}