2020-09-03 05:28:34 +02:00
|
|
|
// Copyright © 2020 Metabolist. All rights reserved.
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
import Mastodon
|
|
|
|
|
|
|
|
public struct Identity: Codable, Hashable, Identifiable {
|
2020-10-06 00:50:05 +02:00
|
|
|
public let id: Id
|
2020-09-03 05:28:34 +02:00
|
|
|
public let url: URL
|
2020-09-09 07:40:49 +02:00
|
|
|
public let authenticated: Bool
|
2020-09-13 10:03:08 +02:00
|
|
|
public let pending: Bool
|
2020-09-03 05:28:34 +02:00
|
|
|
public let lastUsedAt: Date
|
|
|
|
public let preferences: Identity.Preferences
|
|
|
|
public let instance: Identity.Instance?
|
|
|
|
public let account: Identity.Account?
|
2020-09-06 23:37:54 +02:00
|
|
|
public let lastRegisteredDeviceToken: Data?
|
2020-09-03 05:28:34 +02:00
|
|
|
public let pushSubscriptionAlerts: PushSubscription.Alerts
|
|
|
|
}
|
|
|
|
|
|
|
|
public extension Identity {
|
2020-10-06 00:50:05 +02:00
|
|
|
typealias Id = UUID
|
|
|
|
|
2020-09-03 05:28:34 +02:00
|
|
|
struct Instance: Codable, Hashable {
|
|
|
|
public let uri: String
|
|
|
|
public let streamingAPI: URL
|
|
|
|
public let title: String
|
|
|
|
public let thumbnail: URL?
|
2021-01-29 02:57:17 +01:00
|
|
|
public let version: String
|
|
|
|
public let maxTootChars: Int?
|
2020-09-03 05:28:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
struct Account: Codable, Hashable {
|
2020-10-06 00:50:05 +02:00
|
|
|
public let id: Mastodon.Account.Id
|
|
|
|
public let identityId: Identity.Id
|
2020-09-03 05:28:34 +02:00
|
|
|
public let username: String
|
|
|
|
public let displayName: String
|
|
|
|
public let url: URL
|
|
|
|
public let avatar: URL
|
|
|
|
public let avatarStatic: URL
|
|
|
|
public let header: URL
|
|
|
|
public let headerStatic: URL
|
|
|
|
public let emojis: [Emoji]
|
2021-01-26 07:57:44 +01:00
|
|
|
public let followRequestCount: Int
|
2020-09-03 05:28:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
struct Preferences: Codable, Hashable {
|
|
|
|
@DecodableDefault.True public var useServerPostingReadingPreferences
|
|
|
|
@DecodableDefault.StatusVisibilityPublic public var postingDefaultVisibility: Status.Visibility
|
|
|
|
@DecodableDefault.False public var postingDefaultSensitive
|
|
|
|
public var postingDefaultLanguage: String?
|
|
|
|
@DecodableDefault.ExpandMediaDefault public var readingExpandMedia: Mastodon.Preferences.ExpandMedia
|
|
|
|
@DecodableDefault.False public var readingExpandSpoilers
|
|
|
|
}
|
|
|
|
|
|
|
|
var handle: String {
|
|
|
|
if let account = account, let host = account.url.host {
|
2020-12-03 23:40:33 +01:00
|
|
|
return account.url.lastPathComponent.appending("@").appending(host)
|
2020-09-03 05:28:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return instance?.title ?? url.host ?? url.absoluteString
|
|
|
|
}
|
|
|
|
|
|
|
|
var image: URL? { account?.avatar ?? instance?.thumbnail }
|
|
|
|
}
|
|
|
|
|
|
|
|
public extension Identity.Preferences {
|
|
|
|
func updated(from serverPreferences: Preferences) -> Self {
|
|
|
|
var mutable = self
|
|
|
|
|
|
|
|
if useServerPostingReadingPreferences {
|
|
|
|
mutable.postingDefaultVisibility = serverPreferences.postingDefaultVisibility
|
|
|
|
mutable.postingDefaultSensitive = serverPreferences.postingDefaultSensitive
|
|
|
|
mutable.readingExpandMedia = serverPreferences.readingExpandMedia
|
|
|
|
mutable.readingExpandSpoilers = serverPreferences.readingExpandSpoilers
|
|
|
|
}
|
|
|
|
|
|
|
|
return mutable
|
|
|
|
}
|
|
|
|
}
|