diff --git a/src/zapit/include/zapit/getservices.h b/src/zapit/include/zapit/getservices.h index 975da4388..56c577f98 100644 --- a/src/zapit/include/zapit/getservices.h +++ b/src/zapit/include/zapit/getservices.h @@ -131,6 +131,8 @@ class CServiceManager CZapitChannel* FindChannelByName(std::string name); CZapitChannel* FindCurrentChannel(const t_channel_id channel_id); CZapitChannel* FindChannel48(const t_channel_id channel_id); + CZapitChannel* FindChannelFuzzy(const t_channel_id channel_id, + const t_satellite_position pos, const freq_id_t freq); std::string GetServiceName(t_channel_id channel_id); diff --git a/src/zapit/src/bouquets.cpp b/src/zapit/src/bouquets.cpp index 9f46b7858..f2102e8c1 100644 --- a/src/zapit/src/bouquets.cpp +++ b/src/zapit/src/bouquets.cpp @@ -7,6 +7,8 @@ * rasc , * thegoodguy * + * (C) 2009, 2011, 2013 Stefan Seyfried + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -383,10 +385,11 @@ void CBouquetManager::parseBouquetsXml(const char *fname, bool bUser) freq = freq/1000; CZapitChannel* chan; + t_channel_id chid = CREATE_CHANNEL_ID64; if(bUser) - chan = CServiceManager::getInstance()->FindChannel48(CREATE_CHANNEL_ID64); + chan = CServiceManager::getInstance()->FindChannelFuzzy(chid, satellitePosition, freq); else - chan = CServiceManager::getInstance()->FindChannel(CREATE_CHANNEL_ID64); + chan = CServiceManager::getInstance()->FindChannel(chid); if (chan != NULL) { DBG("%04x %04x %04x %s\n", transport_stream_id, original_network_id, service_id, xmlGetAttribute(channel_node, "n")); #if 0 diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index 2bde7fd7c..848bb8b82 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -3,6 +3,8 @@ * * (C) 2002, 2003 by Andreas Oberritter * + * (C) 2007-2009, 2013 Stefan Seyfried + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -220,6 +222,18 @@ CZapitChannel * CServiceManager::FindChannel48(const t_channel_id channel_id) return NULL; } +CZapitChannel* CServiceManager::FindChannelFuzzy(const t_channel_id channel_id, + const t_satellite_position pos, const freq_id_t freq) +{ + CZapitChannel *ret; + ret = FindChannel48(channel_id); + if (!ret || !(pos == ret->getSatellitePosition())) + return NULL; + if (abs((int)ret->getFreqId() - (int)freq) < 3) + return ret; + return NULL; +} + bool CServiceManager::GetAllRadioChannels(ZapitChannelList &list, int flags) { list.clear();