// This file is part of Desktop App Toolkit, // a set of libraries for developing nice desktop applications. // // For license and copyright information please follow this link: // https://github.com/desktop-app/legal/blob/master/LEGAL // #pragma once #include "base/qt/qt_compare.h" #include "webrtc/webrtc_device_common.h" #include namespace Webrtc { class Environment; class DeviceResolver final { public: DeviceResolver( not_null environment, DeviceType type, rpl::producer savedValue); [[nodiscard]] DeviceResolvedId current() const; [[nodiscard]] rpl::producer value() const; [[nodiscard]] rpl::producer changes() const; [[nodiscard]] DeviceResolvedId threadSafeCurrent() const; [[nodiscard]] DeviceChangeReason lastChangeReason() const; private: void trackSavedId(); const not_null _environment; QString _savedId; DeviceResolvedId _current; mutable QMutex _mutex; rpl::variable _data; DeviceChangeReason _lastChangeReason = DeviceChangeReason::Manual; rpl::lifetime _lifetime; }; [[nodiscard]] rpl::producer DeviceIdOrDefault( rpl::producer id); [[nodiscard]] rpl::producer DeviceIdValueWithFallback( rpl::producer id, rpl::producer fallback); } // namespace Webrtc