mirror of
https://github.com/kean/Pulse.git
synced 2026-05-30 21:07:33 +00:00
61 lines
1.5 KiB
Swift
61 lines
1.5 KiB
Swift
// The MIT License (MIT)
|
||
//
|
||
// Copyright (c) 2020–2022 Alexander Grebenyuk (github.com/kean).
|
||
|
||
import SwiftUI
|
||
import Pulse
|
||
import Combine
|
||
|
||
final class SettingsViewModel: ObservableObject {
|
||
let store: LoggerStore
|
||
var onDismiss: (() -> Void)?
|
||
|
||
var isArchive: Bool { store.isArchive }
|
||
|
||
// Apple Watch file transfers
|
||
#if os(watchOS) || os(iOS)
|
||
@Published private(set) var fileTransferStatus: FileTransferStatus = .initial
|
||
@Published var fileTransferError: FileTransferError?
|
||
#endif
|
||
|
||
private var cancellables: [AnyCancellable] = []
|
||
|
||
@available(iOS 14.0, tvOS 14.0, *)
|
||
var isRemoteLoggingAvailable: Bool {
|
||
store === RemoteLogger.shared.store
|
||
}
|
||
|
||
init(store: LoggerStore) {
|
||
self.store = store
|
||
|
||
#if os(watchOS) || os(iOS)
|
||
LoggerSyncSession.shared.$fileTransferStatus.sink(receiveValue: { [weak self] in
|
||
self?.fileTransferStatus = $0
|
||
if case let .failure(error) = $0 {
|
||
self?.fileTransferError = FileTransferError(message: error.localizedDescription)
|
||
}
|
||
}).store(in: &cancellables)
|
||
#endif
|
||
}
|
||
|
||
func buttonRemoveAllMessagesTapped() {
|
||
store.removeAll()
|
||
|
||
#if os(iOS)
|
||
runHapticFeedback(.success)
|
||
ToastView {
|
||
HStack {
|
||
Image(systemName: "trash")
|
||
Text("All messages removed")
|
||
}
|
||
}.show()
|
||
#endif
|
||
}
|
||
|
||
#if os(watchOS)
|
||
func tranferStore() {
|
||
LoggerSyncSession.shared.transfer(store: store)
|
||
}
|
||
#endif
|
||
}
|