void CBouquetManager::makeRemainingChannelsBouquet(void) { ChannelList unusedChannels; set<t_channel_id> chans_processed; for (vector<CBouquet*>::const_iterator it = Bouquets.begin(); it != Bouquets.end(); ++it) { for (vector<CZapitChannel*>::iterator jt = (*it)->tvChannels.begin(); jt != (*it)->tvChannels.end(); ++jt) chans_processed.insert((*jt)->getChannelID()); for (vector<CZapitChannel*>::iterator jt = (*it) ->radioChannels.begin(); jt != (*it)->radioChannels.end(); ++jt) chans_processed.insert((*jt)->getChannelID()); } // TODO: use locales remainChannels = addBouquet(Bouquets.empty() ? "Alle Kan\xC3\xA4le" : "Andere"); // UTF-8 encoded for (tallchans::iterator it = allchans.begin(); it != allchans.end(); ++it) if (chans_processed.find(it->first) == chans_processed.end()) unusedChannels.push_back(&(it->second)); sort(unusedChannels.begin(), unusedChannels.end(), CmpChannelByChName()); for (ChannelList::const_iterator it = unusedChannels.begin(); it != unusedChannels.end(); ++it) remainChannels->addService(findChannelByChannelID((*it)->getChannelID())); if ((remainChannels->tvChannels.empty()) && (remainChannels->radioChannels.empty())) { deleteBouquet(remainChannels); remainChannels = NULL; } }
void CBouquetManager::parseBouquetsXml(const xmlNodePtr root, bool bUser) { xmlNodePtr search=root->xmlChildrenNode; xmlNodePtr channel_node; if (search) { t_original_network_id original_network_id; t_service_id service_id; t_transport_stream_id transport_stream_id; int16_t satellitePosition; freq_id_t freq = 0; INFO("reading bouquets"); while ((search = xmlGetNextOccurence(search, "Bouquet")) != NULL) { char * name = xmlGetAttribute(search, (char *) "name"); //CZapitBouquet* newBouquet = addBouquet(xmlGetAttribute(search, (char *) "name"), bUser); CZapitBouquet* newBouquet = addBouquet(name, bUser); char* hidden = xmlGetAttribute(search, (char *) "hidden"); char* locked = xmlGetAttribute(search, (char *) "locked"); newBouquet->bHidden = hidden ? (strcmp(hidden, "1") == 0) : false; newBouquet->bLocked = locked ? (strcmp(locked, "1") == 0) : false; newBouquet->bFav = (strcmp(name, "favorites") == 0); channel_node = search->xmlChildrenNode; while ((channel_node = xmlGetNextOccurence(channel_node, "S")) != NULL) { std::string name = xmlGetAttribute(channel_node, (char *) "n"); GET_ATTR(channel_node, (char *) "i", SCANF_SERVICE_ID_TYPE, service_id); GET_ATTR(channel_node, (char *) "on", SCANF_ORIGINAL_NETWORK_ID_TYPE, original_network_id); GET_ATTR(channel_node, (char *) "s", SCANF_SATELLITE_POSITION_TYPE, satellitePosition); GET_ATTR(channel_node, (char *) "t", SCANF_TRANSPORT_STREAM_ID_TYPE, transport_stream_id); GET_ATTR(channel_node, (char *) "frq", SCANF_SATELLITE_POSITION_TYPE, freq); if(freq > 20000) freq = freq/1000; CZapitChannel* chan; chan = findChannelByChannelID(CREATE_CHANNEL_ID64); //printf("Bouquet Channel-ID freq %d pos %d id %llx\n", freq, satellitePosition, CREATE_CHANNEL_ID64); if (chan != NULL) { //printf("found\n"); DBG("%04x %04x %04x %s\n", transport_stream_id, original_network_id, service_id, xmlGetAttribute(channel_node, (char *) "n")); #if 0 if(bUser && (name.length() > 1)) chan->setName(name); #endif if(!bUser) chan->pname = (char *) newBouquet->Name.c_str(); chan->bAlwaysLocked = newBouquet->bLocked; newBouquet->addService(chan); } channel_node = channel_node->xmlNextNode; } if(!bUser) newBouquet->sortBouquet(); search = search->xmlNextNode; } INFO("found %d bouquets", Bouquets.size()); } }
void CBouquetManager::makeRemainingChannelsBouquet(void) { ZapitChannelList unusedChannels; set<t_channel_id> chans_processed; bool tomake = config.getBool("makeRemainingChannelsBouquet", true); for (tallchans::iterator it = allchans.begin(); it != allchans.end(); it++) it->second.number = 0; int i = 1, j = 1; for (vector<CZapitBouquet*>::const_iterator it = Bouquets.begin(); it != Bouquets.end(); it++) { for (vector<CZapitChannel*>::iterator jt = (*it)->tvChannels.begin(); jt != (*it)->tvChannels.end(); jt++) { if(tomake) chans_processed.insert((*jt)->getChannelID()); if(!(*jt)->number) (*jt)->number = i++; if(!(*jt)->pname && !(*it)->bUser) (*jt)->pname = (char *) (*it)->Name.c_str(); } for (vector<CZapitChannel*>::iterator jt = (*it) ->radioChannels.begin(); jt != (*it)->radioChannels.end(); jt++) { if(tomake) chans_processed.insert((*jt)->getChannelID()); if(!(*jt)->number) (*jt)->number = j++; if(!(*jt)->pname && !(*it)->bUser) (*jt)->pname = (char *) (*it)->Name.c_str(); } } if(!tomake) return; // TODO: use locales remainChannels = addBouquet((Bouquets.size() == 0) ? "All Channels" : "Other", false); // UTF-8 encoded for (tallchans::iterator it = allchans.begin(); it != allchans.end(); it++) if (chans_processed.find(it->first) == chans_processed.end()) unusedChannels.push_back(&(it->second)); sort(unusedChannels.begin(), unusedChannels.end(), CmpChannelByChName()); for (ZapitChannelList::const_iterator it = unusedChannels.begin(); it != unusedChannels.end(); it++) { remainChannels->addService(findChannelByChannelID((*it)->getChannelID())); } if ((remainChannels->tvChannels.empty()) && (remainChannels->radioChannels.empty())) { deleteBouquet(remainChannels); remainChannels = NULL; return; } for (vector<CZapitChannel*>::iterator jt = remainChannels->tvChannels.begin(); jt != remainChannels->tvChannels.end(); jt++) if(!(*jt)->number) (*jt)->number = i++; for (vector<CZapitChannel*>::iterator jt = remainChannels->radioChannels.begin(); jt != remainChannels->radioChannels.end(); jt++) if(!(*jt)->number) (*jt)->number = j++; }
void CBouquetManager::makeBouquetfromCurrentservices(const xmlNodePtr root) { xmlNodePtr provider = root->xmlChildrenNode; // TODO: use locales CBouquet* newBouquet = addBouquet("Neue Sender"); newBouquet->bHidden = false; newBouquet->bLocked = false; t_original_network_id original_network_id; t_service_id service_id; t_transport_stream_id transport_stream_id; t_satellite_position satellitePosition; while (provider) { xmlNodePtr transponder = provider->xmlChildrenNode; while (xmlGetNextOccurence(transponder, "transponder") != NULL) { xmlNodePtr channel_node = transponder->xmlChildrenNode; while (xmlGetNextOccurence(channel_node, "channel") != NULL) { if (strncmp(xmlGetAttribute(channel_node, "action"), "remove", 6)) { GET_ATTR(provider, "position", SCANF_SATELLITE_POSITION_TYPE, satellitePosition); GET_ATTR(transponder, "onid", SCANF_ORIGINAL_NETWORK_ID_TYPE, original_network_id); GET_ATTR(transponder, "id", SCANF_TRANSPORT_STREAM_ID_TYPE, transport_stream_id); GET_ATTR(channel_node, "service_id", SCANF_SERVICE_ID_TYPE, service_id); CZapitChannel* chan = findChannelByChannelID(CREATE_CHANNEL_ID); if (chan != NULL) newBouquet->addService(chan); } channel_node = channel_node->xmlNextNode; } transponder = transponder->xmlNextNode; } provider = provider->xmlNextNode; } }
void CBouquetManager::parseBouquetsXml(const xmlNodePtr root) { extern CConfigFile config; bool channel_names_from_bouquet = config.getBool("ChannelNamesFromBouquet", false); xmlNodePtr search=root->xmlChildrenNode; xmlNodePtr channel_node; if (search) { t_original_network_id original_network_id; t_service_id service_id; t_transport_stream_id transport_stream_id; t_satellite_position satellitePosition; INFO("reading bouquets"); while ((search = xmlGetNextOccurence(search, "Bouquet")) != NULL) { CBouquet *newBouquet; char *name = xmlGetAttribute(search, "name"); int bnum = existsBouquet(name); if (bnum != -1) newBouquet = Bouquets[bnum]; else { newBouquet = addBouquet(name); char* hidden = xmlGetAttribute(search, "hidden"); char* locked = xmlGetAttribute(search, "locked"); newBouquet->type = xmlGetNumericAttribute(search, "type", 16); newBouquet->bouquet_id = xmlGetNumericAttribute(search, "bouquet_id", 16); newBouquet->bHidden = hidden ? (strcmp(hidden, "1") == 0) : false; newBouquet->bLocked = locked ? (strcmp(locked, "1") == 0) : false; bnum = Bouquets.size() - 1; } channel_node = search->xmlChildrenNode; while ((channel_node = xmlGetNextOccurence(channel_node, "channel")) != NULL) { GET_ATTR(channel_node, "serviceID", SCANF_SERVICE_ID_TYPE, service_id); GET_ATTR(channel_node, "onid", SCANF_ORIGINAL_NETWORK_ID_TYPE, original_network_id); GET_ATTR(channel_node, "sat", SCANF_SATELLITE_POSITION_TYPE, satellitePosition); GET_ATTR(channel_node, "tsid", SCANF_TRANSPORT_STREAM_ID_TYPE, transport_stream_id); CZapitChannel* chan = findChannelByChannelID(CREATE_CHANNEL_ID); if (chan != NULL) { if (channel_names_from_bouquet) chan->setName(xmlGetAttribute(channel_node, "name")); if (existsChannelInBouquet(bnum, CREATE_CHANNEL_ID)) { DBG("b %d '%s' ch %012llx sat %3d name '%s' exists, not added", bnum, name, CREATE_CHANNEL_ID, satellitePosition, chan->getName().c_str()); } else newBouquet->addService(chan); } channel_node = channel_node->xmlNextNode; } search = search->xmlNextNode; } INFO("found %d bouquets", Bouquets.size()); } }