From 299e20387d96ff8f70905af75cf97c60446841da Mon Sep 17 00:00:00 2001 From: satbaby Date: Thu, 8 Nov 2012 12:24:23 +0100 Subject: [PATCH 01/69] src/neutrino.cpp: -add lockStandbyCall --- src/neutrino.cpp | 7 +++++++ src/neutrino.h | 1 + 2 files changed, 8 insertions(+) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 42919c114..06d015cf3 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -207,6 +207,7 @@ CNeutrinoApp::CNeutrinoApp() RADIOchannelList = NULL; skipShutdownTimer = false; skipSleepTimer = false; + lockStandbyCall = false; current_muted = 0; recordingstatus = 0; g_channel_list_changed = 0; @@ -3079,6 +3080,11 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) //static bool wasshift = false; INFO("%s", bOnOff ? "ON" : "OFF" ); + if(lockStandbyCall) + return; + + lockStandbyCall = true; + if( bOnOff ) { if( mode == mode_scart ) { //g_Controld->setScartMode( 0 ); @@ -3207,6 +3213,7 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) g_volume->AudioMute(current_muted, true); StartSubtitles(); } + lockStandbyCall = false; } void CNeutrinoApp::radioMode( bool rezap) diff --git a/src/neutrino.h b/src/neutrino.h index b129adfe6..c36dd2406 100644 --- a/src/neutrino.h +++ b/src/neutrino.h @@ -119,6 +119,7 @@ private: bool skipShutdownTimer; bool skipSleepTimer; + bool lockStandbyCall; bool pbBlinkChange; int tvsort[LIST_MODE_LAST]; int radiosort[LIST_MODE_LAST]; From a47c6593dc98faa2c26a14aeaf2961a006f3487e Mon Sep 17 00:00:00 2001 From: satbaby Date: Thu, 8 Nov 2012 13:35:00 +0100 Subject: [PATCH 02/69] neutrino: -add save epg on stadbyOn/Off option --- data/locale/deutsch.locale | 2 ++ data/locale/english.locale | 2 ++ src/gui/miscsettings_menu.cpp | 4 ++++ src/neutrino.cpp | 5 +++-- src/system/locals.h | 2 ++ src/system/locals_intern.h | 2 ++ src/system/settings.h | 1 + 7 files changed, 16 insertions(+), 2 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 0d1ab625b..817e3c5e0 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -749,6 +749,7 @@ menu.hint_epg_fonts Ändern Sie für die EPG-Details die Schriftgrößen menu.hint_epg_max_events Maximum an Events im Zwischenspeicher. Nach Erreichen der\nGrenze werden EPG-Daten für zukünftige gelöscht menu.hint_epg_old_events EPG im Speicher behalten in Stunden,\nauch wenn es veraltet ist menu.hint_epg_save Speichert die EPG-Daten auf einer Harddisk oder USB-Stick\nund läd es nach einen Neustart +menu.hint_epg_save_standby Speichert die EPG-Daten in Bereitschaft Modus menu.hint_event_textcolor Ändern Sie die Event-Farbe für farbige Event-Optionen in Kanalliste und Infobar menu.hint_eventlist_fonts Ändern Sie in der Event-Liste die Schriftgrößen menu.hint_extended Energiespar-, EPG-Speicher- / Lade-Optionen,\nHDMI-CEC, Startkanal, Zap-Optionen @@ -1100,6 +1101,7 @@ miscsettings.epg_old_events EPG verwerfen nach (Std.) miscsettings.epg_old_events_hint1 Wie lange abgelaufene EPG-Daten aufheben? miscsettings.epg_old_events_hint2 Angabe in Stunden miscsettings.epg_save EPG zwischenspeichern +miscsettings.epg_save_standby EPG speichern in Standby-Modus miscsettings.general Allgemein miscsettings.head Erweitert miscsettings.infobar Infobar diff --git a/data/locale/english.locale b/data/locale/english.locale index 48bad20a2..eb24ddc23 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -749,6 +749,7 @@ menu.hint_epg_fonts Change EPG details window font sizes menu.hint_epg_max_events Maximum events to cache. After reaching limit\nEPG cache will remove future events menu.hint_epg_old_events Hours after event end time to consider\nevent old and remove it from cache menu.hint_epg_save Save cached EPG to harddisk or usb flash\nand load it after boot +menu.hint_epg_save_standby Save EPG on soft standby mode menu.hint_event_textcolor Change event color for colored-event options\nin channel list and infobar menu.hint_eventlist_fonts Change event list font sizes menu.hint_extended Power saving, EPG save/load options\nHDMI-CEC, Start channel, zap options @@ -1100,6 +1101,7 @@ miscsettings.epg_old_events EPG remove after (std.) miscsettings.epg_old_events_hint1 How long will EPG-Data be stored after they timed out? miscsettings.epg_old_events_hint2 Set in hours miscsettings.epg_save Save/Restore epg on reboot +miscsettings.epg_save_standby Save epg on soft standby miscsettings.general General miscsettings.head Extended settings miscsettings.infobar Infobar diff --git a/src/gui/miscsettings_menu.cpp b/src/gui/miscsettings_menu.cpp index af9c630ed..8f0d0acde 100644 --- a/src/gui/miscsettings_menu.cpp +++ b/src/gui/miscsettings_menu.cpp @@ -307,6 +307,10 @@ void CMiscMenue::showMiscSettingsMenuEpg(CMenuWidget *ms_epg) mc->setHint("", LOCALE_MENU_HINT_EPG_SAVE); ms_epg->addItem(mc); + CMenuOptionChooser * mc1 = new CMenuOptionChooser(LOCALE_MISCSETTINGS_EPG_SAVE_STANDBY, &g_settings.epg_save_standby, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc1->setHint("", LOCALE_MENU_HINT_EPG_SAVE_STANDBY); + ms_epg->addItem(mc1); + CStringInput * miscSettings_epg_cache = new CStringInput(LOCALE_MISCSETTINGS_EPG_CACHE, &g_settings.epg_cache, 2,LOCALE_MISCSETTINGS_EPG_CACHE_HINT1, LOCALE_MISCSETTINGS_EPG_CACHE_HINT2 , "0123456789 ", sectionsdConfigNotifier); CMenuForwarder * mf = new CMenuDForwarder(LOCALE_MISCSETTINGS_EPG_CACHE, true, g_settings.epg_cache, miscSettings_epg_cache); mf->setHint("", LOCALE_MENU_HINT_EPG_CACHE); diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 06d015cf3..edbdde21e 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -424,7 +424,7 @@ int CNeutrinoApp::loadSetup(const char * fname) snprintf(g_settings.ifname, sizeof(g_settings.ifname), "%s", configfile.getString("ifname", "eth0").c_str());; g_settings.epg_save = configfile.getBool("epg_save", false); - + g_settings.epg_save_standby = configfile.getBool("epg_save_standby", true); //widget settings g_settings.widget_fade = false; g_settings.widget_fade = configfile.getBool("widget_fade" , false ); @@ -864,6 +864,7 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setString("timezone", g_settings.timezone); // epg configfile.setBool("epg_save", g_settings.epg_save); + configfile.setBool("epg_save_standby", g_settings.epg_save_standby); configfile.setString("epg_cache_time" ,g_settings.epg_cache ); configfile.setString("epg_extendedcache_time" ,g_settings.epg_extendedcache); configfile.setString("epg_old_events" ,g_settings.epg_old_events ); @@ -3120,7 +3121,7 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) if(!CRecordManager::getInstance()->RecordingStatus() ) { //only save epg when not recording - if(g_settings.epg_save && !fromDeepStandby) { + if(g_settings.epg_save && !fromDeepStandby && g_settings.epg_save_standby) { saveEpg(false);//false CVFD::MODE_STANDBY } } diff --git a/src/system/locals.h b/src/system/locals.h index 73aeb3603..6808a23f9 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -776,6 +776,7 @@ typedef enum LOCALE_MENU_HINT_EPG_MAX_EVENTS, LOCALE_MENU_HINT_EPG_OLD_EVENTS, LOCALE_MENU_HINT_EPG_SAVE, + LOCALE_MENU_HINT_EPG_SAVE_STANDBY, LOCALE_MENU_HINT_EVENT_TEXTCOLOR, LOCALE_MENU_HINT_EVENTLIST_FONTS, LOCALE_MENU_HINT_EXTENDED, @@ -1127,6 +1128,7 @@ typedef enum LOCALE_MISCSETTINGS_EPG_OLD_EVENTS_HINT1, LOCALE_MISCSETTINGS_EPG_OLD_EVENTS_HINT2, LOCALE_MISCSETTINGS_EPG_SAVE, + LOCALE_MISCSETTINGS_EPG_SAVE_STANDBY, LOCALE_MISCSETTINGS_GENERAL, LOCALE_MISCSETTINGS_HEAD, LOCALE_MISCSETTINGS_INFOBAR, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index ede893246..47161f20e 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -776,6 +776,7 @@ const char * locale_real_names[] = "menu.hint_epg_max_events", "menu.hint_epg_old_events", "menu.hint_epg_save", + "menu.hint_epg_save_standby", "menu.hint_event_textcolor", "menu.hint_eventlist_fonts", "menu.hint_extended", @@ -1127,6 +1128,7 @@ const char * locale_real_names[] = "miscsettings.epg_old_events_hint1", "miscsettings.epg_old_events_hint2", "miscsettings.epg_save", + "miscsettings.epg_save_standby", "miscsettings.general", "miscsettings.head", "miscsettings.infobar", diff --git a/src/system/settings.h b/src/system/settings.h index cbb7b0c25..2ca0ddd42 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -123,6 +123,7 @@ struct SNeutrinoSettings // EPG int epg_save; + int epg_save_standby; std::string epg_cache; std::string epg_old_events; std::string epg_max_events; From 0acc943a4f7f564bf4a9007e46b166d450946f67 Mon Sep 17 00:00:00 2001 From: satbaby Date: Thu, 8 Nov 2012 17:24:10 +0100 Subject: [PATCH 03/69] src/gui/miscsettings_menu.cpp: -add COnOffNotifier for EPG menu --- src/gui/miscsettings_menu.cpp | 48 ++++++++++++++++++++++------------- src/gui/miscsettings_menu.h | 2 +- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/gui/miscsettings_menu.cpp b/src/gui/miscsettings_menu.cpp index 8f0d0acde..c1bd9c746 100644 --- a/src/gui/miscsettings_menu.cpp +++ b/src/gui/miscsettings_menu.cpp @@ -229,6 +229,7 @@ int CMiscMenue::showMiscSettingsMenu() delete sectionsdConfigNotifier; if(cs_get_revision() > 7) delete miscNotifier; + delete miscEpgNotifier; return res; } @@ -303,37 +304,48 @@ void CMiscMenue::showMiscSettingsMenuEpg(CMenuWidget *ms_epg) { ms_epg->addIntroItems(LOCALE_MISCSETTINGS_EPG_HEAD); - CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_EPG_SAVE, &g_settings.epg_save, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); - mc->setHint("", LOCALE_MENU_HINT_EPG_SAVE); - ms_epg->addItem(mc); - CMenuOptionChooser * mc1 = new CMenuOptionChooser(LOCALE_MISCSETTINGS_EPG_SAVE_STANDBY, &g_settings.epg_save_standby, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + CMenuOptionChooser * mc1 = new CMenuOptionChooser(LOCALE_MISCSETTINGS_EPG_SAVE_STANDBY, &g_settings.epg_save_standby, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, g_settings.epg_save); mc1->setHint("", LOCALE_MENU_HINT_EPG_SAVE_STANDBY); - ms_epg->addItem(mc1); CStringInput * miscSettings_epg_cache = new CStringInput(LOCALE_MISCSETTINGS_EPG_CACHE, &g_settings.epg_cache, 2,LOCALE_MISCSETTINGS_EPG_CACHE_HINT1, LOCALE_MISCSETTINGS_EPG_CACHE_HINT2 , "0123456789 ", sectionsdConfigNotifier); - CMenuForwarder * mf = new CMenuDForwarder(LOCALE_MISCSETTINGS_EPG_CACHE, true, g_settings.epg_cache, miscSettings_epg_cache); + CMenuForwarder * mf = new CMenuDForwarder(LOCALE_MISCSETTINGS_EPG_CACHE, g_settings.epg_save, g_settings.epg_cache, miscSettings_epg_cache); mf->setHint("", LOCALE_MENU_HINT_EPG_CACHE); - ms_epg->addItem(mf); CStringInput * miscSettings_epg_cache_e = new CStringInput(LOCALE_MISCSETTINGS_EPG_EXTENDEDCACHE, &g_settings.epg_extendedcache, 3,LOCALE_MISCSETTINGS_EPG_EXTENDEDCACHE_HINT1, LOCALE_MISCSETTINGS_EPG_EXTENDEDCACHE_HINT2 , "0123456789 ", sectionsdConfigNotifier); - mf = new CMenuDForwarder(LOCALE_MISCSETTINGS_EPG_EXTENDEDCACHE, true, g_settings.epg_extendedcache, miscSettings_epg_cache_e); - mf->setHint("", LOCALE_MENU_HINT_EPG_EXTENDEDCACHE); - ms_epg->addItem(mf); + CMenuForwarder * mf1 = new CMenuDForwarder(LOCALE_MISCSETTINGS_EPG_EXTENDEDCACHE, g_settings.epg_save, g_settings.epg_extendedcache, miscSettings_epg_cache_e); + mf1->setHint("", LOCALE_MENU_HINT_EPG_EXTENDEDCACHE); CStringInput * miscSettings_epg_old_events = new CStringInput(LOCALE_MISCSETTINGS_EPG_OLD_EVENTS, &g_settings.epg_old_events, 3,LOCALE_MISCSETTINGS_EPG_OLD_EVENTS_HINT1, LOCALE_MISCSETTINGS_EPG_OLD_EVENTS_HINT2 , "0123456789 ", sectionsdConfigNotifier); - mf = new CMenuDForwarder(LOCALE_MISCSETTINGS_EPG_OLD_EVENTS, true, g_settings.epg_old_events, miscSettings_epg_old_events); - mf->setHint("", LOCALE_MENU_HINT_EPG_OLD_EVENTS); - ms_epg->addItem(mf); + CMenuForwarder * mf2 = new CMenuDForwarder(LOCALE_MISCSETTINGS_EPG_OLD_EVENTS, g_settings.epg_save, g_settings.epg_old_events, miscSettings_epg_old_events); + mf2->setHint("", LOCALE_MENU_HINT_EPG_OLD_EVENTS); CStringInput * miscSettings_epg_max_events = new CStringInput(LOCALE_MISCSETTINGS_EPG_MAX_EVENTS, &g_settings.epg_max_events, 6,LOCALE_MISCSETTINGS_EPG_MAX_EVENTS_HINT1, LOCALE_MISCSETTINGS_EPG_MAX_EVENTS_HINT2 , "0123456789 ", sectionsdConfigNotifier); - mf = new CMenuDForwarder(LOCALE_MISCSETTINGS_EPG_MAX_EVENTS, true, g_settings.epg_max_events, miscSettings_epg_max_events); - mf->setHint("", LOCALE_MENU_HINT_EPG_MAX_EVENTS); - ms_epg->addItem(mf); + CMenuForwarder * mf3 = new CMenuDForwarder(LOCALE_MISCSETTINGS_EPG_MAX_EVENTS, g_settings.epg_save, g_settings.epg_max_events, miscSettings_epg_max_events); + mf3->setHint("", LOCALE_MENU_HINT_EPG_MAX_EVENTS); - mf = new CMenuForwarder(LOCALE_MISCSETTINGS_EPG_DIR, true, g_settings.epg_dir, this, "epgdir"); - mf->setHint("", LOCALE_MENU_HINT_EPG_DIR); + CMenuForwarder * mf4 = new CMenuForwarder(LOCALE_MISCSETTINGS_EPG_DIR, g_settings.epg_save, g_settings.epg_dir, this, "epgdir"); + mf4->setHint("", LOCALE_MENU_HINT_EPG_DIR); + + miscEpgNotifier = new COnOffNotifier(); + miscEpgNotifier->addItem(mc1); + miscEpgNotifier->addItem(mf); + miscEpgNotifier->addItem(mf1); + miscEpgNotifier->addItem(mf2); + miscEpgNotifier->addItem(mf3); + miscEpgNotifier->addItem(mf4); + + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_EPG_SAVE, &g_settings.epg_save, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true,miscEpgNotifier); + mc->setHint("", LOCALE_MENU_HINT_EPG_SAVE); + + ms_epg->addItem(mc); + ms_epg->addItem(mc1); ms_epg->addItem(mf); + ms_epg->addItem(mf1); + ms_epg->addItem(mf2); + ms_epg->addItem(mf3); + ms_epg->addItem(mf4); + } //filebrowser settings diff --git a/src/gui/miscsettings_menu.h b/src/gui/miscsettings_menu.h index b05d0c68a..d9c0269fb 100644 --- a/src/gui/miscsettings_menu.h +++ b/src/gui/miscsettings_menu.h @@ -41,7 +41,7 @@ class CMiscMenue : public CMenuTarget CFanControlNotifier *fanNotifier; CSectionsdConfigNotifier* sectionsdConfigNotifier; COnOffNotifier* miscNotifier; - + COnOffNotifier* miscEpgNotifier; int width; int showMiscSettingsMenu(); From 0cce4b9c80e5348967240d3ccf4303f8b4442c78 Mon Sep 17 00:00:00 2001 From: satbaby Date: Thu, 8 Nov 2012 20:08:17 +0100 Subject: [PATCH 04/69] src/system/configure_network.cpp: use old startNetwork/stop --- src/system/configure_network.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/system/configure_network.cpp b/src/system/configure_network.cpp index 6eaa20d54..ff927a375 100644 --- a/src/system/configure_network.cpp +++ b/src/system/configure_network.cpp @@ -218,11 +218,11 @@ void CNetworkConfig::commitConfig(void) void CNetworkConfig::startNetwork(void) { - const char _ifup[] = "/sbin/ifup"; + std::string cmd = "/sbin/ifup " + ifname; #ifdef DEBUG - printf("CNetworkConfig::startNetwork: %s %s\n",_ifup, ifname.c_str()); + printf("CNetworkConfig::startNetwork: %s\n", cmd.c_str()); #endif - my_system(_ifup, ifname.c_str()); + my_system("/bin/sh", "-c", cmd.c_str()); if (!inet_static) { init_vars(); @@ -232,11 +232,11 @@ void CNetworkConfig::startNetwork(void) void CNetworkConfig::stopNetwork(void) { - const char _ifdown[] = "/sbin/ifdown"; + std::string cmd = "/sbin/ifdown " + ifname; #ifdef DEBUG - printf("CNetworkConfig::stopNetwork: %s %s\n",_ifdown, ifname.c_str()); + printf("CNetworkConfig::stopNetwork: %s\n", cmd.c_str()); #endif - my_system(_ifdown, ifname.c_str()); + my_system("/bin/sh", "-c", cmd.c_str()); } From 08e66deb7519cc6e00e3041f740df40ac6bfdd7d Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 7 Nov 2012 22:13:14 +0100 Subject: [PATCH 05/69] CTextBox: remove dub allocation of m_pcFontText --- src/gui/widget/textbox.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/widget/textbox.cpp b/src/gui/widget/textbox.cpp index fb19beddb..815cdc063 100644 --- a/src/gui/widget/textbox.cpp +++ b/src/gui/widget/textbox.cpp @@ -150,7 +150,6 @@ void CTextBox::initVar(void) m_cText = ""; m_nMode = SCROLL; - m_pcFontText = NULL; m_pcFontText = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]; m_nFontTextHeight = m_pcFontText->getHeight(); m_nMaxTextWidth = 0; From 11b2242d2e58dea90d88c05bed668d5973502ec5 Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Thu, 8 Nov 2012 17:12:58 +0100 Subject: [PATCH 06/69] * CTextBox: Fix displayed text width in function setText() --- src/gui/widget/textbox.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/gui/widget/textbox.cpp b/src/gui/widget/textbox.cpp index 815cdc063..47b5d0c4c 100644 --- a/src/gui/widget/textbox.cpp +++ b/src/gui/widget/textbox.cpp @@ -332,8 +332,8 @@ void CTextBox::refreshTextLineArray(void) lineBreakWidth = std::max(m_nMaxWidth, m_cFrameTextRel.iWidth - 2*text_border_width); } -// if(m_nMaxWidth) -// lineBreakWidth = m_nMaxWidth; + if(m_nMaxTextWidth) + lineBreakWidth = m_nMaxTextWidth; //TRACE("[CTextBox] line %d: lineBreakWidth %d\n", __LINE__, lineBreakWidth); @@ -595,8 +595,7 @@ bool CTextBox::setText(const std::string* newText, int max_width) { //TRACE("[CTextBox]->SetText \r\n"); bool result = false; - if (max_width>0) - m_nMaxTextWidth = max_width; + m_nMaxTextWidth = max_width; //printf("setText: _max_width %d max_width %d\n", _max_width, max_width); if (newText != NULL) From 8a89f09e6408e542d125f19ca5cfa428e571e0e3 Mon Sep 17 00:00:00 2001 From: satbaby Date: Fri, 9 Nov 2012 13:45:57 +0100 Subject: [PATCH 07/69] src/gui/zapit_setup.cpp: use COnOffNotifier --- src/gui/zapit_setup.cpp | 34 +++++++++++++--------------------- src/gui/zapit_setup.h | 4 +--- 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/src/gui/zapit_setup.cpp b/src/gui/zapit_setup.cpp index 6a68b0704..d196e7be0 100644 --- a/src/gui/zapit_setup.cpp +++ b/src/gui/zapit_setup.cpp @@ -39,8 +39,6 @@ CZapitSetup::CZapitSetup() { - zapit1 = NULL; - zapit2 = NULL; width = w_max (40, 10); //% } @@ -67,38 +65,32 @@ void CZapitSetup::showMenu() //menue init CMenuWidget *zapit = new CMenuWidget(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_ZAPIT); zapit->addIntroItems(LOCALE_ZAPITSETUP_INFO); - + COnOffNotifier* miscZapitNotifier = new COnOffNotifier(0); //zapit - CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_ZAPITSETUP_LAST_USE, &g_settings.uselastchannel, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_ZAPITSETUP_LAST_USE, &g_settings.uselastchannel, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, miscZapitNotifier, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); mc->setHint("", LOCALE_MENU_HINT_LAST_USE); - zapit->addItem(mc); + CSelectChannelWidget select; - zapit->addItem(GenericMenuSeparatorLine); - - zapit1 = new CMenuForwarder(LOCALE_ZAPITSETUP_LAST_TV , !g_settings.uselastchannel, g_settings.StartChannelTV, &select, "tv", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN ); + CMenuForwarder *zapit1 = new CMenuForwarder(LOCALE_ZAPITSETUP_LAST_TV , g_settings.uselastchannel, g_settings.StartChannelTV, &select, "tv", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN ); zapit1->setHint("", LOCALE_MENU_HINT_LAST_TV); - zapit->addItem(zapit1); - zapit2 = new CMenuForwarder(LOCALE_ZAPITSETUP_LAST_RADIO , !g_settings.uselastchannel, g_settings.StartChannelRadio, &select, "radio", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW ); + CMenuForwarder *zapit2 = new CMenuForwarder(LOCALE_ZAPITSETUP_LAST_RADIO , g_settings.uselastchannel, g_settings.StartChannelRadio, &select, "radio", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW ); zapit2->setHint("", LOCALE_MENU_HINT_LAST_RADIO); + + miscZapitNotifier->addItem(zapit1); + miscZapitNotifier->addItem(zapit2); + + zapit->addItem(mc); + zapit->addItem(GenericMenuSeparatorLine); + zapit->addItem(zapit1); zapit->addItem(zapit2); zapit->exec(NULL, ""); + delete miscZapitNotifier; delete zapit; } -bool CZapitSetup::changeNotify(const neutrino_locale_t OptionName, void *) -{ - if (ARE_LOCALES_EQUAL(OptionName, LOCALE_ZAPITSETUP_LAST_USE)) - { - zapit1->setActive(!g_settings.uselastchannel); - zapit2->setActive(!g_settings.uselastchannel); - } - - return false; -} - //select menu CSelectChannelWidget::CSelectChannelWidget() { diff --git a/src/gui/zapit_setup.h b/src/gui/zapit_setup.h index 8e8c7f3db..95636611e 100644 --- a/src/gui/zapit_setup.h +++ b/src/gui/zapit_setup.h @@ -31,10 +31,9 @@ #include #include -class CZapitSetup : public CMenuTarget, CChangeObserver +class CZapitSetup : public CMenuTarget { private: - CMenuForwarder *zapit1, *zapit2; int width; @@ -44,7 +43,6 @@ public: CZapitSetup(); ~CZapitSetup(); int exec(CMenuTarget* parent, const std::string & actionKey); - virtual bool changeNotify(const neutrino_locale_t , void *); }; class CSelectChannelWidget : public CMenuWidget From 282560875b5b5525d8aac9c31c33e29379bdedf5 Mon Sep 17 00:00:00 2001 From: satbaby Date: Fri, 9 Nov 2012 14:50:55 +0100 Subject: [PATCH 08/69] src/neutrino.cpp:-add ask MESSAGEBOX for INACTIVITY SLEEPTIMER --- src/neutrino.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index c740fa2e5..760a5c07e 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2658,10 +2658,21 @@ _repeat: return messages_return::handled; } else if( msg == NeutrinoMessages::SLEEPTIMER) { - if(skipSleepTimer) { - printf("NeutrinoMessages::SLEEPTIMER: skiping\n"); - skipSleepTimer = false; - return messages_return::handled; + if(data) {//INACTIVITY SLEEPTIMER + skipShutdownTimer = + (ShowLocalizedMessage(LOCALE_MESSAGEBOX_INFO, LOCALE_SHUTDOWNTIMER_ANNOUNCE, + CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, true) == CMessageBox::mbrYes);//FIXME + if(skipShutdownTimer) { + printf("NeutrinoMessages::INACTIVITY SLEEPTIMER: skiping\n"); + skipShutdownTimer = false; + return messages_return::handled; + } + }else{ //MAIN-MENU SLEEPTIMER + if(skipSleepTimer) { + printf("NeutrinoMessages::SLEEPTIMER: skiping\n"); + skipSleepTimer = false; + return messages_return::handled; + } } if(g_settings.shutdown_real) ExitRun(true, (cs_get_revision() > 7)); From b56c86395309d984081f3916195947846dd248f0 Mon Sep 17 00:00:00 2001 From: satbaby Date: Fri, 9 Nov 2012 15:05:34 +0100 Subject: [PATCH 09/69] src/neutrino.cpp:use LOCALE_SLEEPTIMERBOX_ANNOUNCE , supplement to 282560875b5b5525d8aac9c31c33e29379bdedf5 --- src/neutrino.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 760a5c07e..72e87564d 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2660,7 +2660,7 @@ _repeat: else if( msg == NeutrinoMessages::SLEEPTIMER) { if(data) {//INACTIVITY SLEEPTIMER skipShutdownTimer = - (ShowLocalizedMessage(LOCALE_MESSAGEBOX_INFO, LOCALE_SHUTDOWNTIMER_ANNOUNCE, + (ShowLocalizedMessage(LOCALE_MESSAGEBOX_INFO, LOCALE_SLEEPTIMERBOX_ANNOUNCE, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, true) == CMessageBox::mbrYes);//FIXME if(skipShutdownTimer) { printf("NeutrinoMessages::INACTIVITY SLEEPTIMER: skiping\n"); From fdb1fa6352e2b1841cbdd31a09e8000f14de889e Mon Sep 17 00:00:00 2001 From: satbaby Date: Fri, 9 Nov 2012 15:31:26 +0100 Subject: [PATCH 10/69] src/neutrino.cpp: see the appropriate message depending on settings --- src/neutrino.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 72e87564d..ee7849628 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2654,13 +2654,13 @@ _repeat: } else if( msg == NeutrinoMessages::ANNOUNCE_SLEEPTIMER) { if( mode != mode_scart && mode != mode_standby) - skipSleepTimer = (ShowLocalizedMessage(LOCALE_MESSAGEBOX_INFO, LOCALE_SLEEPTIMERBOX_ANNOUNCE,CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, true) == CMessageBox::mbrYes); + skipSleepTimer = (ShowLocalizedMessage(LOCALE_MESSAGEBOX_INFO, g_settings.shutdown_real ? LOCALE_SHUTDOWNTIMER_ANNOUNCE:LOCALE_SLEEPTIMERBOX_ANNOUNCE,CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, true) == CMessageBox::mbrYes); return messages_return::handled; } else if( msg == NeutrinoMessages::SLEEPTIMER) { if(data) {//INACTIVITY SLEEPTIMER skipShutdownTimer = - (ShowLocalizedMessage(LOCALE_MESSAGEBOX_INFO, LOCALE_SLEEPTIMERBOX_ANNOUNCE, + (ShowLocalizedMessage(LOCALE_MESSAGEBOX_INFO, g_settings.shutdown_real ? LOCALE_SHUTDOWNTIMER_ANNOUNCE:LOCALE_SLEEPTIMERBOX_ANNOUNCE, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, true) == CMessageBox::mbrYes);//FIXME if(skipShutdownTimer) { printf("NeutrinoMessages::INACTIVITY SLEEPTIMER: skiping\n"); From c47aebdb642c93fa01f8be8d8e65ea4aa1913f98 Mon Sep 17 00:00:00 2001 From: satbaby Date: Fri, 9 Nov 2012 17:32:15 +0100 Subject: [PATCH 11/69] src/gui/channellist.cpp:-add sort by channel number --- data/locale/deutsch.locale | 1 + data/locale/english.locale | 1 + src/gui/channellist.cpp | 22 ++++++++++++++++------ src/gui/channellist.h | 10 ++++++++++ src/neutrino.cpp | 10 ++++++---- src/system/locals.h | 1 + src/system/locals_intern.h | 1 + 7 files changed, 36 insertions(+), 10 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 817e3c5e0..9084627c8 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -211,6 +211,7 @@ channellist.foot_freq Tuning-Parameter channellist.foot_next Nachfolgesendung channellist.foot_off aus channellist.foot_sort_alpha Sortiert[alpha] +channellist.foot_sort_chnum Sortiert[nummer] channellist.foot_sort_freq Sortiert[freq] channellist.foot_sort_sat Sortiert[sat] channellist.head Alle Kanäle diff --git a/data/locale/english.locale b/data/locale/english.locale index eb24ddc23..cb537a192 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -211,6 +211,7 @@ channellist.foot_freq Sat/Freq Info channellist.foot_next next Event channellist.foot_off off channellist.foot_sort_alpha sorted[alpha] +channellist.foot_sort_chnum Sortiert[number] channellist.foot_sort_freq sorted[freq] channellist.foot_sort_sat sorted[sat] channellist.head All Services diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 92c7f50d3..eaf0a8bfb 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -223,6 +223,11 @@ void CChannelList::SortTP(void) sort(chanlist.begin(), chanlist.end(), CmpChannelByFreq()); } +void CChannelList::SortChNumber(void) +{ + sort(chanlist.begin(), chanlist.end(), CmpChannelByChNum()); +} + CZapitChannel* CChannelList::getChannel(int number) { for (uint32_t i=0; i< chanlist.size(); i++) { @@ -814,8 +819,8 @@ int CChannelList::show() int mode = CNeutrinoApp::getInstance()->GetChannelMode(); if(mode != LIST_MODE_FAV) { g_settings.channellist_sort_mode++; - if(g_settings.channellist_sort_mode > 2) - g_settings.channellist_sort_mode = 0; + if(g_settings.channellist_sort_mode > SORT_MAX-1) + g_settings.channellist_sort_mode = SORT_ALPHA; CNeutrinoApp::getInstance()->SetChannelMode(mode); paintHead(); // update button bar paint(); @@ -1631,7 +1636,7 @@ void CChannelList::paintButtonBar(bool is_current) struct button_label Button[num_buttons]; const neutrino_locale_t button_ids[] = {LOCALE_INFOVIEWER_NOW,LOCALE_INFOVIEWER_NEXT,LOCALE_MAINMENU_RECORDING,LOCALE_MAINMENU_RECORDING_STOP,NONEXISTANT_LOCALE, - LOCALE_CHANNELLIST_FOOT_SORT_ALPHA,LOCALE_CHANNELLIST_FOOT_SORT_FREQ,LOCALE_CHANNELLIST_FOOT_SORT_SAT}; + LOCALE_CHANNELLIST_FOOT_SORT_ALPHA,LOCALE_CHANNELLIST_FOOT_SORT_FREQ,LOCALE_CHANNELLIST_FOOT_SORT_SAT,LOCALE_CHANNELLIST_FOOT_SORT_CHNUM}; const std::vector buttonID_rest (button_ids, button_ids + sizeof(button_ids) / sizeof(neutrino_locale_t) ); for (int i = 0;iBouquets.size()); for (uint32_t i = 0; i < bouquetList->Bouquets.size(); i++) { - if(g_settings.channellist_sort_mode == 0) + if(g_settings.channellist_sort_mode == CChannelList::SORT_ALPHA) bouquetList->Bouquets[i]->channelList->SortAlpha(); - if(g_settings.channellist_sort_mode == 1) + if(g_settings.channellist_sort_mode == CChannelList::SORT_TP) bouquetList->Bouquets[i]->channelList->SortTP(); - if(g_settings.channellist_sort_mode == 2) + if(g_settings.channellist_sort_mode == CChannelList::SORT_SAT) bouquetList->Bouquets[i]->channelList->SortSat(); + if(g_settings.channellist_sort_mode == CChannelList::SORT_CH_NUMBER) + bouquetList->Bouquets[i]->channelList->SortChNumber(); } channelList->adjustToChannelID(channelList->getActiveChannel_ChannelID()); } diff --git a/src/system/locals.h b/src/system/locals.h index 6808a23f9..2a35ef6b2 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -238,6 +238,7 @@ typedef enum LOCALE_CHANNELLIST_FOOT_NEXT, LOCALE_CHANNELLIST_FOOT_OFF, LOCALE_CHANNELLIST_FOOT_SORT_ALPHA, + LOCALE_CHANNELLIST_FOOT_SORT_CHNUM, LOCALE_CHANNELLIST_FOOT_SORT_FREQ, LOCALE_CHANNELLIST_FOOT_SORT_SAT, LOCALE_CHANNELLIST_HEAD, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 47161f20e..905652f7f 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -238,6 +238,7 @@ const char * locale_real_names[] = "channellist.foot_next", "channellist.foot_off", "channellist.foot_sort_alpha", + "channellist.foot_sort_chnum", "channellist.foot_sort_freq", "channellist.foot_sort_sat", "channellist.head", From 9a3d2c4cba9c68bd38f3b7f40b703263e1445074 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Fri, 9 Nov 2012 18:00:01 +0100 Subject: [PATCH 12/69] - english.locale: fix german word --- data/locale/english.locale | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/locale/english.locale b/data/locale/english.locale index cb537a192..23118da8d 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -211,7 +211,7 @@ channellist.foot_freq Sat/Freq Info channellist.foot_next next Event channellist.foot_off off channellist.foot_sort_alpha sorted[alpha] -channellist.foot_sort_chnum Sortiert[number] +channellist.foot_sort_chnum sorted[number] channellist.foot_sort_freq sorted[freq] channellist.foot_sort_sat sorted[sat] channellist.head All Services From 56122fb9a09e180dfa4a6b988879f70496ad4240 Mon Sep 17 00:00:00 2001 From: satbaby Date: Sat, 10 Nov 2012 17:20:29 +0100 Subject: [PATCH 13/69] src/gui/zapit_setup.cpp: fix on/off logic --- src/gui/zapit_setup.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/zapit_setup.cpp b/src/gui/zapit_setup.cpp index d196e7be0..245af0c4e 100644 --- a/src/gui/zapit_setup.cpp +++ b/src/gui/zapit_setup.cpp @@ -65,17 +65,17 @@ void CZapitSetup::showMenu() //menue init CMenuWidget *zapit = new CMenuWidget(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_ZAPIT); zapit->addIntroItems(LOCALE_ZAPITSETUP_INFO); - COnOffNotifier* miscZapitNotifier = new COnOffNotifier(0); + COnOffNotifier* miscZapitNotifier = new COnOffNotifier(1); //zapit CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_ZAPITSETUP_LAST_USE, &g_settings.uselastchannel, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, miscZapitNotifier, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); mc->setHint("", LOCALE_MENU_HINT_LAST_USE); CSelectChannelWidget select; - CMenuForwarder *zapit1 = new CMenuForwarder(LOCALE_ZAPITSETUP_LAST_TV , g_settings.uselastchannel, g_settings.StartChannelTV, &select, "tv", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN ); + CMenuForwarder *zapit1 = new CMenuForwarder(LOCALE_ZAPITSETUP_LAST_TV , !g_settings.uselastchannel, g_settings.StartChannelTV, &select, "tv", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN ); zapit1->setHint("", LOCALE_MENU_HINT_LAST_TV); - CMenuForwarder *zapit2 = new CMenuForwarder(LOCALE_ZAPITSETUP_LAST_RADIO , g_settings.uselastchannel, g_settings.StartChannelRadio, &select, "radio", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW ); + CMenuForwarder *zapit2 = new CMenuForwarder(LOCALE_ZAPITSETUP_LAST_RADIO , !g_settings.uselastchannel, g_settings.StartChannelRadio, &select, "radio", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW ); zapit2->setHint("", LOCALE_MENU_HINT_LAST_RADIO); miscZapitNotifier->addItem(zapit1); From 187825be19e19eeb20f377f6a68eac62bd362ae4 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sun, 11 Nov 2012 00:17:12 +0100 Subject: [PATCH 14/69] - infoviewer_bb.cpp: fix resolution 1080 --- src/gui/infoviewer_bb.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index cf033a766..efba7b31f 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -498,7 +498,7 @@ void CInfoViewerBB::showIcon_Resolution() case 1920: icon_name = NEUTRINO_ICON_RESOLUTION_1920; break; - case 1088: + case 1080: icon_name = NEUTRINO_ICON_RESOLUTION_1080; break; case 1440: @@ -545,7 +545,7 @@ void CInfoViewerBB::showIcon_Resolution() case 1920: case 1440: case 1280: - case 1088: + case 1080: case 720: icon_name = NEUTRINO_ICON_RESOLUTION_HD; break; From cddf86725d2d76037504c7fe78ce906ab46d33c9 Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Sun, 11 Nov 2012 07:53:57 +0100 Subject: [PATCH 15/69] * Software Update with apply the settings (Part10) - Blacklist added to exclude files - Files are marked by a prefixed '-' in the settingsupdate.conf --- data/settingsupdate.conf | 15 ++++++-- src/gui/ext_update.cpp | 77 ++++++++++++++++++++++++++++++++++------ src/gui/ext_update.h | 2 ++ src/system/helpers.cpp | 8 +++-- src/system/helpers.h | 2 +- 5 files changed, 89 insertions(+), 15 deletions(-) diff --git a/data/settingsupdate.conf b/data/settingsupdate.conf index 795e0025b..1d2ed7a13 100644 --- a/data/settingsupdate.conf +++ b/data/settingsupdate.conf @@ -3,8 +3,8 @@ #:LogFile=/tmp/update.log -## Mögliche Einträge: -#==================== +## Mögliche Einträge für Sicherungen: +#==================================== # ganzes Verzeichnis #------------------- # /var/etc @@ -26,3 +26,14 @@ /etc/wpa_supplicant.conf /var/etc /var/tuxbox/config + +#---------------------------------------------------------------------------------------- +## von der Sicherung auszuschließende Dateien, gekennzeichnet durch ein vorangestelltes - +#---------------------------------------------------------------------------------------- +-/var/tuxbox/config/cables.xml +-/var/tuxbox/config/encoding.conf +-/var/tuxbox/config/providermap.xml +-/var/tuxbox/config/radio-stations.xml +-/var/tuxbox/config/satellites.xml +-/var/tuxbox/config/settingsupdate.conf +-/var/tuxbox/config/tobackup.conf diff --git a/src/gui/ext_update.cpp b/src/gui/ext_update.cpp index c8763de72..b5b70998c 100644 --- a/src/gui/ext_update.cpp +++ b/src/gui/ext_update.cpp @@ -25,8 +25,8 @@ Boston, MA 02110-1301, USA. */ -#define UPDATE_DEBUG_TIMER -#define UPDATE_DEBUG +//#define UPDATE_DEBUG_TIMER +//#define UPDATE_DEBUG #ifdef HAVE_CONFIG_H #include @@ -73,6 +73,7 @@ CExtUpdate::CExtUpdate() fLogfile = "/tmp/update.log"; mountPkt = "/tmp/image_mount"; FileHelpers = NULL; + BlackList.clear(); } CExtUpdate::~CExtUpdate() @@ -81,6 +82,7 @@ CExtUpdate::~CExtUpdate() delete[] MTDBuf; if(FileHelpers) delete[] FileHelpers; + BlackList.clear(); } CExtUpdate* CExtUpdate::getInstance() @@ -159,10 +161,10 @@ bool CExtUpdate::applySettings(const std::string & filename, int mode) bool CExtUpdate::isMtdramLoad() { - char buf[256] = ""; bool ret = false; FILE* f = fopen("/proc/modules", "r"); if (f) { + char buf[256] = ""; while(fgets(buf, sizeof(buf), f) != NULL) { if (strstr(buf, "mtdram") != NULL) { ret = true; @@ -294,7 +296,8 @@ bool CExtUpdate::applySettings() if (res) return ErrorReset(RESET_UNLOAD, "mount error"); - readBackupList(mountPkt); + if (!readBackupList(mountPkt)) + return ErrorReset(0, "error readBackupList"); res = umount(mountPkt.c_str()); if (res) @@ -359,7 +362,6 @@ bool CExtUpdate::copyFileList(const std::string & fileList, const std::string & struct dirent **namelist; std::string fList = fileList, dst; static struct stat FileInfo; - char buf[PATH_MAX]; size_t pos = fileList.find_last_of("/"); fList = fileList.substr(0, pos); @@ -373,6 +375,7 @@ bool CExtUpdate::copyFileList(const std::string & fileList, const std::string & std::string dName = namelist[n]->d_name; if (lstat((fList+"/"+dName).c_str(), &FileInfo) != -1) { if (S_ISLNK(FileInfo.st_mode)) { + char buf[PATH_MAX]; int len = readlink((fList+"/"+dName).c_str(), buf, sizeof(buf)-1); if (len != -1) { buf[len] = '\0'; @@ -383,7 +386,8 @@ bool CExtUpdate::copyFileList(const std::string & fileList, const std::string & else if (S_ISREG(FileInfo.st_mode)) { WRITE_UPDATE_LOG("copy %s => %s\n", (fList+"/"+dName).c_str(), (dst+"/"+dName).c_str()); - if (!FileHelpers->copyFile((fList+"/"+dName).c_str(), (dst+"/"+dName).c_str(), FileInfo.st_mode & 0x0FFF)) + std::string save = (isBlacklistEntry(fList+"/"+dName)) ? ".save" : ""; + if (!FileHelpers->copyFile((fList+"/"+dName).c_str(), (dst + "/" + dName + save).c_str(), FileInfo.st_mode & 0x0FFF)) return ErrorReset(0, "copyFile error"); } } @@ -424,6 +428,18 @@ bool CExtUpdate::readConfig(const std::string & line) return true; } +bool CExtUpdate::isBlacklistEntry(const std::string & file) +{ + for(vector::iterator it = BlackList.begin(); it != BlackList.end(); ++it) { + if (*it == file) { + DBG_MSG("BlacklistEntry %s\n", (*it).c_str()); + WRITE_UPDATE_LOG("BlacklistEntry: %s\n", (*it).c_str()); + return true; + } + } + return false; +} + bool CExtUpdate::readBackupList(const std::string & dstPath) { char buf[PATH_MAX]; @@ -452,10 +468,37 @@ bool CExtUpdate::readBackupList(const std::string & dstPath) if (fz.__pos == 0) return ErrorReset(RESET_F1, "backuplist filesize is 0"); size_t pos; + std::string line; + + // read blacklist + BlackList.clear(); while(fgets(buf, sizeof(buf), f1) != NULL) { - std::string line = buf; + line = buf; line = trim(line); - // remove comments + // ignore comments + if (line.find_first_of("#") == 0) + continue; + pos = line.find_first_of("#"); + if (pos != std::string::npos) { + line = line.substr(0, pos); + line = trim(line); + } + // find blacklist entry + if (line.find_first_of("-") == 0) { + line = line.substr(1); + if ((line.length() > 1) && (lstat(line.c_str(), &FileInfo) != -1)) { + if (S_ISREG(FileInfo.st_mode)) + BlackList.push_back(line); + } + } + } + + // read backuplist + fseek(f1, 0, SEEK_SET); + while(fgets(buf, sizeof(buf), f1) != NULL) { + line = buf; + line = trim(line); + // ignore comments if (line.find_first_of("#") == 0) { if (line.find_first_of(":") == 1) { // config vars if (line.length() > 1) @@ -468,6 +511,19 @@ bool CExtUpdate::readBackupList(const std::string & dstPath) line = line.substr(0, pos); line = trim(line); } + + // '+' add entry = default + if (line.find_first_of("+") == 0) + line = line.substr(1); + + // '-' blacklist entry + if (line.find_first_of("-") == 0) + continue; + + // Entry '~' (delete) ignore currently still + if (line.find_first_of("~") == 0) + continue; + // special folders else if ((line == "/") || (line == "/*") || (line == "/*.*") || (line.find("/dev") == 0) || (line.find("/proc") == 0) || (line.find("/sys") == 0) || (line.find("/mnt") == 0) || (line.find("/tmp") == 0)) { @@ -501,7 +557,8 @@ bool CExtUpdate::readBackupList(const std::string & dstPath) WRITE_UPDATE_LOG("\n"); WRITE_UPDATE_LOG("file: %s => %s\n", line.c_str(), dst.c_str()); WRITE_UPDATE_LOG("--------------------\n"); - if (!FileHelpers->copyFile(line.c_str(), dst.c_str(), FileInfo.st_mode & 0x0FFF)) + std::string save = (isBlacklistEntry(line)) ? ".save" : ""; + if (!FileHelpers->copyFile(line.c_str(), (dst + save).c_str(), FileInfo.st_mode & 0x0FFF)) return ErrorReset(0, "copyFile error"); } else if (S_ISDIR(FileInfo.st_mode)) { @@ -510,7 +567,7 @@ bool CExtUpdate::readBackupList(const std::string & dstPath) WRITE_UPDATE_LOG("\n"); WRITE_UPDATE_LOG("directory: %s => %s\n", line.c_str(), dst.c_str()); WRITE_UPDATE_LOG("--------------------\n"); - FileHelpers->copyDir(line.c_str(), dst.c_str()); + FileHelpers->copyDir(line.c_str(), dst.c_str(), true); } } diff --git a/src/gui/ext_update.h b/src/gui/ext_update.h index 9f0ee6744..57e1b921a 100644 --- a/src/gui/ext_update.h +++ b/src/gui/ext_update.h @@ -54,6 +54,7 @@ class CExtUpdate std::string backupList, defaultBackup; std::string mountPkt; CFileHelpers* FileHelpers; + std::vector BlackList; bool applySettings(void); bool readBackupList(const std::string & dstPath); @@ -80,6 +81,7 @@ class CExtUpdate bool applySettings(const std::string & filename, int mode); bool ErrorReset(bool modus, const std::string & msg1="", const std::string & msg2=""); + bool isBlacklistEntry(const std::string & file); }; diff --git a/src/system/helpers.cpp b/src/system/helpers.cpp index c993bbf41..23708b752 100644 --- a/src/system/helpers.cpp +++ b/src/system/helpers.cpp @@ -37,6 +37,7 @@ #include #include +#include bool file_exists(const char *filename) { @@ -339,7 +340,7 @@ bool CFileHelpers::copyFile(const char *Src, const char *Dst, mode_t mode) return true; } -bool CFileHelpers::copyDir(const char *Src, const char *Dst) +bool CFileHelpers::copyDir(const char *Src, const char *Dst, bool backupMode) { DIR *Directory; struct dirent *CurrentFile; @@ -402,7 +403,10 @@ bool CFileHelpers::copyDir(const char *Src, const char *Dst) } // is file else if (S_ISREG(FileInfo.st_mode)) { - copyFile(srcPath, dstPath, FileInfo.st_mode & 0x0FFF); + std::string save = ""; + if (backupMode && (CExtUpdate::getInstance()->isBlacklistEntry(srcPath))) + save = ".save"; + copyFile(srcPath, (dstPath + save).c_str(), FileInfo.st_mode & 0x0FFF); } } } diff --git a/src/system/helpers.h b/src/system/helpers.h index b3393a0d3..2d9731494 100644 --- a/src/system/helpers.h +++ b/src/system/helpers.h @@ -50,7 +50,7 @@ class CFileHelpers bool doCopyFlag; bool copyFile(const char *Src, const char *Dst, mode_t mode); - bool copyDir(const char *Src, const char *Dst); + bool copyDir(const char *Src, const char *Dst, bool backupMode=false); bool createDir(const char *Dir, mode_t mode); bool removeDir(const char *Dir); From 967f9f8ef43d60133df269320707d3ededeaf7eb Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Sun, 11 Nov 2012 02:41:51 +0100 Subject: [PATCH 16/69] - infoviewer/streaminfo2: fix resolution 1080 --- src/gui/infoviewer_bb.cpp | 2 ++ src/gui/streaminfo2.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index efba7b31f..58edd77a7 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -499,6 +499,7 @@ void CInfoViewerBB::showIcon_Resolution() icon_name = NEUTRINO_ICON_RESOLUTION_1920; break; case 1080: + case 1088: icon_name = NEUTRINO_ICON_RESOLUTION_1080; break; case 1440: @@ -546,6 +547,7 @@ void CInfoViewerBB::showIcon_Resolution() case 1440: case 1280: case 1080: + case 1088: case 720: icon_name = NEUTRINO_ICON_RESOLUTION_HD; break; diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index 94357d8b6..b9b01188f 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -473,6 +473,8 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) if(channel->getVideoPid() && !(videoDecoder->getBlank())){ videoDecoder->getPictureInfo(xres, yres, framerate); + if (yres == 1088) + yres = 1080; aspectRatio = videoDecoder->getAspectRatio(); } From 7d570537fdf18cc6ed530e8508169a98de27c0ca Mon Sep 17 00:00:00 2001 From: satbaby Date: Mon, 12 Nov 2012 12:23:23 +0100 Subject: [PATCH 17/69] src/driver/rcinput.cpp: use standby_rc in repeat mode only if need --- src/driver/rcinput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 3ecf6e7ef..270afb8d2 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -1218,7 +1218,7 @@ printf("[neutrino] CSectionsdClient::EVT_GOT_CN_EPG\n"); (trkey == RC_plus ) || (trkey == RC_minus ) || (trkey == RC_page_down ) || (trkey == RC_page_up ) || ((bAllowRepeatLR) && ((trkey == RC_left ) || (trkey == RC_right))) || - ((trkey == RC_standby) && (cs_get_revision() > 7)) ) + (g_settings.shutdown_real_rcdelay && ((trkey == RC_standby) && (cs_get_revision() > 7))) ) { #ifdef ENABLE_REPEAT_CHECK if (rc_last_repeat_key != ev.code) { From c37a25172e99c3fec4446e2b067304cb0ac0eb16 Mon Sep 17 00:00:00 2001 From: striper Date: Tue, 13 Nov 2012 19:35:43 +0100 Subject: [PATCH 18/69] - cables.xml: update um and kms --- data/cables.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/data/cables.xml b/data/cables.xml index 9bfecff6e..777088793 100644 --- a/data/cables.xml +++ b/data/cables.xml @@ -25,6 +25,7 @@ + @@ -223,13 +224,12 @@ - - - - - + + + + + - @@ -255,12 +255,12 @@ - - - + + + From b47821214039d924f1fbe42e01fe3212c0120684 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 15 Nov 2012 19:12:13 +0400 Subject: [PATCH 19/69] neutrino.cpp: comment saveSetup in signal handler - this can damage config file, try to protect against broken config - check screen_End* and load load defaults --- src/neutrino.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 9933f5db3..1092a7c5a 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -287,6 +287,15 @@ int CNeutrinoApp::loadSetup(const char * fname) if(!configfile.loadConfig(fname)) { //file existiert nicht erg = 1; + } else { + /* try to detect bad / broken config file */ + if (!configfile.getInt32("screen_EndX_crt", 0) || + !configfile.getInt32("screen_EndY_crt", 0) || + !configfile.getInt32("screen_EndX_lcd", 0) || + !configfile.getInt32("screen_EndY_lcd", 0)) { + printf("[neutrino] config file %s is broken, using defaults\n", fname); + configfile.clear(); + } } std::ifstream checkParentallocked(NEUTRINO_PARENTALLOCKED_FILE); if(checkParentallocked) { @@ -3518,7 +3527,7 @@ void sighandler (int signum) case SIGTERM: case SIGINT: delete CRecordManager::getInstance(); - CNeutrinoApp::getInstance()->saveSetup(NEUTRINO_SETTINGS_FILE); + //CNeutrinoApp::getInstance()->saveSetup(NEUTRINO_SETTINGS_FILE); stop_daemons(); stop_video(); //_exit(0); From 1f65f1bc80d77111bb89c63db910a805c57f3f99 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 15 Nov 2012 19:13:13 +0400 Subject: [PATCH 20/69] eitd/xmlutil.cpp: fix crash, if epg data saved with older image - item/item_description can be present and break parsing --- src/eitd/xmlutil.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/eitd/xmlutil.cpp b/src/eitd/xmlutil.cpp index c57cfa023..b700011f3 100644 --- a/src/eitd/xmlutil.cpp +++ b/src/eitd/xmlutil.cpp @@ -334,16 +334,18 @@ void *insertEventsfromFile(void * data) std::string(xmlGetAttribute(node, "string"))); node = node->xmlNextNode; } -#ifdef USE_ITEM_DESCRIPTION while (xmlGetNextOccurence(node, "item") != NULL) { +#ifdef USE_ITEM_DESCRIPTION e.item = std::string(xmlGetAttribute(node, "string")); +#endif node = node->xmlNextNode; } while (xmlGetNextOccurence(node, "item_description") != NULL) { +#ifdef USE_ITEM_DESCRIPTION e.itemDescription = std::string(xmlGetAttribute(node, "string")); +#endif node = node->xmlNextNode; } -#endif while (xmlGetNextOccurence(node, "extended_text") != NULL) { e.appendExtendedText( std::string(ZapitTools::UTF8_to_Latin1(xmlGetAttribute(node, "lang"))), std::string(xmlGetAttribute(node, "string"))); From 00e188b37d632800761805b08de4617678187583 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 15 Nov 2012 19:16:10 +0400 Subject: [PATCH 21/69] driver/streamts.cpp: fix debug msg --- src/driver/streamts.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/streamts.cpp b/src/driver/streamts.cpp index 0e3142c5c..bfbb5c576 100644 --- a/src/driver/streamts.cpp +++ b/src/driver/streamts.cpp @@ -127,7 +127,7 @@ bool CStreamInstance::Send(ssize_t r) if (ret != r) { if (r < 0) perror("send"); - printf("send err, fd %d: %d\n", *it, r); + printf("send err, fd %d: (%d from %d)\n", *it, ret, r); } } mutex.unlock(); From f2f763391f51e467b88ebb1f62783673cb74f272 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 15 Nov 2012 19:17:19 +0400 Subject: [PATCH 22/69] zapit/src/frontend.cpp: add 50ms delay after reset and before diseqc cmd --- src/zapit/src/frontend.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index 4ffd3be48..c3b6a6a13 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -1168,9 +1168,8 @@ void CFrontend::setDiseqc(int sat_no, const uint8_t pol, const uint32_t frequenc secSetVoltage(v, 100); #endif sendDiseqcReset(); + usleep(50*1000); /* sleep at least 50 milli seconds */ for (loop = 0; loop <= config.diseqcRepeats; loop++) { - //usleep(50*1000); /* sleep at least 50 milli seconds */ - if (config.diseqcType == MINI_DISEQC) sendToneBurst(b, 1); From d9cf5197f4f4628fc57a32ee4dd8f0b0510704b9 Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Thu, 15 Nov 2012 05:21:10 +0100 Subject: [PATCH 23/69] * infoviewer_bb.cpp: Optimize display of simple resolution in the info bar --- src/gui/infoviewer_bb.cpp | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 58edd77a7..62c3bca74 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -542,29 +542,12 @@ void CInfoViewerBB::showIcon_Resolution() } if (g_settings.infobar_show_res == 1) {//show simple resolution icon on infobar videoDecoder->getPictureInfo(xres, yres, framerate); - switch (yres) { - case 1920: - case 1440: - case 1280: - case 1080: - case 1088: - case 720: + if (yres > 704) icon_name = NEUTRINO_ICON_RESOLUTION_HD; - break; - case 704: - case 576: - case 544: - case 528: - case 480: - case 382: - case 352: - case 288: + else if (yres >= 288) icon_name = NEUTRINO_ICON_RESOLUTION_SD; - break; - default: + else icon_name = NEUTRINO_ICON_RESOLUTION_000; - break; - } } } showBBIcons(CInfoViewerBB::ICON_RES, icon_name); From 1ca7ced674c1658fbb65197af7f762e45615eaa0 Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Mon, 12 Nov 2012 16:13:11 +0100 Subject: [PATCH 24/69] * Software Update with apply the settings (Part11) - Deletelist added to delete files or directories from image - Files/Directories are marked by a prefixed '~' in the settingsupdate.conf - Rework readBackupList() --- data/locale/deutsch.locale | 1 + data/locale/english.locale | 1 + data/settingsupdate.conf | 7 ++ src/gui/ext_update.cpp | 168 ++++++++++++++++++++++++++----------- src/gui/ext_update.h | 4 +- src/system/locals.h | 1 + src/system/locals_intern.h | 1 + 7 files changed, 132 insertions(+), 51 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 9084627c8..f620f4e35 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -486,6 +486,7 @@ flashupdate.settings Update-Einstellungen flashupdate.squashfs.noversion Bei Updates werden Versionsüberprüfungen derzeit nur über Web-Updates unterstützt.\nWollen Sie das ausgewählte Image wirklich installieren? flashupdate.titlereadflash Flash auslesen flashupdate.titlewriteflash Flash schreiben +flashupdate.update_with_settings_del_skipped Ordner [%s] kann nicht gelöscht werden. Eintrag wird übersprungen. flashupdate.update_with_settings_processed Image wird bearbeitet... flashupdate.update_with_settings_skipped Ordner [%s] kann nicht gesichert werden. Eintrag wird übersprungen. flashupdate.update_with_settings_successfully Settingsübernahme erfolgreich.\nDas Image kann jetzt geflasht werden. diff --git a/data/locale/english.locale b/data/locale/english.locale index 23118da8d..163dc7cdf 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -486,6 +486,7 @@ flashupdate.settings Update settings flashupdate.squashfs.noversion SquashFS version checks are currently only supported when updating over the web.\nAre you sure that you wish to install this image? flashupdate.titlereadflash Reading Flash flashupdate.titlewriteflash Writing Flash +flashupdate.update_with_settings_del_skipped Folder [%s] can not be deleted. Entry is skipped. flashupdate.update_with_settings_processed Image is being processed... flashupdate.update_with_settings_skipped Folder [%s] can not be saved. Entry is skipped. flashupdate.update_with_settings_successfully Setting takeover successfully.\nThe image can now be flashed. diff --git a/data/settingsupdate.conf b/data/settingsupdate.conf index 1d2ed7a13..9515124bc 100644 --- a/data/settingsupdate.conf +++ b/data/settingsupdate.conf @@ -37,3 +37,10 @@ -/var/tuxbox/config/satellites.xml -/var/tuxbox/config/settingsupdate.conf -/var/tuxbox/config/tobackup.conf + +#---------------------------------------------------------------------------- +## nach der Sicherung aus dem neuen Image zu löschende Dateien/Verzeichnisse, +## gekennzeichnet durch ein vorangestelltes ~ +# z.B. +# ~/share/tuxbox/neutrino/themes/Classic.theme +#---------------------------------------------------------------------------- diff --git a/src/gui/ext_update.cpp b/src/gui/ext_update.cpp index b5b70998c..2e0215c82 100644 --- a/src/gui/ext_update.cpp +++ b/src/gui/ext_update.cpp @@ -73,7 +73,9 @@ CExtUpdate::CExtUpdate() fLogfile = "/tmp/update.log"; mountPkt = "/tmp/image_mount"; FileHelpers = NULL; - BlackList.clear(); + copyList.clear(); + blackList.clear(); + deleteList.clear(); } CExtUpdate::~CExtUpdate() @@ -82,7 +84,9 @@ CExtUpdate::~CExtUpdate() delete[] MTDBuf; if(FileHelpers) delete[] FileHelpers; - BlackList.clear(); + copyList.clear(); + blackList.clear(); + deleteList.clear(); } CExtUpdate* CExtUpdate::getInstance() @@ -120,6 +124,7 @@ bool CExtUpdate::ErrorReset(bool modus, const std::string & msg1, const std::str } if(hintBox) hintBox->hide(); + sync(); return false; } @@ -339,6 +344,7 @@ bool CExtUpdate::applySettings() if(hintBox) hintBox->hide(); + sync(); return true; } @@ -399,6 +405,40 @@ bool CExtUpdate::copyFileList(const std::string & fileList, const std::string & return true; } +bool CExtUpdate::deleteFileList(const std::string & fileList) +{ + Wildcard = ""; + struct dirent **namelist; + std::string fList = fileList; + static struct stat FileInfo; + + size_t pos = fileList.find_last_of("/"); + fList = fileList.substr(0, pos); + Wildcard = fileList.substr(pos+1); + + int n = scandir(fList.c_str(), &namelist, fileSelect, 0); + if (n > 0) { + while (n--) { + std::string dName = namelist[n]->d_name; + if (lstat((fList+"/"+dName).c_str(), &FileInfo) != -1) { + if (S_ISDIR(FileInfo.st_mode)) { + // Directory + WRITE_UPDATE_LOG("delete directory: %s\n", (fList+"/"+dName).c_str()); + FileHelpers->removeDir((fList+"/"+dName).c_str()); + } + else if (S_ISREG(FileInfo.st_mode)) { + // File + WRITE_UPDATE_LOG("delete file: %s\n", (fList+"/"+dName).c_str()); + unlink((fList+"/"+dName).c_str()); + } + } + free(namelist[n]); + } + free(namelist); + } + return true; +} + bool CExtUpdate::findConfigEntry(std::string & line, std::string find) { if (line.find("#:" + find + "=") == 0) { @@ -430,7 +470,7 @@ bool CExtUpdate::readConfig(const std::string & line) bool CExtUpdate::isBlacklistEntry(const std::string & file) { - for(vector::iterator it = BlackList.begin(); it != BlackList.end(); ++it) { + for(vector::iterator it = blackList.begin(); it != blackList.end(); ++it) { if (*it == file) { DBG_MSG("BlacklistEntry %s\n", (*it).c_str()); WRITE_UPDATE_LOG("BlacklistEntry: %s\n", (*it).c_str()); @@ -440,6 +480,20 @@ bool CExtUpdate::isBlacklistEntry(const std::string & file) return false; } +bool CExtUpdate::checkSpecialFolders(std::string line, bool copy) +{ + if ((line == "/") || (line == "/*") || (line == "/*.*") || (line.find("/dev") == 0) || (line.find("/proc") == 0) || + (line.find("/sys") == 0) || (line.find("/mnt") == 0) || (line.find("/tmp") == 0)) { + char buf[PATH_MAX]; + neutrino_locale_t msg = (copy) ? LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_SKIPPED : LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_DEL_SKIPPED; + snprintf(buf, sizeof(buf), g_Locale->getText(msg), line.c_str()); + WRITE_UPDATE_LOG("%s%s", buf, "\n"); + ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, buf, CMessageBox::mbrOk, CMessageBox::mbOk, NEUTRINO_ICON_INFO); + return true; + } + return false; +} + bool CExtUpdate::readBackupList(const std::string & dstPath) { char buf[PATH_MAX]; @@ -470,37 +524,18 @@ bool CExtUpdate::readBackupList(const std::string & dstPath) size_t pos; std::string line; - // read blacklist - BlackList.clear(); - while(fgets(buf, sizeof(buf), f1) != NULL) { - line = buf; - line = trim(line); - // ignore comments - if (line.find_first_of("#") == 0) - continue; - pos = line.find_first_of("#"); - if (pos != std::string::npos) { - line = line.substr(0, pos); - line = trim(line); - } - // find blacklist entry - if (line.find_first_of("-") == 0) { - line = line.substr(1); - if ((line.length() > 1) && (lstat(line.c_str(), &FileInfo) != -1)) { - if (S_ISREG(FileInfo.st_mode)) - BlackList.push_back(line); - } - } - } - - // read backuplist - fseek(f1, 0, SEEK_SET); + // read blacklist and config vars + copyList.clear(); + blackList.clear(); + deleteList.clear(); while(fgets(buf, sizeof(buf), f1) != NULL) { + std::string tmpLine; line = buf; line = trim(line); // ignore comments if (line.find_first_of("#") == 0) { - if (line.find_first_of(":") == 1) { // config vars + // config vars + if (line.find_first_of(":") == 1) { if (line.length() > 1) readConfig(line); } @@ -511,27 +546,39 @@ bool CExtUpdate::readBackupList(const std::string & dstPath) line = line.substr(0, pos); line = trim(line); } - - // '+' add entry = default - if (line.find_first_of("+") == 0) - line = line.substr(1); - - // '-' blacklist entry - if (line.find_first_of("-") == 0) - continue; - - // Entry '~' (delete) ignore currently still - if (line.find_first_of("~") == 0) - continue; - - // special folders - else if ((line == "/") || (line == "/*") || (line == "/*.*") || (line.find("/dev") == 0) || (line.find("/proc") == 0) || - (line.find("/sys") == 0) || (line.find("/mnt") == 0) || (line.find("/tmp") == 0)) { - snprintf(buf, sizeof(buf), g_Locale->getText(LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_SKIPPED), line.c_str()); - WRITE_UPDATE_LOG("%s%s", buf, "\n"); - ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, buf, CMessageBox::mbrOk, CMessageBox::mbOk, NEUTRINO_ICON_INFO); - continue; + // find blackList entry + if (line.find_first_of("-") == 0) { + tmpLine = line.substr(1); + if ((tmpLine.length() > 1) && (lstat(tmpLine.c_str(), &FileInfo) != -1)) { + if (S_ISREG(FileInfo.st_mode)) + blackList.push_back(tmpLine); + } } + // find deleteList entry + else if (line.find_first_of("~") == 0) { + tmpLine = line.substr(1); + if (checkSpecialFolders(tmpLine, false)) + continue; + tmpLine = dstPath + tmpLine; + if (line.length() > 2) + deleteList.push_back(tmpLine); + } + // find copyList entry + else { + tmpLine = (line.find_first_of("+") == 0) ? line.substr(1) : line; // '+' add entry = default + if (checkSpecialFolders(tmpLine, true)) + continue; + if (tmpLine.length() > 1) + copyList.push_back(tmpLine); + } + } + fclose(f1); + + // read copyList + vector::iterator it; + for(it = copyList.begin(); it != copyList.end(); ++it) { + line = *it; + line = trim(line); // remove '/' from line end size_t len = line.length(); pos = line.find_last_of("/"); @@ -573,8 +620,29 @@ bool CExtUpdate::readBackupList(const std::string & dstPath) } } - fclose(f1); + // read DeleteList + for(it = deleteList.begin(); it != deleteList.end(); ++it) { + line = *it; + if (lstat(line.c_str(), &FileInfo) != -1) { + if ((line.find("*") != std::string::npos) || (line.find("?") != std::string::npos)) { + // Wildcards + WRITE_UPDATE_LOG("delete file list: %s\n", line.c_str()); + deleteFileList(line.c_str()); + } + else if (S_ISREG(FileInfo.st_mode)) { + // File + WRITE_UPDATE_LOG("delete file: %s\n", line.c_str()); + unlink(line.c_str()); + } + else if (S_ISDIR(FileInfo.st_mode)){ + // Directory + WRITE_UPDATE_LOG("delete directory: %s\n", line.c_str()); + FileHelpers->removeDir(line.c_str()); + } + } + } + sync(); return true; } diff --git a/src/gui/ext_update.h b/src/gui/ext_update.h index 57e1b921a..e0291641b 100644 --- a/src/gui/ext_update.h +++ b/src/gui/ext_update.h @@ -54,14 +54,16 @@ class CExtUpdate std::string backupList, defaultBackup; std::string mountPkt; CFileHelpers* FileHelpers; - std::vector BlackList; + std::vector copyList, blackList, deleteList; bool applySettings(void); bool readBackupList(const std::string & dstPath); bool copyFileList(const std::string & fileList, const std::string & dstPath); + bool deleteFileList(const std::string & fileList); bool readConfig(const std::string & Config); bool findConfigEntry(std::string & line, std::string find); bool isMtdramLoad(); + bool checkSpecialFolders(std::string line, bool copy); FILE * fUpdate; char updateLogBuf[1024]; diff --git a/src/system/locals.h b/src/system/locals.h index 2a35ef6b2..792767143 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -513,6 +513,7 @@ typedef enum LOCALE_FLASHUPDATE_SQUASHFS_NOVERSION, LOCALE_FLASHUPDATE_TITLEREADFLASH, LOCALE_FLASHUPDATE_TITLEWRITEFLASH, + LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_DEL_SKIPPED, LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_PROCESSED, LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_SKIPPED, LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_SUCCESSFULLY, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 905652f7f..243d504ad 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -513,6 +513,7 @@ const char * locale_real_names[] = "flashupdate.squashfs.noversion", "flashupdate.titlereadflash", "flashupdate.titlewriteflash", + "flashupdate.update_with_settings_del_skipped", "flashupdate.update_with_settings_processed", "flashupdate.update_with_settings_skipped", "flashupdate.update_with_settings_successfully", From f02a95e04d1a665aee5641a371f3e753ba2707c4 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 16 Nov 2012 15:36:59 +0400 Subject: [PATCH 25/69] gui/filebrowser.cpp: save return status to check if all gui must be closed --- src/gui/filebrowser.cpp | 11 +++++++++++ src/gui/filebrowser.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/gui/filebrowser.cpp b/src/gui/filebrowser.cpp index 18d431de1..09cef99fa 100644 --- a/src/gui/filebrowser.cpp +++ b/src/gui/filebrowser.cpp @@ -838,6 +838,7 @@ bool CFileBrowser::exec(const char * const dirname) neutrino_msg_data_t data; bool res = false; + menu_ret = menu_return::RETURN_REPAINT; #ifdef ENABLE_INTERNETRADIO if (m_Mode == ModeSC) { @@ -1105,10 +1106,20 @@ bool CFileBrowser::exec(const char * const dirname) else if (msg == CRCInput::RC_sat || msg == CRCInput::RC_favorites) { //FIXME do nothing ? } + else if (msg == NeutrinoMessages::STANDBY_ON || + msg == NeutrinoMessages::SHUTDOWN || + msg == NeutrinoMessages::SLEEPTIMER) + { + menu_ret = menu_return::RETURN_EXIT_ALL; + loop = false; + g_RCInput->postMsg(msg, data); + } + else { if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { + menu_ret = menu_return::RETURN_EXIT_ALL; loop = false; } } diff --git a/src/gui/filebrowser.h b/src/gui/filebrowser.h index b1e92dabf..5cf100bdf 100644 --- a/src/gui/filebrowser.h +++ b/src/gui/filebrowser.h @@ -177,6 +177,7 @@ class CFileBrowser int x; int y; + int menu_ret; SMSKeyInput m_SMSKeyInput; @@ -229,6 +230,7 @@ class CFileBrowser { return Path; } + int getMenuRet() { return menu_ret; } // size_t CurlWriteToString(void *ptr, size_t size, size_t nmemb, void *data); private: From 36fa514bedfd6e10b9abdb621cfa8d9daa34a837 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 16 Nov 2012 15:37:38 +0400 Subject: [PATCH 26/69] gui/moviebrowser.cpp: save return status to check if all gui must be closed --- src/gui/moviebrowser.cpp | 11 ++++++++++- src/gui/moviebrowser.h | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index 1fd5de186..4aab7d741 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -912,6 +912,7 @@ int CMovieBrowser::exec(CMenuTarget* parent, const std::string & actionKey) int CMovieBrowser::exec(const char* path) { bool res = false; + menu_ret = menu_return::RETURN_REPAINT; TRACE("[mb] start MovieBrowser\r\n"); int timeout = -1; @@ -1034,10 +1035,18 @@ int CMovieBrowser::exec(const char* path) else if (msg == CRCInput::RC_sat || msg == CRCInput::RC_favorites) { //FIXME do nothing ? } + else if ( msg == NeutrinoMessages::STANDBY_ON || + msg == NeutrinoMessages::SHUTDOWN || + msg == NeutrinoMessages::SLEEPTIMER) + { + menu_ret = menu_return::RETURN_EXIT_ALL; + loop = false; + g_RCInput->postMsg(msg, data); + } else if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all) { TRACE("[mb]->exec: getInstance\r\n"); - //res = menu_return::RETURN_EXIT_ALL; + menu_ret = menu_return::RETURN_EXIT_ALL; loop = false; } } diff --git a/src/gui/moviebrowser.h b/src/gui/moviebrowser.h index a18f19fe3..1b3c89712 100644 --- a/src/gui/moviebrowser.h +++ b/src/gui/moviebrowser.h @@ -303,6 +303,7 @@ class CMovieBrowser : public CMenuTarget std::string getScreenshotName(std::string movie); //bool restart_mb_timeout; + int menu_ret; public: // Functions //////////////////////////////////////////////////////////7 CMovieBrowser(const char* path); //P1 @@ -324,6 +325,7 @@ class CMovieBrowser : public CMenuTarget bool delFile(CFile& file); bool delFile_vlc(CFile& file); bool delFile_std(CFile& file); + int getMenuRet() { return menu_ret; } private: //Functions ///// MovieBrowser init /////////////// From ff478108417560003f77a35f53b57c4031f13589 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 16 Nov 2012 15:38:43 +0400 Subject: [PATCH 27/69] gui/movieplayer.cpp: get return status from filebrowser/moviebrowser --- src/gui/movieplayer.cpp | 14 +++++++++++--- src/gui/movieplayer.h | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 6e5446e29..d7e02a6ef 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -223,7 +223,7 @@ int CMoviePlayerGui::exec(CMenuTarget * parent, const std::string & actionKey) timeshift = 0; return menu_return::RETURN_EXIT_ALL; } - return menu_return::RETURN_REPAINT; + return menu_ret; //menu_return::RETURN_REPAINT; } void CMoviePlayerGui::updateLcd() @@ -286,6 +286,7 @@ void CMoviePlayerGui::fillPids() bool CMoviePlayerGui::SelectFile() { bool ret = false; + menu_ret = menu_return::RETURN_REPAINT; /*clear audiopids */ for (int i = 0; i < numpida; i++) { @@ -344,7 +345,8 @@ bool CMoviePlayerGui::SelectFile() ret = true; } - } + } else + menu_ret = moviebrowser->getMenuRet(); } else { // filebrowser if (filebrowser->exec(Path_local.c_str()) == true) { @@ -380,7 +382,8 @@ bool CMoviePlayerGui::SelectFile() } } } - } + } else + menu_ret = filebrowser->getMenuRet(); } if(ret && file_name.empty()) { std::string::size_type pos = full_name.find_last_of('/'); @@ -403,6 +406,7 @@ void CMoviePlayerGui::PlayFile(void) { neutrino_msg_t msg; neutrino_msg_data_t data; + menu_ret = menu_return::RETURN_REPAINT; int position = 0, duration = 0; bool first_start_timeshift = false; @@ -651,6 +655,9 @@ void CMoviePlayerGui::PlayFile(void) msg == NeutrinoMessages::SHUTDOWN || msg == NeutrinoMessages::SLEEPTIMER) { // Exit for Record/Zapto Timers printf("CMoviePlayerGui::PlayFile: ZAPTO etc..\n"); + if(msg != NeutrinoMessages::ZAPTO) + menu_ret = menu_return::RETURN_EXIT_ALL; + playstate = CMoviePlayerGui::STOPPED; g_RCInput->postMsg(msg, data); } else if (msg == CRCInput::RC_timeout) { @@ -661,6 +668,7 @@ void CMoviePlayerGui::PlayFile(void) if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all) { printf("CMoviePlayerGui::PlayFile: neutrino handleMsg messages_return::cancel_all\n"); playstate = CMoviePlayerGui::STOPPED; + menu_ret = menu_return::RETURN_EXIT_ALL; } else if ( msg <= CRCInput::RC_MaxRC ) { update_lcd = true; diff --git a/src/gui/movieplayer.h b/src/gui/movieplayer.h index 31125f1a1..8217045e8 100644 --- a/src/gui/movieplayer.h +++ b/src/gui/movieplayer.h @@ -94,6 +94,7 @@ class CMoviePlayerGui : public CMenuTarget CFileBrowser * filebrowser; CFileFilter tsfilefilter; std::string Path_local; + int menu_ret; /* playback from bookmark */ CBookmarkManager * bookmarkmanager; From 6d7f1efd0662bb9480158c396373f4d546041635 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 16 Nov 2012 15:45:39 +0400 Subject: [PATCH 28/69] gui/audioplayer.cpp: return menu_return::RETURN_EXIT_ALL on standby/shutdown, thanks satbaby for patch --- src/gui/audioplayer.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index c7e82d9ba..13f2184df 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -325,7 +325,7 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &actionKey) if (my_system(AUDIOPLAYER_START_SCRIPT) != 0) perror("Datei " AUDIOPLAYER_START_SCRIPT " fehlt.Bitte erstellen, wenn gebraucht.\nFile " AUDIOPLAYER_START_SCRIPT " not found. Please create if needed.\n"); - show(); + int res = show(); // Restore previous background if (usedBackground) @@ -346,8 +346,7 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &actionKey) CNeutrinoApp::getInstance()->StartSubtitles(); - // always exit all - return menu_return::RETURN_EXIT_ALL; + return res; } //------------------------------------------------------------------------ @@ -359,7 +358,7 @@ int CAudioPlayerGui::show() int pic_index = 0; - int ret = -1; + int ret = menu_return::RETURN_REPAINT; CVFD::getInstance()->setMode(CVFD::MODE_AUDIO); paintLCD(); @@ -878,8 +877,11 @@ int CAudioPlayerGui::show() msg == NeutrinoMessages::SHUTDOWN || msg == NeutrinoMessages::SLEEPTIMER) { + if(msg != NeutrinoMessages::RECORD_START ) + ret = menu_return::RETURN_EXIT_ALL; // Exit for Record/Zapto Timers loop = false; + g_RCInput->postMsg(msg, data); } else if (msg == NeutrinoMessages::EVT_TIMER) @@ -890,6 +892,7 @@ int CAudioPlayerGui::show() { if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { + ret = menu_return::RETURN_EXIT_ALL; loop = false; } // update mute icon From a4df1e2939e7f809d63e692e49b59656aa1c9339 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 16 Nov 2012 15:52:02 +0400 Subject: [PATCH 29/69] gui/mediaplayer.cpp: return result from audio/movie players, thanks satbaby for patch --- src/gui/mediaplayer.cpp | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/gui/mediaplayer.cpp b/src/gui/mediaplayer.cpp index 30172d0f5..62712ee6a 100644 --- a/src/gui/mediaplayer.cpp +++ b/src/gui/mediaplayer.cpp @@ -91,39 +91,27 @@ int CMediaPlayerMenu::exec(CMenuTarget* parent, const std::string &actionKey) { if (audioPlayer == NULL) audioPlayer = new CAudioPlayerGui(); - audioPlayer->exec(NULL, "init"); + int res = audioPlayer->exec(NULL, "init"); - return menu_return::RETURN_REPAINT; + return res /*menu_return::RETURN_REPAINT*/; } else if (actionKey == "inetplayer") { if (inetPlayer == NULL) inetPlayer = new CAudioPlayerGui(true); - inetPlayer->exec(NULL, "init"); + int res = inetPlayer->exec(NULL, "init"); - return menu_return::RETURN_REPAINT; + return res; //menu_return::RETURN_REPAINT; } else if (actionKey == "movieplayer") { -#if 0 //Is it really necessary to lock here? Moviebrowser got its own configurable parental lock. - bool show = true; - if ((g_settings.parentallock_prompt == PARENTALLOCK_PROMPT_ONSIGNAL) || (g_settings.parentallock_prompt == PARENTALLOCK_PROMPT_CHANGETOLOCKED)) { - CZapProtection zapProtection( g_settings.parentallock_pincode, 0x100 ); - show = zapProtection.check(); - } - - if(show){ -#endif - int mode = CNeutrinoApp::getInstance()->getMode(); - if( mode == NeutrinoMessages::mode_radio ) - videoDecoder->StopPicture(); - CMoviePlayerGui::getInstance().exec(NULL, "tsmoviebrowser"); - if( mode == NeutrinoMessages::mode_radio ) - videoDecoder->ShowPicture(DATADIR "/neutrino/icons/radiomode.jpg"); -#if 0 - } -#endif - return menu_return::RETURN_REPAINT;; + int mode = CNeutrinoApp::getInstance()->getMode(); + if( mode == NeutrinoMessages::mode_radio ) + videoDecoder->StopPicture(); + int res = CMoviePlayerGui::getInstance().exec(NULL, "tsmoviebrowser"); + if( mode == NeutrinoMessages::mode_radio ) + videoDecoder->ShowPicture(DATADIR "/neutrino/icons/radiomode.jpg"); + return res; } int res = initMenuMedia(); @@ -236,7 +224,6 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) setUsageMode();//set default usage_mode } - return res; } From 0f8c9bbef19abe362bd8e11ff186a1bc09adf138 Mon Sep 17 00:00:00 2001 From: satbaby Date: Fri, 16 Nov 2012 13:36:12 +0100 Subject: [PATCH 30/69] src/neutrino.cpp: add cancel message to RC_standby_on and RC_power_off (THX Gaucho316) --- src/neutrino.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 1092a7c5a..8323ec90a 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2363,7 +2363,7 @@ _repeat: else if (msg == CRCInput::RC_standby_on) { if (data == 0) g_RCInput->postMsg(NeutrinoMessages::STANDBY_ON, 0); - return messages_return::handled; + return messages_return::cancel_all | messages_return::handled; } else if ((msg == CRCInput::RC_standby_off) || (msg == CRCInput::RC_power_on)) { if (data == 0) @@ -2372,7 +2372,7 @@ _repeat: } else if (msg == CRCInput::RC_power_off) { g_RCInput->postMsg(NeutrinoMessages::SHUTDOWN, 0); - return messages_return::handled; + return messages_return::cancel_all | messages_return::handled; } else if (msg == (neutrino_msg_t) g_settings.key_power_off /*CRCInput::RC_standby*/) { if (data == 0) { From 76947173c0ac2dca9e329c06568b3ee0077fe75c Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 16 Nov 2012 16:49:58 +0400 Subject: [PATCH 31/69] gui/update.cpp: return result from file browser or image select menu --- src/gui/update.cpp | 9 ++++++--- src/gui/update.h | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gui/update.cpp b/src/gui/update.cpp index 591dcaba9..e64dfb39b 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -243,7 +243,7 @@ bool CFlashUpdate::selectHttpImage(void) else ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_NEW_NOTFOUND), CMessageBox::mbrOk, CMessageBox::mbOk, NEUTRINO_ICON_INFO); - SelectionWidget.exec(NULL, ""); + menu_ret = SelectionWidget.exec(NULL, ""); for (std::vector::iterator it = update_t_list.begin(); it != update_t_list.end(); ++it) delete (*it); @@ -343,8 +343,10 @@ printf("[update] mode is %d\n", g_settings.softupdate_mode); UpdatesBrowser.Filter = &UpdatesFilter; CFile * CFileSelected = NULL; - if (!(UpdatesBrowser.exec(g_settings.update_dir))) + if (!(UpdatesBrowser.exec(g_settings.update_dir))) { + menu_ret = UpdatesBrowser.getMenuRet(); return false; + } CFileSelected = UpdatesBrowser.getSelectedFile(); @@ -386,6 +388,7 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &) if(parent) parent->hide(); + menu_ret = menu_return::RETURN_REPAINT; paint(); if(sysfs.size() < 8) { @@ -395,7 +398,7 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &) } if(!checkVersion4Update()) { hide(); - return menu_return::RETURN_REPAINT; + return menu_ret; //menu_return::RETURN_REPAINT; } #ifdef VFD_UPDATE diff --git a/src/gui/update.h b/src/gui/update.h index 98122db86..487ff3eb8 100644 --- a/src/gui/update.h +++ b/src/gui/update.h @@ -53,6 +53,7 @@ class CFlashUpdate : public CProgressWindow std::string installedVersion; std::string newVersion; + int menu_ret; bool selectHttpImage(void); bool getUpdateImage(const std::string & version); From b2e3f2a19b7195a0b4657d7433c7cd59932a19c5 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 16 Nov 2012 19:46:37 +0400 Subject: [PATCH 32/69] locals: add extra hint for local sw update menu point --- data/locale/english.locale | 3 ++- src/system/locals.h | 1 + src/system/locals_intern.h | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/data/locale/english.locale b/data/locale/english.locale index 163dc7cdf..36b2bcc3e 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1035,7 +1035,8 @@ menu.hint_shutdown_rcdelay Enable deep-standby, if power button\npressed more th menu.hint_shutdown_real Enable soft-standby mode\nIf disabled, power button put box to deep-standby menu.hint_sleeptimer Set timer to put your box\nin sleep mode menu.hint_soft_restart Restart Neutrino-HD without reboot -menu.hint_softupdate_check In the Internet or local check for available updates +menu.hint_softupdate_check Check online update, download and flash firmware +menu.hint_softupdate_check_local Select and flash firmware from local file menu.hint_softupdate_expert Separate partitions from the flash read / write to the flash menu.hint_softupdate_expert_read Separate partitions (U-Boot, Splash, Kernel, SystemFS) from the flash read menu.hint_softupdate_expert_write Separate partitions (Splash, Kernel, SystemFS) write to the flash diff --git a/src/system/locals.h b/src/system/locals.h index 792767143..237eb94cf 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -1063,6 +1063,7 @@ typedef enum LOCALE_MENU_HINT_SLEEPTIMER, LOCALE_MENU_HINT_SOFT_RESTART, LOCALE_MENU_HINT_SOFTUPDATE_CHECK, + LOCALE_MENU_HINT_SOFTUPDATE_CHECK_LOCAL, LOCALE_MENU_HINT_SOFTUPDATE_EXPERT, LOCALE_MENU_HINT_SOFTUPDATE_EXPERT_READ, LOCALE_MENU_HINT_SOFTUPDATE_EXPERT_WRITE, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 243d504ad..7d307bdb7 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -1063,6 +1063,7 @@ const char * locale_real_names[] = "menu.hint_sleeptimer", "menu.hint_soft_restart", "menu.hint_softupdate_check", + "menu.hint_softupdate_check_local", "menu.hint_softupdate_expert", "menu.hint_softupdate_expert_read", "menu.hint_softupdate_expert_write", From 2ac735d0ec439c011d154938794fad2ec94f8a27 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 16 Nov 2012 19:47:25 +0400 Subject: [PATCH 33/69] gui/update.cpp: add local variable for update mode --- src/gui/update.cpp | 18 ++++++++++++------ src/gui/update.h | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/gui/update.cpp b/src/gui/update.cpp index e64dfb39b..86a30055f 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -287,9 +287,9 @@ bool CFlashUpdate::checkVersion4Update() CFlashVersionInfo * versionInfo; neutrino_locale_t msg_body; #ifdef DEBUG -printf("[update] mode is %d\n", g_settings.softupdate_mode); +printf("[update] mode is %d\n", softupdate_mode); #endif - if(g_settings.softupdate_mode==1) //internet-update + if(softupdate_mode==1) //internet-update { if(!selectHttpImage()) return false; @@ -383,8 +383,14 @@ printf("[update] mode is %d\n", g_settings.softupdate_mode); return (ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, msg, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) == CMessageBox::mbrYes); // UTF-8 } -int CFlashUpdate::exec(CMenuTarget* parent, const std::string &) +int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) { + printf("CFlashUpdate::exec: [%s]\n", actionKey.c_str()); + if (actionKey == "local") + softupdate_mode = 0; + else + softupdate_mode = 1; + if(parent) parent->hide(); @@ -410,7 +416,7 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &) paint(); showGlobalStatus(20); - if(g_settings.softupdate_mode==1) //internet-update + if(softupdate_mode==1) //internet-update { char const * fname = rindex(filename.c_str(), '/') +1; char fullname[255]; @@ -432,12 +438,12 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &) ft.setStatusViewer(this); showStatusMessageUTF(g_Locale->getText(LOCALE_FLASHUPDATE_MD5CHECK)); // UTF-8 - if((g_settings.softupdate_mode==1) && !ft.check_md5(filename, file_md5)) { + if((softupdate_mode==1) && !ft.check_md5(filename, file_md5)) { hide(); ShowHintUTF(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_FLASHUPDATE_MD5SUMERROR)); // UTF-8 return menu_return::RETURN_REPAINT; } - if(g_settings.softupdate_mode==1) { //internet-update + if(softupdate_mode==1) { //internet-update if ( ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, (fileType < '3') ? "Flash downloaded image ?" : "Install downloaded pack ?", CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) != CMessageBox::mbrYes) // UTF-8 { hide(); diff --git a/src/gui/update.h b/src/gui/update.h index 487ff3eb8..8d9a30266 100644 --- a/src/gui/update.h +++ b/src/gui/update.h @@ -54,6 +54,7 @@ class CFlashUpdate : public CProgressWindow std::string installedVersion; std::string newVersion; int menu_ret; + int softupdate_mode; bool selectHttpImage(void); bool getUpdateImage(const std::string & version); From cce9ced9f3c75965b77205b07b2365c0fe09a5d8 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 16 Nov 2012 19:49:25 +0400 Subject: [PATCH 34/69] gui/update_settings.cpp: always enable both url and local dir option: local dir also used as target to download image from inet --- src/gui/update_settings.cpp | 51 +++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/src/gui/update_settings.cpp b/src/gui/update_settings.cpp index 07de21474..fecfa1912 100644 --- a/src/gui/update_settings.cpp +++ b/src/gui/update_settings.cpp @@ -1,27 +1,27 @@ /* Neutrino-GUI - DBoxII-Project - + Update settings implementation - Neutrino-GUI - + Copyright (C) 2001 Steffen Hehn 'McClean' and some other guys Homepage: http://dbox.cyberphoria.org/ - + Copyright (C) 2012 T. Graf 'dbt' Homepage: http://www.dbox2-tuning.net/ - + License: GPL - + 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 (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, @@ -70,32 +70,32 @@ int CUpdateSettings::exec(CMenuTarget* parent, const std::string &actionKey) { dprintf(DEBUG_DEBUG, "init software-update settings\n"); int res = menu_return::RETURN_REPAINT; - + if (parent) parent->hide(); - + if(actionKey == "update_dir") { const char *action_str = "update"; if(chooserDir(g_settings.update_dir, true, action_str, sizeof(g_settings.update_dir)-1)) printf("[neutrino] new %s dir %s\n", action_str, g_settings.update_dir); - + return res; } #ifndef USE_SMS_INPUT else if(actionKey == "select_url_config_file"){ CFileBrowser fileBrowser; CFileFilter fileFilter; - + fileFilter.addFilter("conf"); fileFilter.addFilter("urls"); fileBrowser.Filter = &fileFilter; - if (fileBrowser.exec("/var/etc") == true) + if (fileBrowser.exec("/var/etc") == true) strncpy(g_settings.softupdate_url_file, fileBrowser.getSelectedFile()->Name.c_str(), 30); - + return res; } #endif - + res = initMenu(); return res; } @@ -104,31 +104,37 @@ int CUpdateSettings::exec(CMenuTarget* parent, const std::string &actionKey) int CUpdateSettings::initMenu() { CMenuWidget w_upsettings(LOCALE_SERVICEMENU_UPDATE, NEUTRINO_ICON_UPDATE, width, MN_WIDGET_ID_SOFTWAREUPDATE_SETTINGS); - + w_upsettings.addIntroItems(LOCALE_FLASHUPDATE_SETTINGS); - + +#if 0 #ifdef USE_SMS_INPUT CMenuForwarder * fw_url = new CMenuForwarder(LOCALE_FLASHUPDATE_URL_FILE, g_settings.softupdate_mode, g_settings.softupdate_url_file, input_url_file, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); #else CMenuForwarder * fw_url = new CMenuForwarder(LOCALE_FLASHUPDATE_URL_FILE, g_settings.softupdate_mode, g_settings.softupdate_url_file, this, "select_url_config_file", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); #endif CMenuForwarder * fw_update_dir = new CMenuForwarder(LOCALE_EXTRA_UPDATE_DIR, !g_settings.softupdate_mode, g_settings.update_dir , this, "update_dir", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); - + CUrlConfigSetupNotifier url_setup_notifier(fw_url, fw_update_dir, updateItem); - + CMenuOptionChooser *oj_mode = new CMenuOptionChooser(LOCALE_FLASHUPDATE_UPDATEMODE, &g_settings.softupdate_mode, FLASHUPDATE_UPDATEMODE_OPTIONS, FLASHUPDATE_UPDATEMODE_OPTION_COUNT, true, &url_setup_notifier); - +#endif + + CMenuForwarder * fw_url = new CMenuForwarder(LOCALE_FLASHUPDATE_URL_FILE, true, g_settings.softupdate_url_file, this, "select_url_config_file", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + CMenuForwarder * fw_update_dir = new CMenuForwarder(LOCALE_EXTRA_UPDATE_DIR, true, g_settings.update_dir , this, "update_dir", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); +#if 0 w_upsettings.addItem(oj_mode, true); w_upsettings.addItem(GenericMenuSeparatorLine); +#endif w_upsettings.addItem(fw_update_dir); w_upsettings.addItem(fw_url); - + int res = w_upsettings.exec (NULL, ""); - + return res; } - +#if 0 CUrlConfigSetupNotifier::CUrlConfigSetupNotifier( CMenuItem* i1, CMenuItem* i2, CMenuForwarder * f1) { toDisable[0] = i1; @@ -149,3 +155,4 @@ bool CUrlConfigSetupNotifier::changeNotify(const neutrino_locale_t, void *) } return false; } +#endif From b627c4767bceb6a43d955fee48447568e43b9c6e Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 16 Nov 2012 19:52:22 +0400 Subject: [PATCH 35/69] gui/update_menue.cpp: show both local and inet update menu points: i dont see reason why user should switch mode in settings before use one or other --- src/gui/update_menue.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/gui/update_menue.cpp b/src/gui/update_menue.cpp index e5f38e0e9..ed09f2468 100644 --- a/src/gui/update_menue.cpp +++ b/src/gui/update_menue.cpp @@ -82,14 +82,24 @@ int CSoftwareUpdate::showSoftwareUpdate() //flashing CFlashUpdate flash; +#if 0 neutrino_locale_t up_text = (g_settings.softupdate_mode == 0) ? LOCALE_FLASHUPDATE_CHECKUPDATE_LOCAL : LOCALE_FLASHUPDATE_CHECKUPDATE_INTERNET; update_item = new CMenuForwarder(up_text, true, NULL, &flash, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); update_item->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_CHECK); softUpdate.addItem(update_item); +#endif + + update_item = new CMenuForwarder(LOCALE_FLASHUPDATE_CHECKUPDATE_INTERNET, true, NULL, &flash, "inet", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + update_item->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_CHECK); + softUpdate.addItem(update_item); + + update_item = new CMenuForwarder(LOCALE_FLASHUPDATE_CHECKUPDATE_LOCAL, true, NULL, &flash, "local", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_GREEN); + update_item->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_CHECK_LOCAL); + softUpdate.addItem(update_item); //settings CUpdateSettings update_settings(update_item); - mf = new CMenuForwarder(LOCALE_FLASHUPDATE_SETTINGS, true, NULL, &update_settings, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf = new CMenuForwarder(LOCALE_FLASHUPDATE_SETTINGS, true, NULL, &update_settings, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_YELLOW); mf->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_SETTINGS); softUpdate.addItem(mf); @@ -98,7 +108,7 @@ int CSoftwareUpdate::showSoftwareUpdate() //expert-functions CMenuWidget mtdexpert(LOCALE_FLASHUPDATE_EXPERTFUNCTIONS, NEUTRINO_ICON_UPDATE, width, MN_WIDGET_ID_MTDEXPERT); showSoftwareUpdateExpert(&mtdexpert); - mf = new CMenuForwarder(LOCALE_FLASHUPDATE_EXPERTFUNCTIONS, true, NULL, &mtdexpert, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf = new CMenuForwarder(LOCALE_FLASHUPDATE_EXPERTFUNCTIONS, true, NULL, &mtdexpert, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_BLUE); mf->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_EXPERT); softUpdate.addItem(mf); From 4af0eed1c59a99fb6621adb9cb11678252fb5ed1 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Fri, 16 Nov 2012 18:37:48 +0100 Subject: [PATCH 36/69] - deutsch.locale: update --- data/locale/deutsch.locale | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index f620f4e35..3df57cfcf 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -1035,7 +1035,8 @@ menu.hint_shutdown_rcdelay Aktiviert den Deep-Standby, wenn der Powerknopf\nlän menu.hint_shutdown_real Aktivieren des Soft-Standby-Modus, wenn diese Option\ndeaktiviert ist, geht die Box in den Deep-Standby menu.hint_sleeptimer Zeitschaltuhr auf Ihrer Box aktivieren.\nDie Box geht dann in den Standby-Modus menu.hint_soft_restart Neustarten von Neutrino-HD ohne zu Rebooten -menu.hint_softupdate_check Im Internet oder lokal nach verfügbaren Updates suchen +menu.hint_softupdate_check Im Internet nach verfügbaren Updates suchen, herunterladen und installieren +menu.hint_softupdate_check_local Lokal nach verfügbaren Updates suchen und installieren menu.hint_softupdate_expert Einzelne Partitionen aus dem Flash lesen / in den Flash schreiben menu.hint_softupdate_expert_read Einzelne Partitionen (U-Boot, Splash, Kernel, SystemFS) aus dem Flash lesen menu.hint_softupdate_expert_write Einzelne Partitionen (Splash, Kernel, SystemFS) in den Flash schreiben From 07639c848868daadcbfddab0eac6b645fc08da13 Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Fri, 16 Nov 2012 21:39:02 +0100 Subject: [PATCH 37/69] * Software Update: Added more files for network settings in settingsupdate.conf --- data/settingsupdate.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/settingsupdate.conf b/data/settingsupdate.conf index 9515124bc..d12e5b7e2 100644 --- a/data/settingsupdate.conf +++ b/data/settingsupdate.conf @@ -22,7 +22,10 @@ #------------------------------------------------------------------------------------------------ ## Sicherungen +/etc/hostname +/etc/hosts /etc/network +/etc/resolv.conf /etc/wpa_supplicant.conf /var/etc /var/tuxbox/config From 1fc054758840dda89e90fc549511e81d662678eb Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Sat, 17 Nov 2012 00:37:08 +0100 Subject: [PATCH 38/69] * src/gui/update_menue.cpp: Fix assignment color buttons --- src/gui/update_menue.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/update_menue.cpp b/src/gui/update_menue.cpp index ed09f2468..c93a40ec5 100644 --- a/src/gui/update_menue.cpp +++ b/src/gui/update_menue.cpp @@ -93,13 +93,13 @@ int CSoftwareUpdate::showSoftwareUpdate() update_item->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_CHECK); softUpdate.addItem(update_item); - update_item = new CMenuForwarder(LOCALE_FLASHUPDATE_CHECKUPDATE_LOCAL, true, NULL, &flash, "local", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_GREEN); + update_item = new CMenuForwarder(LOCALE_FLASHUPDATE_CHECKUPDATE_LOCAL, true, NULL, &flash, "local", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); update_item->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_CHECK_LOCAL); softUpdate.addItem(update_item); //settings CUpdateSettings update_settings(update_item); - mf = new CMenuForwarder(LOCALE_FLASHUPDATE_SETTINGS, true, NULL, &update_settings, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_YELLOW); + mf = new CMenuForwarder(LOCALE_FLASHUPDATE_SETTINGS, true, NULL, &update_settings, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); mf->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_SETTINGS); softUpdate.addItem(mf); @@ -108,7 +108,7 @@ int CSoftwareUpdate::showSoftwareUpdate() //expert-functions CMenuWidget mtdexpert(LOCALE_FLASHUPDATE_EXPERTFUNCTIONS, NEUTRINO_ICON_UPDATE, width, MN_WIDGET_ID_MTDEXPERT); showSoftwareUpdateExpert(&mtdexpert); - mf = new CMenuForwarder(LOCALE_FLASHUPDATE_EXPERTFUNCTIONS, true, NULL, &mtdexpert, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_BLUE); + mf = new CMenuForwarder(LOCALE_FLASHUPDATE_EXPERTFUNCTIONS, true, NULL, &mtdexpert, NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); mf->setHint("", LOCALE_MENU_HINT_SOFTUPDATE_EXPERT); softUpdate.addItem(mf); From a4e480a124a28670bf565ff924703078e40f4b7e Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 17 Nov 2012 09:09:35 +0100 Subject: [PATCH 39/69] - icons: new mounted.png, not_mounted.png --- data/icons/mounted.png | Bin 215 -> 864 bytes data/icons/not_mounted.png | Bin 184 -> 858 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/mounted.png b/data/icons/mounted.png index 7be710bc9cf0574d7923aac49603c679498c9289..c730d0f545f1d74feebaad09006949ebcd25655f 100644 GIT binary patch delta 833 zcmV-H1HSy%0pJFZ7#j!%0002scRlz3000JJOGiWi{{a60|De66laWste+P6)O+^RX z3lRteJMAe7hX4Qq?MXyIR7l6|mCtLOWe~?dGxKIQ&5vE}vFxP>1;s6M5NGO zJoQjKgjP!~_8{0pL61G82BCfpbe0c2x$WqPfFRMIWeaxA;Gt`syF@d|2BxDeW?jzJ*V`_L5Ftp;E z&eua3dp|hcJx%lVCIA^pc;N2O5Y%3zL0G%G_FU8Ef0{?96o8v6H<5t#x!<^b?e@^U z%p$4RK3oA55`gaKe_bR5wF0<#Z0w6qSy;aWhbMr$42YUyFz)uj=kyKg) zN>7?^HW_P=VPXJ$fA!7~khP2pKVRUlwHW*26W6vTvw zzdmH=&m9`=CO-ZQLG4atU>NT%&CuWYhuklnR6e0sjU#!z zuBlIY5D|z9GAWFmZ=wi-VycJ;W{OQI-)?@#-@or80e{SGu=M59P^FPUGU7pf)MBCn z(+LQwl$9Wgf2e|jOv3bg(+m_Ek+a?}ScjNL6&y|`DVPW;36dm5!VkYENVp{Rh zk00}7eV5qtA}7#jH*kEkO-TmRoH&7@cqF2UM8II8Q`rK-fv-{gGDH4W!R+Q zyT=6E{eymIk;TF6|HnPu2cANoKEQSbEcCW||JQ@_8`Y~f{e|%_I&f^`_3O=g00000 LNkvXXu0mjfs;`cV delta 199 zcmaFBcAas8L_G^L0|SFlq{3++B^uxp;`;ypf5sxl1q=);d3m=fDxR>hd7hcM(_yzJ zPyu5}kY6x^!?PP{Kn`btM`SSr1Gf+eGhVt|_Xj8#?djqeA~7{Nfq~JDP36Fe133o{ zEMa)aVKifhfrREk%Y}*_a|~GA86w>pjvhVAk>=3A(7bV@AoHBVOO`Y|FmNd4FyP=g wuvWaKn8ne7!H4URiQ?`l9(>Avd_Nf&9>s9n{~^)13}_F7r>mdKI;Vst0Ic^xx&QzG diff --git a/data/icons/not_mounted.png b/data/icons/not_mounted.png index b394ba62b06796c271709d065d00bcec8c17fb7c..30f909884a121106a00d48374871f4fb6e59cd03 100644 GIT binary patch delta 827 zcmV-B1H}Be0on$T7#j!%0002scRlz3000JJOGiWi{{a60|De66laWste+P6)O+^RX z3lRtgH8`h50ssI4=Sf6CR7l6|l|gSCRS?I2GjEaC&aSKW>`Q8*k|3KDDN!#RDj`n2 zl`qgrkxWbiLb(9vib}nM8d2p=zeJ@#1u21I2&m-XOFu%4qGaC;hqYZhj#MF)Tj%n2 zXW#zkKlA=G4_@0#Om2K|f8%{%2WY%v?B~F(1lXBhm~XV-ZNF0V-Y>mI|FFN40FBnw z7W+T#BO-_jik7PiAgGSs6%ayD1R47TMRoKqhz43$Tl5e6jRe5VFf%kLm|$us0W(MS z1uHW{HQ?r;&|GNFFhA%WkmosO20#K(6a@h8AmWG%W=_y@1w)4{f87jIMPmv0VEbFl zouGl+Yq#0k+hcWgb&Qz+#29fLw}@z6Csr?S*uoML=(Qn0kRNc}>c5tf+| zW1I+3#9=v44V43(?gUeZT2|x9 zk5Bk{f1klo2`Vbo^E!ykmdM?RCIEc$+2#zhdw1`VrYRerZg6~j3=S*TR#>^VGPQ5_ z(Js}ra;8K@#D+=%xc=VtnE=ru&E}f`R4Ntl(trQ!`{Q!1e|6S)_V+XD`316kB0w=r z$Ibct%P;ur&jSX7e-IH65QHqt$g=W~*EiP3fs3Nx%3D{+hu)$Q|tLArG6v%n%i_+8h9?f@(md zY%&!ktyXBaf7hd7hcM(_yzJ zPyu5}kY6x^!?PP{Kn`btM`SSr1Gf+eGhVt|_Xj9wLx6m!eUL%ZAXtD<;Y`b-ndclP>z}^tD?&6DH0zT9aRn(>|kIxFo8X8SEuDC Ppg|0tu6{1-oD!M Date: Sat, 17 Nov 2012 10:29:40 +0100 Subject: [PATCH 40/69] - icons: add hint_mb.png --- data/icons/hint_mb.png | Bin 0 -> 6454 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/icons/hint_mb.png diff --git a/data/icons/hint_mb.png b/data/icons/hint_mb.png new file mode 100644 index 0000000000000000000000000000000000000000..1bb508a8bff372afea2621f1c439809019a60dea GIT binary patch literal 6454 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 QegFUf07*qoM6N<$f<}$CY5)KL literal 0 HcmV?d00001 From 6a1aac4c2dc5f64aea5b420759a5befd5c8a7711 Mon Sep 17 00:00:00 2001 From: OneOfNine Date: Sat, 17 Nov 2012 10:35:06 +0100 Subject: [PATCH 41/69] - icons: improve border_lr.png, border_ul.png --- data/icons/border_lr.png | Bin 692 -> 3556 bytes data/icons/border_ul.png | Bin 713 -> 3913 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/border_lr.png b/data/icons/border_lr.png index 450d5b6f5efa34a9c9ef53ecdf12948b00227e1f..69205da355f76f10bb5e6179adf0f159dc35718e 100644 GIT binary patch literal 3556 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 b`OVcDP_r8IrxWDVj{(-^4rWhGd{X}hYp6F@ delta 680 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 From 51b6928d03e486a0f51b886cc93f8c785e5f46e0 Mon Sep 17 00:00:00 2001 From: OneOfNine Date: Sat, 17 Nov 2012 10:42:01 +0100 Subject: [PATCH 42/69] - icons: improve numericpad.png --- data/icons/numericpad.png | Bin 646 -> 14341 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/numericpad.png b/data/icons/numericpad.png index 101b57842826912d31532ff1e6bdc9f203d73193..ca445e4e46d9941f694679582db80d297658c1ab 100644 GIT binary patch literal 14341 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 D{JkL_ literal 646 zcmV;10(t$3P)005f-0{{R3-@F0<00006P)t-s00000 z$jCGMt_uJF0y{}WK~zY`<<-Gz+dvQi(3NE*2&zPGfi#gnK|&CEs(k7>pWtH1Ie*YS zwLKVewK3Gc;7{06h}pvVz@+1C1HgaUn7(vtQCPIw$4{;>I z&8E_rPCg-?`aK9QicDiUB0O$&@XG>n=97Vi0ezWIA}ieFEQf?itsZADO}Mk7GgH#@ z?-JYI>_K3kgC7|dV`@dyU>ugF>&_7a3eP#rO!#a27?uVvxSUt^iEDD!^0yec7;rfQ z=TBgdTX%8-*bkn>7h^=R%AfaQ2jzxpbC!&f$N3WC(q?!QOGL$YLm%PL4T@?1>tDX=CZ232&~6 zS2lW2<1ck)&P4m(PiV+T^jF_!vcc$Xd|Cl+HVdWy{O9u?;Ao6k6cL0EzUdpG{q=s@ zBTOKCaI3^+xP3cSgrNeQY4o#dB`K#s{312x+coA~uM@xp;joVw>I+*JKl@B|cCpUD zS&@ggwl5g`TSvw`^rdSay`+OJdUX$m&|o_Vt+<2GwEq~gb+Riu>?Z#qcG?VP5rgH= ggVo8lw|fvC0ROvl|A6wQ6#xJL07*qoM6N<$f+L$GE&u=k From 8183e41d331c5165ea3c5d6033e8d3536f48e82a Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 17 Nov 2012 11:33:46 +0100 Subject: [PATCH 43/69] - icons: install hint_mb.png --- data/icons/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index 4dd2afa5f..4b256a96e 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -94,6 +94,7 @@ install_DATA += \ hint_keys.png \ hint_language.png \ hint_manage.png \ + hint_mb.png \ hint_media.png \ hint_movie.png \ hint_network.png \ From 04e71239f2b4a68ab11205f02d9f9702dd232003 Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Mon, 19 Nov 2012 02:32:06 +0100 Subject: [PATCH 44/69] * Software Update: /var/etc/update.urls is excluded from saving - Message 'Setting takeover successfully...' removed --- data/settingsupdate.conf | 1 + src/gui/ext_update.cpp | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/data/settingsupdate.conf b/data/settingsupdate.conf index d12e5b7e2..45eafcac9 100644 --- a/data/settingsupdate.conf +++ b/data/settingsupdate.conf @@ -33,6 +33,7 @@ #---------------------------------------------------------------------------------------- ## von der Sicherung auszuschließende Dateien, gekennzeichnet durch ein vorangestelltes - #---------------------------------------------------------------------------------------- +-/var/etc/update.urls -/var/tuxbox/config/cables.xml -/var/tuxbox/config/encoding.conf -/var/tuxbox/config/providermap.xml diff --git a/src/gui/ext_update.cpp b/src/gui/ext_update.cpp index 2e0215c82..7e4d430e4 100644 --- a/src/gui/ext_update.cpp +++ b/src/gui/ext_update.cpp @@ -155,7 +155,6 @@ bool CExtUpdate::applySettings(const std::string & filename, int mode) return false; } } - ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_SUCCESSFULLY), CMessageBox::mbrOk, CMessageBox::mbOk, NEUTRINO_ICON_INFO); WRITE_UPDATE_LOG("\n"); WRITE_UPDATE_LOG("##### Settings taken. #####\n"); if (mode == MODE_EXPERT) From af7b6d7a986f612f5009781b1192abbd2b60c0fd Mon Sep 17 00:00:00 2001 From: satbaby Date: Mon, 19 Nov 2012 17:58:24 +0100 Subject: [PATCH 45/69] src/driver/streamts.cpp fix segfault --- src/driver/streamts.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/driver/streamts.cpp b/src/driver/streamts.cpp index bfbb5c576..31459da81 100644 --- a/src/driver/streamts.cpp +++ b/src/driver/streamts.cpp @@ -346,8 +346,8 @@ bool CStreamManager::Parse(int fd, stream_pids_t &pids, t_channel_id &chid) } } } - if(CRecordManager::getInstance()->RecordingStatus(tmpid)) { - printf("CStreamManager::Parse: channel %llx recorded, aborting..\n", tmpid); + if(CRecordManager::getInstance()->RecordingStatus(chid)) { + printf("CStreamManager::Parse: channel %llx recorded, aborting..\n", chid); return false; } #endif From fc2c89c664965691bfffaae551ca15b6d0bc3927 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 19 Nov 2012 18:13:35 +0100 Subject: [PATCH 46/69] - src/driver/streamts.cpp: fix linefeed --- src/driver/streamts.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/driver/streamts.cpp b/src/driver/streamts.cpp index 31459da81..1b0e7f15b 100644 --- a/src/driver/streamts.cpp +++ b/src/driver/streamts.cpp @@ -346,8 +346,8 @@ bool CStreamManager::Parse(int fd, stream_pids_t &pids, t_channel_id &chid) } } } - if(CRecordManager::getInstance()->RecordingStatus(chid)) { - printf("CStreamManager::Parse: channel %llx recorded, aborting..\n", chid); + if(CRecordManager::getInstance()->RecordingStatus(chid)) { + printf("CStreamManager::Parse: channel %llx recorded, aborting..\n", chid); return false; } #endif From 8131a25af15413755755bc86b7db551440c583f3 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 19 Nov 2012 22:33:50 +0100 Subject: [PATCH 47/69] - yweb: fix remotecontrol; remove dependency from MAC --- .../tuxboxapi/coolstream/controlapi.cpp | 57 +++++++++-------- .../tuxboxapi/coolstream/neutrinoyparser.cpp | 61 +++++++++---------- src/nhttpd/web/Y_Version.txt | 4 +- 3 files changed, 58 insertions(+), 64 deletions(-) diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp index dfc1c5118..036cf3809 100644 --- a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp @@ -595,44 +595,43 @@ void CControlAPI::InfoCGI(CyhookHandler *hh) void CControlAPI::HWInfoCGI(CyhookHandler *hh) { unsigned int system_rev = cs_get_revision(); - std::string boxname; + std::string boxname = "Coolstream "; static CNetAdapter netadapter; std::string eth_id = netadapter.getMacAddr(); std::transform(eth_id.begin(), eth_id.end(), eth_id.begin(), ::tolower); - if("00:c5:5c" == eth_id.substr(0, 8) ) - boxname = "Coolstream "; - else if("ba:dd:ad" == eth_id.substr(0, 8) ) - boxname = "Armas "; +#if HAVE_TRIPLEDRAGON + boxname = "Armas "; +#endif switch(system_rev) { - case 1: - if( boxname == "Armas ") - boxname += "TripleDragon"; - break; - case 6: - boxname += "HD1"; - break; - case 7: - boxname += "BSE"; - break; - case 8: - case 9: - boxname += "Neo"; - break; - case 10: - boxname += "Zee"; - break; + case 1: + if( boxname == "Armas ") + boxname += "TripleDragon"; + break; + case 6: + boxname += "HD1"; + break; + case 7: + boxname += "BSE"; + break; + case 8: + case 9: + boxname += "Neo"; + break; + case 10: + boxname += "Zee"; + break; - default: { - char buffer[10]; - snprintf(buffer, sizeof(buffer), "%u\n", system_rev); - boxname += "Unknown nr. "; - boxname += buffer; - } - break; + default: + char buffer[10]; + snprintf(buffer, sizeof(buffer), "%u\n", system_rev); + boxname += "Unknown nr. "; + boxname += buffer; + break; } + boxname += (g_info.delivery_system == DVB_S || (system_rev == 1)) ? " SAT":" CABLE"; hh->printf("%s\nMAC:%s\n", boxname.c_str(),eth_id.c_str()); diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp index a4ba3bce3..4498f8064 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp @@ -647,48 +647,43 @@ std::string CNeutrinoYParser::func_get_partition_list(CyhookHandler *, std::str return yresult; } //------------------------------------------------------------------------- -// y-func : get boxtypetext (Nokia, Philips, Sagem) +// y-func : get boxtypetext //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_get_boxtype(CyhookHandler *, std::string) { unsigned int system_rev = cs_get_revision(); - std::string boxname; - static CNetAdapter netadapter; - std::string eth_id = netadapter.getMacAddr(); - std::transform(eth_id.begin(), eth_id.end(), eth_id.begin(), ::tolower); + std::string boxname = "Coolstream "; - if("00:c5:5c" == eth_id.substr(0, 8) ) - boxname = "Coolstream "; - else if("ba:dd:ad" == eth_id.substr(0, 8) ) - boxname = "Armas "; +#if HAVE_TRIPLEDRAGON + boxname = "Armas "; +#endif switch(system_rev) { - case 1: - if( boxname == "Armas ") - boxname += "TripleDragon"; - break; - case 6: - boxname += "HD1"; - break; - case 7: - boxname += "BSE"; - break; - case 8: - case 9: - boxname += "Neo"; - break; - case 10: - boxname += "Zee"; - break; + case 1: + if( boxname == "Armas ") + boxname += "TripleDragon"; + break; + case 6: + boxname += "HD1"; + break; + case 7: + boxname += "BSE"; + break; + case 8: + case 9: + boxname += "Neo"; + break; + case 10: + boxname += "Zee"; + break; - default: { - char buffer[10]; - snprintf(buffer, sizeof(buffer), "%u\n", system_rev); - boxname += "Unknown nr. "; - boxname += buffer; - } - break; + default: + char buffer[10]; + snprintf(buffer, sizeof(buffer), "%u\n", system_rev); + boxname += "Unknown nr. "; + boxname += buffer; + break; } boxname += (g_info.delivery_system == DVB_S || (system_rev == 1)) ? " SAT":" CABLE"; diff --git a/src/nhttpd/web/Y_Version.txt b/src/nhttpd/web/Y_Version.txt index 770a0d8f8..e8859d88d 100644 --- a/src/nhttpd/web/Y_Version.txt +++ b/src/nhttpd/web/Y_Version.txt @@ -1,4 +1,4 @@ -version=2.8.0.30 -date=18.08.2012 +version=2.8.0.31 +date=19.11.2012 type=Release info=Port Coolstream From ed8734e2b9034ae4ad072db9f68dc8a80daee13b Mon Sep 17 00:00:00 2001 From: satbaby Date: Tue, 20 Nov 2012 13:21:33 +0100 Subject: [PATCH 48/69] src/gui/mediaplayer.cpp: fix memleaks when using CMenuForwarder --- src/gui/mediaplayer.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gui/mediaplayer.cpp b/src/gui/mediaplayer.cpp index 62712ee6a..738926d1a 100644 --- a/src/gui/mediaplayer.cpp +++ b/src/gui/mediaplayer.cpp @@ -141,7 +141,9 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) CMenuForwarder *fw_inet = NULL; CMenuForwarder *fw_mp = NULL; CMenuForwarder *fw_pviewer = NULL; + CPictureViewerGui *pictureviewergui = NULL; #if ENABLE_UPNP + CUpnpBrowserGui *upnpbrowsergui = NULL; CMenuForwarder *fw_upnp = NULL; #endif CMenuWidget *moviePlayer = NULL; @@ -170,11 +172,13 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) fw_mp->setHint(NEUTRINO_ICON_HINT_MOVIE, LOCALE_MENU_HINT_MOVIE); //pictureviewer - fw_pviewer = new CMenuForwarder(LOCALE_MAINMENU_PICTUREVIEWER, true, NULL, new CPictureViewerGui(), NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + pictureviewergui = new CPictureViewerGui(); + fw_pviewer = new CMenuForwarder(LOCALE_MAINMENU_PICTUREVIEWER, true, NULL, pictureviewergui, NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); fw_pviewer->setHint(NEUTRINO_ICON_HINT_PICVIEW, LOCALE_MENU_HINT_PICVIEW); #if ENABLE_UPNP //upnp browser - fw_upnp = new CMenuForwarder(LOCALE_UPNPBROWSER_HEAD, true, NULL, new CUpnpBrowserGui(), NULL, CRCInput::RC_0, NEUTRINO_ICON_BUTTON_0); + upnpbrowsergui = new CUpnpBrowserGui(); + fw_upnp = new CMenuForwarder(LOCALE_UPNPBROWSER_HEAD, true, NULL, upnpbrowsergui, NULL, CRCInput::RC_0, NEUTRINO_ICON_BUTTON_0); #endif // media->addIntroItems(NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, usage_mode == MODE_AUDIO ? CMenuWidget::BTN_TYPE_CANCEL : CMenuWidget::BTN_TYPE_BACK); } @@ -221,6 +225,10 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) res = media->exec(NULL, ""); delete media; delete personalize; + delete pictureviewergui; +#if ENABLE_UPNP + delete upnpbrowsergui; +#endif setUsageMode();//set default usage_mode } From e111712fc63c914da53e3a0c5cbf9e801e67be00 Mon Sep 17 00:00:00 2001 From: satbaby Date: Tue, 20 Nov 2012 19:28:28 +0100 Subject: [PATCH 49/69] src/nhttpd/web/Y_VLC.js: fix vlc version parse --- src/nhttpd/web/Y_VLC.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/nhttpd/web/Y_VLC.js b/src/nhttpd/web/Y_VLC.js index 8a594459a..90f007a74 100644 --- a/src/nhttpd/web/Y_VLC.js +++ b/src/nhttpd/web/Y_VLC.js @@ -51,14 +51,15 @@ CyVLC.prototype = { return words[0]; } else - if(navigator.plugins) { - var plug = navigator.plugins['VLC multimedia plugin']; - if(typeof plug == 'undefined') - var plug = navigator.plugins['VLC Multimedia Plugin']; - if(typeof plug == 'undefined') - var plug = navigator.plugins['VLC Multimedia Plug-in']; - var ex = /^.*[vV]ersion [\"]*([^ \"]*)[\"]*.*$/; - var ve = ex.exec(plug.description); + if (navigator.plugins && (navigator.plugins.length > 0)) { + var name = "VLC"; + for(var i=0;i Date: Tue, 20 Nov 2012 21:09:46 +0100 Subject: [PATCH 50/69] - icons: rework btn_*.png --- data/icons/btn_record_active.png | Bin 818 -> 601 bytes data/icons/btn_record_inactive.png | Bin 741 -> 591 bytes data/icons/btn_stop.png | Bin 586 -> 484 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/btn_record_active.png b/data/icons/btn_record_active.png index 68abcabfeb8cb6195ae96f5699d86cc293626d0c..7d4b26252eb1dc928be49368cded33d64e1e4fbb 100644 GIT binary patch delta 587 zcmV-R0<`_I2H6CV8Gi-<001BJ|6u?C00v@9M??VJ0NMcDx;+Oz00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-pq6buj&vEm(20005zNklV{+RJ2U%-@^83)Fy=<5d$_h=AJch1s-HtsINJ_F*k;)El)3 zNGsI}tM6AaBG^8R2x0{hi{0yuMXVvR5tV9%M!k^=fO8I21wi{S#`FP3@?OMXj9|pz zoC6>N@Xn(sXn&5=Uw3%8yv)VVO#nWX%e=jDllIwjM1>et!8^Y%;Ie#!5CY}z-+20Z zkrTb%!0)y7b_IBaYT}2yohSRiY1C;Mn^`7VoL}C@Are$^v+3$Ir2J1v z_+MDaVmgh(d>XIiBu0~&wRH{U4Gq;o`-MSFT*SdiClxYk+9Y+O=!fuUorr-MWn%H*VUrY4hgI+qP}nzJ2?S z9XodJ+_?*gcJ11|d-wmPOAj8{cktlBLx&EXJbCiesZ*y zzI^%W)vMR8UAuAP#{K*E-@SWx@yRqMU_9BE1o;L3rwB0gsnv)Bjp8iuh%9Dc;5!V$ zjK}j=qyPo~dAc};NJyF zSZ(Rwk29;;22S8#9`;G-Z(+8m8_B{pEa^B>MQ;u7_;=q_Fs?Z$@Bgak~k5k zCMFX7{ZFZZ%h$~Oud==>*LoV(Jkd?cjW0^y8Q8R9iRO)$tsmXyPrST)-Kpe#ON~B= z3eL32nZ06DSvtd0|8)XzLFtIx}RdPPlt#GcY6=JYD@<);T3K0RYGyr>Ot{ diff --git a/data/icons/btn_record_inactive.png b/data/icons/btn_record_inactive.png index bcb79cb8fdab09e50fbd0b0e1b7ae1ad54dd8810..54c109af792497bd24df0d1aeeb9f0a16d64bc68 100644 GIT binary patch delta 577 zcmV-H0>1s_1;y^D;S zoWXA5Ll%V#MC8J0;yy}68GZnNAR@m7QCqkpe}a$(M1X=81%FEhDM?`wfsPn%cPGUe z13^R~BRy%F_jcawJhS+A@eR-gQl3_)z;Xn1=bCeAtKE7M`|#i}?H~2K5svJtIzi~dnR6#(ZPstSOPVT>6Aj1;|y!5G1a!8r#&1mK-V zQP2X@Gt+clcYm0jodsYp81Q9xm+bPA=vj=a;GMq}aCtF72!UFy#?rebN~O}oZ?oB? zUazy>TPKVHc1m!0F~L0xiqh$H?vZb*TrSgYzvBCkZ{&GCu}}zjhk8XrpwVbNy7`w2 z3k(J)jIOS5{;t5-La_q<>-U}gJR{GqA6f_mf-1+yUw9=dPAIW#D$%I4-L zvMhT*zPPxc*Xxla3D(L(0RYv&a5!XbZH?`nZL%yQ%QCh;Z?W=Wh2d~W`l3!8$A8>G z?g$|imnOn!^oxy;8?3Iba(;e}F@_{bn4h0#W~PdW;PX2IxpSbPA)q3NwNxurlIImv z16C|i96B>qDiOt&5CY!c9@43IKCMhw{wYM>1-!eSBr*b)`$zr%jr058=F$2aL|XS@ P00000NkvXXu0mjf$i4oK literal 741 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!6%)r1HuVsG}Lt5Hz>7wE_WIQ+{-rl~xzW)CH2@@tvoH%j9#7Pq; zPXdC;lP6CBVGx))b?UTf)20K_^yxEZ%$PZI=B!z>=FFKhZ{EE5^X4sDxM0zuMT-|N zUa?}u%9SfuuU@?dh}NuGyLRomb?Y{6Sif=O#!Z_xZQi_j+qP}nw{PFEW5>>&J9h!m zu3fu#?>=~7-+==M4jw#s=+L2)Cr_R_b?Wr#(`SI_%$c)i&z?JX?&8IZmoHzwdiCnH zYu9evxN-mf{de!)Ro-g&3=DVmk|4j}|3m?X=CJ8Efm%2VJR*x382Ao@Fyrz36)8Z$ zpPnv`Arg|T2jjgD1xOrtc)$8vRQJ@RAeSq?3tg3YTAJSNdcj>1dhs~#l66jdE=sv5 zOyN9d|I%!Gag|)=mOZX|{4Y+NJeDdU*>`nv^}>8L8|lN|qNUrjb64K!5x+Qdde*dc z-?9(SZ9UZa{`&oimoxJY9uYE=-SFx~=#sl@ng5!7zV!O?PY;@JwDKP7WG2HT-5ob)t6e_mRsT!3a}&4v#{j{JFTXGD)Q-QK z#>n;H_uRL4&V7?v&~Vv6GGDFqECcJL4RbOkh23s!sAA6k^|R`s{z{$6iHf|RCvr11 dOez1*Sa&_+uAqU!PhcQ0c)I$ztaD0e0syAohCToQ diff --git a/data/icons/btn_stop.png b/data/icons/btn_stop.png index fa8ceeb6ac94663433ccfc815ace1174e1303c97..319ed8d9db680cfe939a2e520b5fa79c634e448a 100644 GIT binary patch delta 469 zcmV;`0V@8=1mpvd8Gi-<001BJ|6u?C00v@9M??Um00aO8e1Puk00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-pq6bmgV7)hGh0004TNkl!H-=O2JEQ1G%^0v8b&pS(XQszLQ4_Wawts2BA(0!1~bxc+*Ls1kaJDjF2k zKv?$@&>+MRsRkAGqAnD`%y4%AyoZSN0MV{j6+{$K!OQ@N0Lc=LgF9!Zr;J9Ue~vwy z&G>grvjaNW-^&POT7Gi z$zF^If9Ieza?Yp(rqd}`U#?iKR#-9wK)L|!@9$9-B~CF$(&HVpX5ipC6GEUYOOD?i zgUTkxB1#N_*9WhNF?O6@V3{lxM{kdIex&sUfMoP7v(@BHaEO$Nds;m%=r00000 LNkvXXu0mjfc3RA~ delta 572 zcmaFDe2Qg)WIZzj17p0F{ZSyL6W|l#3IuL$Ztm{x9v&W^o}OM_Uf$l`K0ZFazPi%?l{Gar zwY4>Mb#?Xi_5T?d#O-?}?EBfwrZX7NWCS9U8TCx2Gg(Y#u$a!|FrUG0F+G@ zLEEW9wo@gYrZhA(w6wIewzjsnw|91S_V)Jn_4W1l_fMEGVdBJzlO|1?JbChzDO09S zojPsmG$5Ehefo?UGiJ`5IcwIe*|TTQn>TO%{P~L(En2p0*@_h_R<2yRYSpT>YuBz@ zw{HFV^&2;C+*H45)0Qn;wr<_JYuBzrhYlS%a^%E`6Q@s~K701;xpU{vpFe-$!i7th zE?vHS`O1|m*REZ=b?esMyLa#1yZ7YDlmGw!&%BUq%)r1PUlQaO4CLYg3}+?F1b|98 z3p^r=85sBugD~Uq`ur6sK+&0=E{-7*muveB`3@QIxc=u+YUJWnyT9;)8uQeMfYzu- z9h*vX-qo|eagY>v#2at#zfDx&u$qCgs-~3UohN5o)Ruk{eJ;SK5%qjevFMr|OMV4s zY!BtpIHgwJ;+VGAI`@LVmC)JUAJ$)rZ7wj}@YBa}!EuW_=}F!jOlyt(jAJuHo_yu$ wj;QDU9quB!Z{6ydkK^|FuU@+8gy$C)wxdo~PtPkw0A0!8>FVdQ&MBb@07$|Zm;e9( From e454218d913e0ad35ccd941e595f3f60459eca02 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Tue, 20 Nov 2012 21:18:36 +0100 Subject: [PATCH 51/69] - locales: rework menu.hint_softupdate_settings --- data/locale/deutsch.locale | 2 +- data/locale/english.locale | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 3df57cfcf..44c56365d 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -1040,7 +1040,7 @@ menu.hint_softupdate_check_local Lokal nach verfügbaren Updates suchen und inst menu.hint_softupdate_expert Einzelne Partitionen aus dem Flash lesen / in den Flash schreiben menu.hint_softupdate_expert_read Einzelne Partitionen (U-Boot, Splash, Kernel, SystemFS) aus dem Flash lesen menu.hint_softupdate_expert_write Einzelne Partitionen (Splash, Kernel, SystemFS) in den Flash schreiben -menu.hint_softupdate_settings Den Updatemodus, das lokale Verzeichnis und die Konfigurationsdatei festlegen +menu.hint_softupdate_settings Das lokale Update-Verzeichnis und die Konfigurationsdatei festlegen menu.hint_start_tostandby Aktiviert den Standby-Modus nach dem starten der Box menu.hint_streaminfo Aktuelle Sender-Informationen: PIDs, SNR-Verhältnis\nBitrate grafisch menu.hint_subchannel_pos Hier können Sie die Anzeigeposition der Untertitel auswählen diff --git a/data/locale/english.locale b/data/locale/english.locale index 36b2bcc3e..78e18ccb1 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1040,7 +1040,7 @@ menu.hint_softupdate_check_local Select and flash firmware from local file menu.hint_softupdate_expert Separate partitions from the flash read / write to the flash menu.hint_softupdate_expert_read Separate partitions (U-Boot, Splash, Kernel, SystemFS) from the flash read menu.hint_softupdate_expert_write Separate partitions (Splash, Kernel, SystemFS) write to the flash -menu.hint_softupdate_settings Update mode, the local directory and the configuration file to set +menu.hint_softupdate_settings The local update directory and the configuration file to set menu.hint_start_tostandby Enter standby mode after boot menu.hint_streaminfo Current channel info: pids, signal and noise ratio\nBitrate graphs menu.hint_subchannel_pos Select subchannels menu position From d113487d35fd184932574f975ad492381fc61fbc Mon Sep 17 00:00:00 2001 From: satbaby Date: Wed, 21 Nov 2012 13:36:56 +0100 Subject: [PATCH 52/69] src/nhttpd/web/Y_VLC.js fix for vlc windows 2.0.2 version parse --- src/nhttpd/web/Y_VLC.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/nhttpd/web/Y_VLC.js b/src/nhttpd/web/Y_VLC.js index 90f007a74..b51c19e06 100644 --- a/src/nhttpd/web/Y_VLC.js +++ b/src/nhttpd/web/Y_VLC.js @@ -56,13 +56,23 @@ CyVLC.prototype = { for(var i=0;i Date: Wed, 21 Nov 2012 20:37:54 +0400 Subject: [PATCH 53/69] gui/widget/menue.cpp: fix hintbox color if theme changed; fix hint paint for page-up button --- src/gui/widget/menue.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 3b6389265..66b252d8b 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -560,6 +560,7 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) if ((pos < (int)page_start[current_page + 1]) && (pos >= (int)page_start[current_page])) { items[selected]->paint( false ); item->paint( true ); + paintHint(pos); selected = pos; } else { selected=pos; @@ -577,6 +578,7 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) if ((pos < (int)page_start[current_page + 1]) && (pos >= (int)page_start[current_page])) { items[selected]->paint( false ); item->paint( true ); + paintHint(pos); selected = pos; } else { selected=pos; @@ -1132,6 +1134,7 @@ void CMenuWidget::paintHint(int pos) details_line->setYPos(ypos1a); details_line->setYPosDown(ypos2a); details_line->setHMarkDown(markh); + details_line->setColor(COL_MENUCONTENT_PLUS_6, COL_MENUCONTENTDARK_PLUS_0); } details_line->paint(savescreen); @@ -1141,6 +1144,7 @@ void CMenuWidget::paintHint(int pos) info_box->setXPos(x); info_box->setYPos(ypos2); info_box->setWidth(iwidth); + info_box->setColor(COL_MENUCONTENT_PLUS_6, COL_MENUCONTENTDARK_PLUS_0, COL_MENUCONTENTDARK_PLUS_0); } /* force full paint - menu-over i.e. option chooser with pulldown can overwrite */ info_box->paint(savescreen, true); From 89ee8f7a5efc60eb0dc4b9f452850f21edd0a5fb Mon Sep 17 00:00:00 2001 From: satbaby Date: Thu, 22 Nov 2012 13:27:51 +0100 Subject: [PATCH 54/69] src/system/setting_helpers.cpp: use my_system instead of system --- src/system/setting_helpers.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index eeb013c9f..d362132c5 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -58,7 +58,7 @@ #include #include #include - +#include // obsolete #include #include @@ -445,7 +445,7 @@ bool CTZChangeNotifier::changeNotify(const neutrino_locale_t, void * Data) printf("Timezone: %s -> %s\n", name.c_str(), zone.c_str()); std::string cmd = "cp /usr/share/zoneinfo/" + zone + " /etc/localtime"; printf("exec %s\n", cmd.c_str()); - system(cmd.c_str()); + my_system("/bin/sh", "-c", cmd.c_str()); cmd = ":" + zone; setenv("TZ", cmd.c_str(), 1); } @@ -468,7 +468,7 @@ int CDataResetNotifier::exec(CMenuTarget* /*parent*/, const std::string& actionK return true; if(delete_all) { - system("rm -f /var/tuxbox/config/zapit/*.conf"); + my_system("/bin/sh", "-c", "rm -f /var/tuxbox/config/zapit/*.conf"); CServiceManager::getInstance()->SatelliteList().clear(); CZapit::getInstance()->LoadSettings(); CZapit::getInstance()->GetConfig(zapitCfg); @@ -488,7 +488,7 @@ int CDataResetNotifier::exec(CMenuTarget* /*parent*/, const std::string& actionK CFrameBuffer::getInstance()->Clear(); } if(delete_chan) { - system("rm -f /var/tuxbox/config/zapit/*.xml"); + my_system("/bin/sh", "-c", "rm -f /var/tuxbox/config/zapit/*.xml"); g_Zapit->reinitChannels(); } return ret; From 0a7022c1b71eabd556464308208f617135d21305 Mon Sep 17 00:00:00 2001 From: satbaby Date: Thu, 22 Nov 2012 20:14:22 +0100 Subject: [PATCH 55/69] src/zapit/src/zapit.cpp:ParsePatPmt after channels reinit --- src/zapit/src/zapit.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index fe7fc63f6..bcb08d681 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -1055,6 +1055,7 @@ bool CZapit::ParseCommand(CBasicMessage::Header &rmsg, int connfd) PrepareChannels(); current_channel = CServiceManager::getInstance()->FindChannel(cid); + ParsePatPmt(current_channel);//reinit pids SendCmdReady(connfd); SendEvent(CZapitClient::EVT_SERVICES_CHANGED); From 69ab1968b4889ede3d094374b92ed8befd90db87 Mon Sep 17 00:00:00 2001 From: satbaby Date: Thu, 22 Nov 2012 21:03:07 +0100 Subject: [PATCH 56/69] src/gui/moviebrowser.cpp: use CStringInputSMS instead of CStringInput --- src/gui/moviebrowser.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index 4aab7d741..92b0d4d0c 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -2821,7 +2821,7 @@ int CMovieBrowser::showMovieInfoMenu(MI_MOVIE_INFO* movie_info) /********************************************************************/ /** bookmark ******************************************************/ - CStringInput* pBookNameInput[MAX_NUMBER_OF_BOOKMARK_ITEMS]; + CStringInputSMS* pBookNameInput[MAX_NUMBER_OF_BOOKMARK_ITEMS]; CIntInput* pBookPosIntInput[MAX_NUMBER_OF_BOOKMARK_ITEMS]; CIntInput* pBookTypeIntInput[MAX_NUMBER_OF_BOOKMARK_ITEMS]; CMenuWidget* pBookItemMenu[MAX_NUMBER_OF_BOOKMARK_ITEMS]; @@ -2842,7 +2842,7 @@ int CMovieBrowser::showMovieInfoMenu(MI_MOVIE_INFO* movie_info) for(int li =0 ; li < MI_MOVIE_BOOK_USER_MAX && li < MAX_NUMBER_OF_BOOKMARK_ITEMS; li++ ) { - pBookNameInput[li] = new CStringInput (LOCALE_MOVIEBROWSER_EDIT_BOOK, &movie_info->bookmarks.user[li].name, 20, LOCALE_MOVIEBROWSER_EDIT_BOOK_NAME_INFO1, LOCALE_MOVIEBROWSER_EDIT_BOOK_NAME_INFO2, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); + pBookNameInput[li] = new CStringInputSMS (LOCALE_MOVIEBROWSER_EDIT_BOOK, &movie_info->bookmarks.user[li].name, 20, LOCALE_MOVIEBROWSER_EDIT_BOOK_NAME_INFO1, LOCALE_MOVIEBROWSER_EDIT_BOOK_NAME_INFO2, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); pBookPosIntInput[li] = new CIntInput (LOCALE_MOVIEBROWSER_EDIT_BOOK, (int&) movie_info->bookmarks.user[li].pos, 20, LOCALE_MOVIEBROWSER_EDIT_BOOK_POS_INFO1, LOCALE_MOVIEBROWSER_EDIT_BOOK_POS_INFO2); pBookTypeIntInput[li] = new CIntInput (LOCALE_MOVIEBROWSER_EDIT_BOOK, (int&) movie_info->bookmarks.user[li].length, 20, LOCALE_MOVIEBROWSER_EDIT_BOOK_TYPE_INFO1, LOCALE_MOVIEBROWSER_EDIT_BOOK_TYPE_INFO2); @@ -2857,7 +2857,7 @@ int CMovieBrowser::showMovieInfoMenu(MI_MOVIE_INFO* movie_info) /********************************************************************/ /** serie******************************************************/ - CStringInput serieUserInput(LOCALE_MOVIEBROWSER_EDIT_SERIE, &movie_info->serieName, 20, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); + CStringInputSMS serieUserInput(LOCALE_MOVIEBROWSER_EDIT_SERIE, &movie_info->serieName, 20, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); CMenuWidget serieMenu (LOCALE_MOVIEBROWSER_HEAD, NEUTRINO_ICON_MOVIEPLAYER); serieMenu.addIntroItems(LOCALE_MOVIEBROWSER_SERIE_HEAD); @@ -2900,14 +2900,14 @@ int CMovieBrowser::showMovieInfoMenu(MI_MOVIE_INFO* movie_info) snprintf(size,BUFFER_SIZE,"%5llu",movie_info->file.Size>>20); } - CStringInput titelUserInput(LOCALE_MOVIEBROWSER_INFO_TITLE, &movie_info->epgTitle, MAX_STRING, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); + CStringInputSMS titelUserInput(LOCALE_MOVIEBROWSER_INFO_TITLE, &movie_info->epgTitle, (movie_info->epgTitle.empty() || (movie_info->epgTitle.size() < MAX_STRING)) ? MAX_STRING:movie_info->epgTitle.size(), NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); //CStringInputSMS titelUserInput(LOCALE_MOVIEBROWSER_INFO_TITLE, &movie_info->epgTitle, MAX_STRING, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); - CStringInput channelUserInput(LOCALE_MOVIEBROWSER_INFO_CHANNEL, &movie_info->epgChannel, 15, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); - CStringInput epgUserInput(LOCALE_MOVIEBROWSER_INFO_INFO1, &movie_info->epgInfo1, 20, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); + CStringInputSMS channelUserInput(LOCALE_MOVIEBROWSER_INFO_CHANNEL, &movie_info->epgChannel, MAX_STRING, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); + CStringInputSMS epgUserInput(LOCALE_MOVIEBROWSER_INFO_INFO1, &movie_info->epgInfo1, 20, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); CDateInput dateUserDateInput(LOCALE_MOVIEBROWSER_INFO_LENGTH, &movie_info->dateOfLastPlay, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); CDateInput recUserDateInput(LOCALE_MOVIEBROWSER_INFO_LENGTH, &movie_info->file.Time, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); CIntInput lengthUserIntInput(LOCALE_MOVIEBROWSER_INFO_LENGTH, (int&)movie_info->length, 3, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); - CStringInput countryUserInput(LOCALE_MOVIEBROWSER_INFO_PRODCOUNTRY, &movie_info->productionCountry, 11, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "ABCDEFGHIJKLMNOPQRSTUVWXYZ "); + CStringInputSMS countryUserInput(LOCALE_MOVIEBROWSER_INFO_PRODCOUNTRY, &movie_info->productionCountry, 11, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "ABCDEFGHIJKLMNOPQRSTUVWXYZ "); CIntInput yearUserIntInput(LOCALE_MOVIEBROWSER_INFO_PRODYEAR, (int&)movie_info->productionDate, 4, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); CMenuWidget movieInfoMenu(LOCALE_MOVIEBROWSER_HEAD, NEUTRINO_ICON_MOVIEPLAYER /*,m_cBoxFrame.iWidth*/); //TODO: check From fefa483469b0d21d147a513e3f7460720a5da8ae Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Mon, 26 Nov 2012 11:05:20 +0100 Subject: [PATCH 57/69] * Moviebrowser: Ask if the file of a running recording to be deleted. --- data/locale/deutsch.locale | 1 + data/locale/english.locale | 1 + src/driver/record.cpp | 6 ++--- src/driver/record.h | 2 +- src/gui/moviebrowser.cpp | 46 ++++++++++++++++++++++---------------- src/gui/moviebrowser.h | 4 +--- src/system/locals.h | 1 + src/system/locals_intern.h | 1 + 8 files changed, 36 insertions(+), 26 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 44c56365d..09e2a7d51 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -1171,6 +1171,7 @@ motorcontrol.store Speichere Motorposition (a) motorcontrol.timed_mode Zeitgesteuerter Schrittweitenmodus motorcontrol.user_menu Benutzermenü motorcontrol.west_limit Setze westliches (soft) Limit +moviebrowser.ask_rec_to_delete Das Löschen des Films beendet auch die laufende Aufnahme!\n[%s]\nTrotzdem fortsetzen? moviebrowser.book_add Lesezeichen setzen moviebrowser.book_clear_all Lösche alle moviebrowser.book_head Markierungen diff --git a/data/locale/english.locale b/data/locale/english.locale index 78e18ccb1..01e4502c5 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1171,6 +1171,7 @@ motorcontrol.store Store Motor Position (a) motorcontrol.timed_mode Timed Step Mode motorcontrol.user_menu User menu motorcontrol.west_limit Set West (soft) Limit +moviebrowser.ask_rec_to_delete Deletion of movie stops current recording!\n[%s]\nContinue anyway? moviebrowser.book_add Add bookmark moviebrowser.book_clear_all Clear all moviebrowser.book_head Bookmarks diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 93403f3fa..86baeec8e 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -1650,18 +1650,18 @@ void CRecordManager::RestoreNeutrino(void) g_Sectionsd->setPauseScanning(false); } -bool CRecordManager::IsFileRecord(std::string file) +CRecordInstance* CRecordManager::getRecordInstance(std::string file) { mutex.lock(); for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { CRecordInstance * inst = it->second; if ((((std::string)inst->GetFileName()) + ".ts") == file) { mutex.unlock(); - return true; + return inst; } } mutex.unlock(); - return false; + return NULL; } #if 0 diff --git a/src/driver/record.h b/src/driver/record.h index ac5ebc311..b8ee4be99 100644 --- a/src/driver/record.h +++ b/src/driver/record.h @@ -218,7 +218,7 @@ class CRecordManager : public CMenuTarget /*, public CChangeObserver*/ int GetRecordCount() { return recmap.size(); }; void StartTimeshift(); int GetRecordMode(const t_channel_id channel_id=0); - bool IsFileRecord(std::string file); + CRecordInstance* getRecordInstance(std::string file); // old code #if 0 bool IsTimeshift(t_channel_id channel_id=0); diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index 92b0d4d0c..bb3cf9281 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -520,7 +520,6 @@ void CMovieBrowser::init(void) refreshBrowserList(); refreshFilterList(); g_PicViewer->getSupportedImageFormats(PicExts); - IsRecord = false; #if 0 TRACE_1("Frames\r\n\tScren:\t%3d,%3d,%3d,%3d\r\n\tMain:\t%3d,%3d,%3d,%3d\r\n\tTitle:\t%3d,%3d,%3d,%3d \r\n\tBrowsr:\t%3d,%3d,%3d,%3d \r\n\tPlay:\t%3d,%3d,%3d,%3d \r\n\tRecord:\t%3d,%3d,%3d,%3d\r\n\r\n", g_settings.screen_StartX, @@ -1229,13 +1228,6 @@ void CMovieBrowser::refreshMovieInfo(void) m_pcInfo->setText(&emptytext); } else { - // Is record? - bool tmp = CRecordManager::getInstance()->IsFileRecord(m_movieSelectionHandler->file.Name); - if (tmp != IsRecord) { - IsRecord = tmp; - refreshFoot(); - } - bool logo_ok = false; int picw = (int)(((float)16 / (float)9) * (float)m_cBoxFrameInfo.iHeight); int pich = m_cBoxFrameInfo.iHeight; @@ -1638,13 +1630,9 @@ void CMovieBrowser::refreshFoot(void) m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_OKAY, &iw, &ih); m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_OKAY, m_cBoxFrame.iX+xpos1+width*2, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY, m_cBoxFrameFootRel.iHeight+ 6); m_pcFontFoot->RenderString(m_cBoxFrame.iX+xpos1+width*2 + 10 + iw, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY + m_cBoxFrameFootRel.iHeight + 4 , width-30, ok_text.c_str(), (CFBWindow::color_t)color, 0, true); // UTF-8 - - if (IsRecord == false) { - //delete icon - m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_MUTE_SMALL, &iw, &ih); - m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_MUTE_SMALL, m_cBoxFrame.iX+xpos1+width*3, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY, m_cBoxFrameFootRel.iHeight+ 6); - m_pcFontFoot->RenderString(m_cBoxFrame.iX+xpos1+width*3 + 10 + iw , m_cBoxFrame.iY+m_cBoxFrameFootRel.iY + m_cBoxFrameFootRel.iHeight + 4 , width-30, g_Locale->getText(LOCALE_FILEBROWSER_DELETE), (CFBWindow::color_t)color, 0, true); // UTF-8 - } + m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_MUTE_SMALL, &iw, &ih); + m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_MUTE_SMALL, m_cBoxFrame.iX+xpos1+width*3, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY, m_cBoxFrameFootRel.iHeight+ 6); + m_pcFontFoot->RenderString(m_cBoxFrame.iX+xpos1+width*3 + 10 + iw , m_cBoxFrame.iY+m_cBoxFrameFootRel.iY + m_cBoxFrameFootRel.iHeight + 4 , width-30, g_Locale->getText(LOCALE_FILEBROWSER_DELETE), (CFBWindow::color_t)color, 0, true); // UTF-8 } @@ -1740,8 +1728,28 @@ bool CMovieBrowser::onButtonPressMainFrame(neutrino_msg_t msg) } else if (msg == CRCInput::RC_spkr) { - if ((!m_vMovieInfo.empty()) && (m_movieSelectionHandler != NULL) && (IsRecord == false)) - onDeleteFile(*m_movieSelectionHandler); + if ((!m_vMovieInfo.empty()) && (m_movieSelectionHandler != NULL)) { + bool onDelete = true; + bool skipAsk = false; + CRecordInstance* inst = CRecordManager::getInstance()->getRecordInstance(m_movieSelectionHandler->file.Name); + if (inst != NULL) { + std::string delName = m_movieSelectionHandler->epgTitle; + if (delName == "") + delName = m_movieSelectionHandler->file.getFileName(); + char buf1[1024]; + memset(buf1, '\0', sizeof(buf1)); + snprintf(buf1, sizeof(buf1)-1, g_Locale->getText(LOCALE_MOVIEBROWSER_ASK_REC_TO_DELETE), delName.c_str()); + if(ShowMsgUTF(LOCALE_RECORDINGMENU_RECORD_IS_RUNNING, buf1, + CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrNo) + onDelete = false; + else { + g_Timerd->removeTimerEvent(inst->GetRecordingId()); + skipAsk = true; + } + } + if (onDelete) + onDeleteFile(*m_movieSelectionHandler, skipAsk); + } } else if (msg == CRCInput::RC_help || msg == CRCInput::RC_info) { @@ -2045,7 +2053,7 @@ bool CMovieBrowser::onButtonPressMovieInfoList(neutrino_msg_t msg) return (result); } -void CMovieBrowser::onDeleteFile(MI_MOVIE_INFO& movieSelectionHandler) +void CMovieBrowser::onDeleteFile(MI_MOVIE_INFO& movieSelectionHandler, bool skipAsk) { //TRACE( "[onDeleteFile] "); int test= movieSelectionHandler.file.Name.find(".ts"); @@ -2068,7 +2076,7 @@ void CMovieBrowser::onDeleteFile(MI_MOVIE_INFO& movieSelectionHandler) msg += "\r\n "; msg += g_Locale->getText(LOCALE_FILEBROWSER_DODELETE2); - if (ShowMsgUTF(LOCALE_FILEBROWSER_DELETE, msg, CMessageBox::mbrYes, CMessageBox::mbYes|CMessageBox::mbNo)==CMessageBox::mbrYes) + if ((skipAsk) || (ShowMsgUTF(LOCALE_FILEBROWSER_DELETE, msg, CMessageBox::mbrYes, CMessageBox::mbYes|CMessageBox::mbNo)==CMessageBox::mbrYes)) { delFile(movieSelectionHandler.file); diff --git a/src/gui/moviebrowser.h b/src/gui/moviebrowser.h index 1b3c89712..154b7364f 100644 --- a/src/gui/moviebrowser.h +++ b/src/gui/moviebrowser.h @@ -294,8 +294,6 @@ class CMovieBrowser : public CMenuTarget MB_SETTINGS m_settings; std::vector m_dir; - bool IsRecord; - int movieInfoUpdateAll[MB_INFO_MAX_NUMBER]; int movieInfoUpdateAllIfDestEmptyOnly; @@ -368,7 +366,7 @@ class CMovieBrowser : public CMenuTarget void onSetGUIWindow(MB_GUI gui); void onSetGUIWindowNext(void); void onSetGUIWindowPrev(void); - void onDeleteFile(MI_MOVIE_INFO& movieSelectionHandler); // P4 + void onDeleteFile(MI_MOVIE_INFO& movieSelectionHandler, bool skipAsk = false); // P4 bool onSortMovieInfoHandleList(std::vector& pv_handle_list, MB_INFO_ITEM sort_type, MB_DIRECTION direction); ///// parse Storage Directories ///////////// diff --git a/src/system/locals.h b/src/system/locals.h index 237eb94cf..5ae34e13e 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -1198,6 +1198,7 @@ typedef enum LOCALE_MOTORCONTROL_TIMED_MODE, LOCALE_MOTORCONTROL_USER_MENU, LOCALE_MOTORCONTROL_WEST_LIMIT, + LOCALE_MOVIEBROWSER_ASK_REC_TO_DELETE, LOCALE_MOVIEBROWSER_BOOK_ADD, LOCALE_MOVIEBROWSER_BOOK_CLEAR_ALL, LOCALE_MOVIEBROWSER_BOOK_HEAD, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 7d307bdb7..8c58cd2a5 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -1198,6 +1198,7 @@ const char * locale_real_names[] = "motorcontrol.timed_mode", "motorcontrol.user_menu", "motorcontrol.west_limit", + "moviebrowser.ask_rec_to_delete", "moviebrowser.book_add", "moviebrowser.book_clear_all", "moviebrowser.book_head", From 86a95b039fb6c4eea88d06ae730063a52ac0f78a Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Mon, 26 Nov 2012 23:39:43 +0100 Subject: [PATCH 58/69] * Moviebrowser: Fix delete files when recording in progress. --- src/gui/moviebrowser.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index bb3cf9281..f69e7f801 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -1743,7 +1743,11 @@ bool CMovieBrowser::onButtonPressMainFrame(neutrino_msg_t msg) CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrNo) onDelete = false; else { - g_Timerd->removeTimerEvent(inst->GetRecordingId()); + CTimerd::RecordingStopInfo recinfo; + recinfo.channel_id = inst->GetChannelId(); + recinfo.eventID = inst->GetRecordingId(); + CRecordManager::getInstance()->Stop(&recinfo); + g_Timerd->removeTimerEvent(recinfo.eventID); skipAsk = true; } } From 964c6f9af01c300173edb9913a945d80d89f51c9 Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Mon, 26 Nov 2012 22:35:55 +0100 Subject: [PATCH 59/69] * Moviebrowser: Show rec icon when recording in progress. --- src/gui/moviebrowser.cpp | 9 +++++++++ src/gui/widget/listframe.cpp | 32 ++++++++++++++++++++++++++++---- src/gui/widget/listframe.h | 2 ++ 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index f69e7f801..deaa9e536 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -380,6 +380,7 @@ CMovieBrowser::~CMovieBrowser() m_playListLines.lineArray[i].clear(); m_FilterLines.lineArray[i].clear(); } + m_browserListLines.Icon.clear(); } void CMovieBrowser::fileInfoStale(void) @@ -408,6 +409,7 @@ void CMovieBrowser::fileInfoStale(void) m_playListLines.lineArray[i].clear(); m_FilterLines.lineArray[i].clear(); } + m_browserListLines.Icon.clear(); }; void CMovieBrowser::init(void) @@ -937,6 +939,7 @@ int CMovieBrowser::exec(const char* path) m_recordListLines.lineArray[i].clear(); m_playListLines.lineArray[i].clear(); } + m_browserListLines.Icon.clear(); m_selectedDir = path; @@ -1508,6 +1511,7 @@ void CMovieBrowser::refreshBrowserList(void) //P1 m_browserListLines.lineArray[row].clear(); m_browserListLines.rowWidth[row] = m_settings.browserRowWidth[row]; m_browserListLines.lineHeader[row]= g_Locale->getText(m_localizedItemName[m_settings.browserRowItem[row]]); + m_browserListLines.Icon.clear(); } m_vHandleBrowserList.clear(); @@ -1545,8 +1549,13 @@ void CMovieBrowser::refreshBrowserList(void) //P1 if(m_settings.browserRowItem[row] == MB_INFO_TITLE) getMovieInfoItem(*m_vHandleBrowserList[handle], MB_INFO_FILENAME, &string_item); } + m_browserListLines.lineArray[row].push_back(string_item); } + if (CRecordManager::getInstance()->getRecordInstance(m_vHandleBrowserList[handle]->file.Name) != NULL) + m_browserListLines.Icon.push_back(NEUTRINO_ICON_REC); + else + m_browserListLines.Icon.push_back(""); } m_pcBrowser->setLines(&m_browserListLines); diff --git a/src/gui/widget/listframe.cpp b/src/gui/widget/listframe.cpp index 8a9678ede..7484f1148 100644 --- a/src/gui/widget/listframe.cpp +++ b/src/gui/widget/listframe.cpp @@ -389,6 +389,20 @@ void CListFrame::refreshScroll(void) } } +int CListFrame::paintListIcon(int x, int y, int line) +{ + int xDiff = 0; + if (m_pLines->Icon[line] != "") { + int icol_w, icol_h; + frameBuffer->getIconSize(m_pLines->Icon[line].c_str(), &icol_w, &icol_h); + if ((icol_w > 0) && (icol_h > 0)) { + frameBuffer->paintIcon(m_pLines->Icon[line], x+m_cFrame.iX, y+m_cFrame.iY-m_nFontListHeight, m_nFontListHeight); + xDiff = icol_w + TEXT_BORDER_WIDTH; + } + } + return xDiff; +} + void CListFrame::refreshList(void) { //TRACE("[CListFrame]->refreshList: %d\r\n",m_nCurrentLine); @@ -417,6 +431,9 @@ void CListFrame::refreshList(void) int width; int x = m_cFrameListRel.iX + TEXT_BORDER_WIDTH; y += m_nFontListHeight; + + int xDiff = paintListIcon(x, y, line); + int net_width = m_cFrameListRel.iWidth - ROW_BORDER_WIDTH * (m_pLines->rows - 1); for(int row = 0; row < m_pLines->rows; row++) { @@ -426,8 +443,10 @@ void CListFrame::refreshList(void) width = m_cFrameListRel.iWidth - x + m_cFrameListRel.iX - TEXT_BORDER_WIDTH; //TRACE(" normalize width to %d , x:%d \r\n",width,x); } - m_pcFontList->RenderString(x+m_cFrame.iX, y+m_cFrame.iY, - width, m_pLines->lineArray[row][line].c_str(), + if (row > 0) + xDiff = 0; + m_pcFontList->RenderString(x+m_cFrame.iX+xDiff, y+m_cFrame.iY, + width-xDiff, m_pLines->lineArray[row][line].c_str(), color, 0, true); // UTF-8 x += width + ROW_BORDER_WIDTH; } @@ -462,13 +481,18 @@ void CListFrame::refreshLine(int line) int width; int x = m_cFrameListRel.iX + TEXT_BORDER_WIDTH; y += m_nFontListHeight; + + int xDiff = paintListIcon(x, y, line); + int net_width = m_cFrameListRel.iWidth - ROW_BORDER_WIDTH * (m_pLines->rows - 1); for(int row = 0; row < m_pLines->rows; row++) { width = std::min(m_pLines->rowWidth[row] * net_width / 100, m_cFrameListRel.iWidth - x + m_cFrameListRel.iX - TEXT_BORDER_WIDTH); - m_pcFontList->RenderString(x+m_cFrame.iX, y+m_cFrame.iY, - width, m_pLines->lineArray[row][line].c_str(), + if (row > 0) + xDiff = 0; + m_pcFontList->RenderString(x+m_cFrame.iX+xDiff, y+m_cFrame.iY, + width-xDiff, m_pLines->lineArray[row][line].c_str(), color, 0, true); // UTF-8 x += width + ROW_BORDER_WIDTH; } diff --git a/src/gui/widget/listframe.h b/src/gui/widget/listframe.h index ff457c8dd..f548bfd2b 100644 --- a/src/gui/widget/listframe.h +++ b/src/gui/widget/listframe.h @@ -63,6 +63,7 @@ typedef struct std::string lineHeader[LF_MAX_ROWS]; std::vector lineArray[LF_MAX_ROWS]; int rowWidth[LF_MAX_ROWS]; + std::vector Icon; }LF_LINES; class CListFrame @@ -78,6 +79,7 @@ class CListFrame void refreshHeaderList(void); void reSizeMainFrameWidth(int maxTextWidth); void reSizeMainFrameHeight(int maxTextHeight); + int paintListIcon(int x, int y, int line); /* Variables */ LF_LINES* m_pLines; From ab2412343095f7db06031e6c351b82821f7c4ed3 Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Tue, 27 Nov 2012 01:15:25 +0100 Subject: [PATCH 60/69] * Timerlist: Show rec icon when recording in progress. --- src/gui/timerlist.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index 406e10ef5..c0c15595a 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -734,6 +734,21 @@ void CTimerList::paintItem(int pos) g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+fw*13+(real_width-fw*23)/2,ypos+fheight, (real_width-fw*13)/2-5, srepeatcount, color, fheight, true); // UTF-8 } g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+fw*13+(real_width-fw*13)/2,ypos+fheight, (real_width-fw*13)/2-5, convertTimerType2String(timer.eventType), color, fheight, true); // UTF-8 + + // paint rec icon when recording in progress + if ((timer.eventType == CTimerd::TIMER_RECORD) && (CRecordManager::getInstance()->RecordingStatus(timer.channel_id))) { + CTimerd::RecordingStopInfo recinfo; + recinfo.channel_id = timer.channel_id; + recinfo.eventID = timer.eventID; + if (CRecordManager::getInstance()->IsRecording(&recinfo)) { + int icol_w, icol_h; + frameBuffer->getIconSize(NEUTRINO_ICON_REC, &icol_w, &icol_h); + if ((icol_w > 0) && (icol_h > 0)) { + frameBuffer->paintIcon(NEUTRINO_ICON_REC, (x + real_width) - (icol_w + 8), ypos, 2*fheight); + } + } + } + std::string zAddData(""); switch (timer.eventType) { From 8c5a09712e5d41c12260bf6dcdf86afaa81702a7 Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Tue, 27 Nov 2012 12:12:59 +0100 Subject: [PATCH 61/69] * Moviebrowser: Fix segfault if movie list is empty --- src/gui/widget/listframe.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/listframe.cpp b/src/gui/widget/listframe.cpp index 7484f1148..437cdd0c9 100644 --- a/src/gui/widget/listframe.cpp +++ b/src/gui/widget/listframe.cpp @@ -392,7 +392,7 @@ void CListFrame::refreshScroll(void) int CListFrame::paintListIcon(int x, int y, int line) { int xDiff = 0; - if (m_pLines->Icon[line] != "") { + if ((!m_pLines->Icon.empty()) && (m_pLines->Icon[line] != "")) { int icol_w, icol_h; frameBuffer->getIconSize(m_pLines->Icon[line].c_str(), &icol_w, &icol_h); if ((icol_w > 0) && (icol_h > 0)) { From 3cad732b06b907c02bc2804024202ea6f20c9d12 Mon Sep 17 00:00:00 2001 From: micha-bbg Date: Tue, 27 Nov 2012 12:21:52 +0100 Subject: [PATCH 62/69] * Moviebrowser: Show message when deleting files --- data/locale/deutsch.locale | 1 + data/locale/english.locale | 1 + src/gui/moviebrowser.cpp | 5 +++++ src/system/locals.h | 1 + src/system/locals_intern.h | 1 + 5 files changed, 9 insertions(+) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 09e2a7d51..3b3930340 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -1189,6 +1189,7 @@ moviebrowser.browser_row_head Spalten Einstellungen moviebrowser.browser_row_item Spalteninfo moviebrowser.browser_row_nr Anzahl Spalten moviebrowser.browser_row_width Spaltenbreite [% der Gesamtbreite] +moviebrowser.delete_info Lösche Dateien, bitte warten... moviebrowser.dir Pfad moviebrowser.dir_head Zusätzliche Verzeichnisse moviebrowser.edit_book Bookmark Ändern diff --git a/data/locale/english.locale b/data/locale/english.locale index 01e4502c5..45aa2db2f 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1189,6 +1189,7 @@ moviebrowser.browser_row_head Row settings moviebrowser.browser_row_item Row item moviebrowser.browser_row_nr Number of rows moviebrowser.browser_row_width Row width (% of screenwidth) +moviebrowser.delete_info Delete files, please wait... moviebrowser.dir Path moviebrowser.dir_head Additional paths moviebrowser.edit_book Bookmark change diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index deaa9e536..adc0e056a 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -2091,6 +2091,8 @@ void CMovieBrowser::onDeleteFile(MI_MOVIE_INFO& movieSelectionHandler, bool skip msg += g_Locale->getText(LOCALE_FILEBROWSER_DODELETE2); if ((skipAsk) || (ShowMsgUTF(LOCALE_FILEBROWSER_DELETE, msg, CMessageBox::mbrYes, CMessageBox::mbYes|CMessageBox::mbNo)==CMessageBox::mbrYes)) { + CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_MOVIEBROWSER_DELETE_INFO)); + hintBox->paint(); delFile(movieSelectionHandler.file); #if 1 @@ -2117,6 +2119,9 @@ void CMovieBrowser::onDeleteFile(MI_MOVIE_INFO& movieSelectionHandler, bool skip //delFile(file_xml); unlink(file_xml.Name.c_str()); } + hintBox->hide(); + delete hintBox; + g_RCInput->clearRCMsg(); m_vMovieInfo.erase( (std::vector::iterator)&movieSelectionHandler); TRACE("List size: %d\n", m_vMovieInfo.size()); diff --git a/src/system/locals.h b/src/system/locals.h index 5ae34e13e..92fa4c9b3 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -1216,6 +1216,7 @@ typedef enum LOCALE_MOVIEBROWSER_BROWSER_ROW_ITEM, LOCALE_MOVIEBROWSER_BROWSER_ROW_NR, LOCALE_MOVIEBROWSER_BROWSER_ROW_WIDTH, + LOCALE_MOVIEBROWSER_DELETE_INFO, LOCALE_MOVIEBROWSER_DIR, LOCALE_MOVIEBROWSER_DIR_HEAD, LOCALE_MOVIEBROWSER_EDIT_BOOK, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 8c58cd2a5..55c0a402b 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -1216,6 +1216,7 @@ const char * locale_real_names[] = "moviebrowser.browser_row_item", "moviebrowser.browser_row_nr", "moviebrowser.browser_row_width", + "moviebrowser.delete_info", "moviebrowser.dir", "moviebrowser.dir_head", "moviebrowser.edit_book", From 5e4a541781ac0d4969cca7ab57b98dc79b7d2fc1 Mon Sep 17 00:00:00 2001 From: satbaby Date: Wed, 28 Nov 2012 19:03:03 +0100 Subject: [PATCH 63/69] src/nhttpd: clean code --- .../tuxboxapi/coolstream/controlapi.cpp | 54 +++++++++---------- src/nhttpd/tuxboxapi/coolstream/controlapi.h | 2 +- .../tuxboxapi/coolstream/neutrinoapi.cpp | 7 ++- src/nhttpd/tuxboxapi/coolstream/neutrinoapi.h | 2 +- .../tuxboxapi/coolstream/neutrinoyparser.cpp | 14 ++--- .../tuxboxapi/coolstream/neutrinoyparser.h | 6 +-- src/nhttpd/yhttpd.cpp | 10 ++-- src/nhttpd/yhttpd_core/helper.cpp | 4 +- src/nhttpd/yhttpd_core/yconnection.cpp | 3 +- src/nhttpd/yhttpd_core/yconnection.h | 2 +- src/nhttpd/yhttpd_core/yhook.h | 4 +- src/nhttpd/yhttpd_core/ylanguage.h | 2 +- src/nhttpd/yhttpd_core/yrequest.cpp | 2 +- src/nhttpd/yhttpd_core/yresponse.cpp | 4 +- src/nhttpd/yhttpd_core/yresponse.h | 6 +-- src/nhttpd/yhttpd_core/ysocket.cpp | 5 +- src/nhttpd/yhttpd_core/ywebserver.cpp | 7 ++- src/nhttpd/yhttpd_mods/mod_auth.cpp | 6 +-- src/nhttpd/yhttpd_mods/mod_auth.h | 3 +- src/nhttpd/yhttpd_mods/mod_cache.cpp | 12 ++--- src/nhttpd/yhttpd_mods/mod_cache.h | 6 +-- src/nhttpd/yhttpd_mods/mod_sendfile.cpp | 10 ++-- src/nhttpd/yhttpd_mods/mod_sendfile.h | 6 +-- src/nhttpd/yhttpd_mods/mod_testhook.h | 2 +- src/nhttpd/yhttpd_mods/mod_weblog.cpp | 8 +-- src/nhttpd/yhttpd_mods/mod_weblog.h | 4 +- src/nhttpd/yhttpd_mods/mod_yparser.cpp | 20 ++++--- src/nhttpd/yhttpd_mods/mod_yparser.h | 8 +-- 28 files changed, 106 insertions(+), 113 deletions(-) diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp index 036cf3809..c2c078a67 100644 --- a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp @@ -34,16 +34,16 @@ #include #include #include -#include "gui/plugins.h"//for relodplugins +#include //for relodplugins #include #include -#include "gui/rc_lock.h" +#include // yhttpd -#include "yhttpd.h" -#include "ytypes_globals.h" -#include "ylogging.h" -#include "helper.h" +#include +#include +#include +#include // nhttpd #include "neutrinoapi.h" #include "controlapi.h" @@ -220,7 +220,6 @@ const CControlAPI::TyCgiCall CControlAPI::yCgiCallList[]= void CControlAPI::Execute(CyhookHandler *hh) { int index = -1; - std::string yresult; std::string filename = hh->UrlData["filename"]; log_level_printf(4,"ControlAPI.Execute filename:(%s)\n",filename.c_str()); @@ -892,7 +891,6 @@ void CControlAPI::ChannellistCGI(CyhookHandler *hh) std::string CControlAPI::_GetBouquetActualEPGItem(CyhookHandler *hh, CZapitChannel * channel) { std::string result, firstEPG, secondEPG = ""; t_channel_id current_channel = CZapit::getInstance()->GetCurrentChannelID(); - int percentage = 100; std::string timestr; CSectionsdClient::responseGetCurrentNextInfoChannelID currentNextInfo; @@ -900,6 +898,7 @@ std::string CControlAPI::_GetBouquetActualEPGItem(CyhookHandler *hh, CZapitChann event = NeutrinoAPI->ChannelListEvents[channel->channel_id]; if (event) { + int percentage = 100; if (event->duration > 0) percentage = 100 * (time(NULL) - event->startTime) / event->duration; CEitManager::getInstance()->getCurrentNextServiceKey(channel->channel_id, currentNextInfo); @@ -1366,7 +1365,7 @@ void CControlAPI::EpgCGI(CyhookHandler *hh) { else if (hh->ParamList.empty() || hh->ParamList["1"] == "ext") { hh->SetHeader(HTTP_OK, "text/plain; charset=UTF-8"); bool isExt = (hh->ParamList["1"] == "ext"); - CChannelEvent *event; + CChannelEvent *event = NULL; NeutrinoAPI->GetChannelEvents(); int mode = NeutrinoAPI->Zapit->getMode(); @@ -1389,7 +1388,7 @@ void CControlAPI::EpgCGI(CyhookHandler *hh) { // query details for given eventid else if (hh->ParamList["eventid"] != "") { //special epg query - uint64_t epgid; + uint64_t epgid = 0; sscanf(hh->ParamList["eventid"].c_str(), "%llu", &epgid); CShortEPGData epg; if (CEitManager::getInstance()->getEPGidShort(epgid, &epg)) { @@ -1400,8 +1399,8 @@ void CControlAPI::EpgCGI(CyhookHandler *hh) { } else if (hh->ParamList["eventid2fsk"] != "") { if (hh->ParamList["starttime"] != "") { - uint64_t epgid; - time_t starttime; + uint64_t epgid = 0; + time_t starttime = 0; sscanf(hh->ParamList["fskid"].c_str(), "%llu", &epgid); sscanf(hh->ParamList["starttime"].c_str(), "%lu", &starttime); CEPGData longepg; @@ -1414,7 +1413,7 @@ void CControlAPI::EpgCGI(CyhookHandler *hh) { } // list EPG for channel id else if (!(hh->ParamList["id"].empty())) { - t_channel_id channel_id; + t_channel_id channel_id = 0; sscanf(hh->ParamList["id"].c_str(), SCANF_CHANNEL_ID_TYPE, &channel_id); CEitManager::getInstance()->getEventsServiceKey(channel_id, NeutrinoAPI->eList); CChannelEventList::iterator eventIterator; @@ -1431,7 +1430,7 @@ void CControlAPI::EpgCGI(CyhookHandler *hh) { // list EPG for channelID 64Bit else { //eventlist for a chan - t_channel_id channel_id; + t_channel_id channel_id = 0; sscanf(hh->ParamList["1"].c_str(), SCANF_CHANNEL_ID_TYPE, &channel_id); SendEventList(hh, channel_id); } @@ -2006,10 +2005,9 @@ void CControlAPI::SendTimersXML(CyhookHandler *hh) void CControlAPI::YWebCGI(CyhookHandler *hh) { bool status=true; - int para; if (hh->ParamList["video_stream_pids"] != "") { - para=0; + int para=0; sscanf( hh->ParamList["video_stream_pids"].c_str(), "%d", ¶); YWeb_SendVideoStreamingPids(hh, para); } @@ -2072,7 +2070,7 @@ std::string CControlAPI::YexecuteScript(CyhookHandler *, std::string cmd) // get file std::string fullfilename; script += ".sh"; //add script extention - char cwd[255]; + char cwd[255]={0}; getcwd(cwd, 254); for (unsigned int i=0; iParamList["alarm"] != "") @@ -2145,7 +2142,7 @@ void CControlAPI::doNewTimer(CyhookHandler *hh) // Alarm Time - Format exact! HH:MM if(hh->ParamList["alTime"] != "") strptime(hh->ParamList["alTime"].c_str(), "%H:%M", alarmTime); - alHour = alarmTime->tm_hour; + int alHour = alarmTime->tm_hour; correctTime(alarmTime); alarmTimeT = mktime(alarmTime); @@ -2389,10 +2386,8 @@ void CControlAPI::moveBouquetCGI(CyhookHandler *hh) //------------------------------------------------------------------------- void CControlAPI::deleteBouquetCGI(CyhookHandler *hh) { - int selected = -1; - if (hh->ParamList["selected"] != "") { - selected = atoi(hh->ParamList["selected"].c_str()); + int selected = atoi(hh->ParamList["selected"].c_str()); NeutrinoAPI->Zapit->deleteBouquet(selected - 1); hh->SendOk(); } @@ -2479,7 +2474,7 @@ void CControlAPI::updateBouquetCGI(CyhookHandler *hh) // host : (optional) ip of dbox void CControlAPI::build_live_url(CyhookHandler *hh) { - std::string xpids,port,yresult; + std::string xpids; int mode = NeutrinoAPI->Zapit->getMode(); if ( mode == CZapitClient::MODE_TV) @@ -2735,18 +2730,13 @@ void CControlAPI::FileCGI(CyhookHandler *hh) { if (hh->ParamList["action"] == "list") { // directory list: action=list&path= DIR *dirp; - struct dirent*entry; - struct stat statbuf; - struct passwd *pwd; - struct group *grp; - struct tm *tm; - char datestring[256]; TOutType outType = hh->outStart(); std::string path = hh->ParamList["path"]; if ((dirp = opendir(path.c_str()))) { bool isFirstLine = true; + struct dirent *entry; while ((entry = readdir(dirp))) { std::string item = ""; item += hh->outPair("name", @@ -2767,6 +2757,7 @@ void CControlAPI::FileCGI(CyhookHandler *hh) { std::string fullname = path + entry->d_name; item += hh->outPair("fullname", hh->outValue(fullname), true); + struct stat statbuf; if (stat(fullname.c_str(), &statbuf) != -1) { item += hh->outPair( @@ -2780,6 +2771,7 @@ void CControlAPI::FileCGI(CyhookHandler *hh) { string_printf("%d", statbuf.st_nlink), true); /* Print out owner's name if it is found using getpwuid(). */ + struct passwd *pwd; if ((pwd = getpwuid(statbuf.st_uid)) != NULL) { item += hh->outPair("user", pwd->pw_name, true); } @@ -2788,6 +2780,7 @@ void CControlAPI::FileCGI(CyhookHandler *hh) { string_printf("%d", statbuf.st_uid), true); } /* Print out group name if it is found using getgrgid(). */ + struct group *grp; if ((grp = getgrgid(statbuf.st_gid)) != NULL) item += hh->outPair("group", grp->gr_name, true); else { @@ -2798,7 +2791,8 @@ void CControlAPI::FileCGI(CyhookHandler *hh) { item += hh->outPair("size", string_printf("%jd", (intmax_t) statbuf.st_size), true); - tm = localtime(&statbuf.st_mtime); + struct tm *tm = localtime(&statbuf.st_mtime); + char datestring[256] = {0}; /* Get localized date string. */ strftime(datestring, sizeof(datestring), nl_langinfo(D_T_FMT), tm); diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.h b/src/nhttpd/tuxboxapi/coolstream/controlapi.h index 052739005..db8670cd3 100644 --- a/src/nhttpd/tuxboxapi/coolstream/controlapi.h +++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.h @@ -8,7 +8,7 @@ #include // yhttpd #include -#include "yhook.h" +#include // forward declaration class CNeutrinoAPI; diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.cpp b/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.cpp index 2ca05cfd4..65b433331 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.cpp @@ -50,7 +50,7 @@ extern CRemoteControl *g_RemoteControl; /* neutrino.cpp */ extern CZapitClient::SatelliteList satList; // yhttpd -#include "ylogging.h" +#include // nhttpd #include "neutrinoapi.h" @@ -266,7 +266,7 @@ bool CNeutrinoAPI::GetChannelEvents(void) if (eList.begin() == eList.end()) return false; - for (eventIterator = eList.begin(); eventIterator != eList.end(); eventIterator++) + for (eventIterator = eList.begin(); eventIterator != eList.end(); ++eventIterator) ChannelListEvents[(*eventIterator).get_channel_id()] = &(*eventIterator); return true; @@ -457,14 +457,13 @@ std::string CNeutrinoAPI::getAudioInfoAsString(void) { //------------------------------------------------------------------------- std::string CNeutrinoAPI::getCryptInfoAsString(void) { - unsigned short i; std::stringstream out; std::string casys[11]= {"Irdeto:","Betacrypt:","Seca:","Viaccess:","Nagra:","Conax: ","Cryptoworks:","Videoguard:","EBU:","XCrypt:","PowerVU:"}; int caids[] = { 0x600, 0x1700, 0x0100, 0x0500, 0x1800, 0xB00, 0xD00, 0x900, 0x2600, 0x4a00, 0x0E00 }; CZapitChannel * channel = CZapit::getInstance()->GetCurrentChannel(); if(channel) { - for (i = 0; i < 11; i++) { + for (unsigned short i = 0; i < 11; i++) { for(casys_map_iterator_t it = channel->camap.begin(); it != channel->camap.end(); ++it) { int caid = (*it) & 0xFF00; if(caid == caids[i]) diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.h b/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.h index 892dde995..a98a7b5bf 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.h +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.h @@ -12,7 +12,7 @@ #include // nhttpd -#include "helper.h" +#include #include "neutrinoyparser.h" #include "controlapi.h" diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp index 4498f8064..3e988b22a 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp @@ -13,9 +13,9 @@ #include //ntohs #include //ntohs // yhttpd -#include "yhttpd.h" -#include "ytypes_globals.h" -#include "mod_yparser.h" +#include +#include +#include // tuxbox #include //timer list // nhttpd @@ -209,7 +209,7 @@ std::string CNeutrinoYParser::func_mount_set_values(CyhookHandler *hh, std::str //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_get_bouquets_as_dropdown(CyhookHandler *, std::string para) { - std::string ynr, yresult, sel, nr_str, do_show_hidden; + std::string yresult, sel, nr_str, do_show_hidden; int nr=1; ySplitString(para," ",nr_str, do_show_hidden); @@ -268,7 +268,7 @@ std::string CNeutrinoYParser::func_get_actual_bouquet_number(CyhookHandler *, s //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_get_channels_as_dropdown(CyhookHandler *, std::string para) { - std::string abouquet, achannel_id, yresult, sel, sid; + std::string abouquet, achannel_id, yresult, sel; int bnumber = 1; int mode = NeutrinoAPI->Zapit->getMode(); @@ -596,7 +596,7 @@ std::string CNeutrinoYParser::func_get_audio_pids_as_dropdown(CyhookHandler *, //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_unmount_get_list(CyhookHandler *, std::string) { - std::string ysel, ymount, ylocal_dir, yfstype, ynr, yresult, mounts; + std::string ysel, ymount, ylocal_dir, yfstype, yresult, mounts; std::ifstream in; in.open("/proc/mounts", std::ifstream::in); @@ -832,7 +832,7 @@ std::string CNeutrinoYParser::func_get_timer_list(CyhookHandler *, std::string yresult += string_printf(para.c_str(), classname, zAlarmTime, zStopTime, zRep.c_str(), zRepCount.c_str(), zType.c_str(), sAddData.c_str(),timer->eventID,timer->eventID); } - classname = (i++&1)?'a':'b'; + //classname = (i++&1)?'a':'b'; return yresult; } diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.h b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.h index 2d8da7697..b32f99c32 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.h +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.h @@ -9,9 +9,9 @@ // c++ #include // yhttpd -#include "yhttpd.h" -#include "ytypes_globals.h" -#include "mod_yparser.h" +#include +#include +#include // forward declaration class CNeutrinoAPI; diff --git a/src/nhttpd/yhttpd.cpp b/src/nhttpd/yhttpd.cpp index a7039798b..7e37a46a4 100644 --- a/src/nhttpd/yhttpd.cpp +++ b/src/nhttpd/yhttpd.cpp @@ -34,28 +34,28 @@ CStringList Cyhttpd::ConfigList; //============================================================================= #ifdef Y_CONFIG_USE_AUTHHOOK -#include "mod_auth.h" +#include static CmAuth *auth = NULL; #endif #ifdef Y_CONFIG_USE_WEBLOG -#include "mod_weblog.h" +#include static CmWebLog *weblog = NULL; #endif #ifdef Y_CONFIG_USE_SENDFILE -#include "mod_sendfile.h" +#include static CmodSendfile *mod_sendfile = NULL; #endif #ifdef Y_CONFIG_USE_CACHE -#include "mod_cache.h" +#include static CmodCache mod_cache; // static instance #endif //----------------------------------------------------------------------------- #if defined(CONFIG_SYSTEM_TUXBOX) || defined(CONFIG_SYSTEM_TUXBOX_COOLSTREAM) -#include "neutrinoapi.h" +#include static CNeutrinoAPI *NeutrinoAPI; #endif diff --git a/src/nhttpd/yhttpd_core/helper.cpp b/src/nhttpd/yhttpd_core/helper.cpp index 38b188ba2..e2449fbbd 100644 --- a/src/nhttpd/yhttpd_core/helper.cpp +++ b/src/nhttpd/yhttpd_core/helper.cpp @@ -12,7 +12,7 @@ #include // yhttpd -#include "yconfig.h" +#include #include "ytypes_globals.h" #include "helper.h" #include "ylogging.h" @@ -220,10 +220,10 @@ std::string encodeString(std::string decodedString) { unsigned int len = sizeof(char) * decodedString.length() * 5 + 1; std::string result(len, '\0'); char *newString = (char *) result.c_str(); - char *dstring = (char *) decodedString.c_str(); char one_char; if (len == result.length()) // got memory needed { + char *dstring = (char *) decodedString.c_str(); while ((one_char = *dstring++)) /* use the null character as a loop terminator */ { if (isalnum(one_char)) diff --git a/src/nhttpd/yhttpd_core/yconnection.cpp b/src/nhttpd/yhttpd_core/yconnection.cpp index 7c035c12d..ea16280b5 100644 --- a/src/nhttpd/yhttpd_core/yconnection.cpp +++ b/src/nhttpd/yhttpd_core/yconnection.cpp @@ -8,7 +8,7 @@ #include #include // yhttpd -#include "yconfig.h" +#include #include "ytypes_globals.h" #include "ywebserver.h" #include "yconnection.h" @@ -44,6 +44,7 @@ CWebserverConnection::CWebserverConnection(CWebserver *pWebserver) { //------------------------------------------------------------------------- CWebserverConnection::CWebserverConnection() { // aprintf("test CWebserverConnection::CWebserverConnection()\n"); + Method = M_UNKNOWN; sock = 0; RequestCanceled = 0; keep_alive = 0; diff --git a/src/nhttpd/yhttpd_core/yconnection.h b/src/nhttpd/yhttpd_core/yconnection.h index 50dca5580..cc8ebc6ca 100644 --- a/src/nhttpd/yhttpd_core/yconnection.h +++ b/src/nhttpd/yhttpd_core/yconnection.h @@ -14,7 +14,7 @@ // c++ #include // yhttpd -#include "yconfig.h" +#include #include "ytypes_globals.h" #include "ywebserver.h" #include "yrequest.h" diff --git a/src/nhttpd/yhttpd_core/yhook.h b/src/nhttpd/yhttpd_core/yhook.h index 9556be9f5..b313dadda 100644 --- a/src/nhttpd/yhttpd_core/yhook.h +++ b/src/nhttpd/yhttpd_core/yhook.h @@ -51,7 +51,7 @@ #include #include // yhttpd -#include "yconfig.h" +#include #include "ytypes_globals.h" #include "ylogging.h" // tuxbox @@ -141,7 +141,7 @@ public: CStringList HookVarList; // Variables in Hook-Handling passing to other Hooks THttp_Method Method; // HTTP Method (requested) // constructor & deconstructor - CyhookHandler(){ContentLength = 0; keep_alive = 0; _outIndent = 0;}; + CyhookHandler(){ContentLength = 0; keep_alive = 0; _outIndent = 0;status = HANDLED_NONE;Method = M_UNKNOWN;httpStatus = HTTP_NIL;outType = plain;}; virtual ~CyhookHandler(){}; // hook slot handler diff --git a/src/nhttpd/yhttpd_core/ylanguage.h b/src/nhttpd/yhttpd_core/ylanguage.h index 3ba368f7c..e90658fc2 100644 --- a/src/nhttpd/yhttpd_core/ylanguage.h +++ b/src/nhttpd/yhttpd_core/ylanguage.h @@ -8,7 +8,7 @@ #include #include // yhttpd -#include "yconfig.h" +#include #include "ytypes_globals.h" #include "ywebserver.h" diff --git a/src/nhttpd/yhttpd_core/yrequest.cpp b/src/nhttpd/yhttpd_core/yrequest.cpp index 94fb344bd..999903915 100644 --- a/src/nhttpd/yhttpd_core/yrequest.cpp +++ b/src/nhttpd/yhttpd_core/yrequest.cpp @@ -116,7 +116,7 @@ bool CWebserverRequest::HandleRequest(void) { // Split URL into path, filename, fileext .. UrlData[] //----------------------------------------------------------------------------- bool CWebserverRequest::ParseStartLine(std::string start_line) { - std::string method, url, http, tmp; + std::string method, url, tmp; log_level_printf(8, ": line: %s\n", start_line.c_str()); if (ySplitString(start_line, " ", method, tmp)) { diff --git a/src/nhttpd/yhttpd_core/yresponse.cpp b/src/nhttpd/yhttpd_core/yresponse.cpp index c010a0f74..96ed8f510 100644 --- a/src/nhttpd/yhttpd_core/yresponse.cpp +++ b/src/nhttpd/yhttpd_core/yresponse.cpp @@ -15,8 +15,8 @@ #include #include // yhttpd -#include "yconfig.h" -#include "yhttpd.h" +#include +#include #include "ytypes_globals.h" #include "ylogging.h" #include "ywebserver.h" diff --git a/src/nhttpd/yhttpd_core/yresponse.h b/src/nhttpd/yhttpd_core/yresponse.h index 6bdaeab1b..4eb2bf864 100644 --- a/src/nhttpd/yhttpd_core/yresponse.h +++ b/src/nhttpd/yhttpd_core/yresponse.h @@ -9,7 +9,7 @@ // c++ #include // yhttpd -#include "yconfig.h" +#include #include "ytypes_globals.h" #include "yhook.h" @@ -42,8 +42,8 @@ public: void printf(const char *fmt, ...); bool Write(char const *text); bool WriteLn(char const *text); - bool Write(const std::string text) { return Write(text.c_str()); } - bool WriteLn(const std::string text) { return WriteLn(text.c_str()); } + bool Write(const std::string &text) { return Write(text.c_str()); } + bool WriteLn(const std::string &text) { return WriteLn(text.c_str()); } // Headers void SendError(HttpResponseType responseType) {SendHeader(responseType, false, "text/html");} diff --git a/src/nhttpd/yhttpd_core/ysocket.cpp b/src/nhttpd/yhttpd_core/ysocket.cpp index d78912640..6c51d3324 100644 --- a/src/nhttpd/yhttpd_core/ysocket.cpp +++ b/src/nhttpd/yhttpd_core/ysocket.cpp @@ -17,7 +17,7 @@ #include // yhttpd -#include "yhttpd.h" +#include #include "ysocket.h" #include "ylogging.h" // system @@ -64,6 +64,7 @@ CySocket::~CySocket() { // initialize //----------------------------------------------------------------------------- void CySocket::init(void) { + BytesSend = 0; handling = false; isOpened = false; isValid = true; @@ -194,8 +195,8 @@ CySocket* CySocket::accept() { #else set_tcp_nodelay(); #endif + new_ySocket->isOpened = true; } - new_ySocket->isOpened = true; // handling = true; return new_ySocket; } diff --git a/src/nhttpd/yhttpd_core/ywebserver.cpp b/src/nhttpd/yhttpd_core/ywebserver.cpp index 601b966a3..eae380b95 100644 --- a/src/nhttpd/yhttpd_core/ywebserver.cpp +++ b/src/nhttpd/yhttpd_core/ywebserver.cpp @@ -19,7 +19,7 @@ #include // yhttpd -#include "yhttpd.h" +#include #include "ytypes_globals.h" #include "ywebserver.h" #include "ylogging.h" @@ -241,7 +241,6 @@ bool CWebserver::run(void) { int CWebserver::AcceptNewConnectionSocket() { int slot = -1; CySocket *connectionSock = NULL; - int newfd; if (!(connectionSock = listenSocket.accept())) // Blocking wait { @@ -265,7 +264,7 @@ int CWebserver::AcceptNewConnectionSocket() { SocketList[slot] = connectionSock; // put it to list fcntl(connectionSock->get_socket(), F_SETFD, O_NONBLOCK); // set non-blocking open_connections++; // count open connectins - newfd = connectionSock->get_socket(); + int newfd = connectionSock->get_socket(); if (newfd > fdmax) // keep track of the maximum fd fdmax = newfd; } @@ -377,7 +376,7 @@ bool CWebserver::CheckKeepAliveAllowedByIP(std::string client_ip) { while (it != conf_no_keep_alive_ips.end()) { if (trim(*it) == client_ip) do_keep_alive = false; - it++; + ++it; } pthread_mutex_unlock(&mutex); return do_keep_alive; diff --git a/src/nhttpd/yhttpd_mods/mod_auth.cpp b/src/nhttpd/yhttpd_mods/mod_auth.cpp index 3934dc0e4..8e747243c 100644 --- a/src/nhttpd/yhttpd_mods/mod_auth.cpp +++ b/src/nhttpd/yhttpd_mods/mod_auth.cpp @@ -6,7 +6,7 @@ #include #include #include "mod_auth.h" -#include "helper.h" +#include //----------------------------------------------------------------------------- // HOOK: response_hook @@ -65,11 +65,11 @@ bool CmAuth::CheckAuth(CyhookHandler *hh) { // decode Base64 buffer to String //----------------------------------------------------------------------------- std::string CmAuth::decodeBase64(const char *b64buffer) { - char *newString, *org_newString; //shorter then b64buffer + char *newString; //shorter then b64buffer std::string result; if ((newString = (char *) malloc(sizeof(char) * strlen(b64buffer) + 1)) != NULL) { - org_newString = newString; + char *org_newString = newString; int i = 0; unsigned long c = 0; diff --git a/src/nhttpd/yhttpd_mods/mod_auth.h b/src/nhttpd/yhttpd_mods/mod_auth.h index 6215c3fb9..4efdcd8e9 100644 --- a/src/nhttpd/yhttpd_mods/mod_auth.h +++ b/src/nhttpd/yhttpd_mods/mod_auth.h @@ -5,11 +5,12 @@ #ifndef __yhttpd_mod_auth_h__ #define __yhttpd_mod_auth_h__ -#include "yhook.h" +#include class CmAuth: public Cyhook { public: bool authenticate; CmAuth() { + authenticate = false; } ; ~CmAuth() { diff --git a/src/nhttpd/yhttpd_mods/mod_cache.cpp b/src/nhttpd/yhttpd_mods/mod_cache.cpp index 2c59edf20..2172e17e0 100644 --- a/src/nhttpd/yhttpd_mods/mod_cache.cpp +++ b/src/nhttpd/yhttpd_mods/mod_cache.cpp @@ -8,9 +8,9 @@ #include #include // yhttpd -#include "yconfig.h" -#include "ytypes_globals.h" -#include "helper.h" +#include +#include +#include #include "mod_cache.h" //============================================================================= @@ -128,7 +128,7 @@ void CmodCache::AddToCache(CyhookHandler *, std::string url, CacheList[url].mime_type = mime_type; CacheList[url].category = category; CacheList[url].created = time(NULL); - std::string test = CacheList[url].filename; +// std::string test = CacheList[url].filename; } fflush(fd); // flush and close file fclose(fd); @@ -154,7 +154,7 @@ void CmodCache::RemoveCategoryFromCache(std::string category) { do { restart = false; TCacheList::iterator i = CacheList.begin(); - for (; i != CacheList.end(); i++) { + for (; i != CacheList.end(); ++i) { TCache *item = &((*i).second); if (item->category == category) { CacheList.erase(((*i).first)); @@ -198,7 +198,7 @@ void CmodCache::yshowCacheInfo(CyhookHandler *hh) { "URLMimeFilenameCategoryCreatedRemove\n"); pthread_mutex_lock(&mutex); TCacheList::iterator i = CacheList.begin(); - for (; i != CacheList.end(); i++) { + for (; i != CacheList.end(); ++i) { TCache *item = &((*i).second); char timeStr[80]; strftime(timeStr, sizeof(timeStr), RFC1123FMT, gmtime(&(item->created))); diff --git a/src/nhttpd/yhttpd_mods/mod_cache.h b/src/nhttpd/yhttpd_mods/mod_cache.h index 149c0f8a3..d4172e6aa 100644 --- a/src/nhttpd/yhttpd_mods/mod_cache.h +++ b/src/nhttpd/yhttpd_mods/mod_cache.h @@ -11,9 +11,9 @@ // c++ #include // yhttpd -#include "yconfig.h" -#include "ytypes_globals.h" -#include "yhook.h" +#include +#include +#include //----------------------------------------------------------------------------- typedef struct { diff --git a/src/nhttpd/yhttpd_mods/mod_sendfile.cpp b/src/nhttpd/yhttpd_mods/mod_sendfile.cpp index 1e0d42b02..ce3a2551f 100644 --- a/src/nhttpd/yhttpd_mods/mod_sendfile.cpp +++ b/src/nhttpd/yhttpd_mods/mod_sendfile.cpp @@ -47,9 +47,9 @@ #include #include // yhttpd -#include "yconfig.h" -#include "ytypes_globals.h" -#include "helper.h" +#include +#include +#include #include "mod_sendfile.h" //============================================================================= @@ -64,7 +64,6 @@ CStringList CmodSendfile::sendfileTypes; THandleStatus CmodSendfile::Hook_PrepareResponse(CyhookHandler *hh) { hh->status = HANDLED_NONE; - int filed; log_level_printf(4, "mod_sendfile prepare hook start url:%s\n", hh->UrlData["fullurl"].c_str()); std::string mime = sendfileTypes[hh->UrlData["fileext"]]; if (((mime != "") || (hh->WebserverConfigList["mod_sendfile.sendAll"] == "true")) @@ -73,7 +72,7 @@ THandleStatus CmodSendfile::Hook_PrepareResponse(CyhookHandler *hh) { // build filename std::string fullfilename = GetFileName(hh, hh->UrlData["path"], hh->UrlData["filename"]); - + int filed; if ((filed = OpenFile(hh, fullfilename)) != -1) //can access file? { struct stat statbuf; @@ -180,7 +179,6 @@ std::string CmodSendfile::GetFileName(CyhookHandler *hh, std::string path, std:: //----------------------------------------------------------------------------- int CmodSendfile::OpenFile(CyhookHandler *, std::string fullfilename) { int fd = -1; - std::string tmpstring; if (fullfilename.length() > 0) { fd = open(fullfilename.c_str(), O_RDONLY | O_LARGEFILE); if (fd <= 0) { diff --git a/src/nhttpd/yhttpd_mods/mod_sendfile.h b/src/nhttpd/yhttpd_mods/mod_sendfile.h index 0bdcf157e..e4294a25f 100644 --- a/src/nhttpd/yhttpd_mods/mod_sendfile.h +++ b/src/nhttpd/yhttpd_mods/mod_sendfile.h @@ -11,9 +11,9 @@ // c++ #include // yhttpd -#include "yconfig.h" -#include "ytypes_globals.h" -#include "yhook.h" +#include +#include +#include //----------------------------------------------------------------------------- class CmodSendfile : public Cyhook diff --git a/src/nhttpd/yhttpd_mods/mod_testhook.h b/src/nhttpd/yhttpd_mods/mod_testhook.h index a92f9ed98..1f6ed9f2e 100644 --- a/src/nhttpd/yhttpd_mods/mod_testhook.h +++ b/src/nhttpd/yhttpd_mods/mod_testhook.h @@ -6,7 +6,7 @@ #define TESTHOOK_H_ -#include "yhook.h" +#include class CTesthook : public Cyhook { public: diff --git a/src/nhttpd/yhttpd_mods/mod_weblog.cpp b/src/nhttpd/yhttpd_mods/mod_weblog.cpp index 4d25f6e3f..49e88dab4 100644 --- a/src/nhttpd/yhttpd_mods/mod_weblog.cpp +++ b/src/nhttpd/yhttpd_mods/mod_weblog.cpp @@ -11,7 +11,7 @@ #include #include "mod_weblog.h" -#include "helper.h" +#include //============================================================================= // Initialization of static variables @@ -97,8 +97,8 @@ bool CmWebLog::printf(const char *fmt, ...) { if (!OpenLogFile()) return false; bool success = false; - char buffer[bufferlen]; if (WebLogFile != NULL) { + char buffer[bufferlen]={0}; pthread_mutex_lock(&WebLog_mutex); // yeah, its mine va_list arglist; va_start(arglist, fmt); @@ -130,6 +130,8 @@ bool CmWebLog::printf(const char *fmt, ...) { //----------------------------------------------------------------------------- void CmWebLog::AddLogEntry_CLF(CyhookHandler *hh) { +#if 0 +//never used std::string cs_method; switch (hh->Method) { @@ -141,6 +143,7 @@ void CmWebLog::AddLogEntry_CLF(CyhookHandler *hh) cs_method = "unknown"; break; } +#endif std::string c_ip = hh->UrlData["clientaddr"].c_str(); std::string request_startline = hh->UrlData["startline"].c_str(); int s_status = hh->httpStatus; @@ -315,7 +318,6 @@ void CmWebLog::AddLogEntry_ELF(CyhookHandler *hh) std::string c_ip = hh->UrlData["clientaddr"].c_str(); std::string request_startline = hh->UrlData["startline"].c_str(); std::string cs_uri = hh->UrlData["fullurl"]; - std::string cs_uri_stem = hh->UrlData["url"]; int sc_status = hh->httpStatus; int bytes = hh->GetContentLength(); int cached = (hh->HookVarList["CacheCategory"].empty()) ? 0 : 1; diff --git a/src/nhttpd/yhttpd_mods/mod_weblog.h b/src/nhttpd/yhttpd_mods/mod_weblog.h index f65026b55..bcdf2d96e 100644 --- a/src/nhttpd/yhttpd_mods/mod_weblog.h +++ b/src/nhttpd/yhttpd_mods/mod_weblog.h @@ -5,8 +5,8 @@ #ifndef __yhttpd_mod_weblog_h__ #define __yhttpd_mod_weblog_h__ -#include "yconfig.h" -#include "yhook.h" +#include +#include //----------------------------------------------------------------------------- // Defaults #ifndef LOG_FILE diff --git a/src/nhttpd/yhttpd_mods/mod_yparser.cpp b/src/nhttpd/yhttpd_mods/mod_yparser.cpp index 9ad6eb7e6..3fd7a1c5e 100644 --- a/src/nhttpd/yhttpd_mods/mod_yparser.cpp +++ b/src/nhttpd/yhttpd_mods/mod_yparser.cpp @@ -18,12 +18,12 @@ // tuxbox #include // yhttpd -#include "yconfig.h" -#include "ytypes_globals.h" -#include "helper.h" -#include "ylogging.h" +#include +#include +#include +#include #include "mod_yparser.h" -#include "ylanguage.h" +#include //============================================================================= // Initialization of static variables @@ -111,7 +111,7 @@ void CyParser::Execute(CyhookHandler *hh) { if (CLogging::getInstance()->getDebug()) { dprintf("Execute CGI : %s\n", filename.c_str()); for (CStringList::iterator it = hh->ParamList.begin(); it - != hh->ParamList.end(); it++) + != hh->ParamList.end(); ++it) dprintf(" Parameter %s : %s\n", it->first.c_str(), it->second.c_str()); } @@ -156,7 +156,6 @@ void CyParser::Execute(CyhookHandler *hh) { // mini cgi Engine (Entry for ycgi) //----------------------------------------------------------------------------- void CyParser::cgi(CyhookHandler *hh) { - bool ydebug = false; std::string htmlfilename, yresult, ycmd; if ( !hh->ParamList.empty() ) { @@ -164,6 +163,7 @@ void CyParser::cgi(CyhookHandler *hh) { htmlfilename = hh->ParamList["tmpl"]; else htmlfilename = hh->ParamList["1"]; + bool ydebug = false; if (hh->ParamList["debug"] != "") // switch debug on ydebug = true; @@ -171,7 +171,6 @@ void CyParser::cgi(CyhookHandler *hh) { { ycmd = hh->ParamList["execute"]; ycmd = YPARSER_ESCAPE_START + ycmd + YPARSER_ESCAPE_END; - ycmd = ycmd; yresult = cgi_cmd_parsing(hh, ycmd, ydebug); // parsing engine } // parsing given file @@ -471,7 +470,7 @@ std::string CyParser::YWeb_cgi_cmd(CyhookHandler *hh, std::string ycmd) { pthread_mutex_unlock(&yParser_mutex); } } else if (ycmd_type == "file-action") { - std::string filename, actionname, content, tmp, ydefault; + std::string filename, actionname, content, tmp; if (ySplitString(ycmd_name, ";", filename, tmp)) { ySplitString(tmp, ";", actionname, content); replace(content, "\r\n", "\n"); @@ -522,7 +521,6 @@ std::string CyParser::YWeb_cgi_get_ini(CyhookHandler *, std::string filename, //------------------------------------------------------------------------- void CyParser::YWeb_cgi_set_ini(CyhookHandler *, std::string filename, std::string varname, std::string varvalue, std::string yaccess) { - std::string result; if ((yaccess == "open") || (yaccess == "")) { yConfig->clear(); yConfig->loadConfig(filename); @@ -738,11 +736,11 @@ std::string CyParser::func_get_languages_as_dropdown(CyhookHandler *, std::string para) { std::string yresult, sel; DIR *d; - struct dirent *dir; std::string act_language = CLanguage::getInstance()->language; d = opendir((CLanguage::getInstance()->language_dir).c_str()); if (d != NULL) { + struct dirent *dir; while ((dir = readdir(d))) { if (strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0) continue; diff --git a/src/nhttpd/yhttpd_mods/mod_yparser.h b/src/nhttpd/yhttpd_mods/mod_yparser.h index 628ed0a7e..ae5d49118 100644 --- a/src/nhttpd/yhttpd_mods/mod_yparser.h +++ b/src/nhttpd/yhttpd_mods/mod_yparser.h @@ -16,10 +16,10 @@ #include // yhttpd -#include "helper.h" -#include "yconfig.h" -#include "ytypes_globals.h" -#include "yhook.h" +#include +#include +#include +#include // forward declaration class CWebserverConnection; From 91abca7d30fa1516efbaa6f6caa6da40512e9f3b Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Fri, 30 Nov 2012 13:55:34 +0100 Subject: [PATCH 64/69] - icons: introduce new icons backward, forward, pause and play --- data/icons/Makefile.am | 4 ++++ data/icons/btn_backward.png | Bin 0 -> 572 bytes data/icons/btn_forward.png | Bin 0 -> 620 bytes data/icons/btn_pause.png | Bin 0 -> 566 bytes data/icons/btn_play.png | Bin 0 -> 580 bytes src/gui/widget/icons.h | 4 ++++ 6 files changed, 8 insertions(+) create mode 100644 data/icons/btn_backward.png create mode 100644 data/icons/btn_forward.png create mode 100644 data/icons/btn_pause.png create mode 100644 data/icons/btn_play.png diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index 4b256a96e..b8b41539d 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -46,6 +46,10 @@ install_DATA += \ bookmarkmanager.png \ border_lr.png \ border_ul.png \ + btn_backward.png \ + btn_forward.png \ + btn_pause.png \ + btn_play.png \ btn_record_active.png \ btn_record_inactive.png \ btn_stop.png \ diff --git a/data/icons/btn_backward.png b/data/icons/btn_backward.png new file mode 100644 index 0000000000000000000000000000000000000000..962e71c844cad566117abca0ed551ecce160e956 GIT binary patch literal 572 zcmV-C0>k}@P)&xpfnI=6S2%}m=d=X=;#aqBwi}ftldU!={JgjH%J)fu+kxY}&0*DBz3V<$Pj9CDT z&2wuF##oFshzI}{Ad?J5L31cdy;0}*<1zEu97%=O(JQ*$F0=WJR8lg@{t!r-PvD$G zRoQ>D&%xUR0Iq&su@~)8Z!`cH$1!*FJ0!g~K_Nj=n$0GyR%>Zir_-VRuDyKU{<=j( zmJ)mb$pp<5#nEoJSKKZNi*U~2RFO27|$};pFoP{eFLq(rpst><-`eiQ{-lQYw}C{^Nqv;VA$H1Int2St>Z^@=ddb zt*wCZ<(T1@A={OwJbv_q$z;N4G@??eV2mM4?-8UTprFp-0P9(Ta=`OvFF=(b2(X^V zZgm%@8Rc?0?^zJsWRiv3JKO&}Ag@%S*xceGec&jWCjWcRpMC@MT=x#q|Kr^N0000< KMNUMnLSTY+Z34^y literal 0 HcmV?d00001 diff --git a/data/icons/btn_forward.png b/data/icons/btn_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..cad43950b4e18dc11a5166a666f53ba142591738 GIT binary patch literal 620 zcmV-y0+aoTP)3loZ&8}ymQrXuO&^2BkBGZt}z8UCSQVnL9kNwpU>R!S=gt~{?$ zC=`g}pIB>eTQJrjR*UMj#@WuBFuCE8v z790-u7sKBE9xu1H61-pEPae8$!5G9zGRjGD6J=2*-w5Qbq=qpF)#dGxr*)zuHQ=P~H_X@C7fYG#J)d={-W ztyYV4I!!*8CzVPOgaP6lpFg$m0fxqafH+4OhAb^TB=7_7MG;ylO3NkuARvk&P=d7< zYeyf+2QIC#nc4fZ|6H6Xijv$6Ent(4^nvY8yYs*6{Q5T~#rw|VNFT%i0000B literal 0 HcmV?d00001 diff --git a/data/icons/btn_pause.png b/data/icons/btn_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..c18fafa40af1986e5d09fc04263c41c14bcf9496 GIT binary patch literal 566 zcmV-60?GY}P))M_=Rvnk$tyz_quT((dU zLZH=Z0dV@^l*jLnr1O+UqX9s(+2q^91L-WqWg7}s76i$!`RAB)KF`gbo_>&~>Dqz? zaNZ$a5JK*AmSqs~q`$Ka9|F$1T?-;xSqX%lAt180U{@9b0Yq)%LBbYR2qO6uoO4K! zb(EVF;co&6y95jNK)>GypwsDKjRoL#a0|e7_nLyWC{%ulK68W+(8@3v47mAx!}G6a zN~IFTf@Sz+NUzspGMP{=M_6m|n>)yy0|5yEV+@r_g>tD(VXufW7Gn&DhgA+L2kgBm zVy#_ZmIPz(e6;^||DVTWtzGx41c0#xE|O95zvq1Q0+Jf==ZYee<^TWy07*qoM6N<$ Ef)jK36aWAK literal 0 HcmV?d00001 diff --git a/data/icons/btn_play.png b/data/icons/btn_play.png new file mode 100644 index 0000000000000000000000000000000000000000..e1baa70cab5893783650108ea7d482272dffbc9f GIT binary patch literal 580 zcmV-K0=xZ*P)}w<}2qLm>Bp0Nxuq9-r;w5+haFAaI#|1G@;mTDC za6#+B4XtTnL*d<-6xViwtOSvjMth{$Ju~Nw#+-gRZ30~&;%(;vI17R9?*48RSK~MR zz8~I4U99aP89I6U{F2WeI z2rxFm)*6hl7;A9O0bl{V^C$|cd_Fp&)oKxcig|u|PI96kimIX{w|D+Gftx2ChzPY> z4S@P_op!rTrBY$`G{bqHbSa98;^u#Ju#}+anpurTgUhd%d^|j4I-B8r^7e%U=N;-5 z75S^{$MrfF=jTiwADKIc^KM;&>g(gX8xEOHf38aq1o;O;=Ua!9<_RncEhU624@6P3 zPH@$^qIc6HpUZRb;egW44%uvGod7^p==b|Hn@u{M4%gqW$>nnF@9j}6M&$E(vY8Cl z+Lr`=?hp~I2^b6p^lo}gCKJl#GKE5ct^5|7=` Date: Fri, 30 Nov 2012 22:06:27 +0100 Subject: [PATCH 65/69] - add keys to control the audioplayer from pictureviewer decode and view pictures in a seperate thread. --- data/locale/deutsch.locale | 6 +++ data/locale/english.locale | 6 +++ src/gui/audioplayer.h | 11 ++-- src/gui/pictureviewer.cpp | 100 ++++++++++++++++++++++++++++++++++--- src/gui/pictureviewer.h | 8 +++ src/system/locals.h | 6 +++ src/system/locals_intern.h | 6 +++ 7 files changed, 131 insertions(+), 12 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 3b3930340..068d6e85f 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -1452,6 +1452,12 @@ pictureviewer.help20 Sortierung andern pictureviewer.help21 Bild unskaliert einlesen pictureviewer.help22 Modus verlassen pictureviewer.help3 Sortierung andern +pictureviewer.help30 Audioplayer-Modus +pictureviewer.help31 Startet die Wiedergabe +pictureviewer.help32 Pausiert die Wiedergabe +pictureviewer.help33 Stoppt die Wiedergabe +pictureviewer.help34 nächster Titel +pictureviewer.help35 vorheriger Titel pictureviewer.help4 Bild unskaliert einlesen pictureviewer.help5 Diashow-Modus pictureviewer.help6 vorheriges Bild diff --git a/data/locale/english.locale b/data/locale/english.locale index 45aa2db2f..dea61a864 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1452,6 +1452,12 @@ pictureviewer.help20 change sort order pictureviewer.help21 reread image (no scaling) pictureviewer.help22 exit pictureviewer.help3 change sort order +pictureviewer.help30 audioplayer mode +pictureviewer.help31 starts the playback +pictureviewer.help32 pauses the playback +pictureviewer.help33 stops the playback +pictureviewer.help34 next title +pictureviewer.help35 previous title pictureviewer.help4 do not scale picture pictureviewer.help5 diashow mode pictureviewer.help6 previous image diff --git a/src/gui/audioplayer.h b/src/gui/audioplayer.h index 6a73378e3..daba3d8a9 100644 --- a/src/gui/audioplayer.h +++ b/src/gui/audioplayer.h @@ -159,9 +159,6 @@ class CAudioPlayerGui : public CMenuTarget CFileFilter audiofilefilter; void paintItemID3DetailsLine (int pos); void clearItemID3DetailsLine (); - void play(unsigned int pos); - void stop(); - void pause(); void ff(unsigned int seconds=0); void rev(unsigned int seconds=0); int getNext(); @@ -248,8 +245,6 @@ class CAudioPlayerGui : public CMenuTarget bool openSCbrowser(void); bool clearPlaylist(void); bool shufflePlaylist(void); - bool playNext(bool allow_rotate = false); - bool playPrev(bool allow_rotate = false); bool pictureviewer; @@ -260,6 +255,12 @@ class CAudioPlayerGui : public CMenuTarget int exec(CMenuTarget* parent, const std::string & actionKey); void wantNextPlay(); + void pause(); + void play(unsigned int pos); + void stop(); + bool playNext(bool allow_rotate = false); + bool playPrev(bool allow_rotate = false); + int getAdioPayerM_currend() {return m_current;} }; diff --git a/src/gui/pictureviewer.cpp b/src/gui/pictureviewer.cpp index 3165df49b..866f2813a 100644 --- a/src/gui/pictureviewer.cpp +++ b/src/gui/pictureviewer.cpp @@ -101,6 +101,9 @@ CPictureViewerGui::CPictureViewerGui() picture_filter.addFilter("jpeg"); picture_filter.addFilter("gif"); picture_filter.addFilter("crw"); + + decodeT = 0; + decodeTflag = false; } //------------------------------------------------------------------------ @@ -109,6 +112,12 @@ CPictureViewerGui::~CPictureViewerGui() { playlist.clear(); delete m_viewer; + + if (decodeT) + { + pthread_cancel(decodeT); + decodeT = 0; + } } //------------------------------------------------------------------------ @@ -225,6 +234,9 @@ int CPictureViewerGui::show() bool loop=true; bool update=true; + if (audioplayer) + m_currentTitle = m_audioPlayer->getAdioPayerM_currend(); + while (loop) { if (update) @@ -544,6 +556,35 @@ int CPictureViewerGui::show() CVFD::getInstance()->setMode(CVFD::MODE_MENU_UTF8, g_Locale->getText(LOCALE_PICTUREVIEWER_HEAD)); } } + else if (((msg==CRCInput::RC_plus) || (msg==CRCInput::RC_minus)) && decodeTflag) + { + // FIXME: do not accept volume-keys while decoding + } + // control keys for audioplayer + else if (audioplayer && msg==CRCInput::RC_pause) + { + m_currentTitle = m_audioPlayer->getAdioPayerM_currend(); + m_audioPlayer->pause(); + } + else if (audioplayer && msg==CRCInput::RC_stop) + { + m_currentTitle = m_audioPlayer->getAdioPayerM_currend(); + m_audioPlayer->stop(); + } + else if (audioplayer && msg==CRCInput::RC_play) + { + m_currentTitle = m_audioPlayer->getAdioPayerM_currend(); + if (m_currentTitle > -1) + m_audioPlayer->play((unsigned int)m_currentTitle); + } + else if (audioplayer && msg==CRCInput::RC_forward) + { + m_audioPlayer->playNext(); + } + else if (audioplayer && msg==CRCInput::RC_rewind) + { + m_audioPlayer->playPrev(); + } else if (msg == NeutrinoMessages::CHANGEMODE) { if ((data & NeutrinoMessages::mode_mask) !=NeutrinoMessages::mode_pic) @@ -726,6 +767,10 @@ void CPictureViewerGui::paint() void CPictureViewerGui::view(unsigned int index, bool unscaled) { + if (decodeTflag) + return; + + m_unscaled = unscaled; selected=index; CVFD::getInstance()->showMenuText(0, playlist[index].Name.c_str()); @@ -733,26 +778,59 @@ void CPictureViewerGui::view(unsigned int index, bool unscaled) strftime(timestring, 18, "%d-%m-%Y %H:%M", gmtime(&playlist[index].Date)); //CVFD::getInstance()->showMenuText(1, timestring); //FIXME - if (unscaled) - m_viewer->DecodeImage(playlist[index].Filename, true, unscaled); - m_viewer->ShowImage(playlist[index].Filename, unscaled); + if (m_state==MENU) + m_state=VIEW; + //decode and view in a seperate thread + if (!decodeTflag) { + decodeTflag=true; + pthread_create(&decodeT, NULL, decodeThread, (void*) this); + pthread_detach(decodeT); + } +} + +void* CPictureViewerGui::decodeThread(void *arg) +{ + CPictureViewerGui *PictureViewerGui = (CPictureViewerGui*) arg; + + pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL); + pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL); + + PictureViewerGui->thrView(); + + PictureViewerGui->decodeTflag=false; + pthread_exit(NULL); +} + +void CPictureViewerGui::thrView() +{ + if (m_unscaled) + m_viewer->DecodeImage(playlist[selected].Filename, true, m_unscaled); + + m_viewer->ShowImage(playlist[selected].Filename, m_unscaled); + +#if 0 //Decode next unsigned int next=selected+1; if (next > playlist.size()-1) next=0; - if (m_state==MENU) - m_state=VIEW; if (m_state==VIEW) m_viewer->DecodeImage(playlist[next].Filename,true); else m_viewer->DecodeImage(playlist[next].Filename,false); +#endif } void CPictureViewerGui::endView() { if (m_state != MENU) m_state=MENU; + + if (decodeTflag) + { + decodeTflag=false; + pthread_cancel(decodeT); + } } void CPictureViewerGui::deletePicFile(unsigned int index, bool mode) @@ -798,8 +876,16 @@ void CPictureViewerGui::showHelp() helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP20)); helpbox.addLine(NEUTRINO_ICON_BUTTON_0, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP21)); helpbox.addLine(NEUTRINO_ICON_BUTTON_HOME, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP22)); - - helpbox.addLine("Version: $Revision: 1.57 $"); + if(audioplayer) + { + helpbox.addPagebreak(); + helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP30)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_PLAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP31)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_PAUSE, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP32)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_STOP, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP33)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_FORWARD, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP34)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_BACKWARD, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP35)); + } hide(); helpbox.show(LOCALE_MESSAGEBOX_INFO); } diff --git a/src/gui/pictureviewer.h b/src/gui/pictureviewer.h index 0909d6ef4..4e98071ae 100644 --- a/src/gui/pictureviewer.h +++ b/src/gui/pictureviewer.h @@ -111,6 +111,14 @@ class CPictureViewerGui : public CMenuTarget void deletePicFile(unsigned int index, bool mode); bool audioplayer; + int m_currentTitle; + + pthread_t decodeT; + static void* decodeThread(void *arg); + bool decodeTflag; + + void thrView(); + bool m_unscaled; public: CPictureViewerGui(); diff --git a/src/system/locals.h b/src/system/locals.h index 92fa4c9b3..eb94a4ceb 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -1479,6 +1479,12 @@ typedef enum LOCALE_PICTUREVIEWER_HELP21, LOCALE_PICTUREVIEWER_HELP22, LOCALE_PICTUREVIEWER_HELP3, + LOCALE_PICTUREVIEWER_HELP30, + LOCALE_PICTUREVIEWER_HELP31, + LOCALE_PICTUREVIEWER_HELP32, + LOCALE_PICTUREVIEWER_HELP33, + LOCALE_PICTUREVIEWER_HELP34, + LOCALE_PICTUREVIEWER_HELP35, LOCALE_PICTUREVIEWER_HELP4, LOCALE_PICTUREVIEWER_HELP5, LOCALE_PICTUREVIEWER_HELP6, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 55c0a402b..b4431b571 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -1479,6 +1479,12 @@ const char * locale_real_names[] = "pictureviewer.help21", "pictureviewer.help22", "pictureviewer.help3", + "pictureviewer.help30", + "pictureviewer.help31", + "pictureviewer.help32", + "pictureviewer.help33", + "pictureviewer.help34", + "pictureviewer.help35", "pictureviewer.help4", "pictureviewer.help5", "pictureviewer.help6", From b252de089662efcdb5932851c78cbbb98bb7fe48 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 4 Dec 2012 13:50:11 +0400 Subject: [PATCH 66/69] gui/movieplayer.cpp: dont auto-stop, if duration or position invalid --- src/gui/movieplayer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index d7e02a6ef..391c51897 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -500,7 +500,9 @@ void CMoviePlayerGui::PlayFile(void) #ifdef DEBUG printf("CMoviePlayerGui::PlayFile: speed %d position %d duration %d (%d, %d%%)\n", speed, position, duration, duration-position, file_prozent); #endif - if (duration - position < 1000 && !timeshift) + /* in case ffmpeg report incorrect values */ + int posdiff = duration - position; + if ((posdiff > 0) && (posdiff < 1000) && !timeshift) { /* 10 seconds after end-of-file, stop */ if (++eof > 10) From c77138f2607e8584c1a4559d93fc7b40d9175240 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 4 Dec 2012 13:58:41 +0400 Subject: [PATCH 67/69] neutrino.cpp: revert mount at startup to system - fs can be not only ext3 but different --- src/neutrino.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 8323ec90a..8039d0142 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -1858,12 +1858,10 @@ TIMER_START(); g_CamHandler->init(); #ifndef ASSUME_MDEV - const char hddsda1[] = "/media/sda1"; - const char hddsdb1[] = "/media/sdb1"; - mkdir(hddsda1, 0755); - mount("/dev/sda1", hddsda1, "ext3", 0, NULL); - mkdir(hddsdb1,0755); - mount("/dev/sdb1", hddsdb1, "ext3", 0, NULL); + mkdir("/media/sda1", 0755); + mkdir("/media/sdb1", 0755); + my_system("mount", "/dev/sda1", "/media/sda1"); + my_system("mount", "/dev/sdb1", "/media/sdb1"); #endif CFSMounter::automount(); From d5cd463e17502cf41096560c33f1da929ee37dd4 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 4 Dec 2012 14:52:03 +0400 Subject: [PATCH 68/69] neutrino.cpp: fix subchannel up/down processing: if key_subchannel_up/down is set to different than left/right keys, and mode_left_right_key_tv == SNeutrinoSettings::VOLUME, CVolume::setVolume called, but not process other keys, and post msg again -> loop forever. - process mode_left_right_key_tv modes only if subchannel up/down == left/right --- src/neutrino.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 8039d0142..45e780792 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2050,13 +2050,16 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu) g_RemoteControl->subChannelDown(); g_InfoViewer->showSubchan(); } - else if (g_settings.mode_left_right_key_tv == SNeutrinoSettings::VOLUME) { - g_volume->setVolume(msg, true); - } - else if((g_settings.mode_left_right_key_tv == SNeutrinoSettings::VZAP) || (g_settings.mode_left_right_key_tv == SNeutrinoSettings::INFOBAR)) { - if(channelList->getSize()) { - showInfo(); - } + else if ( msg == CRCInput::RC_left || msg == CRCInput::RC_right) { + if (g_settings.mode_left_right_key_tv == SNeutrinoSettings::VOLUME) { + g_volume->setVolume(msg, true); + } + else if((g_settings.mode_left_right_key_tv == SNeutrinoSettings::VZAP) + || (g_settings.mode_left_right_key_tv == SNeutrinoSettings::INFOBAR)) { + if(channelList->getSize()) { + showInfo(); + } + } } else quickZap( msg ); From 5fc0d256f487ad0e1a4b7fae937ebb6efc1a77bd Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 4 Dec 2012 17:25:58 +0400 Subject: [PATCH 69/69] zapit/src/fastscan.cpp: fix duplicate channels in favorite bouquet, try to fix possible possible duplicates from different frequency --- src/zapit/src/fastscan.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/zapit/src/fastscan.cpp b/src/zapit/src/fastscan.cpp index 8fb2b8324..9c2cefde4 100644 --- a/src/zapit/src/fastscan.cpp +++ b/src/zapit/src/fastscan.cpp @@ -288,7 +288,7 @@ bool CServiceScan::ParseFst(unsigned short pid, fast_scan_operator_t * op) std::string providerName = convertDVBUTF8((const char*)&(dbuf[4]), service_provider_name_length, 1, 1); std::string serviceName = convertDVBUTF8((const char*)&(dbuf[4 + service_provider_name_length + 1]), service_name_length, 1, 1); - + #ifdef SCAN_DEBUG printf("[FST] #%04d at %04d: net %04x tp %04x sid %04x v %04x a %04x pcr %04x frq %05d type %d prov [%s] name [%s]\n", num, satellitePosition, original_network_id, transport_stream_id, service_id, video_pid, audio_pid, pcr_pid, freq, service_type, providerName.c_str(), serviceName.c_str()); #endif @@ -297,8 +297,20 @@ bool CServiceScan::ParseFst(unsigned short pid, fast_scan_operator_t * op) channel_id = CREATE_CHANNEL_ID64; CZapitChannel * newchannel; - +#if 0 newchannel = CServiceManager::getInstance()->FindChannel(channel_id); +#else + + int flist[5] = { freq, freq-1, freq+1, freq-2, freq+2 }; + for(int i = 0; i < 5; i++) { + freq_id_t freq_id = flist[i]; + t_channel_id newid = CZapitChannel::makeChannelId(satellitePosition, + freq_id, transport_stream_id, original_network_id, service_id); + newchannel = CServiceManager::getInstance()->FindChannel(newid); + if(newchannel) + break; + } +#endif if(newchannel == NULL) { newchannel = new CZapitChannel ( serviceName, @@ -338,10 +350,13 @@ bool CServiceScan::ParseFst(unsigned short pid, fast_scan_operator_t * op) bouquetId = g_bouquetManager->existsUBouquet(op->name); if (bouquetId == -1) { bouquet = g_bouquetManager->addBouquet(std::string(op->name), true); + bouquetId = g_bouquetManager->existsUBouquet(op->name); } else bouquet = g_bouquetManager->Bouquets[bouquetId]; - bouquet->addService(newchannel); + + if (!(g_bouquetManager->existsChannelInBouquet(bouquetId, newchannel->getChannelID()))) + bouquet->addService(newchannel); } break; default: