stefanrenne/RxSonosLib

View on GitHub
RxSonosLib/Framework/Domain/Interactors/GetVolumeInteractor.swift

Summary

Maintainability
A
1 hr
Test Coverage
//
//  GetVolumeInteractor.swift
//  RxSonosLib
//
//  Created by Stefan Renne on 04/04/2018.
//  Copyright © 2018 Uberweb. All rights reserved.
//

import Foundation
import RxSwift

class GetVolumeValues: RequestValues {
    let group: Group
    
    init(group: Group) {
        self.group = group
    }
}

class GetVolumeInteractor: ObservableInteractor {
    
    typealias T = GetVolumeValues
    
    private let renderingControlRepository: RenderingControlRepository
    
    init(renderingControlRepository: RenderingControlRepository) {
        self.renderingControlRepository = renderingControlRepository
    }
    
    func buildInteractorObservable(values: GetVolumeValues?) -> Observable<Int> {
        
        guard let group = values?.group else {
            return Observable.error(SonosError.invalidImplementation)
        }
        
        return createTimer(SonosSettings.shared.renewGroupVolumeTimer)
            .flatMap(mapToVolume(for: group))
            .distinctUntilChanged({ $0 == $1 })
    }
}

private extension GetVolumeInteractor {
    func mapToVolume(for group: Group) -> ((Int) -> Observable<Int>) {
        return { _ in
            return self.renderingControlRepository
                .getVolume(for: group)
                .asObservable()
        }
    }
}