mirror of
https://github.com/metabolist/metatext.git
synced 2024-11-25 01:31:02 +00:00
Guard against invalid URLs
This commit is contained in:
parent
59d3c78c31
commit
51529a7ebf
8 changed files with 20 additions and 14 deletions
|
@ -15,7 +15,7 @@ struct AccountRecord: ContentDatabaseRecord, Hashable {
|
|||
let followingCount: Int
|
||||
let statusesCount: Int
|
||||
let note: HTML
|
||||
let url: URL
|
||||
let url: String
|
||||
let avatar: URL
|
||||
let avatarStatic: URL
|
||||
let header: URL
|
||||
|
|
|
@ -21,7 +21,7 @@ struct StatusRecord: ContentDatabaseRecord, Hashable {
|
|||
let favouritesCount: Int
|
||||
let repliesCount: Int
|
||||
let application: Application?
|
||||
let url: URL?
|
||||
let url: String?
|
||||
let inReplyToId: Status.Id?
|
||||
let inReplyToAccountId: Account.Id?
|
||||
let reblogId: Status.Id?
|
||||
|
|
|
@ -33,7 +33,7 @@ public extension Identity {
|
|||
public let identityId: Identity.Id
|
||||
public let username: String
|
||||
public let displayName: String
|
||||
public let url: URL
|
||||
public let url: String
|
||||
public let avatar: URL
|
||||
public let avatarStatic: URL
|
||||
public let header: URL
|
||||
|
@ -52,8 +52,8 @@ public extension Identity {
|
|||
}
|
||||
|
||||
var handle: String {
|
||||
if let account = account, let host = account.url.host {
|
||||
return account.url.lastPathComponent.appending("@").appending(host)
|
||||
if let urlString = account?.url, let url = URL(string: urlString), let host = url.host {
|
||||
return url.lastPathComponent.appending("@").appending(host)
|
||||
}
|
||||
|
||||
return instance?.title ?? url.host ?? url.absoluteString
|
||||
|
|
|
@ -13,7 +13,7 @@ public final class Account: Codable, Identifiable {
|
|||
public let followingCount: Int
|
||||
public let statusesCount: Int
|
||||
public let note: HTML
|
||||
public let url: URL
|
||||
public let url: String
|
||||
public let avatar: URL
|
||||
public let avatarStatic: URL
|
||||
public let header: URL
|
||||
|
@ -35,7 +35,7 @@ public final class Account: Codable, Identifiable {
|
|||
followingCount: Int,
|
||||
statusesCount: Int,
|
||||
note: HTML,
|
||||
url: URL,
|
||||
url: String,
|
||||
avatar: URL,
|
||||
avatarStatic: URL,
|
||||
header: URL,
|
||||
|
|
|
@ -29,7 +29,7 @@ public final class Status: Codable, Identifiable {
|
|||
public let favouritesCount: Int
|
||||
@DecodableDefault.Zero public private(set) var repliesCount: Int
|
||||
public let application: Application?
|
||||
public let url: URL?
|
||||
public let url: String?
|
||||
public let inReplyToId: Status.Id?
|
||||
public let inReplyToAccountId: Account.Id?
|
||||
public let reblog: Status?
|
||||
|
@ -60,7 +60,7 @@ public final class Status: Codable, Identifiable {
|
|||
favouritesCount: Int,
|
||||
repliesCount: Int,
|
||||
application: Application?,
|
||||
url: URL?,
|
||||
url: String?,
|
||||
inReplyToId: Status.Id?,
|
||||
inReplyToAccountId: Account.Id?,
|
||||
reblog: Status?,
|
||||
|
|
|
@ -34,10 +34,10 @@ public struct AccountService {
|
|||
|
||||
public extension AccountService {
|
||||
var isLocal: Bool {
|
||||
account.url.host == mastodonAPIClient.instanceURL.host
|
||||
URL(string: account.url)?.host == mastodonAPIClient.instanceURL.host
|
||||
}
|
||||
|
||||
var domain: String? { account.url.host }
|
||||
var domain: String? { URL(string: account.url)?.host }
|
||||
|
||||
func follow() -> AnyPublisher<Never, Error> {
|
||||
relationshipAction(.accountsFollow(id: account.id))
|
||||
|
|
|
@ -38,7 +38,7 @@ public extension ReportViewModel {
|
|||
var accountName: String { "@".appending(accountService.account.acct) }
|
||||
|
||||
var accountHost: String {
|
||||
accountService.account.url.host ?? ""
|
||||
URL(string: accountService.account.url)?.host ?? ""
|
||||
}
|
||||
|
||||
var isLocalAccount: Bool { accountService.isLocal }
|
||||
|
|
|
@ -121,7 +121,11 @@ public extension StatusViewModel {
|
|||
|
||||
var muted: Bool { statusService.status.displayStatus.muted }
|
||||
|
||||
var sharingURL: URL? { statusService.status.displayStatus.url }
|
||||
var sharingURL: URL? {
|
||||
guard let urlString = statusService.status.displayStatus.url else { return nil }
|
||||
|
||||
return URL(string: urlString)
|
||||
}
|
||||
|
||||
var isPollExpired: Bool { statusService.status.displayStatus.poll?.expired ?? true }
|
||||
|
||||
|
@ -297,7 +301,9 @@ public extension StatusViewModel {
|
|||
}
|
||||
|
||||
func shareStatus() {
|
||||
guard let url = statusService.status.displayStatus.url else { return }
|
||||
guard let urlString = statusService.status.displayStatus.url,
|
||||
let url = URL(string: urlString)
|
||||
else { return }
|
||||
|
||||
eventsSubject.send(Just(.share(url)).setFailureType(to: Error.self).eraseToAnyPublisher())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue