// -- servicetype 0 queries TV and Radio Channels CZapitChannel* CZapitBouquet::getChannelByChannelID(const t_channel_id channel_id, const unsigned char serviceType) { CZapitChannel* result = NULL; ZapitChannelList* channels = &tvChannels; switch (serviceType) { case ST_RESERVED: // ? case ST_DIGITAL_TELEVISION_SERVICE: case ST_NVOD_REFERENCE_SERVICE: case ST_NVOD_TIME_SHIFTED_SERVICE: channels = &tvChannels; break; case ST_DIGITAL_RADIO_SOUND_SERVICE: channels = &radioChannels; break; } unsigned int i; for (i = 0; (i < channels->size()) && ((*channels)[i]->getChannelID() != channel_id); i++) {}; if (i<channels->size()) result = (*channels)[i]; if ((serviceType == ST_RESERVED) && (result == NULL)) { result = getChannelByChannelID(channel_id, ST_DIGITAL_RADIO_SOUND_SERVICE); } return result; }
void CBouquetManager::makeRemainingChannelsBouquet(void) { ZapitChannelList unusedChannels; //FIXME services loaded before config. //bool tomake = CZapit::getInstance()->makeRemainingChannelsBouquet(); /* reset channel number and has_bouquet flag */ CServiceManager::getInstance()->ResetChannelNumbers(); //int i = 1, j = 1; int i = CServiceManager::getInstance()->GetMaxNumber(false); int j = CServiceManager::getInstance()->GetMaxNumber(true); /* FIXME temp debug */ printf("############## CBouquetManager::makeRemainingChannelsBouquet: numbers start at: tv %d radio %d ############\n", i, j); for (vector<CZapitBouquet*>::const_iterator it = Bouquets.begin(); it != Bouquets.end(); ++it) { renumChannels((*it)->tvChannels, i, (*it)->bUser ? NULL : (char *) (*it)->Name.c_str()); renumChannels((*it)->radioChannels, j, (*it)->bUser ? NULL : (char *) (*it)->Name.c_str()); } if(/*!tomake ||*/ CServiceManager::getInstance()->GetAllUnusedChannels(unusedChannels) == false) return; sort(unusedChannels.begin(), unusedChannels.end(), CmpChannelByChName()); // TODO: use locales remainChannels = addBouquet( Bouquets.empty() ? "All Channels" : "Other", false); // UTF-8 encoded remainChannels->bOther = true; for (ZapitChannelList::const_iterator it = unusedChannels.begin(); it != unusedChannels.end(); ++it) { remainChannels->addService(*it); } renumChannels(remainChannels->tvChannels, i); renumChannels(remainChannels->radioChannels, j); }
//------------------------------------------------------------------------- // y-func : get_bouquets_as_dropdown [<bouquet>] <doshowhidden> //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_get_bouquets_as_dropdown(CyhookHandler *, std::string para) { std::string yresult, sel, nr_str, do_show_hidden; int nr=1; ySplitString(para," ",nr_str, do_show_hidden); if(nr_str != "") nr = atoi(nr_str.c_str()); int mode = NeutrinoAPI->Zapit->getMode(); for (int i = 0; i < (int) g_bouquetManager->Bouquets.size(); i++) { //ZapitChannelList &channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[i]->radioChannels : g_bouquetManager->Bouquets[i]->tvChannels; ZapitChannelList channels; if (mode == CZapitClient::MODE_RADIO) g_bouquetManager->Bouquets[i]->getRadioChannels(channels); else g_bouquetManager->Bouquets[i]->getTvChannels(channels); sel=(nr==(i+1)) ? "selected=\"selected\"" : ""; if(!channels.empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) yresult += string_printf("<option value=%u %s>%s</option>\n", i + 1, sel.c_str(), std::string(g_bouquetManager->Bouquets[i]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) :g_bouquetManager->Bouquets[i]->Name.c_str()).c_str()); //yresult += string_printf("<option value=%u %s>%s</option>\n", i + 1, sel.c_str(), (encodeString(std::string(g_bouquetManager->Bouquets[i]->Name.c_str()))).c_str()); } return yresult; }
//------------------------------------------------------------------------- // y-func : get_channel_dropdown [<bouquet_nr> [<channel_id>]] //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_get_channels_as_dropdown(CyhookHandler *, std::string para) { std::string abouquet, achannel_id, yresult, sel; int bnumber = 1; int mode = NeutrinoAPI->Zapit->getMode(); ySplitString(para," ",abouquet, achannel_id); if(abouquet != "") bnumber = atoi(abouquet.c_str()); if(bnumber > 0) { bnumber--; ZapitChannelList channels; //channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[bnumber]->radioChannels : g_bouquetManager->Bouquets[bnumber]->tvChannels; if (mode == CZapitClient::MODE_RADIO) g_bouquetManager->Bouquets[bnumber]->getRadioChannels(channels); else g_bouquetManager->Bouquets[bnumber]->getTvChannels(channels); for(int j = 0; j < (int) channels.size(); j++) { CEPGData epg; CZapitChannel * channel = channels[j]; char buf[100],id[20]; sprintf(id,PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS,channel->channel_id); std::string _sid = std::string(id); sel = (_sid == achannel_id) ? "selected=\"selected\"" : ""; CEitManager::getInstance()->getActualEPGServiceKey(channel->channel_id, &epg); sprintf(buf,"<option value="PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS" %s>%.20s - %.30s</option>\n", channel->channel_id, sel.c_str(), channel->getName().c_str(),epg.title.c_str()); yresult += buf; } } return yresult; }
bool CServiceManager::GetAllSatelliteChannels(ZapitChannelList &list, t_satellite_position position) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); it++) { if(it->second.getSatellitePosition() == position) list.push_back(&(it->second)); } return (list.size() != 0); }
bool CServiceManager::GetAllNewChannels(ZapitChannelList &list) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); it++) { if (it->second.isNewChannel) list.push_back(&(it->second)); } return (list.size() != 0); }
bool CServiceManager::GetAllTvChannels(ZapitChannelList &list) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); it++) { if (it->second.getServiceType() != ST_DIGITAL_RADIO_SOUND_SERVICE) list.push_back(&(it->second)); } return (list.size() != 0); }
bool CZapitBouquet::getRadioChannels(ZapitChannelList &list, int flags) { list.clear(); for (ZapitChannelList::iterator it = radioChannels.begin(); it != radioChannels.end(); ++it) { if ((*it)->flags & flags) list.push_back(*it); } return (!list.empty()); }
void CBouquetManager::renumChannels(ZapitChannelList &list, int & counter, char * pname) { for(zapit_list_it_t it = list.begin(); it != list.end(); it++) { if(!(*it)->number) (*it)->number = counter++; if(!(*it)->pname && pname) (*it)->pname = pname; if ((*it)->pname) (*it)->has_bouquet = true; } }
void CBouquetManager::setBouquetLock(CZapitBouquet* bouquet, bool state) { bouquet->bLocked = state; int add = bouquet->bLocked * 2 - 1; ZapitChannelList *channels = &bouquet->tvChannels; for(unsigned int i = 0; i < channels->size(); i++) ((*channels)[i])->bLockCount += add; channels = &bouquet->radioChannels; for(unsigned int i = 0; i < channels->size(); i++) ((*channels)[i])->bLockCount += add; }
int CSelectChannelWidget::InitZapitChannelHelper(CZapitClient::channelsMode mode) { std::vector<CMenuWidget *> toDelete; CMenuWidget mctv(LOCALE_TIMERLIST_BOUQUETSELECT, NEUTRINO_ICON_SETTINGS, width); mctv.addIntroItems(); for (int i = 0; i < (int) g_bouquetManager->Bouquets.size(); i++) { CMenuWidget* mwtv = new CMenuWidget(LOCALE_TIMERLIST_CHANNELSELECT, NEUTRINO_ICON_SETTINGS, width); toDelete.push_back(mwtv); mwtv->addIntroItems(); ZapitChannelList channels; if (mode == CZapitClient::MODE_RADIO) g_bouquetManager->Bouquets[i]->getRadioChannels(channels); else g_bouquetManager->Bouquets[i]->getTvChannels(channels); for(int j = 0; j < (int) channels.size(); j++) { CZapitChannel * channel = channels[j]; char cChannelId[60] = {0}; snprintf(cChannelId, sizeof(cChannelId), "ZC%c:%d|%" PRIx64 "#", (mode==CZapitClient::MODE_TV)?'T':'R', channel->number, channel->channel_id); CMenuForwarder * chan_item = new CMenuForwarder(channel->getName(), true, NULL, this, (std::string(cChannelId) + channel->getName()).c_str(), CRCInput::RC_nokey, NULL, channel->scrambled ? NEUTRINO_ICON_SCRAMBLED: (channel->getUrl().empty() ? NULL : NEUTRINO_ICON_STREAMING)); chan_item->setItemButton(NEUTRINO_ICON_BUTTON_OKAY, true); mwtv->addItem(chan_item); } #if 1 // FIXME, probably unneeded by now --martii if (g_bouquetManager->Bouquets[i]->Name == "extra.zapit_bouquetname_others" || g_bouquetManager->Bouquets[i]->Name == "extra.zapit_bouquetname_newchannels") continue; #endif if(!channels.empty() && (!g_bouquetManager->Bouquets[i]->bHidden )) { mctv.addItem(new CMenuForwarder(g_bouquetManager->Bouquets[i]->Name, true, NULL, mwtv)); } } int res = mctv.exec (NULL, ""); // delete dynamic created objects for(unsigned int count=0;count<toDelete.size();count++) { delete toDelete[count]; } toDelete.clear(); return res; }
//------------------------------------------------------------------------- // func: Bouquet Editor List //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_bouquet_editor_main(CyhookHandler *hh, std::string para) { std::string yresult; int selected = -1; if (hh->ParamList["saved"] == "1") hh->ParamList["have_saved"]="true"; if (hh->ParamList["selected"] != "") selected = atoi(hh->ParamList["selected"].c_str()); int bouquetSize = (int) g_bouquetManager->Bouquets.size(); int mode = NeutrinoAPI->Zapit->getMode(); for (int i = 0; i < (int) g_bouquetManager->Bouquets.size(); i++) { ZapitChannelList * channels = mode == CZapitClient::MODE_RADIO ? &g_bouquetManager->Bouquets[i]->radioChannels : &g_bouquetManager->Bouquets[i]->tvChannels; if(!channels->empty() || g_bouquetManager->Bouquets[i]->bUser){ CZapitBouquet * bouquet = g_bouquetManager->Bouquets[i]; char classname = ((i & 1) == 0) ? 'a' : 'b'; classname = (selected == (int) i + 1)?'c':classname; std::string akt = (selected == (int) (i + 1)) ? "<a name=\"akt\"></a>" : ""; // lock/unlock std::string lock_action = (bouquet->bLocked) ? "unlock" : "lock"; std::string lock_img = (bouquet->bLocked) ? "lock" : "unlock"; std::string lock_alt = (bouquet->bLocked) ? "unlock" : "lock"; // hide/show std::string hidden_action= (bouquet->bHidden) ? "show" : "hide"; std::string hidden_img = (bouquet->bHidden) ? "hidden" : "visible"; std::string hidden_alt = (bouquet->bHidden) ? "hide" : "show"; // move down std::string down_show = (i + 1 < bouquetSize) ? "visible" : "hidden"; //move up std::string up_show = (i > 0) ? "visible" : "hidden"; // build from template yresult += string_printf(para.c_str(), classname, akt.c_str(), i + 1, lock_action.c_str(), lock_img.c_str(), lock_alt.c_str(), //lock i + 1, hidden_action.c_str(), hidden_img.c_str(), hidden_alt.c_str(), //hhidden i + 1, bouquet->Name.c_str(), bouquet->Name.c_str(), //link i + 1, bouquet->Name.c_str(), //rename i + 1, bouquet->Name.c_str(), //delete down_show.c_str(), i + 1, //down arrow up_show.c_str(), i + 1); //up arrow } } return yresult; }
void CZapitBouquet::moveService(const unsigned int oldPosition, const unsigned int newPosition, const unsigned char serviceType) { ZapitChannelList* channels = &tvChannels; switch (serviceType) { case ST_DIGITAL_TELEVISION_SERVICE: case ST_NVOD_REFERENCE_SERVICE: case ST_NVOD_TIME_SHIFTED_SERVICE: channels = &tvChannels; break; case ST_DIGITAL_RADIO_SOUND_SERVICE: channels = &radioChannels; break; } if ((oldPosition < channels->size()) && (newPosition < channels->size())) { ZapitChannelList::iterator it = channels->begin(); advance(it, oldPosition); CZapitChannel* tmp = *it; channels->erase(it); it = channels->begin(); advance(it, newPosition); channels->insert(it, tmp); } }
void CZapitBouquet::removeService(CZapitChannel* oldChannel) { if (oldChannel != NULL) { ZapitChannelList* channels = &tvChannels; switch (oldChannel->getServiceType()) { case ST_DIGITAL_TELEVISION_SERVICE: case ST_NVOD_REFERENCE_SERVICE: case ST_NVOD_TIME_SHIFTED_SERVICE: channels = &tvChannels; break; case ST_DIGITAL_RADIO_SOUND_SERVICE: channels = &radioChannels; break; } (*channels).erase(remove(channels->begin(), channels->end(), oldChannel), channels->end()); } }
void CBouquetManager::deleteBouquet(const CZapitBouquet* bouquet) { if (bouquet != NULL) { BouquetList::iterator it = find(Bouquets.begin(), Bouquets.end(), bouquet); if (it != Bouquets.end()) { if ((*it)->bLocked) { ZapitChannelList *channels = &(*it)->tvChannels; for(unsigned int i = 0; i < channels->size(); i++) ((*channels)[i])->bLockCount--; channels = &(*it)->radioChannels; for(unsigned int i = 0; i < channels->size(); i++) ((*channels)[i])->bLockCount--; } Bouquets.erase(it); delete bouquet; } } }
//------------------------------------------------------------------------- // y-func : get_bouquets_as_templatelist <tempalte> [~<do_show_hidden>] // TODO: select actual Bouquet //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_get_bouquets_as_templatelist(CyhookHandler *, std::string para) { std::string yresult, ytemplate, do_show_hidden; ySplitString(para,"~",ytemplate, do_show_hidden); //ytemplate += "\n"; //FIXME add newline to printf int mode = NeutrinoAPI->Zapit->getMode(); for (int i = 0; i < (int) g_bouquetManager->Bouquets.size(); i++) { //ZapitChannelList &channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[i]->radioChannels : g_bouquetManager->Bouquets[i]->tvChannels; ZapitChannelList channels; if (mode == CZapitClient::MODE_RADIO) g_bouquetManager->Bouquets[i]->getRadioChannels(channels); else g_bouquetManager->Bouquets[i]->getTvChannels(channels); if(!channels.empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) { yresult += string_printf(ytemplate.c_str(), i + 1, g_bouquetManager->Bouquets[i]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) : g_bouquetManager->Bouquets[i]->Name.c_str()); yresult += "\r\n"; } } return yresult; }
//------------------------------------------------------------------------- // y-func : get_bouquets_as_templatelist <tempalte> [~<do_show_hidden>] // TODO: select actual Bouquet //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_get_bouquets_as_templatelist(CyhookHandler *, std::string para) { std::string yresult, ytemplate, do_show_hidden; ySplitString(para,"~",ytemplate, do_show_hidden); //ytemplate += "\n"; //FIXME add newline to printf int mode = NeutrinoAPI->Zapit->getMode(); for (int i = 0; i < (int) g_bouquetManager->Bouquets.size(); i++) { //ZapitChannelList &channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[i]->radioChannels : g_bouquetManager->Bouquets[i]->tvChannels; ZapitChannelList channels; if (mode == CZapitClient::MODE_RADIO) g_bouquetManager->Bouquets[i]->getRadioChannels(channels); else g_bouquetManager->Bouquets[i]->getTvChannels(channels); #if HAVE_DUCKBOX_HARDWARE if(!channels.empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true") && g_bouquetManager->Bouquets[i]->bUser) { #else if(!channels.empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) { #endif yresult += string_printf(ytemplate.c_str(), i + 1, g_bouquetManager->Bouquets[i]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) : g_bouquetManager->Bouquets[i]->Name.c_str()); yresult += "\r\n"; } } return yresult; } //------------------------------------------------------------------------- // y-func : get_actual_bouquet_number //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_get_actual_bouquet_number(CyhookHandler *, std::string) { int actual=0; for (int i = 0; i < (int) g_bouquetManager->Bouquets.size(); i++) { if(g_bouquetManager->existsChannelInBouquet(i, CZapit::getInstance()->GetCurrentChannelID())) { actual=i+1; break; } } return std::string(itoa(actual)); }
//------------------------------------------------------------------------- // func: Bouquet Edit //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_set_bouquet_edit_form(CyhookHandler *hh, std::string) { if (!(hh->ParamList["selected"].empty())) { int selected = atoi(hh->ParamList["selected"].c_str()) - 1; int mode = NeutrinoAPI->Zapit->getMode(); ZapitChannelList* channels = mode == CZapitClient::MODE_TV ? &(g_bouquetManager->Bouquets[selected]->tvChannels) : &(g_bouquetManager->Bouquets[selected]->radioChannels); for(int j = 0; j < (int) channels->size(); j++) { hh->ParamList["bouquet_channels"] += string_printf("<option value=\"" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "\">%s</option>\n", (*channels)[j]->channel_id, (*channels)[j]->getName().c_str()); } ZapitChannelList Channels; Channels.clear(); if (mode == CZapitClient::MODE_RADIO) { for (tallchans_iterator it = allchans.begin(); it != allchans.end(); it++) if (it->second.getServiceType() == ST_DIGITAL_RADIO_SOUND_SERVICE) Channels.push_back(&(it->second)); } else { for (tallchans_iterator it = allchans.begin(); it != allchans.end(); it++) if (it->second.getServiceType() != ST_DIGITAL_RADIO_SOUND_SERVICE) Channels.push_back(&(it->second)); } sort(Channels.begin(), Channels.end(), CmpChannelByChName()); for (int i = 0; i < (int) Channels.size(); i++) { if (!g_bouquetManager->existsChannelInBouquet(selected, Channels[i]->channel_id)){ hh->ParamList["all_channels"] += string_printf("<option value=\"" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "\">%s</option>\n", Channels[i]->channel_id, Channels[i]->getName().c_str()); } } return ""; } else return "No Bouquet selected"; }
bool CZapitBouquet::getChannels(ZapitChannelList &list, bool tv, int flags) { list.clear(); ZapitChannelList *current = tv ? &tvChannels : &radioChannels; for (ZapitChannelList::iterator it = current->begin(); it != current->end(); ++it) { if ((*it)->flags & flags) list.push_back(*it); } return (!list.empty()); }
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++; }
//------------------------------------------------------------------------- // func: Bouquet Edit //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_set_bouquet_edit_form(CyhookHandler *hh, std::string) { if (!(hh->ParamList["selected"].empty())) { int selected = atoi(hh->ParamList["selected"].c_str()) - 1; int mode = NeutrinoAPI->Zapit->getMode(); ZapitChannelList* channels = mode == CZapitClient::MODE_TV ? &(g_bouquetManager->Bouquets[selected]->tvChannels) : &(g_bouquetManager->Bouquets[selected]->radioChannels); for(int j = 0; j < (int) channels->size(); j++) { hh->ParamList["bouquet_channels"] += string_printf("<option value=\"" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "\">%s</option>\n", (*channels)[j]->channel_id, (*channels)[j]->getName().c_str()); } ZapitChannelList Channels; Channels.clear(); if (mode == CZapitClient::MODE_RADIO) CServiceManager::getInstance()->GetAllRadioChannels(Channels); else CServiceManager::getInstance()->GetAllTvChannels(Channels); sort(Channels.begin(), Channels.end(), CmpChannelByChName()); for (int i = 0; i < (int) Channels.size(); i++) { if (!g_bouquetManager->existsChannelInBouquet(selected, Channels[i]->channel_id)){ hh->ParamList["all_channels"] += string_printf("<option value=\"" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "\">%s</option>\n", Channels[i]->channel_id, Channels[i]->getName().c_str()); } } return ""; } else return "No Bouquet selected"; }
//------------------------------------------------------------------------- // TODO: clean up code // use templates? //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_get_bouquets_with_epg(CyhookHandler *hh, std::string para) { int BouquetNr = 0; std::string abnumber, tmp,yresult; ZapitChannelList channels; //int num; int mode = NeutrinoAPI->Zapit->getMode(); ySplitString(para," ",abnumber, tmp); if(abnumber != "") BouquetNr = atoi(abnumber.c_str()); if (BouquetNr > 0) { BouquetNr--; #if 0 channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[BouquetNr]->radioChannels : g_bouquetManager->Bouquets[BouquetNr]->tvChannels; num = 1 + (mode == CZapitClient::MODE_RADIO ? g_bouquetManager->radioChannelsBegin().getNrofFirstChannelofBouquet(BouquetNr) : g_bouquetManager->tvChannelsBegin().getNrofFirstChannelofBouquet(BouquetNr)) ; #endif if (mode == CZapitClient::MODE_RADIO) g_bouquetManager->Bouquets[BouquetNr]->getRadioChannels(channels); else g_bouquetManager->Bouquets[BouquetNr]->getTvChannels(channels); } else { CBouquetManager::ChannelIterator cit = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->radioChannelsBegin() : g_bouquetManager->tvChannelsBegin(); for (; !(cit.EndOfChannels()); cit++) channels.push_back(*cit); //num = 1; } NeutrinoAPI->GetChannelEvents(); int i = 1; char classname; t_channel_id current_channel = CZapit::getInstance()->GetCurrentChannelID(); int prozent = 100; CSectionsdClient::responseGetCurrentNextInfoChannelID currentNextInfo; std::string timestr; bool have_logos = false; if(hh->WebserverConfigList["Tuxbox.LogosURL"] != "") have_logos = true; for(int j = 0; j < (int) channels.size(); j++) { CZapitChannel * channel = channels[j]; CChannelEvent *event; event = NeutrinoAPI->ChannelListEvents[channel->channel_id]; classname = (i++ & 1) ? 'a' : 'b'; if (channel->channel_id == current_channel) classname = 'c'; std::string bouquetstr = (BouquetNr >= 0) ? ("&bouquet=" + itoa(BouquetNr)) : ""; yresult += "<tr>"; if(have_logos) yresult += string_printf("<td class=\"%c\" width=\"44\" rowspan=\"2\"><a href=\"javascript:do_zap('" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "')\"><img class=\"channel_logo\" src=\"%s\"/></a></td>", classname, channel->channel_id, (NeutrinoAPI->getLogoFile(hh->WebserverConfigList["Tuxbox.LogosURL"], channel->channel_id)).c_str()); /* timer slider */ if(event && event->duration > 0) { prozent = 100 * (time(NULL) - event->startTime) / event->duration; yresult += string_printf("<td class=\"%c\"><table border=\"0\" cellspacing=\"0\" cellpadding=\"3\"><tr><td>\n" "\t<table border=\"0\" rules=\"none\" class=\"cslider cslider_table\">" "<tr>" "<td class=\"cslider cslider_used\" width=\"%d\"></td>" "<td class=\"cslider cslider_free\" width=\"%d\"></td>" "</tr>" "</table>\n</td>\n" , classname , (prozent / 10) * 3 , (10 - (prozent / 10))*3 ); } else { yresult += string_printf("<td class=\"%c\"><table border=\"0\" cellspacing=\"0\" cellpadding=\"3\"><tr><td>\n" "\t<table border=\"0\" rules=\"none\" class=\"cslider cslider_table\">" "<tr>" "<td class=\"cslider cslider_noepg\"></td>" "</tr>" "</table>\n</td>\n" , classname ); } /* channel name and buttons */ yresult += string_printf("<td>\n%s<a class=\"clist\" href=\"javascript:do_zap('" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "')\"> %d. %s%s</a> <a href=\"javascript:do_epg('" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "','" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "')\">%s</a>\n", ((channel->channel_id == current_channel) ? "<a name=\"akt\"></a>" : " "), channel->channel_id, channel->number /* num + j */, channel->getName().c_str(), (channel->getServiceType() == ST_NVOD_REFERENCE_SERVICE) ? " (NVOD)" : "", channel->channel_id, channel->channel_id & 0xFFFFFFFFFFFFULL, ((NeutrinoAPI->ChannelListEvents[channel->channel_id]) ? "<img src=\"/images/elist.gif\" alt=\"Program preview\" style=\"border: 0px\" />" : "")); if (channel->channel_id == current_channel) yresult += string_printf("\n <a href=\"javascript:do_streaminfo()\"><img src=\"/images/streaminfo.png\" alt=\"Streaminfo\" style=\"border: 0px\" /></a>"); yresult += string_printf("</td></tr></table>\n</td>\n</tr>\n"); if (channel->getServiceType() == ST_NVOD_REFERENCE_SERVICE) { CSectionsdClient::NVODTimesList nvod_list; if (CEitManager::getInstance()->getNVODTimesServiceKey(channel->channel_id, nvod_list)) { CZapitClient::subServiceList subServiceList; for (CSectionsdClient::NVODTimesList::iterator ni = nvod_list.begin(); ni != nvod_list.end(); ++ni) { CZapitClient::commandAddSubServices cmd; CEPGData epg; // Byte Sequence by ntohs cmd.original_network_id = ntohs(ni->original_network_id); cmd.service_id = ntohs(ni->service_id); cmd.transport_stream_id = ntohs(ni->transport_stream_id); t_channel_id channel_id = CREATE_CHANNEL_ID(cmd.service_id, cmd.original_network_id, cmd.transport_stream_id); timestr = timeString(ni->zeit.startzeit); // FIXME: time is wrong (at least on little endian)! CEitManager::getInstance()->getActualEPGServiceKey(channel_id, &epg); // FIXME: der scheissendreck geht nit!!! yresult += string_printf("<tr>\n<td align=\"left\" style=\"width: 31px\" class=\"%cepg\"> </td>", classname); yresult += string_printf("<td class=\"%cepg\">%s ", classname, timestr.c_str()); yresult += string_printf("%s<a href=\"javascript:do_zap('" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS ")'\">%04x:%04x:%04x %s</a>", // FIXME: get name (channel_id == current_channel) ? "<a name=\"akt\"></a>" : " ", channel_id, bouquetstr.c_str(), cmd.transport_stream_id, cmd.original_network_id, cmd.service_id, epg.title.c_str()); yresult += string_printf("</td>\n</tr>"); subServiceList.push_back(cmd); } if (!(subServiceList.empty())) NeutrinoAPI->Zapit->setSubServices(subServiceList); } } else if ((event = NeutrinoAPI->ChannelListEvents[channel->channel_id])) { bool has_current_next = true; CEitManager::getInstance()->getCurrentNextServiceKey(channel->channel_id, currentNextInfo); timestr = timeString(event->startTime); yresult += string_printf("<tr><td class=\"%cepg\">",classname); yresult += string_printf("%s %s " "<span style=\"font-size: 8pt; white-space: nowrap\">(%ld von %d min, %d%%)</span>" , timestr.c_str() , event->description.c_str() , (time(NULL) - event->startTime)/60 , event->duration / 60,prozent); if ((has_current_next) && (currentNextInfo.flags & CSectionsdClient::epgflags::has_next)) { timestr = timeString(currentNextInfo.next_zeit.startzeit); yresult += string_printf("<br />%s %s", timestr.c_str(), currentNextInfo.next_name.c_str()); } yresult += string_printf("</td></tr>\n"); } else yresult += string_printf("<tr style=\"height: 2px\"><td></td></tr>\n"); } return yresult; }
int CBouquetList::doMenu() { int i = 0; int select = -1; static int old_selected = 0; int ret = menu_return::RETURN_NONE; signed int bouquet_id; char cnt[5]; CZapitBouquet * tmp, * zapitBouquet; ZapitChannelList* channels; if(!Bouquets.size() || g_settings.minimode) return 0; zapitBouquet = Bouquets[selected]->zapitBouquet; /* zapitBouquet not NULL only on real bouquets, not on virtual SAT or HD */ if(!zapitBouquet) return 0; CMenuWidget* menu = new CMenuWidget(LOCALE_CHANNELLIST_EDIT, NEUTRINO_ICON_SETTINGS); CMenuSelectorTarget * selector = new CMenuSelectorTarget(&select); sprintf(cnt, "%d", i); if(!zapitBouquet->bUser) { menu->addItem(new CMenuForwarder(LOCALE_FAVORITES_COPY, true, NULL, selector, cnt, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE), old_selected == i ++); ret = menu->exec(NULL, ""); delete menu; delete selector; printf("CBouquetList::doMenu: %d selected\n", select); if(select >= 0) { old_selected = select; switch(select) { case 0: hide(); bouquet_id = g_bouquetManager->existsUBouquet(Bouquets[selected]->channelList->getName()); if(bouquet_id < 0) { tmp = g_bouquetManager->addBouquet(Bouquets[selected]->channelList->getName(), true); } else tmp = g_bouquetManager->Bouquets[bouquet_id]; channels = &zapitBouquet->tvChannels; for(int i = 0; i < (int) channels->size(); i++) tmp->addService((*channels)[i]); return 1; break; default: break; } } } else { menu->addItem(new CMenuForwarder(LOCALE_BOUQUETEDITOR_DELETE, true, NULL, selector, cnt, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE), old_selected == i ++); ret = menu->exec(NULL, ""); delete menu; delete selector; printf("CBouquetList::doMenu: %d selected\n", select); if(select >= 0) { old_selected = select; switch(select) { case 0: hide(); bouquet_id = g_bouquetManager->existsUBouquet(Bouquets[selected]->channelList->getName()); if(bouquet_id >= 0) { g_bouquetManager->deleteBouquet(bouquet_id); return 1; } break; default: break; } } } return 0; }
int CBouquetList::doMenu() { int i = 0, ret = 0; int select = -1; static int old_selected = 0; signed int bouquet_id; char cnt[5]; CZapitBouquet * tmp, * zapitBouquet; ZapitChannelList* channels; if(Bouquets.empty() || g_settings.minimode) return 0; zapitBouquet = Bouquets[selected]->zapitBouquet; /* zapitBouquet not NULL only on real bouquets, satellitePosition is set for providers or SAT */ if(!zapitBouquet && Bouquets[selected]->satellitePosition == INVALID_SAT_POSITION) return 0; CMenuWidget* menu = new CMenuWidget(LOCALE_CHANNELLIST_EDIT, NEUTRINO_ICON_SETTINGS); menu->enableFade(false); menu->enableSaveScreen(true); CMenuSelectorTarget * selector = new CMenuSelectorTarget(&select); int old_epg = zapitBouquet ? zapitBouquet->bScanEpg : 0; int old_ci = zapitBouquet ? zapitBouquet->bUseCI : 0; sprintf(cnt, "%d", i); /* FIXME menu centered different than bouquet list ??? */ /* provider bouquet */ if (zapitBouquet && !zapitBouquet->bUser) { menu->addItem(new CMenuForwarder(LOCALE_FAVORITES_COPY, true, NULL, selector, cnt, CRCInput::RC_blue), old_selected == i ++); if (!zapitBouquet->bWebtv && g_settings.epg_scan == CEpgScan::SCAN_SEL) menu->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_EPG_SCAN, &zapitBouquet->bScanEpg, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); if (!zapitBouquet->bWebtv) menu->addItem(new CMenuOptionChooser(LOCALE_CI_USE, &zapitBouquet->bUseCI, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); menu->exec(NULL, ""); delete menu; delete selector; printf("CBouquetList::doMenu: %d selected\n", select); if (old_epg != zapitBouquet->bScanEpg) { save_bouquets = true; CNeutrinoApp::getInstance()->MarkBouquetsChanged(); ret = -1; } if (old_ci != zapitBouquet->bUseCI) { channels = &zapitBouquet->tvChannels; for(int li = 0; li < (int) channels->size(); li++) (*channels)[li]->bUseCI = zapitBouquet->bUseCI; channels = &zapitBouquet->radioChannels; for(int li = 0; li < (int) channels->size(); li++) (*channels)[li]->bUseCI = zapitBouquet->bUseCI; CServiceManager::getInstance()->SetCIFilter(); save_bouquets = true; CNeutrinoApp::getInstance()->MarkBouquetsChanged(); ret = -1; } if(select >= 0) { bool added = false; old_selected = select; switch(select) { case 0: // copy to favorites hide(); bouquet_id = g_bouquetManager->existsUBouquet(Bouquets[selected]->channelList->getName()); if(bouquet_id < 0) { tmp = g_bouquetManager->addBouquet(Bouquets[selected]->channelList->getName(), true); bouquet_id = g_bouquetManager->existsUBouquet(Bouquets[selected]->channelList->getName()); } else tmp = g_bouquetManager->Bouquets[bouquet_id]; if(bouquet_id < 0) return 0; channels = &zapitBouquet->tvChannels; for(int li = 0; li < (int) channels->size(); li++) { if (!g_bouquetManager->existsChannelInBouquet(bouquet_id, ((*channels)[li])->getChannelID())) { added = true; tmp->addService((*channels)[li]); } } channels = &zapitBouquet->radioChannels; for(int li = 0; li < (int) channels->size(); li++) { if (!g_bouquetManager->existsChannelInBouquet(bouquet_id, ((*channels)[li])->getChannelID())) { added = true; tmp->addService((*channels)[li]); } } if (added) { CNeutrinoApp::getInstance()->MarkFavoritesChanged(); CNeutrinoApp::getInstance()->MarkChannelsInit(); return 1; } break; default: break; } } } else { /* user or satellite bouquet */ menu->addItem(new CMenuForwarder(LOCALE_BOUQUETEDITOR_DELETE, true, NULL, selector, cnt, CRCInput::RC_red), old_selected == i ++); if (zapitBouquet && !zapitBouquet->bWebtv && (g_settings.epg_scan == CEpgScan::SCAN_SEL)) menu->addItem(new CMenuOptionChooser(LOCALE_MISCSETTINGS_EPG_SCAN, &zapitBouquet->bScanEpg, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); if (zapitBouquet && !zapitBouquet->bWebtv) menu->addItem(new CMenuOptionChooser(LOCALE_CI_USE, &zapitBouquet->bUseCI, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); menu->exec(NULL, ""); delete menu; delete selector; if (zapitBouquet && (old_epg != zapitBouquet->bScanEpg)) { save_bouquets = true; CNeutrinoApp::getInstance()->MarkFavoritesChanged(); ret = -1; } if (zapitBouquet && (old_ci != zapitBouquet->bUseCI)) { channels = &zapitBouquet->tvChannels; for(int li = 0; li < (int) channels->size(); li++) (*channels)[li]->bUseCI = zapitBouquet->bUseCI; channels = &zapitBouquet->radioChannels; for(int li = 0; li < (int) channels->size(); li++) (*channels)[li]->bUseCI = zapitBouquet->bUseCI; CServiceManager::getInstance()->SetCIFilter(); save_bouquets = true; CNeutrinoApp::getInstance()->MarkFavoritesChanged(); ret = -1; } printf("CBouquetList::doMenu: %d selected\n", select); if(select >= 0) { old_selected = select; int result = ShowMsg ( LOCALE_BOUQUETEDITOR_DELETE, Bouquets[selected]->channelList->getName(), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo ); if(result != CMessageBox::mbrYes) return 0; if (zapitBouquet) { bouquet_id = g_bouquetManager->existsUBouquet(Bouquets[selected]->channelList->getName()); if(bouquet_id >= 0) { g_bouquetManager->deleteBouquet(bouquet_id); CNeutrinoApp::getInstance()->MarkFavoritesChanged(); CNeutrinoApp::getInstance()->MarkChannelsInit(); return 1; } } else { CServiceManager::getInstance()->RemovePosition(Bouquets[selected]->satellitePosition); g_bouquetManager->loadBouquets(); g_bouquetManager->deletePosition(Bouquets[selected]->satellitePosition); CNeutrinoApp::getInstance()->MarkChannelsChanged(); CNeutrinoApp::getInstance()->MarkBouquetsChanged(); CNeutrinoApp::getInstance()->MarkChannelsInit(); return 1; } } } return ret; }
void CBouquetManager::writeChannels(FILE * bouq_fd, ZapitChannelList &list) { for(zapit_list_it_t it = list.begin(); it != list.end(); it++) (*it)->dumpBouquetXml(bouq_fd); }