Skip to content
Snippets Groups Projects
MenuViewModel.swift 1.26 KiB
Newer Older
Bruno Muniz's avatar
Bruno Muniz committed
import Combine
import Defaults
import Foundation
import Integration
import DependencyInjection

final class MenuViewModel {
    @Dependency private var session: SessionType

    @KeyObject(.avatar, defaultValue: nil) var avatar: Data?
    @KeyObject(.username, defaultValue: "") var username: String

    var requestCount: AnyPublisher<Int, Never> {
        Publishers.CombineLatest(
            session.contacts(.received),
            session.groups(.pending)
        ).map { (contacts, groups) in
            let contactRequests = contacts.filter {
                $0.status == .verified ||
                $0.status == .confirming ||
                $0.status == .confirmationFailed ||
                $0.status == .verificationFailed ||
                $0.status == .verificationInProgress
            }

            let groupRequests = groups.filter {
                $0.status == .pending
            }

            return contactRequests.count + groupRequests.count
        }.eraseToAnyPublisher()
Bruno Muniz's avatar
Bruno Muniz committed
    }

    var xxdk: String {
        session.version
    }

    var build: String {
        Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? ""
    }

    var version: String {
        Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""
    }
}