diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2017-08-07 00:08:54 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2017-08-07 00:08:54 +0100 |
commit | 3e50a4e08541435dfb647be15173cd35ed52cd6c (patch) | |
tree | 3c72e4ed623897b3dc89577443cd19d286b2e7c1 /p2pvr/devices | |
parent | Add ice_print to device error (diff) | |
download | p2pvr-3e50a4e08541435dfb647be15173cd35ed52cd6c.tar.bz2 p2pvr-3e50a4e08541435dfb647be15173cd35ed52cd6c.tar.xz p2pvr-3e50a4e08541435dfb647be15173cd35ed52cd6c.zip |
Have MockDevices extend DevicesI and simply intercept tuner creation with MockTuner
Diffstat (limited to 'p2pvr/devices')
-rw-r--r-- | p2pvr/devices/devices.cpp | 24 | ||||
-rw-r--r-- | p2pvr/devices/devices.h | 1 | ||||
-rw-r--r-- | p2pvr/devices/mockTuner.cpp | 2 |
3 files changed, 14 insertions, 13 deletions
diff --git a/p2pvr/devices/devices.cpp b/p2pvr/devices/devices.cpp index 420632d..8cd9a74 100644 --- a/p2pvr/devices/devices.cpp +++ b/p2pvr/devices/devices.cpp @@ -52,7 +52,9 @@ DevicesI::getTuner() } for (auto devItr = devices.begin(); devItr != devices.end(); devItr++) { try { - return openTuner(*devItr); + TunerPtr tuner = openTuner(*devItr); + devices.erase(devItr); + return tuner; } catch (...) { logger->messagebf(LOG::DEBUG, "%s: Failed to open device %s", __PRETTY_FUNCTION__, @@ -121,17 +123,17 @@ DevicesI::releaseTuner(const TunerPtr & tuner) Lock(lock); logger->messagebf(LOG::DEBUG, "%s", __PRETTY_FUNCTION__); auto openTuner = std::find_if(openDevices.begin(), openDevices.end(), [&tuner](const auto & ot) { - return ot.second->tuner == tuner; - }); - if (openTuner == openDevices.end()) { - logger->messagebf(LOG::DEBUG, "%s: Not one of mine", __PRETTY_FUNCTION__); - throw DeviceError(); + return ot.second->tuner == tuner; + }); + if (openTuner != openDevices.end()) { + openTuner->second->clients -= 1; + if (openTuner->second->clients == 0) { + openDevices.erase(openTuner); + devices.push_back(tuner->GetDevice()); + } } - logger->messagebf(LOG::DEBUG, "%s: Locally owned deivce %s", __PRETTY_FUNCTION__, openTuner->first); - openTuner->second->clients -= 1; - if (openTuner->second->clients == 0) { - openDevices.erase(openTuner); - devices.push_back(openTuner->second->tuner->GetDevice()); + else { + devices.push_back(tuner->GetDevice()); } } diff --git a/p2pvr/devices/devices.h b/p2pvr/devices/devices.h index d32971f..e575ce6 100644 --- a/p2pvr/devices/devices.h +++ b/p2pvr/devices/devices.h @@ -46,7 +46,6 @@ class DLL_PUBLIC DevicesI : public Tuners { protected: virtual TunerPtr openTuner(const boost::filesystem::path &) const; - private: typedef boost::function<DVBSI::DeliveryPtr()> DeliveryProvider; typedef boost::function<void(TunerPtr)> Target; typedef boost::shared_ptr<OpenTuner> OpenTunerPtr; diff --git a/p2pvr/devices/mockTuner.cpp b/p2pvr/devices/mockTuner.cpp index 1316b6d..9abcfbf 100644 --- a/p2pvr/devices/mockTuner.cpp +++ b/p2pvr/devices/mockTuner.cpp @@ -57,7 +57,7 @@ int MockTuner::GetStatus() std::string MockTuner::GetDevice() { - return 0; + return "/dev/dvb/dummy"; } Ice::ByteSeq MockTuner::Decompress(const Ice::ByteSeq & dataxz) |