int CSubChannelSelectMenu::doMenu() { CMenuWidget SubChannelSelector(g_RemoteControl->are_subchannels ? LOCALE_NVODSELECTOR_SUBSERVICE : LOCALE_NVODSELECTOR_HEAD, NEUTRINO_ICON_VIDEO, 350); SubChannelSelector.addIntroItems(NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, CMenuWidget::BTN_TYPE_CANCEL); int count = 0; char nvod_id[5]; for (CSubServiceListSorted::iterator e = g_RemoteControl->subChannels.begin(); e != g_RemoteControl->subChannels.end(); ++e) { sprintf(nvod_id, "%d", count); if (!g_RemoteControl->are_subchannels) { char nvod_time_a[50], nvod_time_e[50], nvod_time_x[50]; char nvod_s[100]; struct tm *tmZeit; tmZeit = localtime(&e->startzeit); sprintf(nvod_time_a, "%02d:%02d", tmZeit->tm_hour, tmZeit->tm_min); time_t endtime = e->startzeit + e->dauer; tmZeit = localtime(&endtime); sprintf(nvod_time_e, "%02d:%02d", tmZeit->tm_hour, tmZeit->tm_min); time_t jetzt = time(NULL); if (e->startzeit > jetzt) { int mins=(e->startzeit- jetzt)/ 60; sprintf(nvod_time_x, g_Locale->getText(LOCALE_NVOD_STARTING), mins); } else if (e->startzeit <= jetzt && jetzt < endtime) { int proz = (jetzt - e->startzeit) * 100 / e->dauer; sprintf(nvod_time_x, g_Locale->getText(LOCALE_NVOD_PERCENTAGE), proz); } else nvod_time_x[0] = 0; sprintf(nvod_s, "%s - %s %s", nvod_time_a, nvod_time_e, nvod_time_x); SubChannelSelector.addItem(new CMenuForwarderNonLocalized(nvod_s, true, NULL, this, nvod_id), count == g_RemoteControl->selected_subchannel); } else { if (count == 0) SubChannelSelector.addItem(new CMenuForwarderNonLocalized(Latin1_to_UTF8(e->subservice_name).c_str(), true, NULL, this, nvod_id, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); else SubChannelSelector.addItem(new CMenuForwarderNonLocalized(Latin1_to_UTF8(e->subservice_name).c_str(), true, NULL, this, nvod_id, CRCInput::convertDigitToKey(count)), count == g_RemoteControl->selected_subchannel); } count++; } if (g_RemoteControl->are_subchannels) { SubChannelSelector.addItem(GenericMenuSeparatorLine); SubChannelSelector.addItem(new CMenuOptionChooser(LOCALE_NVODSELECTOR_DIRECTORMODE, &g_RemoteControl->director_mode, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); } return SubChannelSelector.exec(NULL, ""); }
std::string Latin1_to_UTF8(const std::string & s) { return Latin1_to_UTF8(s.c_str()); }
std::string CVCRControl::CFileAndServerDevice::getMovieInfoString(const t_channel_id channel_id, const event_id_t epgid, const time_t epg_time) { std::string extMessage; CMovieInfo cMovieInfo; MI_MOVIE_INFO movieInfo; std::string info1, info2; cMovieInfo.clearMovieInfo(&movieInfo); CZapitClient::responseGetPIDs pids; g_Zapit->getPIDS (pids); CZapitClient::CCurrentServiceInfo si = g_Zapit->getCurrentServiceInfo (); std::string tmpstring = g_Zapit->getChannelName(channel_id); if (tmpstring.empty()) movieInfo.epgChannel = "unknown"; else movieInfo.epgChannel = ZapitTools::UTF8_to_UTF8XML(tmpstring.c_str()); tmpstring = "not available"; if (epgid != 0) { //#define SHORT_EPG #ifdef SHORT_EPG CSectionsdClient sdc; CShortEPGData epgdata; if (sdc.getEPGidShort(epgid, &epgdata)) { #warning fixme sectionsd should deliver data in UTF-8 format tmpstring = Latin1_to_UTF8(epgdata.title); info1 = Latin1_to_UTF8(epgdata.info1); info2 = Latin1_to_UTF8(epgdata.info2); } #else CSectionsdClient sdc; CEPGData epgdata; if (sdc.getEPGid(epgid, epg_time,&epgdata)) { #warning fixme sectionsd should deliver data in UTF-8 format tmpstring = Latin1_to_UTF8(epgdata.title); info1 = Latin1_to_UTF8(epgdata.info1); info2 = Latin1_to_UTF8(epgdata.info2); movieInfo.parentalLockAge = epgdata.fsk; if(epgdata.contentClassification.size() > 0 ) movieInfo.genreMajor = epgdata.contentClassification[0]; movieInfo.length = epgdata.epg_times.dauer / 60; printf("fsk:%d, Genre:%d, Dauer: %d\r\n",movieInfo.parentalLockAge,movieInfo.genreMajor,movieInfo.length); } #endif } movieInfo.epgTitle = ZapitTools::UTF8_to_UTF8XML(tmpstring.c_str()); movieInfo.epgId = channel_id; movieInfo.epgInfo1 = ZapitTools::UTF8_to_UTF8XML(info1.c_str()); movieInfo.epgInfo2 = ZapitTools::UTF8_to_UTF8XML(info2.c_str()); movieInfo.epgEpgId = epgid ; movieInfo.epgMode = g_Zapit->getMode(); movieInfo.epgVideoPid = si.vpid; EPG_AUDIO_PIDS audio_pids; // super hack :-), der einfachste weg an die apid descriptions ranzukommen g_RemoteControl->current_PIDs = pids; g_RemoteControl->processAPIDnames(); for(unsigned int i= 0; i< pids.APIDs.size(); i++) { audio_pids.epgAudioPid = pids.APIDs[i].pid; audio_pids.epgAudioPidName = ZapitTools::UTF8_to_UTF8XML(g_RemoteControl->current_PIDs.APIDs[i].desc); movieInfo.audioPids.push_back(audio_pids); } movieInfo.epgVTXPID = si.vtxtpid; cMovieInfo.encodeMovieInfoXml(&extMessage,movieInfo); movieInfo.audioPids.clear(); return extMessage; }
std::string CVCRControl::CFileAndServerDevice::getCommandString(const CVCRCommand command, const t_channel_id channel_id, const event_id_t epgid, const std::string& epgTitle, unsigned char apids) { char tmp[40]; std::string apids_selected; const char * extCommand; // std::string extAudioPID= "error"; std::string info1, info2; std::string extMessage = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<neutrino commandversion=\"1\">\n\t<record command=\""; switch(command) { case CMD_VCR_RECORD: extCommand = "record"; break; case CMD_VCR_STOP: extCommand = "stop"; break; case CMD_VCR_PAUSE: extCommand = "pause"; break; case CMD_VCR_RESUME: extCommand = "resume"; break; case CMD_VCR_AVAILABLE: extCommand = "available"; break; case CMD_VCR_UNKNOWN: default: extCommand = "unknown"; printf("[CVCRControl] Unknown Command\n"); } extMessage += extCommand; extMessage += "\">\n" "\t\t<channelname>"; CZapitClient::responseGetPIDs pids; g_Zapit->getPIDS (pids); CZapitClient::CCurrentServiceInfo si = g_Zapit->getCurrentServiceInfo (); APIDList apid_list; getAPIDs(apids,apid_list); apids_selected=""; for(APIDList::iterator it = apid_list.begin(); it != apid_list.end(); it++) { if(it != apid_list.begin()) apids_selected += " "; sprintf(tmp, "%u", it->apid); apids_selected += tmp; } std::string tmpstring = g_Zapit->getChannelName(channel_id); if (tmpstring.empty()) extMessage += "unknown"; else extMessage += ZapitTools::UTF8_to_UTF8XML(tmpstring.c_str()); extMessage += "</channelname>\n\t\t<epgtitle>"; // CSectionsdClient::responseGetCurrentNextInfoChannelID current_next; tmpstring = "not available"; if (epgid != 0) { CSectionsdClient sdc; CShortEPGData epgdata; if (sdc.getEPGidShort(epgid, &epgdata)) { #warning fixme sectionsd should deliver data in UTF-8 format tmpstring = Latin1_to_UTF8(epgdata.title); info1 = Latin1_to_UTF8(epgdata.info1); info2 = Latin1_to_UTF8(epgdata.info2); } else if (!epgTitle.empty()) { tmpstring = epgTitle; } } else if (!epgTitle.empty()) { tmpstring = epgTitle; } extMessage += ZapitTools::UTF8_to_UTF8XML(tmpstring.c_str()); extMessage += "</epgtitle>\n\t\t<id>"; sprintf(tmp, PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS, channel_id); extMessage += tmp; extMessage += "</id>\n\t\t<info1>"; extMessage += ZapitTools::UTF8_to_UTF8XML(info1.c_str()); extMessage += "</info1>\n\t\t<info2>"; extMessage += ZapitTools::UTF8_to_UTF8XML(info2.c_str()); extMessage += "</info2>\n\t\t<epgid>"; sprintf(tmp, "%llu", epgid); extMessage += tmp; extMessage += "</epgid>\n\t\t<mode>"; sprintf(tmp, "%d", g_Zapit->getMode()); extMessage += tmp; extMessage += "</mode>\n\t\t<videopid>"; sprintf(tmp, "%u", si.vpid); extMessage += tmp; extMessage += "</videopid>\n\t\t<audiopids selected=\""; extMessage += apids_selected; extMessage += "\">\n"; // super hack :-), der einfachste weg an die apid descriptions ranzukommen g_RemoteControl->current_PIDs = pids; g_RemoteControl->processAPIDnames(); for(unsigned int i= 0; i< pids.APIDs.size(); i++) { extMessage += "\t\t\t<audio pid=\""; sprintf(tmp, "%u", pids.APIDs[i].pid); extMessage += tmp; extMessage += "\" name=\""; extMessage += ZapitTools::UTF8_to_UTF8XML(g_RemoteControl->current_PIDs.APIDs[i].desc); extMessage += "\"/>\n"; } extMessage += "\t\t</audiopids>\n" "\t\t<vtxtpid>"; sprintf(tmp, "%u", si.vtxtpid); extMessage += tmp; extMessage += "</vtxtpid>\n" "\t</record>\n" "</neutrino>\n"; return extMessage; }
std::string CVCRControl::CFileAndServerDevice::getMovieInfoString(const t_channel_id channel_id, const event_id_t epgid, const time_t epg_time, const std::string& epgTitle, unsigned char apids, const bool save_vtxt_pid, const bool save_sub_pids) { std::string extMessage; CMovieInfo cMovieInfo; MI_MOVIE_INFO movieInfo; std::string info1, info2; event_id_t epg_id = epgid; cMovieInfo.clearMovieInfo(&movieInfo); CZapitClient::responseGetPIDs pids; g_Zapit->getPIDS (pids); CZapitClient::CCurrentServiceInfo si = g_Zapit->getCurrentServiceInfo (); std::string tmpstring = g_Zapit->getChannelName(channel_id); if (tmpstring.empty()) movieInfo.epgChannel = "unknown"; else movieInfo.epgChannel = tmpstring; tmpstring = (epgTitle.empty()) ? "not available" : Latin1_to_UTF8(epgTitle); if (epg_id != 0) { //#define SHORT_EPG #ifdef SHORT_EPG CShortEPGData epgdata; if (g_Sectionsd->getEPGidShort(epg_id, &epgdata)) { #warning fixme sectionsd should deliver data in UTF-8 format tmpstring = Latin1_to_UTF8(epgdata.title); info1 = Latin1_to_UTF8(epgdata.info1); info2 = Latin1_to_UTF8(epgdata.info2); } #else CEPGData epgdata; bool has_epgdata = g_Sectionsd->getEPGid(epg_id, epg_time, &epgdata); if (!has_epgdata) { has_epgdata = g_Sectionsd->getActualEPGServiceKey(channel_id, &epgdata); if (has_epgdata && !epgTitle.empty() && epgTitle != epgdata.title) has_epgdata = false; if (has_epgdata) epg_id = epgdata.eventID; } if (has_epgdata) { #warning fixme sectionsd should deliver data in UTF-8 format tmpstring = Latin1_to_UTF8(epgdata.title); info1 = Latin1_to_UTF8(epgdata.info1); info2 = Latin1_to_UTF8(epgdata.info2); movieInfo.parentalLockAge = epgdata.fsk; if (!epgdata.contentClassification.empty()) movieInfo.genreMajor = epgdata.contentClassification[0]; movieInfo.length = epgdata.epg_times.dauer / 60; printf("fsk:%d, Genre:%d, Dauer: %d\r\n",movieInfo.parentalLockAge,movieInfo.genreMajor,movieInfo.length); } #endif } movieInfo.epgTitle = tmpstring; movieInfo.epgId = channel_id; movieInfo.epgInfo1 = info1; movieInfo.epgInfo2 = info2; movieInfo.epgEpgId = epg_id; movieInfo.epgMode = g_Zapit->getMode(); movieInfo.epgVideoPid = si.vpid; EPG_AUDIO_PIDS audio_pids; // super hack :-), der einfachste weg an die apid descriptions ranzukommen g_RemoteControl->current_EPGid = epg_id; g_RemoteControl->current_PIDs = pids; g_RemoteControl->processAPIDnames(); APIDList apid_list; getAPIDs(apids,apid_list); for(APIDList::iterator it = apid_list.begin(); it != apid_list.end(); ++it) { audio_pids.epgAudioPid = it->apid; audio_pids.epgAudioPidName = g_RemoteControl->current_PIDs.APIDs[it->index].desc; movieInfo.audioPids.push_back(audio_pids); } if (save_vtxt_pid) movieInfo.epgVTXPID = si.vtxtpid; if (save_sub_pids) { SUB_PIDS sub_pids; for (unsigned int i = 0; i < pids.SubPIDs.size(); i++) { sub_pids.subPid = pids.SubPIDs[i].pid; sub_pids.subPage = pids.SubPIDs[i].composition_page; sub_pids.subName = getISO639Description(pids.SubPIDs[i].desc); movieInfo.subPids.push_back(sub_pids); } } cMovieInfo.encodeMovieInfoXml(&extMessage,movieInfo); return extMessage; }