diff --git a/data/cables.xml b/data/cables.xml index ea6f28f32..6ea231499 100644 --- a/data/cables.xml +++ b/data/cables.xml @@ -1417,6 +1417,7 @@ + diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 584c118b7..22d576738 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -1039,6 +1039,7 @@ menu.hint_record_data_vtxt Teletext-Spur zu Aufnahme hinzufügen menu.hint_record_dir Wählen Sie das Aufnahmeverzeichnis menu.hint_record_end Wählen Sie zwischen maximaler Aufnahmezeit oder einem Aufnahmeende anhand der EPG-Daten menu.hint_record_slow_warn Zeige Warnung, wenn der Aufnahmepuffer zu überlaufen droht +menu.hint_record_startstop_msg Schaltet die Meldung bei Aufnahmestart/ende ein oder aus. menu.hint_record_tdir Wählen Sie ein Verzeichnis für Ihre Timeshift-Aufnahmen im temporären Timeshift-Modus menu.hint_record_time Geben Sie eine maximale Aufnahmezeit in Stunden ein, wenn Sie die Aufnahme nicht vorzeitig stoppen menu.hint_record_timeafter Stellen Sie die Nachlaufzeit für Timer-Aufnahmen ein\nEin Wert von 2 beendet die Aufnahme 2 Minuten nach dem Sendungsende @@ -1657,6 +1658,7 @@ rclock.title Fernbedienung sperren rclock.unlockmsg Fernbedienung reaktiviert... recording.is_running Folgende Aufnahme läuft bereits! Neue Aufnahme starten? recording.start Starte Aufnahme, bitte warten...! +recording.startstop_msg Meldung bei Aufnahme Start/Ende recording.stop Beende Aufnahme, bitte warten...! recording.time_hour Stunde recording.time_hours Stunden diff --git a/data/locale/english.locale b/data/locale/english.locale index 569fd7169..acd442a5c 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -718,6 +718,7 @@ lcdmenu.dim_brightness Brightness after dim timeout lcdmenu.dim_time Dim timeout lcdmenu.head VFD Settings lcdmenu.lcdcontroler Brightness +lcdmenu.scroll Enable text scroll lcdmenu.statusline status line lcdmenu.statusline.both volume / playtime lcdmenu.statusline.playtime playtime @@ -1039,6 +1040,7 @@ menu.hint_record_data_vtxt VideoText stream menu.hint_record_dir Select directory to store recordings menu.hint_record_end Stop direct record after maximal time or after current event end time menu.hint_record_slow_warn Show warning, when record buffer is close to overflow +menu.hint_record_startstop_msg Turns the message when recording start/end on or off. menu.hint_record_tdir Select directory to save timeshift recordings\nin temporary timeshift mode menu.hint_record_time Record time before stop when\nusing direct record with record button menu.hint_record_timeafter Stop record after event end\nin minutes @@ -1172,6 +1174,7 @@ menu.hint_vfd_brightnessstandby Brightness in soft-standby mode menu.hint_vfd_defaults Restore default brightness values menu.hint_vfd_dimtime Auto-dim time, in seconds menu.hint_vfd_infoline Choose what to display in main VFD line +menu.hint_vfd_scroll Enable or disable text scrolling on VFD menu.hint_vfd_statusline Choose what to display in short\nVFD status line menu.hint_video Video output, resolution, format\nAspect ratio, fast mode switch options menu.hint_video_43mode Display mode for 4:3 content\non 16:9 TV @@ -1657,6 +1660,7 @@ rclock.title Lock Remote Control rclock.unlockmsg Remote control reactivated. recording.is_running This channel already recording. Start new record? recording.start Start recording, please wait...! +recording.startstop_msg Message when recording is start/stop recording.stop Stop recording, please wait...! recording.time_hour hour recording.time_hours hours diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 8962b183d..6d8a8f6b1 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -148,7 +148,7 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel) time_t msg_start_time = time(0); CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_RECORDING_START)); - if (!(autoshift && g_settings.auto_timeshift)) + if ((!(autoshift && g_settings.auto_timeshift)) && g_settings.recording_startstop_msg) hintBox.paint(); tsfile = std::string(filename) + ".ts"; @@ -255,7 +255,7 @@ bool CRecordInstance::Stop(bool remove_event) recMovieInfo->length = (end_time - start_time + 30) / 60; CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, rec_stop_msg.c_str()); - if (!(autoshift && g_settings.auto_timeshift)) + if ((!(autoshift && g_settings.auto_timeshift)) && g_settings.recording_startstop_msg) hintBox.paint(); printf("%s: channel %" PRIx64 " recording_id %d\n", __func__, channel_id, recording_id); @@ -559,7 +559,17 @@ void CRecordInstance::FillMovieInfo(CZapitChannel * channel, APIDList & apid_lis tmpstring = "not available"; if (epgid != 0) { CEPGData epgdata; - if (CEitManager::getInstance()->getEPGid(epgid, epg_time, &epgdata)) { + bool epg_ok = CEitManager::getInstance()->getEPGid(epgid, epg_time, &epgdata); + if(!epg_ok){//if old epgid removed check currurrent epgid + epg_ok = CEitManager::getInstance()->getActualEPGServiceKey(channel_id, &epgdata ); + + if(epg_ok && !epgTitle.empty()){ + std::string tmp_title = epgdata.title; + if(epgTitle != tmp_title) + epg_ok = false; + } + } + if (epg_ok) { tmpstring = epgdata.title; info1 = epgdata.info1; info2 = epgdata.info2; @@ -571,6 +581,8 @@ void CRecordInstance::FillMovieInfo(CZapitChannel * channel, APIDList & apid_lis recMovieInfo->length = epgdata.epg_times.dauer / 60; printf("fsk:%d, Genre:%d, Dauer: %d\r\n",recMovieInfo->parentalLockAge,recMovieInfo->genreMajor,recMovieInfo->length); + } else if (!epgTitle.empty()) {//if old epgid removed + tmpstring = epgTitle; } } else if (!epgTitle.empty()) { tmpstring = epgTitle; diff --git a/src/driver/vfd.cpp b/src/driver/vfd.cpp index cf7063b78..e6bdd5d8a 100644 --- a/src/driver/vfd.cpp +++ b/src/driver/vfd.cpp @@ -41,6 +41,9 @@ #include #include +#include +#include + #include extern CRemoteControl * g_RemoteControl; /* neutrino.cpp */ @@ -697,29 +700,23 @@ void CVFD::ShowIcon(fp_icon icon, bool show) perror(show ? "IOC_FP_SET_ICON" : "IOC_FP_CLEAR_ICON"); } -void CVFD::ShowText(const char *str) +void CVFD::ShowText(const char * str) { - int len = strlen(str); - int i = 0, ret; + char flags[2] = { FP_FLAG_ALIGN_LEFT, 0 }; -printf("CVFD::ShowText: [%s]\n", str); - if (len > 0) - { - for (i = len; i > 0; i--) { - if (str[i - 1] != ' ') - break; - } - } + if (g_settings.lcd_scroll) + flags[0] |= FP_FLAG_SCROLL_ON | FP_FLAG_SCROLL_SIO | FP_FLAG_SCROLL_DELAY; - if (((int)strlen(text) == i && !strncmp(str, text, i)) || len > 255) + std::string txt = std::string(flags) + str; + txt = trim(txt); + printf("CVFD::ShowText: [%s]\n", txt.c_str() + 1); + + size_t len = txt.length(); + if (txt == text || len > 255) return; - strncpy(text, str, i); - text[i] = '\0'; - -//printf("****************************** CVFD::ShowText: %s\n", str); - //FIXME !! - ret = ioctl(fd, IOC_FP_SET_TEXT, len ? str : NULL); + text = txt; + int ret = ioctl(fd, IOC_FP_SET_TEXT, len > 1 ? txt.c_str() : NULL); if(ret < 0) perror("IOC_FP_SET_TEXT"); } diff --git a/src/driver/vfd.h b/src/driver/vfd.h index 4b3a5767e..82de21191 100644 --- a/src/driver/vfd.h +++ b/src/driver/vfd.h @@ -90,7 +90,7 @@ class CVFD unsigned int switch_name_time_cnt; int fd; int brightness; - char text[256]; + std::string text; void count_down(); diff --git a/src/gui/record_setup.cpp b/src/gui/record_setup.cpp index 71d000fb9..97812d6d7 100644 --- a/src/gui/record_setup.cpp +++ b/src/gui/record_setup.cpp @@ -233,6 +233,10 @@ int CRecordSetup::showRecordSetup() CMenuOptionChooser* slow_warn = new CMenuOptionChooser(LOCALE_RECORDINGMENU_SLOW_WARN, &g_settings.recording_slow_warning, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); slow_warn->setHint("", LOCALE_MENU_HINT_RECORD_SLOW_WARN); recordingSettings->addItem(slow_warn); + + CMenuOptionChooser* startstop_msg = new CMenuOptionChooser(LOCALE_RECORDING_STARTSTOP_MSG, &g_settings.recording_startstop_msg, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + startstop_msg->setHint("", LOCALE_MENU_HINT_RECORD_STARTSTOP_MSG); + recordingSettings->addItem(startstop_msg); } //template diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 112901e0c..fcaf29faa 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -34,6 +34,8 @@ #include #endif +#include + #include #include #include @@ -261,6 +263,9 @@ int CScanSetup::exec(CMenuTarget* parent, const std::string &actionKey) if (reloadhintBox) reloadhintBox->hide(); CNeutrinoApp::getInstance ()->SDTreloadChannels = false; + if(file_exists(CURRENTSERVICES_XML)){ + unlink(CURRENTSERVICES_XML); + } return res; } else if(actionKey == "satsetup") diff --git a/src/gui/vfd_setup.cpp b/src/gui/vfd_setup.cpp index 38579b051..d631578a3 100644 --- a/src/gui/vfd_setup.cpp +++ b/src/gui/vfd_setup.cpp @@ -149,6 +149,10 @@ int CVfdSetup::showSetup() vfds->addItem(oj); vfds->addItem(lcd_clock_channelname_menu); + oj = new CMenuOptionChooser(LOCALE_LCDMENU_SCROLL, &g_settings.lcd_scroll, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, vfd_enabled); + oj->setHint("", LOCALE_MENU_HINT_VFD_SCROLL); + vfds->addItem(oj); + int res = vfds->exec(NULL, ""); delete vfds; diff --git a/src/neutrino.cpp b/src/neutrino.cpp index d33f1cba5..efd9f6d3f 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -410,6 +410,7 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.backlight_tv = configfile.getInt32( "backlight_tv", 1); g_settings.backlight_standby = configfile.getInt32( "backlight_standby", 0); g_settings.backlight_deepstandby = configfile.getInt32( "backlight_deepstandby", 0); + g_settings.lcd_scroll = configfile.getInt32( "lcd_scroll", 1); g_settings.hdd_fs = configfile.getInt32( "hdd_fs", 0); g_settings.hdd_sleep = configfile.getInt32( "hdd_sleep", 120); @@ -648,6 +649,7 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.recording_epg_for_end = configfile.getBool("recording_epg_for_end" , true); g_settings.recording_save_in_channeldir = configfile.getBool("recording_save_in_channeldir" , false); g_settings.recording_slow_warning = configfile.getBool("recording_slow_warning" , true); + g_settings.recording_startstop_msg = configfile.getBool("recording_startstop_msg" , true); // default plugin for movieplayer g_settings.movieplayer_plugin = configfile.getString( "movieplayer_plugin", "Teletext" ); @@ -947,6 +949,7 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setInt32( "backlight_tv", g_settings.backlight_tv); configfile.setInt32( "backlight_standby", g_settings.backlight_standby); configfile.setInt32( "backlight_deepstandby", g_settings.backlight_deepstandby); + configfile.setInt32( "lcd_scroll", g_settings.lcd_scroll); //misc configfile.setInt32( "power_standby", g_settings.power_standby); @@ -1134,6 +1137,7 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setBool ("recording_epg_for_end" , g_settings.recording_epg_for_end ); configfile.setBool ("recording_save_in_channeldir" , g_settings.recording_save_in_channeldir ); configfile.setBool ("recording_slow_warning" , g_settings.recording_slow_warning ); + configfile.setBool ("recording_startstop_msg" , g_settings.recording_startstop_msg ); // default plugin for movieplayer configfile.setString ( "movieplayer_plugin", g_settings.movieplayer_plugin ); @@ -2953,7 +2957,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) g_Zapit->zapTo_serviceID_NOWAIT(channel_id); } } - if(( mode != mode_scart ) && ( mode != mode_standby )){ + if(( mode != mode_scart ) && ( mode != mode_standby ) && g_settings.recording_startstop_msg) { std::string name = g_Locale->getText(LOCALE_RECORDTIMER_ANNOUNCE); getAnnounceEpgName(eventinfo, name); ShowHintUTF(LOCALE_MESSAGEBOX_INFO, name.c_str()); @@ -3203,10 +3207,6 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) //CVFD::getInstance()->ShowText(g_Locale->getText(LOCALE_MAINMENU_SHUTDOWN)); #if 0 - my_system("/etc/init.d/rcK"); - sync(); - my_system(2,"/bin/umount", "-a"); - sleep(1); { fp_standby_data_t standby; time_t mtime = time(NULL); @@ -3246,6 +3246,11 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) standby.timer_minutes_hi = fp_timer >> 8;; standby.timer_minutes_lo = fp_timer & 0xFF; + my_system("/etc/init.d/rcK"); + sync(); + my_system(2,"/bin/umount", "-a"); + sleep(1); + stop_video(); int fd = open("/dev/display", O_RDONLY); diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp index 696a9d8bd..70dc544a7 100644 --- a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp @@ -155,8 +155,10 @@ const CControlAPI::TyCgiCall CControlAPI::yCgiCallList[]= {"getbouquets", &CControlAPI::GetBouquetsCGI, "+xml"}, {"getmode", &CControlAPI::GetModeCGI, "text/plain"}, {"setmode", &CControlAPI::SetModeCGI, "text/plain"}, - {"epg", &CControlAPI::EpgCGI, ""}, - {"zapto", &CControlAPI::ZaptoCGI, "text/plain"}, + {"epgsearchxml", &CControlAPI::EpgSearchXMLCGI, ""}, + {"epgsearch", &CControlAPI::EpgSearchTXTCGI, ""}, + {"epg", &CControlAPI::EpgCGI, ""}, + {"zapto", &CControlAPI::ZaptoCGI, "text/plain"}, {"getonidsid", &CControlAPI::GetChannel_IDCGI, "text/plain"}, {"currenttpchannels", &CControlAPI::GetTPChannel_IDCGI, "text/plain"}, // boxcontrol - system @@ -1285,6 +1287,140 @@ void CControlAPI::epgDetailList(CyhookHandler *hh) { hh->WriteLn(result); } } +//------------------------------------------------------------------------------------------------- +inline static bool sortByDateTime (const CChannelEvent& a, const CChannelEvent& b) +{ + return a.startTime < b.startTime; +} +extern const char * GetGenre(const unsigned char contentClassification); // UTF-8 +void CControlAPI::EpgSearchXMLCGI(CyhookHandler *hh) +{ + EpgSearchCGI(hh, true);//xml_forat = true +} +void CControlAPI::EpgSearchTXTCGI(CyhookHandler *hh) +{ + EpgSearchCGI(hh, false);//xml_forat = false +} + +void CControlAPI::EpgSearchCGI(CyhookHandler *hh, bool xml_forat ) +{ + t_channel_id channel_id; + CChannelEventList evtlist; + bool param_empty = hh->ParamList.empty(); + const int m_search_epg_item = 5; + if(!param_empty){ + if(xml_forat){ + hh->SetHeader(HTTP_OK, "text/xml; charset=UTF-8"); + hh->WriteLn(""); + hh->WriteLn(""); + } + else{ + hh->SetHeader(HTTP_OK, "text/plain; charset=UTF-8"); // default + } + + std::string m_search_keyword =hh->ParamList["1"]; + + std::vector v; + int channel_nr = CNeutrinoApp::getInstance ()->channelList->getSize();//unique channelList TV or Radio + for(int channel = 0; channel < channel_nr; channel++){ + channel_id = CNeutrinoApp::getInstance ()->channelList->getChannelFromIndex(channel)->channel_id; + v.push_back(channel_id); + } + std::map ch_id_map; + std::vector::iterator it; + for (it = v.begin(); it != v.end(); ++it){ + ch_id_map[*it & 0xFFFFFFFFFFFFULL] = *it; + } + CEitManager::getInstance()->getEventsServiceKey(0,evtlist, m_search_epg_item,m_search_keyword, true);//all_chann + + if(!evtlist.empty()){ + std::map::iterator map_it; + CChannelEventList::iterator e; + for ( e=evtlist.begin(); e!=evtlist.end();++e){ + map_it = ch_id_map.find(e->channelID); + if (map_it != ch_id_map.end()){ + e->channelID = map_it->second;//map channelID48 to channelID + } + else{ + evtlist.erase(e--);// remove event for not found channels in channelList + } + } + } + if(!evtlist.empty()){ + sort(evtlist.begin(),evtlist.end(),sortByDateTime); + } + + time_t azeit=time(NULL); + CShortEPGData epg; + CEPGData longepg; + char tmpstr[256] ={0}; + std::string genere; + CChannelEventList::iterator eventIterator; + unsigned int u_azeit = ( azeit > -1)? azeit:0; + for (eventIterator = evtlist.begin(); eventIterator != evtlist.end(); ++eventIterator){ + if (CEitManager::getInstance()->getEPGidShort(eventIterator->eventID, &epg)) { + if( (eventIterator->startTime+eventIterator->duration) < u_azeit) + continue; + struct tm *tmStartZeit = localtime(&eventIterator->startTime); + if(xml_forat){ + hh->printf("\t"); + hh->printf("\t\t%s\n",NeutrinoAPI->GetServiceName(eventIterator->channelID).c_str()); + hh->printf("\t\t%s\n",ZapitTools::UTF8_to_UTF8XML(epg.title.c_str()).c_str()); + hh->printf("\t\t%s\n",ZapitTools::UTF8_to_UTF8XML(epg.info1.c_str()).c_str()); + hh->printf("\t\t%s\n",ZapitTools::UTF8_to_UTF8XML(epg.info2.c_str()).c_str()); + if (CEitManager::getInstance()->getEPGid(eventIterator->eventID, eventIterator->startTime, &longepg)) { + hh->printf("\t\t%u\n", longepg.fsk); + if (longepg.contentClassification.length()> 0){ + genere = GetGenre(longepg.contentClassification[0]); + genere = ZapitTools::UTF8_to_UTF8XML(genere.c_str()); + hh->printf("\t\t%s\n", genere.c_str()); + } + } + strftime(tmpstr, sizeof(tmpstr), "%Y-%m-%d", tmStartZeit ); + hh->printf("\t\t%s\n", tmpstr); + strftime(tmpstr, sizeof(tmpstr), "%H:%M", tmStartZeit ); + hh->printf("\t\t\n", tmpstr); + hh->printf("\t\t%d\n", eventIterator->duration); + hh->printf("\t\t\t" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "\n",eventIterator->channelID); + hh->printf("\t\t\t%ld\n",eventIterator->eventID); + hh->printf("\t"); + }else{ + std::string datetimer_str ; + strftime(tmpstr, sizeof(tmpstr), "%Y-%m-%d %H:%M", tmStartZeit ); + datetimer_str = tmpstr; + datetimer_str += " "; + datetimer_str += g_Locale->getText(CLocaleManager::getMonth(tmStartZeit)); + datetimer_str += " "; + datetimer_str += g_Locale->getText(CLocaleManager::getWeekday(tmStartZeit)); + snprintf(tmpstr, sizeof(tmpstr)," [%d min]",eventIterator->duration / 60); + datetimer_str += tmpstr; + + hh->WriteLn(datetimer_str); + hh->WriteLn(NeutrinoAPI->GetServiceName(eventIterator->channelID)); + hh->WriteLn(epg.title); + if(!epg.info1.empty()) + hh->WriteLn(epg.info1); + if(!epg.info2.empty()) + hh->WriteLn(epg.info2); + if (CEitManager::getInstance()->getEPGid(eventIterator->eventID, eventIterator->startTime, &longepg)) { + hh->printf("fsk:%u\n", longepg.fsk); + if (longepg.contentClassification.length()> 0){ + genere = GetGenre(longepg.contentClassification[0]); + genere = ZapitTools::UTF8_to_UTF8XML(genere.c_str()); + hh->WriteLn(genere); + } + } + hh->WriteLn("----------------------------------------------------------"); + + } + } + } + if(xml_forat) + hh->printf(""); + }else + hh->SendError(); + +} //------------------------------------------------------------------------- /** Return EPG data @@ -1302,6 +1438,7 @@ void CControlAPI::epgDetailList(CyhookHandler *hh) { * stoptime : show only items until stoptime reached * @endcode */ + //------------------------------------------------------------------------- void CControlAPI::EpgCGI(CyhookHandler *hh) { NeutrinoAPI->eList.clear(); diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.h b/src/nhttpd/tuxboxapi/coolstream/controlapi.h index 151dbf160..33d969ae6 100644 --- a/src/nhttpd/tuxboxapi/coolstream/controlapi.h +++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.h @@ -40,7 +40,9 @@ private: void SendTimers(CyhookHandler *hh); void SendTimersXML(CyhookHandler *hh); void epgDetailList(CyhookHandler *hh); - + void EpgSearchXMLCGI(CyhookHandler *hh); + void EpgSearchTXTCGI(CyhookHandler *hh); + void EpgSearchCGI(CyhookHandler *hh, bool xml_forat = false); // subs friend class CNeutrinoWebserver; // for timer /fb/ compatibility void doModifyTimer(CyhookHandler *hh); diff --git a/src/system/locals.h b/src/system/locals.h index e0bf849a1..de3214792 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -745,6 +745,7 @@ typedef enum LOCALE_LCDMENU_DIM_TIME, LOCALE_LCDMENU_HEAD, LOCALE_LCDMENU_LCDCONTROLER, + LOCALE_LCDMENU_SCROLL, LOCALE_LCDMENU_STATUSLINE, LOCALE_LCDMENU_STATUSLINE_BOTH, LOCALE_LCDMENU_STATUSLINE_PLAYTIME, @@ -1066,6 +1067,7 @@ typedef enum LOCALE_MENU_HINT_RECORD_DIR, LOCALE_MENU_HINT_RECORD_END, LOCALE_MENU_HINT_RECORD_SLOW_WARN, + LOCALE_MENU_HINT_RECORD_STARTSTOP_MSG, LOCALE_MENU_HINT_RECORD_TDIR, LOCALE_MENU_HINT_RECORD_TIME, LOCALE_MENU_HINT_RECORD_TIMEAFTER, @@ -1199,6 +1201,7 @@ typedef enum LOCALE_MENU_HINT_VFD_DEFAULTS, LOCALE_MENU_HINT_VFD_DIMTIME, LOCALE_MENU_HINT_VFD_INFOLINE, + LOCALE_MENU_HINT_VFD_SCROLL, LOCALE_MENU_HINT_VFD_STATUSLINE, LOCALE_MENU_HINT_VIDEO, LOCALE_MENU_HINT_VIDEO_43MODE, @@ -1684,6 +1687,7 @@ typedef enum LOCALE_RCLOCK_UNLOCKMSG, LOCALE_RECORDING_IS_RUNNING, LOCALE_RECORDING_START, + LOCALE_RECORDING_STARTSTOP_MSG, LOCALE_RECORDING_STOP, LOCALE_RECORDING_TIME_HOUR, LOCALE_RECORDING_TIME_HOURS, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 5391c24bf..d0ab34f5a 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -745,6 +745,7 @@ const char * locale_real_names[] = "lcdmenu.dim_time", "lcdmenu.head", "lcdmenu.lcdcontroler", + "lcdmenu.scroll", "lcdmenu.statusline", "lcdmenu.statusline.both", "lcdmenu.statusline.playtime", @@ -1066,6 +1067,7 @@ const char * locale_real_names[] = "menu.hint_record_dir", "menu.hint_record_end", "menu.hint_record_slow_warn", + "menu.hint_record_startstop_msg", "menu.hint_record_tdir", "menu.hint_record_time", "menu.hint_record_timeafter", @@ -1199,6 +1201,7 @@ const char * locale_real_names[] = "menu.hint_vfd_defaults", "menu.hint_vfd_dimtime", "menu.hint_vfd_infoline", + "menu.hint_vfd_scroll", "menu.hint_vfd_statusline", "menu.hint_video", "menu.hint_video_43mode", @@ -1684,6 +1687,7 @@ const char * locale_real_names[] = "rclock.unlockmsg", "recording.is_running", "recording.start", + "recording.startstop_msg", "recording.stop", "recording.time_hour", "recording.time_hours", diff --git a/src/system/settings.h b/src/system/settings.h index baef4b2a1..68a2fe47f 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -367,6 +367,7 @@ struct SNeutrinoSettings int recording_save_in_channeldir; int recording_zap_on_announce; int recording_slow_warning; + int recording_startstop_msg; int shutdown_timer_record_type; int filesystem_is_utf8; @@ -582,6 +583,7 @@ struct SNeutrinoSettings int backlight_tv; int backlight_standby; int backlight_deepstandby; + int lcd_scroll; //#define FILESYSTEM_ENCODING_TO_UTF8(a) (g_settings.filesystem_is_utf8 ? (a) : ZapitTools::Latin1_to_UTF8(a).c_str()) #define FILESYSTEM_ENCODING_TO_UTF8(a) (isUTF8(a) ? (a) : ZapitTools::Latin1_to_UTF8(a).c_str()) #define UTF8_TO_FILESYSTEM_ENCODING(a) (g_settings.filesystem_is_utf8 ? (a) : ZapitTools::UTF8_to_Latin1(a).c_str())