Skip to content
Snippets Groups Projects
MenuViewModel.swift 1.29 KiB
Newer Older
Bruno Muniz's avatar
Bruno Muniz committed
import Combine
import XXModels
Bruno Muniz's avatar
Bruno Muniz committed
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> {
        let groupQuery = Group.Query(authStatus: [.pending])
        let contactsQuery = Contact.Query(authStatus: [
            .verified,
            .confirming,
            .confirmationFailed,
            .verificationFailed,
            .verificationInProgress
        ])

        return Publishers.CombineLatest(
Bruno Muniz's avatar
Bruno Muniz committed
            session.dbManager.fetchContactsPublisher(contactsQuery).assertNoFailure(),
            session.dbManager.fetchGroupsPublisher(groupQuery).assertNoFailure()
        )
        .map { $0.0.count + $0.1.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 ?? ""
    }

    var referralDeeplink: String {
Bruno Muniz's avatar
Bruno Muniz committed
        "https://elixxir.io/connect?username=\(username)"
Bruno Muniz's avatar
Bruno Muniz committed
}