mirror of
https://github.com/metabolist/metatext.git
synced 2024-11-25 17:50:59 +00:00
Refactoring
This commit is contained in:
parent
335a006f45
commit
44f6e5d551
5 changed files with 50 additions and 41 deletions
|
@ -9,21 +9,19 @@ import Secrets
|
||||||
|
|
||||||
public struct AllIdentitiesService {
|
public struct AllIdentitiesService {
|
||||||
public let mostRecentlyUsedIdentityID: AnyPublisher<UUID?, Never>
|
public let mostRecentlyUsedIdentityID: AnyPublisher<UUID?, Never>
|
||||||
public let instanceFilterService: InstanceFilterService
|
|
||||||
|
|
||||||
private let database: IdentityDatabase
|
|
||||||
private let environment: AppEnvironment
|
private let environment: AppEnvironment
|
||||||
|
private let database: IdentityDatabase
|
||||||
|
|
||||||
public init(environment: AppEnvironment) throws {
|
public init(environment: AppEnvironment) throws {
|
||||||
|
self.environment = environment
|
||||||
self.database = try environment.fixtureDatabase ?? IdentityDatabase(
|
self.database = try environment.fixtureDatabase ?? IdentityDatabase(
|
||||||
inMemory: environment.inMemoryContent,
|
inMemory: environment.inMemoryContent,
|
||||||
keychain: environment.keychain)
|
keychain: environment.keychain)
|
||||||
self.environment = environment
|
|
||||||
|
|
||||||
mostRecentlyUsedIdentityID = database.mostRecentlyUsedIdentityIDObservation()
|
mostRecentlyUsedIdentityID = database.mostRecentlyUsedIdentityIDObservation()
|
||||||
.replaceError(with: nil)
|
.replaceError(with: nil)
|
||||||
.eraseToAnyPublisher()
|
.eraseToAnyPublisher()
|
||||||
instanceFilterService = InstanceFilterService(environment: environment)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ public struct InstanceFilterService {
|
||||||
private let httpClient: HTTPClient
|
private let httpClient: HTTPClient
|
||||||
private var userDefaultsClient: UserDefaultsClient
|
private var userDefaultsClient: UserDefaultsClient
|
||||||
|
|
||||||
init(environment: AppEnvironment) {
|
public init(environment: AppEnvironment) {
|
||||||
httpClient = HTTPClient(session: environment.session, decoder: JSONDecoder())
|
httpClient = HTTPClient(session: environment.session, decoder: JSONDecoder())
|
||||||
userDefaultsClient = UserDefaultsClient(userDefaults: environment.userDefaults)
|
userDefaultsClient = UserDefaultsClient(userDefaults: environment.userDefaults)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,11 +11,13 @@ public final class AddIdentityViewModel: ObservableObject {
|
||||||
public let addedIdentityID: AnyPublisher<UUID, Never>
|
public let addedIdentityID: AnyPublisher<UUID, Never>
|
||||||
|
|
||||||
private let allIdentitiesService: AllIdentitiesService
|
private let allIdentitiesService: AllIdentitiesService
|
||||||
|
private let instanceFilterService: InstanceFilterService
|
||||||
private let addedIdentityIDSubject = PassthroughSubject<UUID, Never>()
|
private let addedIdentityIDSubject = PassthroughSubject<UUID, Never>()
|
||||||
private var cancellables = Set<AnyCancellable>()
|
private var cancellables = Set<AnyCancellable>()
|
||||||
|
|
||||||
init(allIdentitiesService: AllIdentitiesService) {
|
init(allIdentitiesService: AllIdentitiesService, instanceFilterService: InstanceFilterService) {
|
||||||
self.allIdentitiesService = allIdentitiesService
|
self.allIdentitiesService = allIdentitiesService
|
||||||
|
self.instanceFilterService = instanceFilterService
|
||||||
addedIdentityID = addedIdentityIDSubject.eraseToAnyPublisher()
|
addedIdentityID = addedIdentityIDSubject.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,7 +83,7 @@ public extension AddIdentityViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
func refreshFilter() {
|
func refreshFilter() {
|
||||||
allIdentitiesService.instanceFilterService.updateFilter()
|
instanceFilterService.updateFilter()
|
||||||
.sink { _ in }
|
.sink { _ in }
|
||||||
.store(in: &cancellables)
|
.store(in: &cancellables)
|
||||||
}
|
}
|
||||||
|
@ -102,7 +104,7 @@ private extension AddIdentityViewModel {
|
||||||
throw URLError(.badURL)
|
throw URLError(.badURL)
|
||||||
}
|
}
|
||||||
|
|
||||||
if allIdentitiesService.instanceFilterService.isFiltered(url: url) {
|
if instanceFilterService.isFiltered(url: url) {
|
||||||
return Self.filteredURL
|
return Self.filteredURL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ public final class RootViewModel: ObservableObject {
|
||||||
@Published public private(set) var identification: Identification?
|
@Published public private(set) var identification: Identification?
|
||||||
|
|
||||||
@Published private var mostRecentlyUsedIdentityID: UUID?
|
@Published private var mostRecentlyUsedIdentityID: UUID?
|
||||||
|
private let environment: AppEnvironment
|
||||||
private let allIdentitiesService: AllIdentitiesService
|
private let allIdentitiesService: AllIdentitiesService
|
||||||
private let userNotificationService: UserNotificationService
|
private let userNotificationService: UserNotificationService
|
||||||
private let registerForRemoteNotifications: () -> AnyPublisher<Data, Error>
|
private let registerForRemoteNotifications: () -> AnyPublisher<Data, Error>
|
||||||
|
@ -15,6 +16,7 @@ public final class RootViewModel: ObservableObject {
|
||||||
|
|
||||||
public init(environment: AppEnvironment,
|
public init(environment: AppEnvironment,
|
||||||
registerForRemoteNotifications: @escaping () -> AnyPublisher<Data, Error>) throws {
|
registerForRemoteNotifications: @escaping () -> AnyPublisher<Data, Error>) throws {
|
||||||
|
self.environment = environment
|
||||||
allIdentitiesService = try AllIdentitiesService(environment: environment)
|
allIdentitiesService = try AllIdentitiesService(environment: environment)
|
||||||
userNotificationService = UserNotificationService(environment: environment)
|
userNotificationService = UserNotificationService(environment: environment)
|
||||||
self.registerForRemoteNotifications = registerForRemoteNotifications
|
self.registerForRemoteNotifications = registerForRemoteNotifications
|
||||||
|
@ -77,6 +79,8 @@ public extension RootViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
func addIdentityViewModel() -> AddIdentityViewModel {
|
func addIdentityViewModel() -> AddIdentityViewModel {
|
||||||
AddIdentityViewModel(allIdentitiesService: allIdentitiesService)
|
AddIdentityViewModel(
|
||||||
|
allIdentitiesService: allIdentitiesService,
|
||||||
|
instanceFilterService: InstanceFilterService(environment: environment))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,23 @@ private extension IdentitiesView {
|
||||||
rootViewModel.newIdentitySelected(id: identity.id)
|
rootViewModel.newIdentitySelected(id: identity.id)
|
||||||
}
|
}
|
||||||
} label: {
|
} label: {
|
||||||
|
row(identity: identity)
|
||||||
|
}
|
||||||
|
.disabled(identity.id == viewModel.currentIdentityID)
|
||||||
|
.buttonStyle(PlainButtonStyle())
|
||||||
|
}
|
||||||
|
.onDelete {
|
||||||
|
guard let index = $0.first else { return }
|
||||||
|
|
||||||
|
rootViewModel.deleteIdentity(id: identities[index].id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ViewBuilder
|
||||||
|
func row(identity: Identity) -> some View {
|
||||||
HStack {
|
HStack {
|
||||||
KFImage(identity.image,
|
KFImage(identity.image,
|
||||||
options: .downsampled(dimension: 40, scaleFactor: displayScale))
|
options: .downsampled(dimension: 40, scaleFactor: displayScale))
|
||||||
|
@ -77,18 +94,6 @@ private extension IdentitiesView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.disabled(identity.id == viewModel.currentIdentityID)
|
|
||||||
.buttonStyle(PlainButtonStyle())
|
|
||||||
}
|
|
||||||
.onDelete {
|
|
||||||
guard let index = $0.first else { return }
|
|
||||||
|
|
||||||
rootViewModel.deleteIdentity(id: identities[index].id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
|
Loading…
Reference in a new issue