From 518ebde76d761ca5998a31e5544e41c7c2252e29 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Fri, 1 Dec 2017 10:33:00 +0100 Subject: [PATCH 001/107] disable setVolume in standby mode --- src/driver/volume.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/driver/volume.cpp b/src/driver/volume.cpp index 7095d2641..55d63b2bb 100644 --- a/src/driver/volume.cpp +++ b/src/driver/volume.cpp @@ -94,10 +94,12 @@ void CVolume::setVolume(const neutrino_msg_t key) { if (!g_RCInput) /* don't die... */ return; + int mode = CNeutrinoApp::getInstance()->getMode(); + if (mode == NeutrinoModes::mode_standby) + return; + neutrino_msg_t msg = key; static bool do_vol = true; /* false if volume is handled by external script */ - int mode = CNeutrinoApp::getInstance()->getMode(); - if (msg <= CRCInput::RC_MaxRC) { if(m_mode != mode) { m_mode = mode; From 7e8b866425b07e95efd571060205f26a61ff6fb5 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 27 Nov 2017 10:22:52 +0100 Subject: [PATCH 002/107] - locale: minor changes on new tunersetup locales Signed-off-by: Thilo Graf --- data/locale/deutsch.locale | 2 +- data/locale/english.locale | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index b7ce67e64..e893c24e9 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -2403,7 +2403,7 @@ timing.volumebar Lautstärkeanzeige tunersetup.cable Kabel (DVB-C) tunersetup.hybrid Hybrid (DVB-C/T/T2) tunersetup.mode Betriebsmodus -tunersetup.power 5V Versorgung bei DVB-T/T2 Kanälen +tunersetup.power 5V-Versorgung bei DVB-T/T2 Kanälen tunersetup.terr Terrestrisch (DVB-T/T2) tmdb.api_key TMDb API Schlüssel tmdb.enabled TMDb-Unterstützung diff --git a/data/locale/english.locale b/data/locale/english.locale index a37f2ba6f..094a43057 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -2402,8 +2402,8 @@ timing.static_messages Interactive messages timing.volumebar Volume bar tunersetup.cable Cable (DVB-C) tunersetup.hybrid Hybrid (DVB-C/T/T2) -tunersetup.mode Operation Mode -tunersetup.power 5V Supply on DVB-T/T2 Channels +tunersetup.mode Operation mode +tunersetup.power 5V supply on DVB-T/T2 channels tunersetup.terr Terrestrial (DVB-T/T2) tmdb.api_key TMDb API key tmdb.enabled TMDb support From 50cc4ef7a2caf847ba05d4adb6539b24ec970cff Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 27 Nov 2017 12:50:53 +0100 Subject: [PATCH 003/107] - neutrino: try to fix timer_wakeup handling; ... The return to deepstandby after timer-wakeups was broken. Signed-off-by: Thilo Graf --- src/neutrino.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 6184949c0..522a885f1 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2169,8 +2169,10 @@ void CNeutrinoApp::InitSectiondClient() #include #endif -void wake_up(bool &wakeup) +bool is_wakeup() { + bool wakeup = false; + #if HAVE_COOL_HARDWARE #ifndef FP_IOCTL_CLEAR_WAKEUP_TIMER #define FP_IOCTL_CLEAR_WAKEUP_TIMER 10 @@ -2191,6 +2193,7 @@ void wake_up(bool &wakeup) close(fd); } #endif + /* prioritize proc filesystem */ if (access("/proc/stb/fp/was_timer_wakeup", F_OK) == 0) { @@ -2213,11 +2216,14 @@ void wake_up(bool &wakeup) } printf("[timerd] wakeup from standby: %s\n", wakeup ? "yes" : "no"); - if(!wakeup){ + if (!wakeup) + { puts("[neutrino.cpp] executing " NEUTRINO_LEAVE_DEEPSTANDBY_SCRIPT "."); if (my_system(NEUTRINO_LEAVE_DEEPSTANDBY_SCRIPT) != 0) perror(NEUTRINO_LEAVE_DEEPSTANDBY_SCRIPT " failed"); } + + return wakeup; } int CNeutrinoApp::run(int argc, char **argv) @@ -2343,21 +2349,19 @@ TIMER_START(); } //timer start - long timerd_signal = 0; - timer_wakeup = false;//init - wake_up( timer_wakeup ); + timer_wakeup = (is_wakeup() && g_settings.shutdown_timer_record_type); + g_settings.shutdown_timer_record_type = false; init_cec_setting = true; - if(!(g_settings.shutdown_timer_record_type && timer_wakeup && g_settings.hdmi_cec_mode)){ + if(!(timer_wakeup && g_settings.hdmi_cec_mode)) + { //init cec settings CCECSetup cecsetup; cecsetup.setCECSettings(); init_cec_setting = false; } - timer_wakeup = (timer_wakeup && g_settings.shutdown_timer_record_type); - g_settings.shutdown_timer_record_type = false; - timerd_signal = (timer_wakeup && g_settings.shutdown_timer_record_type); + long timerd_signal = timer_wakeup; pthread_create (&timer_thread, NULL, timerd_main_thread, (void *)&timerd_signal); timerd_thread_started = true; @@ -3897,7 +3901,7 @@ void CNeutrinoApp::ExitRun(int exit_code) struct tm *tm = localtime(&t); char date[30]; strftime(date, sizeof(date), "%c", tm); - printf("timer_wakeup: %s (%ld)\n", date, timer_minutes * 60); + printf("wakeup_time: %s (%ld)\n", date, timer_minutes * 60); /* prioritize proc filesystem */ if (access("/proc/stb/fp/wakeup_time", F_OK) == 0) From a463fdff3a1cdac8989fcf1562586535a669a73a Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 27 Nov 2017 14:16:38 +0100 Subject: [PATCH 004/107] - remove unused src/driver/stacktrace.h; use src/system/stacktrace.h if needed Conflicts: src/driver/stacktrace.h Signed-off-by: Thilo Graf --- src/driver/stacktrace.h | 93 ----------------------------------------- 1 file changed, 93 deletions(-) delete mode 100644 src/driver/stacktrace.h diff --git a/src/driver/stacktrace.h b/src/driver/stacktrace.h deleted file mode 100644 index 49a5e5c0a..000000000 --- a/src/driver/stacktrace.h +++ /dev/null @@ -1,93 +0,0 @@ -// stacktrace.h (c) 2008, Timo Bingmann from http://idlebox.net/ -// published under the WTFPL v2.0 - -#ifndef _STACKTRACE_H_ -#define _STACKTRACE_H_ - -#include -#include -#include -#include - -/** Print a demangled stack backtrace of the caller function to FILE* out. */ -static inline void print_stacktrace(FILE *out = stderr, unsigned int max_frames = 63) -{ - fprintf(out, "stack trace:\n"); - - // storage array for stack trace address data - void* addrlist[max_frames+1]; - - // retrieve current stack addresses - int addrlen = backtrace(addrlist, sizeof(addrlist) / sizeof(void*)); - - if (addrlen == 0) { - fprintf(out, " \n"); - return; - } - - // resolve addresses into strings containing "filename(function+address)", - // this array must be free()-ed - char** symbollist = backtrace_symbols(addrlist, addrlen); - - // allocate string which will be filled with the demangled function name - size_t funcnamesize = 256; - char* funcname = (char*)malloc(funcnamesize); - - // iterate over the returned symbol lines. skip the first, it is the - // address of this function. - for (int i = 1; i < addrlen; i++) - { - char *begin_name = 0, *begin_offset = 0, *end_offset = 0; - - // find parentheses and +address offset surrounding the mangled name: - // ./module(function+0x15c) [0x8048a6d] - for (char *p = symbollist[i]; *p; ++p) - { - if (*p == '(') - begin_name = p; - else if (*p == '+') - begin_offset = p; - else if (*p == ')' && begin_offset) { - end_offset = p; - break; - } - } - - if (begin_name && begin_offset && end_offset - && begin_name < begin_offset) - { - *begin_name++ = '\0'; - *begin_offset++ = '\0'; - *end_offset = '\0'; - - // mangled name is now in [begin_name, begin_offset) and caller - // offset in [begin_offset, end_offset). now apply - // __cxa_demangle(): - - int status; - char* ret = abi::__cxa_demangle(begin_name, - funcname, &funcnamesize, &status); - if (status == 0) { - funcname = ret; // use possibly realloc()-ed string - fprintf(out, " %s : %s+%s\n", - symbollist[i], funcname, begin_offset); - } - else { - // demangling failed. Output function name as a C function with - // no arguments. - fprintf(out, " %s : %s()+%s\n", - symbollist[i], begin_name, begin_offset); - } - } - else - { - // couldn't parse the line? print the whole line. - fprintf(out, " %s\n", symbollist[i]); - } - } - - free(funcname); - free(symbollist); -} - -#endif // _STACKTRACE_H_ From f32629e7aa00e647d2934ff859cbcb1bf591da91 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 27 Nov 2017 16:04:43 +0100 Subject: [PATCH 005/107] - icons.h: cleanup from unused defines Signed-off-by: Thilo Graf --- src/gui/widget/icons.h | 42 +----------------------------------------- 1 file changed, 1 insertion(+), 41 deletions(-) diff --git a/src/gui/widget/icons.h b/src/gui/widget/icons.h index 5436cc6ee..f1f90ce3c 100644 --- a/src/gui/widget/icons.h +++ b/src/gui/widget/icons.h @@ -44,7 +44,6 @@ #define NEUTRINO_ICON_BUTTON_POWER "power" #define NEUTRINO_ICON_BUTTON_OKAY "ok" -#define NEUTRINO_ICON_BUTTON_OKAY_SMALL "ok_small" #define NEUTRINO_ICON_BUTTON_0 "0" #define NEUTRINO_ICON_BUTTON_1 "1" @@ -57,11 +56,9 @@ #define NEUTRINO_ICON_BUTTON_8 "8" #define NEUTRINO_ICON_BUTTON_9 "9" -#define NEUTRINO_ICON_BUTTON_UP "up" -#define NEUTRINO_ICON_BUTTON_UP_SMALL "up_small" +#define NEUTRINO_ICON_BUTTON_UP "up" #define NEUTRINO_ICON_BUTTON_RIGHT "right" #define NEUTRINO_ICON_BUTTON_DOWN "down" -#define NEUTRINO_ICON_BUTTON_DOWN_SMALL "down_small" #define NEUTRINO_ICON_BUTTON_LEFT "left" #define NEUTRINO_ICON_BUTTON_BACKWARD "btn_backward" @@ -72,9 +69,6 @@ #define NEUTRINO_ICON_BUTTON_RECORD_INACTIVE "btn_record_inactive" #define NEUTRINO_ICON_BUTTON_STOP "btn_stop" -#define NEUTRINO_ICON_BUTTON_PLUS "plus" -#define NEUTRINO_ICON_BUTTON_MINUS "minus" - #define NEUTRINO_ICON_BLUE "icon_blue" #define NEUTRINO_ICON_GREEN "icon_green" #define NEUTRINO_ICON_RED "icon_red" @@ -88,7 +82,6 @@ #define NEUTRINO_ICON_DD "dd" #define NEUTRINO_ICON_DD_AVAIL "dd_avail" #define NEUTRINO_ICON_DD_GREY "dd_gray" -#define NEUTRINO_ICON_EPGINFO "epginfo" #define NEUTRINO_ICON_ERROR "error" #define NEUTRINO_ICON_FEATURES "features" #define NEUTRINO_ICON_GAMES "games" @@ -109,12 +102,10 @@ #define NEUTRINO_ICON_PLAY_REPEAT_TRACK "mp_play_repeat_track" #define NEUTRINO_ICON_REW "mp_b-skip" #define NEUTRINO_ICON_FF "mp_f-skip" -#define NEUTRINO_ICON_PROTECTING "protecting" #define NEUTRINO_ICON_QUESTION "question" #define NEUTRINO_ICON_RADIOTEXTGET "radiotextget" #define NEUTRINO_ICON_RADIOTEXTWAIT "radiotextwait" #define NEUTRINO_ICON_RADIOTEXTOFF "radiotextoff" -#define NEUTRINO_ICON_RADIOMODE "radiomode" #define NEUTRINO_ICON_RECORDING "recording" #define NEUTRINO_ICON_REC "rec" #define NEUTRINO_ICON_REC_GRAY "rec_gray" @@ -131,7 +122,6 @@ #define NEUTRINO_ICON_VIDEO "video" #define NEUTRINO_ICON_VTXT "vtxt" #define NEUTRINO_ICON_VTXT_GREY "vtxt_gray" -#define NEUTRINO_ICON_PARTITION "partition" #define NEUTRINO_ICON_SUBT "subt" #define NEUTRINO_ICON_SUBT_GREY "subt_gray" #define NEUTRINO_ICON_AUTO_SHIFT "ats" @@ -176,8 +166,6 @@ #define NEUTRINO_ICON_TMDB "tmdb" #define NEUTRINO_ICON_PICTUREVIEWER "pictureviewer" -#define DUMMY_ICON "dummy" - /* sliders */ #define NEUTRINO_ICON_SLIDER_BODY "slider_body" #define NEUTRINO_ICON_SLIDER_INACTIVE "slider_inactive" @@ -233,10 +221,6 @@ #define NEUTRINO_ICON_HINT_HDD "hint_hdd" #define NEUTRINO_ICON_HINT_KEYS "hint_keys" #define NEUTRINO_ICON_HINT_A_PIC "hint_a_pic" -#define NEUTRINO_ICON_HINT_RASS "hint_rass" - -#define NEUTRINO_ICON_HINT_COLORS "hint_colors" -#define NEUTRINO_ICON_HINT_FONTS "hint_fonts" /* service */ #define NEUTRINO_ICON_HINT_SERVICE_SCAN "hint_scan" @@ -273,32 +257,8 @@ #define NEUTRINO_ICON_CHECKMARK "checkmark" #define NEUTRINO_ICON_WARNING "warning" -/* RASS */ -#define NEUTRINO_ICON_RED_0 "0-red" -#define NEUTRINO_ICON_RED_1 "1-red" -#define NEUTRINO_ICON_RED_2 "2-red" -#define NEUTRINO_ICON_RED_3 "3-red" -#define NEUTRINO_ICON_RED_4 "4-red" -#define NEUTRINO_ICON_RED_5 "5-red" -#define NEUTRINO_ICON_RED_6 "6-red" -#define NEUTRINO_ICON_RED_7 "7-red" -#define NEUTRINO_ICON_RED_8 "8-red" -#define NEUTRINO_ICON_RED_9 "9-red" - -#define NEUTRINO_ICON_GREEN_0 "0-green" -#define NEUTRINO_ICON_GREEN_1 "1-green" -#define NEUTRINO_ICON_GREEN_2 "2-green" -#define NEUTRINO_ICON_GREEN_3 "3-green" -#define NEUTRINO_ICON_GREEN_4 "4-green" -#define NEUTRINO_ICON_GREEN_5 "5-green" -#define NEUTRINO_ICON_GREEN_6 "6-green" -#define NEUTRINO_ICON_GREEN_7 "7-green" -#define NEUTRINO_ICON_GREEN_8 "8-green" -#define NEUTRINO_ICON_GREEN_9 "9-green" - /* misc */ #define NEUTRINO_ICON_HINT_YTPLAY "hint_ytplay" -#define NEUTRINO_ICON_HINT_SPARK "hint_spark" #define NEUTRINO_ICON_EPG "epg" From 47a63857678c63d57db227eb8a563666701109d1 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 27 Nov 2017 16:04:43 +0100 Subject: [PATCH 006/107] - icons: cleanup from unused icons Conflicts: data/icons/buttons/orphaned/0-green.png data/icons/buttons/orphaned/0-red.png data/icons/buttons/orphaned/1-green.png data/icons/buttons/orphaned/1-red.png data/icons/buttons/orphaned/2-green.png data/icons/buttons/orphaned/2-red.png data/icons/buttons/orphaned/3-green.png data/icons/buttons/orphaned/3-red.png data/icons/buttons/orphaned/4-green.png data/icons/buttons/orphaned/4-red.png data/icons/buttons/orphaned/5-green.png data/icons/buttons/orphaned/5-red.png data/icons/buttons/orphaned/6-green.png data/icons/buttons/orphaned/6-red.png data/icons/buttons/orphaned/7-green.png data/icons/buttons/orphaned/7-red.png data/icons/buttons/orphaned/8-green.png data/icons/buttons/orphaned/8-red.png data/icons/buttons/orphaned/9-green.png data/icons/buttons/orphaned/9-red.png data/icons/buttons/orphaned/longpress.png data/icons/hints/hint_rass.png data/icons/hints/hint_spark.png data/icons/various/rass.png Signed-off-by: Thilo Graf --- data/icons/buttons/orphaned/0-green.png | Bin 316 -> 0 bytes data/icons/buttons/orphaned/0-red.png | Bin 316 -> 0 bytes data/icons/buttons/orphaned/1-green.png | Bin 310 -> 0 bytes data/icons/buttons/orphaned/1-red.png | Bin 310 -> 0 bytes data/icons/buttons/orphaned/2-green.png | Bin 318 -> 0 bytes data/icons/buttons/orphaned/2-red.png | Bin 318 -> 0 bytes data/icons/buttons/orphaned/3-green.png | Bin 324 -> 0 bytes data/icons/buttons/orphaned/3-red.png | Bin 324 -> 0 bytes data/icons/buttons/orphaned/4-green.png | Bin 318 -> 0 bytes data/icons/buttons/orphaned/4-red.png | Bin 318 -> 0 bytes data/icons/buttons/orphaned/5-green.png | Bin 316 -> 0 bytes data/icons/buttons/orphaned/5-red.png | Bin 316 -> 0 bytes data/icons/buttons/orphaned/6-green.png | Bin 316 -> 0 bytes data/icons/buttons/orphaned/6-red.png | Bin 316 -> 0 bytes data/icons/buttons/orphaned/7-green.png | Bin 321 -> 0 bytes data/icons/buttons/orphaned/7-red.png | Bin 321 -> 0 bytes data/icons/buttons/orphaned/8-green.png | Bin 318 -> 0 bytes data/icons/buttons/orphaned/8-red.png | Bin 318 -> 0 bytes data/icons/buttons/orphaned/9-green.png | Bin 310 -> 0 bytes data/icons/buttons/orphaned/9-red.png | Bin 310 -> 0 bytes data/icons/buttons/orphaned/longpress.png | Bin 545 -> 0 bytes data/icons/hints/hint_rass.png | Bin 1107 -> 0 bytes data/icons/hints/hint_spark.png | Bin 6572 -> 0 bytes data/icons/various/rass.png | Bin 3058 -> 0 bytes 24 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 data/icons/buttons/orphaned/0-green.png delete mode 100644 data/icons/buttons/orphaned/0-red.png delete mode 100644 data/icons/buttons/orphaned/1-green.png delete mode 100644 data/icons/buttons/orphaned/1-red.png delete mode 100644 data/icons/buttons/orphaned/2-green.png delete mode 100644 data/icons/buttons/orphaned/2-red.png delete mode 100644 data/icons/buttons/orphaned/3-green.png delete mode 100644 data/icons/buttons/orphaned/3-red.png delete mode 100644 data/icons/buttons/orphaned/4-green.png delete mode 100644 data/icons/buttons/orphaned/4-red.png delete mode 100644 data/icons/buttons/orphaned/5-green.png delete mode 100644 data/icons/buttons/orphaned/5-red.png delete mode 100644 data/icons/buttons/orphaned/6-green.png delete mode 100644 data/icons/buttons/orphaned/6-red.png delete mode 100644 data/icons/buttons/orphaned/7-green.png delete mode 100644 data/icons/buttons/orphaned/7-red.png delete mode 100644 data/icons/buttons/orphaned/8-green.png delete mode 100644 data/icons/buttons/orphaned/8-red.png delete mode 100644 data/icons/buttons/orphaned/9-green.png delete mode 100644 data/icons/buttons/orphaned/9-red.png delete mode 100644 data/icons/buttons/orphaned/longpress.png delete mode 100644 data/icons/hints/hint_rass.png delete mode 100644 data/icons/hints/hint_spark.png delete mode 100644 data/icons/various/rass.png diff --git a/data/icons/buttons/orphaned/0-green.png b/data/icons/buttons/orphaned/0-green.png deleted file mode 100644 index 716637c7a22655441b04c1e5d775c1ebe57d2ed0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=8&8?9Bbl42u{T*E2G1 zWn?_c$atNR@h&6dTSm5jY%>33jQ$x}{j>7<=X3k!?dlIqvw(USOM?7@862M7NCR<_ zyxm;OkH}&M25w;xW@MN(M*?I;iKnkC`(0LHZYF~dP5JYILam-Ijv*Y^ zlM_Tlgjkpu*}iTsZ+sA^*c?;o8ujx`Xum|tCGUU#&(A5H;Ao}$Z}tE0k+U6o@_*h> zJ0vMBx#ZBF{Y;YFl3Seq?myNn5w!4I{GmdKI;Vst0HL03 A4*&oF diff --git a/data/icons/buttons/orphaned/0-red.png b/data/icons/buttons/orphaned/0-red.png deleted file mode 100644 index a99393a3fb50dfedd557701bf888c0c18947d926..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=4*CA(I%w7BPfuU~t>U z;CYNe^#%j$JqCt%3=IES1^-J2{x_`uZ`twRd&TXWxA_GU`ha>EOM?7@862M7NCR<_ zyxm;OkH}&M25w;xW@MN(M*=9wUgGKN%6^wsNK};h$<<__2t%usx6WTA4a>@JO|MPQ7CpcQ^{#*V3d*p0~p8TKp z(+){WOD;L|XFro9x8xS5zx$6hO9UnY@6iw*x&WMWo<-&HcudlDGtIL7S&CviDBCYeSBpMSI0v*i2;OXk;vd$@?2>@6C BZhim& diff --git a/data/icons/buttons/orphaned/1-green.png b/data/icons/buttons/orphaned/1-green.png deleted file mode 100644 index 1ad8fee1b98f8bfd7995f961d4572e93c37c69d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=8&8?9Bbl3`-aoH!?CF zWn{e0$at5L@hv0EKNhZkTyp>9jQ$x}{j>7<=X3k!?Q$cQD?mMrB|(0{3=Yq3q=7g| z-tI089jvk*Kn`btM`SSr1Gg{;GcwGYBLT9a#M9T6{VuC8H#48c59d;#P`#&%V+hCf z8T}WYECE!PkZ)%?c&c0%_SM9{;!vnm2Tvzw{Vs} zbD@a$4g3MgPlM{5MSeZ<+DmyXp4L+u73MGl6;-OM?7@862M7NCR<_ zyxm;OkH}&M25w;xW@MN(M*=9wUgGKN%6^wsNL1MDi4DV2pisT1i(?4K z_2dK*kq{9eND!#57Uy`UYII`h(&?!sXKGF;2v2+Vf9>MW3e6=Mr~a>(m6dMfskd;J zKXajo_v8PliyJ36o-)1iKfCg%6PvGi_<#MEqQa6Y4n12wxhWhz`p-MUYR1DyQnT1n uW;947_VOq_O?~?G>B~MIhxCR928R3I#v6K_Q`CV@VeoYIb6Mw<&;$V60cZRG diff --git a/data/icons/buttons/orphaned/2-green.png b/data/icons/buttons/orphaned/2-green.png deleted file mode 100644 index 3679e751183dcb16798d9813bbd7dba244002215..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=8&8?9Bbl3`-ao*E2G1 zWn?_c$atNR@h&6dTSm5jY;ynPjQ$x}{j>7<=X3k!ZH-@SeLy{oB|(0{3=Yq3q=7g| z-tI089jvk*Kn`btM`SSr1Gg{;GcwGYBLT9a#M9T6{VuC8H?xqgTe~DWM4f DHmYph diff --git a/data/icons/buttons/orphaned/2-red.png b/data/icons/buttons/orphaned/2-red.png deleted file mode 100644 index 05845207e8c557efe0a983d9c938da0272245be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=4*CA(I%wmN0~FU~t>U z;CYNe^#%j$JqCt%3=IESx&O;r{5MSeZ<+DmyXp4L+o|{Yn}B*4OM?7@862M7NCR<_ zyxm;OkH}&M25w;xW@MN(M*=9wUgGKN%6^wsNK`~?f6XafpisM~i(?4K z_2h&Q5f(;9wvXG(8z00eHpf)DM*TVy$}gF6$@|~`^D(6p9IbT!cmMw$Dc#t!rRPt+ z@xh*=dI4uG9o?t(N6xhJ1TD<`7O&;NbN#{pXHR9hB~@bI+V5Nz?vpa1WaIz;|D|U< z%*hc7<4c*bqor->QvVczxfk!nUA!oG;=qa(EM;sA8&u7^4H!JX1D(X+>FVdQ&MBb@ E06~{7<=X3k!?NZe(96&vcB|(0{3=Yq3q=7g| z-tI089jvk*Kn`btM`SSr1Gg{;GcwGYBLT9a#M9T6{VuC8HU z;CX^U?FIwuJqCt%3=IESx&O;r{5MSeZ<+DmyXp4L+geQ}Hb6a$B|(0{3=Yq3q=7g| z-tI089jvk*Kn`btM`SSr1Gg{;GcwGYBLNg-FY)wsWxvZRBr2@j`S6J!P^j0_#W95A zdUAq@h)4(!CkWJ6i*vjaH99f1e96-DF<&P*s_lL9|Nog#cF84|KkfffKYy#>2@mhj z|Lug&ocN#5nBvj8bm`6d**hmVYMJQj{=0p~)xpgp;?MSTtvr*~{hR-Gf2mK(gp$I4 z|L?D5I#OV2=Bv$a7~^#K(j|4Hj&mzsym+yKCk1G`5Q`Ec!^(r^QB{w))&d>I;OXk; Jvd$@?2>>{qbCv)A diff --git a/data/icons/buttons/orphaned/4-green.png b/data/icons/buttons/orphaned/4-green.png deleted file mode 100644 index 4b690273d06e7bb13a914630f208aebabc811425..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=8&8?9Bbl3=0?-*E2G1 zWn?_g$atNR@h&6dTSm5jY%>33jQ$x}{j>7<=X3k!?b`Xi;Xpl%B|(0{3=Yq3q=7g| z-tI089jvk*Kn`btM`SSr1Gg{;GcwGYBLT9a#M9T6{VuC8H#6t9IoGZMh1xw`978y+ zCnt!6h_Em*vVGiM-uNI+u{oy7-Tmj9P=3jjOWINY!_QfrP?#Gw@4tQVH8%z2yZ`H- z`3NX~HJ+h3b=sew^~cV%@&qORJNDn!fhYX;|Nr|-^-?C3@D~2dzh^kn@sg^^llltQ zj)zjOCWY}O?PzIRy3{{KAUFSgM*e%AlmrnLW>$tfvn^!f{(gxAI*Gy4)z4*}Q$iB} DrRr?T diff --git a/data/icons/buttons/orphaned/4-red.png b/data/icons/buttons/orphaned/4-red.png deleted file mode 100644 index c2508e59e0a01e10d7e7347216edbfac970f515e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=4*CA(I%w7BB>FU~t>U z;CX^U?FIwuJqCt%3=IESx&KRB|2IthZ<+DmyXp4L+s9Vvo&@S)ED7=pW^j0RBMrn! z@^*J&=wOxg0CG4BJR*x37`TN&n2}-D90{Nxdx@v7EBjqmAyH8Uw@pGtK%sU|7sn8e z>&XcsAtEeHjBFpbmp49$Q*4f@a(Dl^CX`IpA{r~^|QoWQ3CA@|I^6wc=biAZ$@}$0k zwd0}Gt4U#eNjqBFmM-;A5y;JdpOOEbCnZ6Ig_)J%&TI?WxW8ZGfKFoYboFyt=akR{ E0MP?(egFUf diff --git a/data/icons/buttons/orphaned/5-green.png b/data/icons/buttons/orphaned/5-green.png deleted file mode 100644 index bf74eeed9285c8feea992a4f5b3fb6c81ab4adec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=8&8?9Bbl3=0?-*E2G1 zWn?_g$atNR@h&6dTSm5jY%>33jQ$x}{j>7<=X3k!?b`Xi;Xpl%B|(0{3=Yq3q=7g| z-tI089jvk*Kn`btM`SSr1Gg{;GcwGYBLT9a#M9T6{VuC8H?x@al-tTcp;k{9#}JO| z$q6DX%&cr5x0g3Qh*NBisdSI3dcMk?$0#%P|Ns9pN+&p4t$ngT`stZo2e&`Zx6Djv z0}2Z|w1v$2pZ+`FSlq~?b!p4dX32$$c^~gvi5q3KH7(InGxFGF@&A85TiOnZ-Akr2 zORDKDOw4>KEa|eme9HFl5*8x^F0RHoiVO^5wH6(EH{x#r9mL@2>gTe~DWM4ffYE5J diff --git a/data/icons/buttons/orphaned/5-red.png b/data/icons/buttons/orphaned/5-red.png deleted file mode 100644 index cc9963238c72592ee7f0ada34864083ad56ba34c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=4*C`jZ$87BDz$U~t>U z;CX^U?FIwuJqCt%3=IESx&KRB|2IthZ<+DmyXp4L+YPrLUIpr5ED7=pW^j0RBMrn! z@^*J&=wOxg0CG4BJR*x37`TN&n2}-D90{Nxdx@v7EBjqmAyE-lk+t7TfI_XFE{-7_ z*OL=OSeRMaK5j2>d=RJD98>8YRrP$8JC9Lj>i_@$XOvEGv|9UQfArHcy$)`Fo^P3% z&;}G1bZ85i^*{Z0zOlHGN9)p-qs@{F74tscw-PtXXlq)crDo)@%i{n4e73Y561$g7 zWtLRaTbP*nQdrVudHIy>;Uz3a23%Z?a}*gE#A+=%^lrr80y>Dn)78&qol`;+0PNvx AW&i*H diff --git a/data/icons/buttons/orphaned/6-green.png b/data/icons/buttons/orphaned/6-green.png deleted file mode 100644 index b8376864a256d448dfaff1a8770968e04fbd90ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=8%T>?}Pj3=0?-S2HrM zXJp*Z$as;F@h&6ddq$>zOcMVjwEk&X{Il@-=XK@U75&A^tUx`CB|(0{3=Yq3q=7g| z-tI089jvk*Kn`btM`SSr1Gg{;GcwGYBLT9a#M9T6{VuC8HnAvF+p~CY&9znSJVq~{e*AA7E}JsJ&->@A|H;qX6qNsYXQ|D2 z`2T;s$^^x!V*hXczkQ~aCurfn_{R%-^grIW5;yYLb*p~c|7(U59WNdI`M-WMm%!np zH%->coG{?z=Fb2JqFef3~c`y+5d~{{@3*RZ=Uwwv+>HcD;rL8DgyN|mIV0)GdMiEkp|)< zdAqwXbg;^L06Clm9+AZi4BWyX%*Zfnjs#GUy~NYkmHjTOkf?~MQOWTeK%rJo7sn8e z>&XcsLM)7oY#(9jQ$x}{j>7<=X3k!?Q$cQD?mMrB|(0{3=Yq3q=7g| z-tI089jvk*Kn`btM`SSr1Gg{;GcwGYBLT9a#M9T6{VuC8H#5U|hrA-7P?x8RV+hCf z;IsO8z(rPGQILI+j4^9%SWH?o9s4g3MgPlM{5MSeZ<+DmyXp4L+u73MGl6;-OM?7@862M7NCR<_ zyxm;OkH}&M25w;xW@MN(M*=9wUgGKN%6^wsNK{0o;8^??piq~mi(?4K z_2h&Qkq{9eND!#57H1KXd~zwsIaoW*E@c8|@Bjb*f1hdQxwLTM!f*Gj%$Xz;SN^xP zGHY~k`sZGflQMye_v`$;$?wjmQQfhAN{#<{3!zVX3P61_I z*&_vpg}lDZ#xYLLhovN4PF+5I`m~meq{LK*bpj#`3`-1+)vwf9KLNUm!PC{xWt~$( F698WBYK;H@ diff --git a/data/icons/buttons/orphaned/8-green.png b/data/icons/buttons/orphaned/8-green.png deleted file mode 100644 index a87ae15c01f40e44f8c2597846b821683476be59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=8&8?9Bbl42u{T*E2G1 zWn?_c$atNR@h&6dTSm5jY%>33jQ$x}{j>7<=X3k!?dlIqvw(USOM?7@862M7NCR<_ zyxm;OkH}&M25w;xW@MN(M*?I;iKnkC`(0LHZf2Gfx~sB*LhYU|jv*Y^ zlM_T(m>JnVZZB_q5U1E2Q|TJ@YfUJ>WXdJ)fB(Jm?T)AP%|NpvadPx(wzW&eopZm;-O*8!e`j7Xm#Em?5-C}mtQUlT!|NrN+rL|b> zUN)UsQcZ7RX68#_Ntg5~2*o+LgxEkj&GUU&;V!3Ab{S(kh44$rjF6*2UngFC$ BYRLcq diff --git a/data/icons/buttons/orphaned/8-red.png b/data/icons/buttons/orphaned/8-red.png deleted file mode 100644 index 000fc524b538da27651be556bf74a196dedc05b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=4*CA(I%w7BPfuU~t>U z;CYNe^#%j$JqCt%3=IESx&KRB|2IthZ<+DmyXp4L+jkNeKzbQVg8YIR9G=}s196hP z-CYDqW*~tqJ9qOu6L!@BjIj(g}`My8pBPe4i=Z*z+U*=Y549 z{eKFAD>p3p|6eyvFKGhT*Z(>HbDue}X@>t_|M9++xRJ-MTg5@LBd`o!=n~?z*SL0kphWy!9EZ6M5e*!v*!PC{xWt~$(699oC BY;*ts diff --git a/data/icons/buttons/orphaned/9-green.png b/data/icons/buttons/orphaned/9-green.png deleted file mode 100644 index 8959902e80ef43a794685cd8e778ddfa35fea911..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=8&8?9Bbl42u{T*E2G1 zWn?_c$atNR@h&6dTSm5jYzqGrjQ$x}{j>7<=X3k!?fk^JYM>s*k|4ie28U-i(mD&3=gtqJ9qOu6L!@BjIj(g}`My8pfZe4i=Z*z+U*=lugb z^&HMxXZ~;gzkMdRTFuB~m&O18lj0bYc1Y}A vI<;AHVP@t_VaX8dQ`Wa`TQf^0oMT`}dTH7HB{+W>&?yX_u6{1-oD!MU z;CYNe^#%j$JqCt%3=IESx&O;s{x?kgZ<+DmyXp4L+e;@{F#+{3mIV0)GdMiEkp|)< zdAqwXbg;^L06Clm9+AZi4BWyX%*Zfnjs#GUy~NYkmHjTOkf^Ax1#{kcpisT1i(?4K z_2dK*7G_4akK4-|AH*p($5gsU{aO>sFPU=5```cbF{Kk6t#to;|M@;sy0Pa+{?Gdd zcx1`77GC$ zL{5{t&tAP;C<5S$?|a0UZeK6nF16^)yfS`SNkojBlQ)psZS4HEvew(WCuRMuZ#)M8 zZEWIN`Oe)b;;u_XMEQK4HrDGDg$cc_R>HIAE|S@0jmU#`!ES6f`bI}CKvH!4M-stx zIZotGvVp!+*rDrF^1-%4Z4^gR`bayXFa!VyAuvBT2g7KA%2XUpABL)`mYfI?aL(cT zK9VGY&jZXpokgiMk6LXRkO0r+h@*(h>#ILL|K8l%s#MC*G=?DHV2t73^fV@mMf`D` zr22jluIIi001ViLM}^@tRDSb1^4tc+QApl)gPdPK#mvk@%J$?a-QICr0)XyJwl&eT zC%X*ee8C<<#_Ry+9MyMASX^3$-}J{^cT~cJ_mdex|CFBKR jumDK+*S>%K2mt>8kf7t~GR@s100000NkvXXu0mjfPk;P^ diff --git a/data/icons/hints/hint_rass.png b/data/icons/hints/hint_rass.png deleted file mode 100644 index e9f5462da6ebce7bd745de379fedd90109714901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1107 zcmV-Z1g!gsP)aD9<0oV9-N4ftSBL4By2E(ia`u2h@wQO ztRb!JqR>pKjWeU?*F*me%k4QnR7@}59}esL_FCV%?X}k4N2*YvLWK$yDpaUYp~8Ow z;B4Sq{>C4`N5J(!Y9N0KupD>|=mE9>%YgR(D}Zb5e2rtVppcsctOX8JAKgI5NITyO zJOT^=-vj-@!L>jFMmxg?3Wo>1V?)3puPq&7kkllpN7A~K(pw=3<0LKd z>tRW?e~`$OQo{C0DN*ur!tL|1yI|S|Y;q=#6n*g<@M!qvB-63LyI}`zZ{(nNJJqX# zsI$TMEhj7^)7ikD;LMQe9^j^|C>nAZW$XsdD9W?tM8<>dNx+N1QsC4Ww4ZMPo&zoe z+K$VP>HVSBhlBHT&2I;q!*`Fn`7`c}!=bRz4ovrNR9J5_eIw|3rr^ye#{BGh&Y$L) z9y8w$%&(KRt6ge?!Dwg5R%_6C7q9_%2lxVb9hhSNXw!Q`+4ccf#!~e+aa2#P7r+t= z42J*~nl}|#=#0My>@CLWx}4R#L%=HFGvHt$`!z5<*uNC`H3V=7I63Ia!R68Z{BgYk zOa!)CAkXuA{QCs>#zxA6?nmIZV64SwMpqqKtfLErYF{fP}>`VY&<0QS?&kF4>*9_Zx2W3 zCxk2j>;ldOE^-g#vdS5K+tZ~zOp09dD~fBzVxR-q0rUcEfQiBOg}~>Qy&U*CRKYpG z9e&^L0khxlFU0^Bhb^iBD?$Ta2Rv0|rysbcsP|0Y4{|HLwjiv18X7nEUI%capLbjC zAaH@#E(R_E=7az?##`mCVBpmThtGImXOP>%7?RX4X`7_gzBryIsaMhgUn2KPdLgCMUHt{EP@zJF3Kc3;s8Hcw Z;V(60pCpW5G5Y`j002ovPDHLkV1hve4m|(> diff --git a/data/icons/hints/hint_spark.png b/data/icons/hints/hint_spark.png deleted file mode 100644 index f10fca62e25289fa96331a9be3f8ff2bff00311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6572 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 Date: Mon, 27 Nov 2017 16:47:50 +0100 Subject: [PATCH 007/107] - radiotext: cleanup from tons of unused code; rass is dead Signed-off-by: Thilo Graf --- src/driver/radiotext.cpp | 1640 ------------------------------------- src/driver/radiotext.h | 110 --- src/driver/radiotools.cpp | 42 - src/gui/infoviewer.cpp | 61 -- 4 files changed, 1853 deletions(-) diff --git a/src/driver/radiotext.cpp b/src/driver/radiotext.cpp index 2079481f6..3e1a19a58 100644 --- a/src/driver/radiotext.cpp +++ b/src/driver/radiotext.cpp @@ -59,24 +59,6 @@ #include #include -#if 0 -#ifdef HAVE_TRIPLEDRAGON -#include -#include -#define DMXDEV "/dev/" DEVICE_NAME_DEMUX "1" -#elif HAVE_DVB_API_VERSION < 3 -#include -#define DMXDEV "/dev/dvb/card0/demux0" -#define DVRDEV "/dev/dvb/card0/dvr0" -#define dmx_pes_filter_params dmxPesFilterParams -#define pes_type pesType -#else -#include -#define DMXDEV "/dev/dvb/adapter0/demux0" -#define DVRDEV "/dev/dvb/adapter0/dvr0" -#endif -#endif - #include #include #include @@ -96,18 +78,8 @@ char RDS_PSText[12][9]; // plugin audiorecorder service bool ARec_Receive = false, ARec_Record = false; -#if ENABLE_RASS -// ... Gallery (1..999) -#define RASS_GALMAX 999 -bool Rass_Gallery[RASS_GALMAX+1]; -int Rass_GalStart, Rass_GalEnd, Rass_GalCount, Rass_SlideFoto; -#endif - #define floor const char *DataDir = "./"; -//cRadioAudio *RadioAudio; -//cRadioTextOsd *RadioTextOsd; -//cRDSReceiver *RDSReceiver; // RDS-Chartranslation: 0x80..0xff unsigned char rds_addchar[128] = { @@ -349,9 +321,6 @@ if (i < 0) { fprintf(stderr, "RT %s: i < 0 (%d)\n", __FUNCTION__, i); break; } RDS_PsPtynDecode(false, mtext, index); // PS break; case 0xda: -#if ENABLE_RASS - RassDecode(mtext, index); // Rass -#endif break; } } @@ -627,7 +596,6 @@ fprintf(stderr, "MEC=0x%02x DSN=0x%02x PSN=0x%02x MEL=%02d STATUS=0x%02x MFL=%02 rtp_itoggle = false; rtp_idiffs = 0; RadioStatusMsg(); -// AudioRecorderService(); } RTP_TToggle = 0; } @@ -677,1616 +645,13 @@ void CRadioText::RadioStatusMsg(void) int ind = (RT_Index == 0) ? S_RtOsdRows - 1 : RT_Index - 1; strcpy(temp, RT_Text[ind]); printf("RadioStatusMsg = %s\n", temp); -// cStatus::MsgOsdTextItem(rtrim(temp), false); } if ((S_RtMsgItems == 1 || S_RtMsgItems >= 3) && ((S_RtOsdTags == 1 && RT_PlusShow) || S_RtOsdTags >= 2)) { -// struct tm tm_store; -// struct tm *ts = localtime_r(&RTP_Starttime, &tm_store); -// cStatus::MsgOsdProgramme(mktime(ts), RTP_Title, RTP_Artist, 0, NULL, NULL); printf("RTP_Title = %s, RTP_Artist = %s\n", RTP_Title, RTP_Artist); } } - -#if ENABLE_RASS -// add of DVB Radio Slides Specification 1.0, 20061228 -void CRadioText::RassDecode(unsigned char *mtext, int len) -{ - static uint splfd = 0, spmax = 0, index = 0; - static uint afiles, slidenumr, slideelem, filemax, fileoffp; - static int filetype, fileoffb; - static bool slideshow = false, slidesave = false, slidecan = false, slidedel = false, start = false; - static uchar daten[65536]; // mpegs-stills defined <= 50kB - FILE *fd; - - // byte 1+2 = ADD (10bit SiteAdress + 6bit EncoderAdress) - // byte 3 = SQC (Sequence Counter 0x00 = not used) - // byte 4 = MFL (Message Field Length), - if (len >= mtext[4]+7) { // check complete length - // byte 5 = MEC (0xda for Rass) - // byte 6 = MEL - if (mtext[6] == 0 || mtext[6] > mtext[4]-2) { - if ((S_Verbose && 0x0f) >= 1) - printf("Rass-Error: Length = 0 or not correct !\n"); - return; - } - // byte 7+8 = Service-ID zugehöriger Datenkanal - // byte 9-11 = Nummer aktuelles Paket, - uint plfd = mtext[11] + mtext[10]*256 + mtext[9]*65536; - // byte 12-14 = Anzahl Pakete, - uint pmax = mtext[14] + mtext[13]*256 + mtext[12]*65536; - - // byte 15+16 = Rass-Kennung = Header, - if (mtext[15] == 0x40 && mtext[16] == 0xda) { // first - // byte 17+18 = Anzahl Dateien im Archiv, - afiles = mtext[18] + mtext[17]*256; - // byte 19+20 = Slide-Nummer, - slidenumr = mtext[20] + mtext[19]*256; - // byte 21+22 = Element-Nummer im Slide, - slideelem = mtext[22] + mtext[21]*256; - // byte 23 = Slide-Steuerbyte, : bit0 = Anzeige, bit1 = Speichern, bit2 = DarfAnzeige bei Senderwechsel, bit3 = Löschen - slideshow = mtext[23] & 0x01; - slidesave = mtext[23] & 0x02; - slidecan = mtext[23] & 0x04; - slidedel = mtext[23] & 0x08; - // byte 24 = Dateiart, : 0=unbekannt/1=MPEG-Still/2=Definition - filetype = mtext[24]; - if (filetype != 1 && filetype != 2) { - if ((S_Verbose && 0x0f) >= 1) - printf("Rass-Error: Filetype unknown !\n"); - return; - } - // byte 25-28 = Dateilänge, - filemax = mtext[28] + mtext[27]*256 + mtext[26]*65536 + mtext[25]*65536*256; - if (filemax >= 65536) { - if ((S_Verbose && 0x0f) >= 1) - printf("Rass-Error: Filesize will be too big !\n"); - return; - } - // byte 29-31 = Dateioffset Paketnr, - fileoffp = mtext[31] + mtext[30]*256 + mtext[29]*65536; - // byte 32 = Dateioffset Bytenr, - fileoffb = mtext[32]; - if (S_Verbose >= 2) - printf("Rass-Header: afiles= %d\n slidenumr= %d, slideelem= %d\n slideshow= %d, -save= %d, -canschow= %d, -delete= %d\n filetype= %d, filemax= %d\n fileoffp= %d, fileoffb= %d\n", - afiles, slidenumr, slideelem, slideshow, slidesave, slidecan, slidedel, filetype, filemax, fileoffp, fileoffb); - - if (fileoffp == 0) { // First - if (S_Verbose >= 2) - printf("Rass-Start@0 ...\n"); - start = true; - index = 0; - for (int i=fileoffb; i < len-2; i++) { - if (index < filemax) - daten[index++] = mtext[i]; - else - start = false; - } - } - splfd = plfd; - } - else if (plfd < pmax && plfd == splfd+1) { // Between - splfd = plfd; - if (!start && fileoffp == plfd) { // Data start, - if (S_Verbose >= 2) - printf("Rass-Start@%d ...\n", fileoffp); - start = true; - index = 0; - } - else - fileoffb = 15; - if (start) { - for (int i=fileoffb; i < len-2; i++) { - if (index < filemax) - daten[index++] = mtext[i]; - else - start = false; - } - } - } - else if (plfd == pmax && plfd == splfd+1) { // Last - fileoffb = 15; - if (start) { - for (int i=fileoffb; i < len-4; i++) { - if (index <= filemax) - daten[index++] = mtext[i]; - else { - start = false; - return; - } - } - if (S_Verbose >= 2) - printf("... Rass-End (%d bytes)\n", index); - } - - if (filemax > 0) { // nothing todo, if 0 byte file - // crc-check with bytes 'len-4/3' - unsigned short crc16 = crc16_ccitt(daten, filemax, false); - if (crc16 != (mtext[len-4]<<8)+mtext[len-3]) { - if ((S_Verbose && 0x0f) >= 1) - printf("Rass-Error: wrong CRC # calc = %04x <> transmit = %02x%02x\n", crc16, mtext[len-4], mtext[len-3]); - start = false; - return; - } - } - - // show & save file ? - if (index == filemax) { - if (slideshow || (slidecan && Rass_Show == -1)) { - if (filetype == 1) { // show only mpeg-still - char *filepath; - asprintf(&filepath, "%s/%s", DataDir, "Rass_show.mpg"); - if ((fd = fopen(filepath, "wb")) != NULL) { - fwrite(daten, 1, filemax, fd); - //fflush(fd); // for test in replaymode - fclose(fd); - Rass_Show = 1; - if (S_Verbose >= 2) - printf("Rass-File: ready for displaying :-)\n"); - } - else - printf("ERROR vdr-radio: writing imagefile failed '%s'", filepath); - free(filepath); - } - } - if (slidesave || slidedel || slidenumr < RASS_GALMAX) { - // lfd. Fotogallery 100.. ??? - if (slidenumr >= 100 && slidenumr < RASS_GALMAX) { - (Rass_SlideFoto < RASS_GALMAX) ? Rass_SlideFoto++ : Rass_SlideFoto = 100; - slidenumr = Rass_SlideFoto; - } - // - char *filepath = NULL; - (filetype == 2) ? asprintf(&filepath, "%s/Rass_%d.def", DataDir, slidenumr) - : asprintf(&filepath, "%s/Rass_%d.mpg", DataDir, slidenumr); - if ((fd = fopen(filepath, "wb")) != NULL) { - fwrite(daten, 1, filemax, fd); - fclose(fd); - if (S_Verbose >= 1) - printf("Rass-File: saving '%s'\n", filepath); - // archivemarker mpeg-stills - if (filetype == 1) { - // 0, 1000/1100/1110/1111..9000/9900/9990/9999 - if (slidenumr == 0 || slidenumr > RASS_GALMAX) { - if (slidenumr == 0) { - Rass_Flags[0][0] = !slidedel; - (RT_Info > 0) ? : RT_Info = 0; // open RadioTextOsd for ArchivTip - } - else { - int islide = (int) floor(slidenumr/1000); - for (int i = 3; i >= 0; i--) { - if ((slidenumr % (i==3 ? 1000 : i==2 ? 100 : i==1 ? 10 : 1)) == 0) { - Rass_Flags[islide][3-i] = !slidedel; //true; - break; - } - } - } - } - // gallery - else { - Rass_Gallery[slidenumr] = !slidedel; - if (!slidedel && (int)slidenumr > Rass_GalEnd) - Rass_GalEnd = slidenumr; - if (!slidedel && (Rass_GalStart == 0 || (int)slidenumr < Rass_GalStart)) - Rass_GalStart = slidenumr; - // counter - Rass_GalCount = 0; - for (int i = Rass_GalStart; i <= Rass_GalEnd; i++) { - if (Rass_Gallery[i]) - Rass_GalCount++; - } - Rass_Flags[10][0] = (Rass_GalCount > 0); - } - } - } - else - printf("ERROR vdr-radio: writing image/data-file failed '%s'", filepath); - if(filepath) - free(filepath); - } - } - start = false; - splfd = spmax = 0; - } - else { - start = false; - splfd = spmax = 0; - } - } - else { - start = false; - splfd = spmax = 0; - if (S_Verbose >= 1) - printf("RDS-Error: [Rass] Length not correct !\n"); - } -} -#endif - -#if 0 -void cRadioAudio::EnableRadioTextProcessing(const char *Titel, bool replay) -{ - asprintf(&RT_Titel, "%s", Titel); - RT_Replay = replay; - ARec_Receive = ARec_Record = false; - - first_packets = 0; - enabled = true; - imagedelay = 0; - - // Radiotext init - if (S_RtFunc >= 1) { - RT_MsgShow = RT_PlusShow = false; - RT_ReOpen = true; - RT_OsdTO = false; - RT_Index = RT_PTY = RTP_TToggle = 0; - RTP_ItemToggle = 1; - for (int i = 0; i < 5; i++) - memset(RT_Text[i], 0x20, RT_MEL-1); - sprintf(RTP_Title, "---"); - sprintf(RTP_Artist, "---"); - RTP_Starttime = time(NULL); - // - RDS_PSShow = false; - RDS_PSIndex = 0; - for (int i = 0; i < 12; i++) - memset(RDS_PSText[i], 0x20, 8); - } - - // ...Memory - rtp_content.start = time(NULL); - rtp_content.item_New = false; - rtp_content.rt_Index = -1; - rtp_content.item_Index = -1; - rtp_content.info_StockIndex = -1; - rtp_content.info_SportIndex = -1; - rtp_content.info_LotteryIndex = -1; - rtp_content.info_WeatherIndex = -1; - rtp_content.info_OtherIndex = -1; - - for (int i = 0; i < MAX_RTPC; i++) { - rtp_content.radiotext[i] = NULL; - rtp_content.radiotext[MAX_RTPC+i] = NULL; - rtp_content.item_Title[i] = NULL; - rtp_content.item_Artist[i] = NULL; - rtp_content.info_Stock[i] = NULL; - rtp_content.info_Sport[i] = NULL; - rtp_content.info_Lottery[i] = NULL; - rtp_content.info_Weather[i] = NULL; - rtp_content.info_Other[i] = NULL; - } - - rtp_content.info_News = NULL; - rtp_content.info_NewsLocal = NULL; - rtp_content.info_DateTime = NULL; - rtp_content.info_Traffic = NULL; - rtp_content.info_Alarm = NULL; - rtp_content.info_Advert = NULL; - rtp_content.info_Url = NULL; - rtp_content.prog_Station = NULL; - rtp_content.prog_Now = NULL; - rtp_content.prog_Next = NULL; - rtp_content.prog_Part = NULL; - rtp_content.prog_Host = NULL; - rtp_content.prog_EditStaff = NULL; - rtp_content.prog_Homepage = NULL; - rtp_content.phone_Hotline = NULL; - rtp_content.phone_Studio = NULL; - rtp_content.email_Hotline = NULL; - rtp_content.email_Studio = NULL; - - // Rass init - Rass_Show = Rass_Archiv = -1; - for (int i = 0; i <= 10; i++) { - for (int ii = 0; ii < 4; ii++) - Rass_Flags[i][ii] = false; - } - Rass_GalStart = Rass_GalEnd = Rass_GalCount = 0; - for (int i = 0; i < RASS_GALMAX; i++) - Rass_Gallery[i] = false; - Rass_SlideFoto = 99; - - if (S_RtFunc < 1) return; - - // RDS-Receiver for seperate Data-PIDs, only Livemode, hardcoded Astra_19E + Hotbird 13E - int pid = 0; - if (!replay) { - switch (chan->Tid()) { - case 1113: - switch (pid = chan->Apid(0)) { // Astra_19.2E - 12633 GHz - /* case 0x161: pid = 0x229; // radio top40 - break; */ - case 0x400: // Hitradio FFH - case 0x406: // planet radio - case 0x40c: pid += 1; // harmony.ffm - break; - default: return; - } - break; - case 1115: - switch (pid = chan->Apid(0)) { // Astra_19.2E - 12663 GHz - case 0x1bA: pid = 0x21e; // TruckRadio, only NaviData(0xbf) seen - break; - default: return; - } - break; - case 5300: - switch (pid = chan->Apid(0)) { // Hotbird_13E - 11747 GHz, no Radiotext @ moment, only TMC + MECs 25/26 - case 0xdc3: // Radio 1 - case 0xdd3: // Radio 3 - case 0xddb: // Radio 5 - case 0xde3: // Radio Exterior - case 0xdeb: pid += 1; // Radio 4 - break; - default: return; - } - break; - default: return; - } - RDSReceiver = new cRDSReceiver(pid); - rdsdevice = cDevice::ActualDevice(); - rdsdevice->AttachReceiver(RDSReceiver); - } -} - -void cRadioAudio::DisableRadioTextProcessing() -{ - RT_Replay = enabled = false; - - // Radiotext & Rass - RT_Info = -1; - RT_ReOpen = false; - Rass_Show = Rass_Archiv = -1; - Rass_GalStart = Rass_GalEnd = Rass_GalCount = 0; - - if (RadioTextOsd != NULL) - RadioTextOsd->Hide(); - - if (RDSReceiver != NULL) { - rdsdevice->Detach(RDSReceiver); - delete RDSReceiver; - RDSReceiver = NULL; - rdsdevice = NULL; - } -} - - -// --- cRadioTextOsd ------------------------------------------------------ - -cBitmap cRadioTextOsd::rds(rds_xpm); -cBitmap cRadioTextOsd::arec(arec_xpm); -cBitmap cRadioTextOsd::rass(rass_xpm); -cBitmap cRadioTextOsd::index(index_xpm); -cBitmap cRadioTextOsd::marker(marker_xpm); -cBitmap cRadioTextOsd::page1(page1_xpm); -cBitmap cRadioTextOsd::pages2(pages2_xpm); -cBitmap cRadioTextOsd::pages3(pages3_xpm); -cBitmap cRadioTextOsd::pages4(pages4_xpm); -cBitmap cRadioTextOsd::no0(no0_xpm); -cBitmap cRadioTextOsd::no1(no1_xpm); -cBitmap cRadioTextOsd::no2(no2_xpm); -cBitmap cRadioTextOsd::no3(no3_xpm); -cBitmap cRadioTextOsd::no4(no4_xpm); -cBitmap cRadioTextOsd::no5(no5_xpm); -cBitmap cRadioTextOsd::no6(no6_xpm); -cBitmap cRadioTextOsd::no7(no7_xpm); -cBitmap cRadioTextOsd::no8(no8_xpm); -cBitmap cRadioTextOsd::no9(no9_xpm); -cBitmap cRadioTextOsd::bok(bok_xpm); -cBitmap cRadioTextOsd::pageE(pageE_xpm); - -cRadioTextOsd::cRadioTextOsd() -{ - RadioTextOsd = this; - osd = NULL; - qosd = NULL; - rtclosed = rassclosed = false; - RT_ReOpen = false; -} - -cRadioTextOsd::~cRadioTextOsd() -{ - if (Rass_Archiv >= 0) { - if (!RT_Replay) - Rass_Archiv = RassImage(-1, -1, false); - else { - Rass_Archiv = -1; - RadioAudio->SetBackgroundImage(ReplayFile); - } - } - - if (osd != NULL) - delete osd; - if (qosd != NULL) - delete qosd; - RadioTextOsd = NULL; - RT_ReOpen = !RT_OsdTO; - - cRemote::Put(LastKey); -} - -void cRadioTextOsd::Show(void) -{ - LastKey = kNone; - RT_OsdTO = false; -#ifndef VDRP_CLOSEMENU - osdtimer.Set(); -#endif - - ftitel = cFont::GetFont(fontOsd); - ftext = cFont::GetFont(fontSml); - fheight = ftext->Height() + 4; - int rowoffset = (S_RtOsdTitle == 1) ? 1 : 0; - bheight = (S_RtOsdTags >=1 ) ? fheight * (S_RtOsdRows+rowoffset+2) : fheight * (S_RtOsdRows+rowoffset); - (S_RtOsdTitle == 1) ? bheight += 20 : bheight += 12; - - asprintf(&RTp_Titel, "%s - %s", tr("RTplus"), RT_Titel); - - if (S_RtDispl >= 1 && (Rass_Show == -1 || S_RassText >= 2)) { - RT_MsgShow = (RT_Info >= 1); - ShowText(); - } -} - -void cRadioTextOsd::Hide(void) -{ - RTOsdClose(); - RassOsdClose(); -} - -void cRadioTextOsd::RTOsdClose(void) -{ - if (osd != NULL) { - delete osd; - osd = NULL; - } -} -#endif - -#if ENABLE_RASS -int CRadioText::RassImage(int QArchiv, int QKey, bool DirUp) -{ - int i; - - if (QKey >= 0 && QKey <= 9) { - if (QArchiv == 0) - (Rass_Flags[QKey][0]) ? QArchiv = QKey * 1000 : QArchiv = 0; - else if (QArchiv > 0) { - if (floor(QArchiv/1000) == QKey) { - for (i = 3; i >= 0; i--) { -// if (fmod(QArchiv, pow(10, i)) == 0) - if ((QArchiv % (i==3 ? 1000 : i==2 ? 100 : i==1 ? 10 : 1)) == 0) - break; - } - - if (i > 0) { - --i; - QArchiv += QKey * (int) (i==3 ? 1000 : i==2 ? 100 : i==1 ? 10 : 1); - } - else - QArchiv = QKey * 1000; - (Rass_Flags[QKey][3-i]) ? : QArchiv = QKey * 1000; - } - else - (Rass_Flags[QKey][0]) ? QArchiv = QKey * 1000 : QArchiv = 0; - } - } - - // Gallery - else if (QKey > 9 && Rass_GalCount >= 0) { - if (QArchiv < Rass_GalStart || QArchiv > Rass_GalEnd) - QArchiv = Rass_GalStart - 1; - if (DirUp) { - for (i = QArchiv+1; i <= Rass_GalEnd; i++) { - if (Rass_Gallery[i]) - break; - } - QArchiv = (i <= Rass_GalEnd) ? i : Rass_GalStart; - } - else { - for (i = QArchiv-1; i >= Rass_GalStart; i--) { - if (Rass_Gallery[i]) - break; - } - QArchiv = (i >= Rass_GalStart) ? i : Rass_GalEnd; - } - } - - // show mpeg-still - char *image; - if (QArchiv >= 0) - asprintf(&image, "%s/Rass_%d.mpg", DataDir, QArchiv); - else - asprintf(&image, "%s/Rass_show.mpg", DataDir); -// Houdini: SetBackgroundImage() does not accept mpg stills -// frameBuffer->useBackground(frameBuffer->loadBackground(image));// set useBackground true or false -// frameBuffer->paintBackground(); -// RadioAudio->SetBackgroundImage(image); - free(image); - - return QArchiv; -} -#endif - -#if 0 -void cRadioTextOsd::RassOsd(void) -{ - int fh = ftext->Height(); - - if (!qosd && !osd && !Skins.IsOpen() && !cOsd::IsOpen()) { - qosd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop+Setup.OSDHeight - (29+264-6+36)); - tArea Area = {0, 0, 97, 29+264+5, 4}; - qosd->SetAreas(&Area, 1); - } - - if (qosd) { - uint32_t bcolor, fcolor; - int skin = theme_skin(); - - // Logo - bcolor = radioSkin[skin].clrTitleBack; - fcolor = radioSkin[skin].clrTitleText; - qosd->DrawRectangle(0, 1, 97, 29, bcolor); - qosd->DrawBitmap(25, 5, rass, bcolor, fcolor); - - // Body - bcolor = radioSkin[skin].clrBack; - fcolor = radioSkin[skin].clrText; - int offs = 29 + 2; - qosd->DrawRectangle(0, offs, 97, 29+264+5, bcolor); - - // Keys+Index - offs += 4; - qosd->DrawBitmap(4, offs, no0, bcolor, fcolor); - qosd->DrawBitmap(44, offs, index, bcolor, fcolor); - qosd->DrawBitmap(4, 24+offs, no1, bcolor, fcolor); - qosd->DrawBitmap(4, 48+offs, no2, bcolor, fcolor); - qosd->DrawBitmap(4, 72+offs, no3, bcolor, fcolor); - qosd->DrawBitmap(4, 96+offs, no4, bcolor, fcolor); - qosd->DrawBitmap(4, 120+offs, no5, bcolor, fcolor); - qosd->DrawBitmap(4, 144+offs, no6, bcolor, fcolor); - qosd->DrawBitmap(4, 168+offs, no7, bcolor, fcolor); - qosd->DrawBitmap(4, 192+offs, no8, bcolor, fcolor); - qosd->DrawBitmap(4, 216+offs, no9, bcolor, fcolor); - qosd->DrawBitmap(4, 240+offs, bok, bcolor, fcolor); - - // Content - bool mark = false; - for (int i = 1; i <= 9; i++) { - // Pages - if (Rass_Flags[i][0] && Rass_Flags[i][1] && Rass_Flags[i][2] && Rass_Flags[i][3]) - qosd->DrawBitmap(48, (i*24)+offs, pages4, bcolor, fcolor); - else if (Rass_Flags[i][0] && Rass_Flags[i][1] && Rass_Flags[i][2]) - qosd->DrawBitmap(48, (i*24)+offs, pages3, bcolor, fcolor); - else if (Rass_Flags[i][0] && Rass_Flags[i][1]) - qosd->DrawBitmap(48, (i*24)+offs, pages2, bcolor, fcolor); - else if (Rass_Flags[i][0]) - qosd->DrawBitmap(48, (i*24)+offs, page1, bcolor, fcolor); - - // Marker - if (floor(Rass_Archiv/1000) == i) { - qosd->DrawBitmap(28, (i*24)+offs, marker, bcolor, fcolor); - mark = true; - } - } - - // Gallery - if (Rass_GalCount > 0) { - char *temp; - qosd->DrawBitmap(48, 240+offs, pageE, bcolor, fcolor); - asprintf(&temp, "%d", Rass_GalCount); - qosd->DrawText(67, 240+offs-2, temp, fcolor, clrTransparent, ftext, 97, fh); - free(temp); - } - - // Marker gallery/index - if (!mark) { - if (Rass_Archiv > 0 && Rass_Archiv <= RASS_GALMAX) - qosd->DrawBitmap(30, 240+offs, marker, bcolor, fcolor); - else - qosd->DrawBitmap(28, offs, marker, bcolor, fcolor); - } - qosd->Flush(); - } -} - -void cRadioTextOsd::RassOsdTip(void) -{ - int fh = ftext->Height(); - - if (!qosd && !osd && !Skins.IsOpen() && !cOsd::IsOpen()) { - qosd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop+Setup.OSDHeight - (29+(2*fh)-6+36)); - tArea Area = {0, 0, 97, 29+(2*fh)+5, 4}; - qosd->SetAreas(&Area, 1); - } - - if (qosd) { - uint32_t bcolor, fcolor; - int skin = theme_skin(); - - // Title - bcolor = radioSkin[skin].clrTitleBack; - fcolor = radioSkin[skin].clrTitleText; - qosd->DrawRectangle(0, 0, 97, 29, bcolor); - qosd->DrawBitmap(25, 5, rass, bcolor, fcolor); - - // Body - bcolor = radioSkin[skin].clrBack; - fcolor = radioSkin[skin].clrText; - qosd->DrawRectangle(0, 29+2, 97, 29+(2*fh)+5, bcolor); - qosd->DrawText(5, 29+4, tr("Records"), fcolor, clrTransparent, ftext, 97, fh); - qosd->DrawText(5, 29+fh+4, tr("with <0>"), fcolor, clrTransparent, ftext, 97, fh); - qosd->Flush(); - } -} - -void cRadioTextOsd::RassOsdClose(void) -{ - if (qosd != NULL) { - delete qosd; - qosd = NULL; - } -} - -void cRadioTextOsd::RassImgSave(char *size, int pos) -{ - char *infile, *outfile, *cmd; - int filenr = 0, error = 0; - struct tm *ts, tm_store; - time_t t = time(NULL); - ts = localtime_r(&t, &tm_store); - - switch (pos) { - // all from 1-9 - case 1 ... 9: - for (int i = 3; i >= 0; i--) { - filenr += (int) (pos * pow(10, i)); - if (Rass_Flags[pos][3-i]) { - asprintf(&infile, "%s/Rass_%d.mpg", DataDir, filenr); - asprintf(&outfile, "%s/Rass_%s-%04d_%02d%02d%02d%02d.jpg", DataDir, RT_Titel, filenr, - ts->tm_mon+1, ts->tm_mday, ts->tm_hour, ts->tm_min); - asprintf(&cmd, "ffmpeg -i %s -s %s -f mjpeg -y %s", infile, size, outfile); - if ((error = system(cmd))) - i = -1; - } - } - asprintf(&cmd, "%s '%d'", tr("Rass-Image(s) saved from Archiv "), pos); - break; - - // all from gallery - case 10: - for (int i = Rass_GalStart; i <= Rass_GalEnd; i++) { - if (Rass_Gallery[i]) { - asprintf(&infile, "%s/Rass_%d.mpg", DataDir, i); - asprintf(&outfile, "%s/Rass_%s-Gallery%04d_%02d%02d.jpg", DataDir, RT_Titel, i, - ts->tm_mon+1, ts->tm_mday); - asprintf(&cmd, "ffmpeg -i %s -s %s -f mjpeg -y %s", infile, size, outfile); - if ((error = system(cmd))) - i = Rass_GalEnd + 1; - } - } - asprintf(&cmd, "%s", tr("Rass-Image(s) saved from Gallery")); - break; - - // single - default: - asprintf(&infile, "%s/Rass_%d.mpg", DataDir, Rass_Archiv); - asprintf(&outfile, "%s/Rass_%s-%04d_%02d%02d%02d%02d.jpg", DataDir, RT_Titel, Rass_Archiv, - ts->tm_mon+1, ts->tm_mday, ts->tm_hour, ts->tm_min); - asprintf(&cmd, "ffmpeg -i %s -s %s -f mjpeg -y %s", infile, size, outfile); - error = system(cmd); - asprintf(&cmd, "%s: %s", tr("Rass-Image saved"), outfile); - } - free(infile); - - // Info - RassOsdClose(); - if (error) { - asprintf(&cmd, "%s: %s", tr("Rass-Image failed"), outfile); - Skins.Message(mtError, cmd, Setup.OSDMessageTime); - } - else - Skins.Message(mtInfo, cmd, Setup.OSDMessageTime); - - free(outfile); - free(cmd); -} - -void cRadioTextOsd::rtp_print(void) -{ - struct tm tm_store; - time_t t = time(NULL); - - printf("\n>>> RTplus-Memoryclasses @ %s", asctime(localtime_r(&t, &tm_store))); - printf(" on '%s' since %s", RT_Titel, asctime(localtime_r(&rtp_content.start, &tm_store))); - - printf("--- Programme ---\n"); - if (rtp_content.prog_Station != NULL) printf(" Station: %s\n", rtp_content.prog_Station); - if (rtp_content.prog_Now != NULL) printf(" Now: %s\n", rtp_content.prog_Now); - if (rtp_content.prog_Next != NULL) printf(" Next: %s\n", rtp_content.prog_Next); - if (rtp_content.prog_Part != NULL) printf(" Part: %s\n", rtp_content.prog_Part); - if (rtp_content.prog_Host != NULL) printf(" Host: %s\n", rtp_content.prog_Host); - if (rtp_content.prog_EditStaff != NULL) printf(" Ed.Staff: %s\n", rtp_content.prog_EditStaff); - if (rtp_content.prog_Homepage != NULL) printf(" Homepage: %s\n", rtp_content.prog_Homepage); - - printf("--- Interactivity ---\n"); - if (rtp_content.phone_Hotline != NULL) printf(" Phone-Hotline: %s\n", rtp_content.phone_Hotline); - if (rtp_content.phone_Studio != NULL) printf(" Phone-Studio: %s\n", rtp_content.phone_Studio); - if (rtp_content.email_Hotline != NULL) printf(" Email-Hotline: %s\n", rtp_content.email_Hotline); - if (rtp_content.email_Studio != NULL) printf(" Email-Studio: %s\n", rtp_content.email_Studio); - - printf("--- Info ---\n"); - if (rtp_content.info_News != NULL) printf(" News: %s\n", rtp_content.info_News); - if (rtp_content.info_NewsLocal != NULL) printf(" NewsLocal: %s\n", rtp_content.info_NewsLocal); - if (rtp_content.info_DateTime != NULL) printf(" DateTime: %s\n", rtp_content.info_DateTime); - if (rtp_content.info_Traffic != NULL) printf(" Traffic: %s\n", rtp_content.info_Traffic); - if (rtp_content.info_Alarm != NULL) printf(" Alarm: %s\n", rtp_content.info_Alarm); - if (rtp_content.info_Advert != NULL) printf(" Advertisg: %s\n", rtp_content.info_Advert); - if (rtp_content.info_Url != NULL) printf(" Url: %s\n", rtp_content.info_Url); - // no sorting - for (int i = 0; i < MAX_RTPC; i++) - if (rtp_content.info_Stock[i] != NULL) printf(" Stock[%02d]: %s\n", i, rtp_content.info_Stock[i]); - for (int i = 0; i < MAX_RTPC; i++) - if (rtp_content.info_Sport[i] != NULL) printf(" Sport[%02d]: %s\n", i, rtp_content.info_Sport[i]); - for (int i = 0; i < MAX_RTPC; i++) - if (rtp_content.info_Lottery[i] != NULL) printf(" Lottery[%02d]: %s\n", i, rtp_content.info_Lottery[i]); - for (int i = 0; i < MAX_RTPC; i++) - if (rtp_content.info_Weather[i] != NULL) printf(" Weather[%02d]: %s\n", i, rtp_content.info_Weather[i]); - for (int i = 0; i < MAX_RTPC; i++) - if (rtp_content.info_Other[i] != NULL) printf(" Other[%02d]: %s\n", i, rtp_content.info_Other[i]); -/* - printf("--- Item-Playlist ---\n"); - // no sorting - if (rtp_content.item_Index >= 0) { - for (int i = 0; i < MAX_RTPC; i++) { - if (rtp_content.item_Title[i] != NULL && rtp_content.item_Artist[i] != NULL) { - struct tm tm_store; - struct tm *ts = localtime_r(&rtp_content.item_Start[i], &tm_store); - printf(" [%02d] %02d:%02d Title: %s | Artist: %s\n", - i, ts->tm_hour, ts->tm_min, rtp_content.item_Title[i], rtp_content.item_Artist[i]); - } - } - } - - printf("--- Last seen Radiotext ---\n"); - // no sorting - if (rtp_content.rt_Index >= 0) { - for (int i = 0; i < 2*MAX_RTPC; i++) - if (rtp_content.radiotext[i] != NULL) printf(" [%03d] %s\n", i, rtp_content.radiotext[i]); - } -*/ - printf("<<<\n"); -} - -#define rtplog 0 -eOSState cRadioTextOsd::ProcessKey(eKeys Key) -{ - // RTplus Infolog - if (rtplog == 1 && S_Verbose >= 1) { - static int ct = 0; - if (++ct >= 60) { - ct = 0; - rtp_print(); - } - } - - // check end @ replay - if (RT_Replay) { - int rplayCur, rplayTot; - cControl::Control()->GetIndex(rplayCur, rplayTot, false); - if (rplayCur >= rplayTot-1) { - Hide(); - return osEnd; - } - } - - // Timeout or no Info/Rass - if (RT_OsdTO || (RT_OsdTOTemp > 0) || (RT_Info < 0)) { - Hide(); - return osEnd; - } - - eOSState state = cOsdObject::ProcessKey(Key); - if (state != osUnknown) return state; - - // Key pressed ... - if (Key != kNone && Key < k_Release) { - if (osd) { // Radiotext, -plus Osd - switch (Key) { - case kBack: RTOsdClose(); - rtclosed = true; - //rassclosed = false; - break; - case k0: RTOsdClose(); - RTplus_Osd = true; - cRemote::CallPlugin("radio"); - return osEnd; - default: Hide(); - LastKey = (Key == kChanUp || Key == kChanDn) ? kNone : Key; - return osEnd; - } - } - else if (qosd && Rass_Archiv >= 0) { // Rass-Archiv Osd - int i, pos; - pos = (Rass_Archiv > 0 && Rass_Archiv <= RASS_GALMAX) ? 10 : (int) floor(Rass_Archiv/1000); - switch (Key) { - // back to Slideshow - case kBlue: - case kBack: - if (!RT_Replay) - Rass_Archiv = RassImage(-1, 0, false); - else { - Rass_Archiv = -1; - RadioAudio->SetBackgroundImage(ReplayFile); - } - RassOsdClose(); - rassclosed = rtclosed = false; - break; - - // Archiv-Sides - case k0 ... k9: - Rass_Archiv = RassImage(Rass_Archiv, Key-k0, false); - RassOsd(); - break; - - case kOk: - if (Rass_Flags[10][0]) { - Rass_Archiv = RassImage(Rass_Archiv, 10, true); - RassOsd(); - } - break; - - case kLeft: - case kRight: - Rass_Archiv = RassImage(Rass_Archiv, pos, (Key == kRight) ? true : false); - RassOsd(); - break; - case kDown: - (pos == 10) ? i = 0 : i = pos + 1; - while (i != pos) { - if (Rass_Flags[i][0]) { - Rass_Archiv = RassImage(Rass_Archiv, i, true); - RassOsd(); - return osContinue; - } - if (++i > 10) i = 0; - } - break; - - case kUp: - (pos == 0) ? i = 10 : i = pos - 1; - while (i != pos) { - if (Rass_Flags[i][0]) { - Rass_Archiv = RassImage(Rass_Archiv, i, true); - RassOsd(); - return osContinue; - } - if (--i < 0) i = 10; - } - break; - - case kRed: - RassImgSave("1024x576", 0); - break; - - case kGreen: - RassImgSave("1024x576", pos); - break; - - case kYellow: - break; // todo, what ? - - default: - Hide(); - LastKey = (Key == kChanUp || Key == kChanDn) ? kNone : Key; - return osEnd; - } - } - else if (qosd && Rass_Archiv == -1) { // Rass-Slideshow Osd - switch (Key) { - // close - case kBack: - RassOsdClose(); - rassclosed = true; - //rtclosed = false; - break; - - // Archiv-Index - case k0: - if (Rass_Flags[0][0]) { - RassOsdClose(); - Rass_Archiv = RassImage(0, 0, false); - RassOsd(); - } - break; - - default: - Hide(); - LastKey = (Key == kChanUp || Key == kChanDn) ? kNone : Key; - return osEnd; - } - } - else { // no RT && no Rass - Hide(); - LastKey = (Key == kChanUp || Key == kChanDn) ? kNone : Key; - return osEnd; - } - } - // no Key pressed ... -#ifndef VDRP_CLOSEMENU - else if (S_RtOsdTO > 0 && osdtimer.Elapsed()/1000/60 >= (uint)S_RtOsdTO) { - RT_OsdTO = true; - Hide(); - return osEnd; - } -#endif - else if (Rass_Archiv >= 0) - RassOsd(); - else if (RT_MsgShow && !rtclosed && (Rass_Show == -1 || S_RassText >= 2 || rassclosed)) { - RassOsdClose(); - ShowText(); - } - else if (Rass_Flags[0][0] && !rassclosed && (S_RassText < 2 || rtclosed)) { - RTOsdClose(); - RassOsdTip(); - } - - return osContinue; -} - - -// --- cRTplusOsd ------------------------------------------------------ - -cRTplusOsd::cRTplusOsd(void) -:cOsdMenu(RTp_Titel, 3, 12) -{ - RTplus_Osd = false; - - bcount = helpmode = 0; - listtyp[0] = tr("Radiotext"); - listtyp[1] = tr("Playlist"); - listtyp[2] = tr("Sports"); - listtyp[3] = tr("Lottery"); - listtyp[4] = tr("Weather"); - listtyp[5] = tr("Stockmarket"); - listtyp[6] = tr("Other"); - - Load(); - Display(); -} - -cRTplusOsd::~cRTplusOsd() -{ -} - -void cRTplusOsd::Load(void) -{ - char text[80]; - - struct tm tm_store; - struct tm *ts = localtime_r(&rtp_content.start, &tm_store); - snprintf(text, sizeof(text), "%s %02d:%02d", tr("RTplus Memory since"), ts->tm_hour, ts->tm_min); - Add(new cOsdItem(hk(text))); - snprintf(text, sizeof(text), "%s", " "); - Add(new cOsdItem(hk(text))); - - snprintf(text, sizeof(text), "-- %s --", tr("Programme")); - Add(new cOsdItem(hk(text))); - if (rtp_content.prog_Station != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Station"), rtp_content.prog_Station); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.prog_Now != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Now"), rtp_content.prog_Now); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.prog_Part != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("...Part"), rtp_content.prog_Part); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.prog_Next != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Next"), rtp_content.prog_Next); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.prog_Host != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Host"), rtp_content.prog_Host); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.prog_EditStaff != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Edit.Staff"), rtp_content.prog_EditStaff); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.prog_Homepage != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Homepage"), rtp_content.prog_Homepage); - Add(new cOsdItem(hk(text))); - } - snprintf(text, sizeof(text), "%s", " "); - Add(new cOsdItem(hk(text))); - - snprintf(text, sizeof(text), "-- %s --", tr("Interactivity")); - Add(new cOsdItem(hk(text))); - if (rtp_content.phone_Hotline != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Phone-Hotline"), rtp_content.phone_Hotline); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.phone_Studio != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Phone-Studio"), rtp_content.phone_Studio); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.email_Hotline != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Email-Hotline"), rtp_content.email_Hotline); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.email_Studio != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Email-Studio"), rtp_content.email_Studio); - Add(new cOsdItem(hk(text))); - } - snprintf(text, sizeof(text), "%s", " "); - Add(new cOsdItem(hk(text))); - - snprintf(text, sizeof(text), "-- %s --", tr("Info")); - Add(new cOsdItem(hk(text))); - if (rtp_content.info_News != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("News"), rtp_content.info_News); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.info_NewsLocal != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("NewsLocal"), rtp_content.info_NewsLocal); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.info_DateTime != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("DateTime"), rtp_content.info_DateTime); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.info_Traffic != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Traffic"), rtp_content.info_Traffic); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.info_Alarm != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Alarm"), rtp_content.info_Alarm); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.info_Advert != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Advertising"), rtp_content.info_Advert); - Add(new cOsdItem(hk(text))); - } - if (rtp_content.info_Url != NULL) { - snprintf(text, sizeof(text), "\t%s:\t%s", tr("Url"), rtp_content.info_Url); - Add(new cOsdItem(hk(text))); - } - - for (int i = 0; i <= 6; i++) - btext[i] = NULL; - bcount = 0; - asprintf(&btext[bcount++], "%s", listtyp[0]); - if (rtp_content.item_Index >= 0) - asprintf(&btext[bcount++], "%s", listtyp[1]); - if (rtp_content.info_SportIndex >= 0) - asprintf(&btext[bcount++], "%s", listtyp[2]); - if (rtp_content.info_LotteryIndex >= 0) - asprintf(&btext[bcount++], "%s", listtyp[3]); - if (rtp_content.info_WeatherIndex >= 0) - asprintf(&btext[bcount++], "%s", listtyp[4]); - if (rtp_content.info_StockIndex >= 0) - asprintf(&btext[bcount++], "%s", listtyp[5]); - if (rtp_content.info_OtherIndex >= 0) - asprintf(&btext[bcount++], "%s", listtyp[6]); - - switch (bcount) { - case 4: if (helpmode == 0) - SetHelp(btext[0], btext[1], btext[2], ">>"); - else if (helpmode == 1) - SetHelp("<<", btext[3], NULL, tr("Exit")); - break; - case 5: if (helpmode == 0) - SetHelp(btext[0], btext[1], btext[2], ">>"); - else if (helpmode == 1) - SetHelp("<<", btext[3], btext[4], tr("Exit")); - break; - case 6: if (helpmode == 0) - SetHelp(btext[0], btext[1], btext[2], ">>"); - else if (helpmode == 1) - SetHelp("<<", btext[3], btext[4], ">>"); - else if (helpmode == 2) - SetHelp("<<", btext[5], NULL, tr("Exit")); - break; - case 7: if (helpmode == 0) - SetHelp(btext[0], btext[1], btext[2], ">>"); - else if (helpmode == 1) - SetHelp("<<", btext[3], btext[4], ">>"); - else if (helpmode == 2) - SetHelp("<<", btext[5], btext[6], tr("Exit")); - break; - default: helpmode = 0; - SetHelp(btext[0], btext[1], btext[2], tr("Exit")); - } -} - -void cRTplusOsd::Update(void) -{ - Clear(); - Load(); - Display(); -} - -int cRTplusOsd::rtptyp(char *btext) -{ - for (int i = 0; i <= 6; i++) { - if (strcmp(btext, listtyp[i]) == 0) - return i; - } - - return -1; -} - -void cRTplusOsd::rtp_fileprint(void) -{ - struct tm *ts, tm_store; - char *fname, *fpath; - FILE *fd; - int ind, lfd = 0; - - time_t t = time(NULL); - ts = localtime_r(&t, &tm_store); - asprintf(&fname, "RTplus_%s_%04d-%02d-%02d.%02d.%02d", RT_Titel, ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday, ts->tm_hour, ts->tm_min); - asprintf(&fpath, "%s/%s", DataDir, fname); - if ((fd = fopen(fpath, "w")) != NULL) { - - fprintf(fd, ">>> RTplus-Memoryclasses @ %s", asctime(localtime_r(&t, &tm_store))); - fprintf(fd, " on '%s' since %s", RT_Titel, asctime(localtime_r(&rtp_content.start, &tm_store))); - - fprintf(fd, "--- Programme ---\n"); - if (rtp_content.prog_Station != NULL) fprintf(fd, " Station: %s\n", rtp_content.prog_Station); - if (rtp_content.prog_Now != NULL) fprintf(fd, " Now: %s\n", rtp_content.prog_Now); - if (rtp_content.prog_Part != NULL) fprintf(fd, " Part: %s\n", rtp_content.prog_Part); - if (rtp_content.prog_Next != NULL) fprintf(fd, " Next: %s\n", rtp_content.prog_Next); - if (rtp_content.prog_Host != NULL) fprintf(fd, " Host: %s\n", rtp_content.prog_Host); - if (rtp_content.prog_EditStaff != NULL) fprintf(fd, " Ed.Staff: %s\n", rtp_content.prog_EditStaff); - if (rtp_content.prog_Homepage != NULL) fprintf(fd, " Homepage: %s\n", rtp_content.prog_Homepage); - - fprintf(fd, "--- Interactivity ---\n"); - if (rtp_content.phone_Hotline != NULL) fprintf(fd, " Phone-Hotline: %s\n", rtp_content.phone_Hotline); - if (rtp_content.phone_Studio != NULL) fprintf(fd, " Phone-Studio: %s\n", rtp_content.phone_Studio); - if (rtp_content.email_Hotline != NULL) fprintf(fd, " Email-Hotline: %s\n", rtp_content.email_Hotline); - if (rtp_content.email_Studio != NULL) fprintf(fd, " Email-Studio: %s\n", rtp_content.email_Studio); - - fprintf(fd, "--- Info ---\n"); - if (rtp_content.info_News != NULL) fprintf(fd, " News: %s\n", rtp_content.info_News); - if (rtp_content.info_NewsLocal != NULL) fprintf(fd, " NewsLocal: %s\n", rtp_content.info_NewsLocal); - if (rtp_content.info_DateTime != NULL) fprintf(fd, " DateTime: %s\n", rtp_content.info_DateTime); - if (rtp_content.info_Traffic != NULL) fprintf(fd, " Traffic: %s\n", rtp_content.info_Traffic); - if (rtp_content.info_Alarm != NULL) fprintf(fd, " Alarm: %s\n", rtp_content.info_Alarm); - if (rtp_content.info_Advert != NULL) fprintf(fd, " Advertisg: %s\n", rtp_content.info_Advert); - if (rtp_content.info_Url != NULL) fprintf(fd, " Url: %s\n", rtp_content.info_Url); - - if (rtp_content.item_Index >= 0) { - fprintf(fd, "--- Item-Playlist ---\n"); - ind = rtp_content.item_Index; - if (ind < (MAX_RTPC-1) && rtp_content.item_Title[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.item_Title[i] != NULL && rtp_content.item_Artist[i] != NULL) { - ts = localtime_r(&rtp_content.item_Start[i], &tm_store); - fprintf(fd, " %02d:%02d Title: '%s' | Artist: '%s'\n", ts->tm_hour, ts->tm_min, rtp_content.item_Title[i], rtp_content.item_Artist[i]); - } - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.item_Title[i] != NULL && rtp_content.item_Artist[i] != NULL) { - ts = localtime_r(&rtp_content.item_Start[i], &tm_store); - fprintf(fd, " %02d:%02d Title: '%s' | Artist: '%s'\n", ts->tm_hour, ts->tm_min, rtp_content.item_Title[i], rtp_content.item_Artist[i]); - } - } - } - - if (rtp_content.info_SportIndex >= 0) { - fprintf(fd, "--- Sports ---\n"); - ind = rtp_content.info_SportIndex; - if (ind < (MAX_RTPC-1) && rtp_content.info_Sport[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.info_Sport[i] != NULL) - fprintf(fd, " %02d. %s\n", ++lfd, rtp_content.info_Sport[i]); - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.info_Sport[i] != NULL) - fprintf(fd, " %02d. %s\n", ++lfd, rtp_content.info_Sport[i]); - } - } - - if (rtp_content.info_LotteryIndex >= 0) { - fprintf(fd, "--- Lottery ---\n"); - ind = rtp_content.info_LotteryIndex; - if (ind < (MAX_RTPC-1) && rtp_content.info_Lottery[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.info_Lottery[i] != NULL) - fprintf(fd, " %02d. %s\n", ++lfd, rtp_content.info_Lottery[i]); - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.info_Lottery[i] != NULL) - fprintf(fd, " %02d. %s\n", ++lfd, rtp_content.info_Lottery[i]); - } - } - - if (rtp_content.info_WeatherIndex >= 0) { - fprintf(fd, "--- Weather ---\n"); - ind = rtp_content.info_WeatherIndex; - if (ind < (MAX_RTPC-1) && rtp_content.info_Weather[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.info_Weather[i] != NULL) - fprintf(fd, " %02d. %s\n", ++lfd, rtp_content.info_Weather[i]); - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.info_Weather[i] != NULL) - fprintf(fd, " %02d. %s\n", ++lfd, rtp_content.info_Weather[i]); - } - } - - if (rtp_content.info_StockIndex >= 0) { - fprintf(fd, "--- Stockmarket ---\n"); - ind = rtp_content.info_StockIndex; - if (ind < (MAX_RTPC-1) && rtp_content.info_Stock[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.info_Stock[i] != NULL) - fprintf(fd, " %02d. %s\n", ++lfd, rtp_content.info_Stock[i]); - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.info_Stock[i] != NULL) - fprintf(fd, " %02d. %s\n", ++lfd, rtp_content.info_Stock[i]); - } - } - - if (rtp_content.info_OtherIndex >= 0) { - fprintf(fd, "--- Other ---\n"); - ind = rtp_content.info_OtherIndex; - if (ind < (MAX_RTPC-1) && rtp_content.info_Other[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.info_Other[i] != NULL) - fprintf(fd, " %02d. %s\n", ++lfd, rtp_content.info_Other[i]); - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.info_Other[i] != NULL) - fprintf(fd, " %02d. %s\n", ++lfd, rtp_content.info_Other[i]); - } - } - - fprintf(fd, "--- Last seen Radiotext ---\n"); - ind = rtp_content.rt_Index; - if (ind < (2*MAX_RTPC-1) && rtp_content.radiotext[ind+1] != NULL) { - for (int i = ind+1; i < 2*MAX_RTPC; i++) { - if (rtp_content.radiotext[i] != NULL) - fprintf(fd, " %03d. %s\n", ++lfd, rtp_content.radiotext[i]); - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.radiotext[i] != NULL) - fprintf(fd, " %03d. %s\n", ++lfd, rtp_content.radiotext[i]); - } - - fprintf(fd, "<<<\n"); - fclose(fd); - - char *infotext; - asprintf(&infotext, "%s: %s", tr("RTplus-File saved"), fname); - Skins.Message(mtInfo, infotext, Setup.OSDMessageTime); - free(infotext); - } - else - printfesyslog("ERROR vdr-radio: writing RTplus-File failed '%s'", fpath); - - free(fpath); - free(fname); -} - -eOSState cRTplusOsd::ProcessKey(eKeys Key) -{ - int typ, ind; - eOSState state = cOsdMenu::ProcessKey(Key); - - if (HasSubMenu()) - return osContinue; - - if (state == osUnknown) { - switch (Key) { - case kBack: - case kOk: - return osEnd; - - case kBlue: - if (bcount >= 4 && helpmode == 0) { - helpmode += 1; - Update(); - } - else if (bcount >= 6 && helpmode == 1) { - helpmode += 1; - Update(); - } - else - return osEnd; - break; - - case k0: - Update(); - break; - - case k8: - rtp_fileprint(); - break; - - case kRed: - if (helpmode == 0) { - if (btext[0] != NULL) - if ((typ = rtptyp(btext[0])) >= 0) - AddSubMenu(new cRTplusList(typ)); - } - else { - helpmode -= 1; - Update(); - } - break; - - case kGreen: - ind = (helpmode*2) + 1; - if (btext[ind] != NULL) { - if ((typ = rtptyp(btext[ind])) >= 0) - AddSubMenu(new cRTplusList(typ)); - } - break; - - case kYellow: - ind = (helpmode*2) + 2; - if (btext[ind] != NULL) { - if ((typ = rtptyp(btext[ind])) >= 0) - AddSubMenu(new cRTplusList(typ)); - } - break; - default: - state = osContinue; - } - } - - static int ct; - if (++ct >= 60) { - ct = 0; - Update(); - } - - return state; -} - - -// --- cRTplusList ------------------------------------------------------ - -cRTplusList::cRTplusList(int Typ) -:cOsdMenu(RTp_Titel, 4) -{ - typ = Typ; - refresh = false; - - Load(); - Display(); -} - -cRTplusList::~cRTplusList() -{ - typ = 0; -} - -void cRTplusList::Load(void) -{ - char text[80]; - struct tm *ts, tm_store; - int ind, lfd = 0; - - ts = localtime_r(&rtp_content.start, &tm_store); - switch (typ) { - case 0: - snprintf(text, sizeof(text), "-- %s (max. %d) --", tr("last seen Radiotext"), 2*MAX_RTPC); - Add(new cOsdItem(hk(text))); - snprintf(text, sizeof(text), "%s", " "); - Add(new cOsdItem(hk(text))); - ind = rtp_content.rt_Index; - if (ind < (2*MAX_RTPC-1) && rtp_content.radiotext[ind+1] != NULL) { - for (int i = ind+1; i < 2*MAX_RTPC; i++) { - if (rtp_content.radiotext[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.radiotext[i]); - Add(new cOsdItem(hk(text))); - } - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.radiotext[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.radiotext[i]); - Add(new cOsdItem(hk(text)), refresh); - } - } - break; - - case 1: - SetCols(6, 19, 1); - snprintf(text, sizeof(text), "-- %s --", tr("Playlist")); - Add(new cOsdItem(hk(text))); - snprintf(text, sizeof(text), "%s\t%s\t\t%s", tr("Time"), tr("Title"), tr("Artist")); - Add(new cOsdItem(hk(text))); - snprintf(text, sizeof(text), "%s", " "); - Add(new cOsdItem(hk(text))); - ind = rtp_content.item_Index; - if (ind < (MAX_RTPC-1) && rtp_content.item_Title[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.item_Title[i] != NULL && rtp_content.item_Artist[i] != NULL) { - ts = localtime_r(&rtp_content.item_Start[i], &tm_store); - snprintf(text, sizeof(text), "%02d:%02d\t%s\t\t%s", ts->tm_hour, ts->tm_min, rtp_content.item_Title[i], rtp_content.item_Artist[i]); - Add(new cOsdItem(hk(text))); - } - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.item_Title[i] != NULL && rtp_content.item_Artist[i] != NULL) { - ts = localtime_r(&rtp_content.item_Start[i], &tm_store); - snprintf(text, sizeof(text), "%02d:%02d\t%s\t\t%s", ts->tm_hour, ts->tm_min, rtp_content.item_Title[i], rtp_content.item_Artist[i]); - Add(new cOsdItem(hk(text)), refresh); - } - } - break; - - case 2: - snprintf(text, sizeof(text), "-- %s --", tr("Sports")); - Add(new cOsdItem(hk(text))); - snprintf(text, sizeof(text), "%s", " "); - Add(new cOsdItem(hk(text))); - ind = rtp_content.info_SportIndex; - if (ind < (MAX_RTPC-1) && rtp_content.info_Sport[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.info_Sport[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.info_Sport[i]); - Add(new cOsdItem(hk(text))); - } - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.info_Sport[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.info_Sport[i]); - Add(new cOsdItem(hk(text)), refresh); - } - } - break; - - case 3: - snprintf(text, sizeof(text), "-- %s --", tr("Lottery")); - Add(new cOsdItem(hk(text))); - snprintf(text, sizeof(text), "%s", " "); - Add(new cOsdItem(hk(text))); - ind = rtp_content.info_LotteryIndex; - if (ind < (MAX_RTPC-1) && rtp_content.info_Lottery[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.info_Lottery[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.info_Lottery[i]); - Add(new cOsdItem(hk(text))); - } - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.info_Lottery[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.info_Lottery[i]); - Add(new cOsdItem(hk(text)), refresh); - } - } - break; - - case 4: snprintf(text, sizeof(text), "-- %s --", tr("Weather")); - Add(new cOsdItem(hk(text))); - snprintf(text, sizeof(text), "%s", " "); - Add(new cOsdItem(hk(text))); - ind = rtp_content.info_WeatherIndex; - if (ind < (MAX_RTPC-1) && rtp_content.info_Weather[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.info_Weather[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.info_Weather[i]); - Add(new cOsdItem(hk(text))); - } - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.info_Weather[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.info_Weather[i]); - Add(new cOsdItem(hk(text)), refresh); - } - } - break; - case 5: - snprintf(text, sizeof(text), "-- %s --", tr("Stockmarket")); - Add(new cOsdItem(hk(text))); - snprintf(text, sizeof(text), "%s", " "); - Add(new cOsdItem(hk(text))); - ind = rtp_content.info_StockIndex; - if (ind < (MAX_RTPC-1) && rtp_content.info_Stock[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.info_Stock[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.info_Stock[i]); - Add(new cOsdItem(hk(text))); - } - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.info_Stock[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.info_Stock[i]); - Add(new cOsdItem(hk(text)), refresh); - } - } - break; - - case 6: - snprintf(text, sizeof(text), "-- %s --", tr("Other")); - Add(new cOsdItem(hk(text))); - snprintf(text, sizeof(text), "%s", " "); - Add(new cOsdItem(hk(text))); - ind = rtp_content.info_OtherIndex; - if (ind < (MAX_RTPC-1) && rtp_content.info_Other[ind+1] != NULL) { - for (int i = ind+1; i < MAX_RTPC; i++) { - if (rtp_content.info_Other[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.info_Other[i]); - Add(new cOsdItem(hk(text))); - } - } - } - for (int i = 0; i <= ind; i++) { - if (rtp_content.info_Other[i] != NULL) { - snprintf(text, sizeof(text), "%d.\t%s", ++lfd, rtp_content.info_Other[i]); - Add(new cOsdItem(hk(text)), refresh); - } - } - break; - } - - SetHelp(NULL, NULL , refresh ? tr("Refresh Off") : tr("Refresh On"), tr("Back")); -} - -void cRTplusList::Update(void) -{ - Clear(); - Load(); - Display(); -} - -eOSState cRTplusList::ProcessKey(eKeys Key) -{ - eOSState state = cOsdMenu::ProcessKey(Key); - - if (state == osUnknown) { - switch (Key) { - case k0: - Update(); - break; - case kYellow: - refresh = (refresh) ? false : true; - Update(); - break; - case kBack: - case kOk: - case kBlue: - return osBack; - default: - state = osContinue; - } - } - - static int ct; - if (refresh) { - if (++ct >= 20) { - ct = 0; - Update(); - } - } - - return state; -} - -//--------------- End ----------------------------------------------------------------- -#endif - CRadioText::CRadioText(void) { pid = 0; @@ -2337,11 +702,6 @@ void CRadioText::init() RT_Text[i][0] = 0; RDS_PTYN[0] = 0; -#if ENABLE_RASS - // Rass ... - Rass_Show = -1; // -1=No, 0=Yes, 1=display - Rass_Archiv = -1; // -1=Off, 0=Index, 1000-9990=Slidenr. -#endif RT_MsgShow = false; // clear entries from old channel have_radiotext = false; } diff --git a/src/driver/radiotext.h b/src/driver/radiotext.h index d5758e48d..60aeaf266 100644 --- a/src/driver/radiotext.h +++ b/src/driver/radiotext.h @@ -46,21 +46,10 @@ #ifndef __RADIO_AUDIO_H #define __RADIO_AUDIO_H -#if 0 -#include -#include -#include -#include -#include -#include -#endif - #include #include #include -//#define ENABLE_RASS - typedef unsigned char uchar; typedef unsigned int uint; @@ -68,22 +57,6 @@ extern const char *ConfigDir; extern const char *DataDir; extern char *ReplayFile; - -#if 0 -// RDS-Receiver for seperate Data-Pids -class cRDSReceiver : public cReceiver { -private: - int pid; - bool rt_start; - bool rt_bstuff; -protected: - virtual void Receive(uchar *Data, int Length); -public: - cRDSReceiver(int Pid); - virtual ~cRDSReceiver(void); -}; -#endif - #define RT_MEL 65 #define tr(a) a @@ -101,18 +74,10 @@ class CRadioText : public OpenThreads::Thread int first_packets; //Radiotext -#if 0 -// cDevice *rdsdevice; - void RadiotextCheckPES(const uchar *Data, int Length); - void AudioRecorderService(void); -#endif void RadioStatusMsg(void); - void RassDecode(uchar *Data, int Length); bool DividePes(unsigned char *data, int length, int *substart, int *subend); uint pid; - //pthread_t threadRT; - //int dmxfd; OpenThreads::Mutex mutex; OpenThreads::Mutex pidmutex; @@ -125,7 +90,6 @@ class CRadioText : public OpenThreads::Thread CRadioText(void); ~CRadioText(void); int PES_Receive(unsigned char *data, int len); - int RassImage(int QArchiv, int QKey, bool DirUp); void EnableRadioTextProcessing(const char *Titel, bool replay = false); void DisableRadioTextProcessing(); void RadiotextDecode(uchar *Data, int Length); @@ -156,9 +120,7 @@ class CRadioText : public OpenThreads::Thread int S_RtBgTra; int S_RtFgCol; int S_RtDispl; - int S_RassText; int S_RtMsgItems; -// uint32_t rt_color[9]; int S_Verbose; // Radiotext @@ -173,80 +135,8 @@ class CRadioText : public OpenThreads::Thread int RT_OsdTOTemp; char RDS_PTYN[9]; char *RT_Titel, *RTp_Titel; - -#if ENABLE_RASS - // Rass ... - int Rass_Show; // -1=No, 0=Yes, 1=display - int Rass_Archiv; // -1=Off, 0=Index, 1000-9990=Slidenr. - bool Rass_Flags[11][4]; // Slides+Gallery existent -#endif - -}; - -#if 0 -class cRadioTextOsd : public cOsdObject { -private: - cOsd *osd; - cOsd *qosd; - cOsd *qiosd; - const cFont *ftitel; - const cFont *ftext; - int fheight; - int bheight; - eKeys LastKey; - cTimeMs osdtimer; - void rtp_print(void); - bool rtclosed; - bool rassclosed; - static cBitmap rds, arec, rass; - static cBitmap index, marker, page1, pages2, pages3, pages4, pageE; - static cBitmap no0, no1, no2, no3, no4, no5, no6, no7, no8, no9, bok; -public: - cRadioTextOsd(); - ~cRadioTextOsd(); - virtual void Hide(void); - virtual void Show(void); - virtual void ShowText(void); - virtual void RTOsdClose(void); - int RassImage(int QArchiv, int QKey, bool DirUp); - virtual void RassOsd(void); - virtual void RassOsdTip(void); - virtual void RassOsdClose(void); - virtual void RassImgSave(char *size, int pos); - virtual eOSState ProcessKey(eKeys Key); - virtual bool IsInteractive(void) { return false; } -}; - -class cRTplusOsd : public cOsdMenu { -private: - int bcount; - int helpmode; - const char *listtyp[7]; - char *btext[7]; - int rtptyp(char *btext); - void rtp_fileprint(void); -public: - cRTplusOsd(void); - virtual ~cRTplusOsd(); - virtual void Load(void); - virtual void Update(void); - virtual eOSState ProcessKey(eKeys Key); }; -class cRTplusList : public cOsdMenu { -private: - int typ; - bool refresh; -public: - cRTplusList(int Typ = 0); - ~cRTplusList(); - virtual void Load(void); - virtual void Update(void); - virtual eOSState ProcessKey(eKeys Key); -}; - -#endif - // Radiotext-Memory #define MAX_RTPC 50 struct rtp_classes { diff --git a/src/driver/radiotools.cpp b/src/driver/radiotools.cpp index 64449b238..f0be42bc9 100644 --- a/src/driver/radiotools.cpp +++ b/src/driver/radiotools.cpp @@ -26,19 +26,8 @@ #include #include -/* for timetest */ -//#include -//#include unsigned short crc16_ccitt(unsigned char *daten, int len, bool skipfirst) { -/* timetest */ -//struct timeval t; -//unsigned long long tstart = 0; -//if (gettimeofday(&t, NULL) == 0) -// tstart = t.tv_sec*1000000 + t.tv_usec; - - // CRC16-CCITT: x^16 + x^12 + x^5 + 1 - // with start 0xffff and result invers register unsigned short crc = 0xffff; if (skipfirst) daten++; @@ -50,10 +39,6 @@ unsigned short crc16_ccitt(unsigned char *daten, int len, bool skipfirst) crc ^= ((crc & 0xff) << 4) << 1; } -/* timetest */ -//if (tstart > 0 && gettimeofday(&t, NULL) == 0) -// printf("vdr-radio: crc-calctime = %d usec\n", (int)((t.tv_sec*1000000 + t.tv_usec) - tstart)); - return ~(crc); } @@ -72,30 +57,3 @@ cTimeMs::cTimeMs(void) { Set(); } - -#if 0 -uint64_t cTimeMs::Now(void) -{ - struct timeval t; - if (gettimeofday(&t, NULL) == 0) - return (uint64_t(t.tv_sec)) * 1000 + t.tv_usec / 1000; - return 0; -} - -void cTimeMs::Set(int Ms) -{ - begin = Now() + Ms; -} - -bool cTimeMs::TimedOut(void) -{ - return Now() >= begin; -} - -uint64_t cTimeMs::Elapsed(void) -{ - return Now() - begin; -} - -#endif -//--------------- End ----------------------------------------------------------------- diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index e2bbbcd5a..febd22e1c 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -1395,26 +1395,6 @@ void CInfoViewer::showRadiotext() } // yoff = 17; ii = 1; -#if 0 - // RDS- or Rass-Symbol, ARec-Symbol or Bitrate - int inloff = (ftitel->Height() + 9 - 20) / 2; - if (Rass_Flags[0][0]) { - osd->DrawBitmap(Setup.OSDWidth-51, inloff, rass, bcolor, fcolor); - if (ARec_Record) - osd->DrawBitmap(Setup.OSDWidth-107, inloff, arec, bcolor, 0xFFFC1414); // FG=Red - else - inloff = (ftitel->Height() + 9 - ftext->Height()) / 2; - osd->DrawText(4, inloff, RadioAudio->bitrate, fcolor, clrTransparent, ftext, Setup.OSDWidth-59, ftext->Height(), taRight); - } - else { - osd->DrawBitmap(Setup.OSDWidth-84, inloff, rds, bcolor, fcolor); - if (ARec_Record) - osd->DrawBitmap(Setup.OSDWidth-140, inloff, arec, bcolor, 0xFFFC1414); // FG=Red - else - inloff = (ftitel->Height() + 9 - ftext->Height()) / 2; - osd->DrawText(4, inloff, RadioAudio->bitrate, fcolor, clrTransparent, ftext, Setup.OSDWidth-92, ftext->Height(), taRight); - } -#endif } // Body if (lines) { @@ -1439,48 +1419,7 @@ void CInfoViewer::showRadiotext() g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisIsUTF); } } -#if 0 - // + RT-Plus or PS-Text = 2 rows - if ((S_RtOsdTags == 1 && RT_PlusShow) || S_RtOsdTags >= 2) { - if (!RDS_PSShow || !strstr(RTP_Title, "---") || !strstr(RTP_Artist, "---")) { - sprintf(stext[1], "> %s %s", tr("Title :"), RTP_Title); - sprintf(stext[2], "> %s %s", tr("Artist :"), RTP_Artist); - osd->DrawText(4, 6+yoff+fheight*(ii++), stext[1], fcolor, clrTransparent, ftext, Setup.OSDWidth-4, ftext->Height()); - osd->DrawText(4, 3+yoff+fheight*(ii++), stext[2], fcolor, clrTransparent, ftext, Setup.OSDWidth-4, ftext->Height()); - } - else { - char *temp = ""; - int ind = (RDS_PSIndex == 0) ? 11 : RDS_PSIndex - 1; - for (int i = ind+1; i < 12; i++) - asprintf(&temp, "%s%s ", temp, RDS_PSText[i]); - for (int i = 0; i <= ind; i++) - asprintf(&temp, "%s%s ", temp, RDS_PSText[i]); - snprintf(stext[1], 6*9, "%s", temp); - snprintf(stext[2], 6*9, "%s", temp+(6*9)); - free(temp); - osd->DrawText(6, 6+yoff+fheight*ii, "[", fcolor, clrTransparent, ftext, 12, ftext->Height()); - osd->DrawText(Setup.OSDWidth-12, 6+yoff+fheight*ii, "]", fcolor, clrTransparent, ftext, Setup.OSDWidth-6, ftext->Height()); - osd->DrawText(16, 6+yoff+fheight*(ii++), stext[1], fcolor, clrTransparent, ftext, Setup.OSDWidth-16, ftext->Height(), taCenter); - osd->DrawText(6, 3+yoff+fheight*ii, "[", fcolor, clrTransparent, ftext, 12, ftext->Height()); - osd->DrawText(Setup.OSDWidth-12, 3+yoff+fheight*ii, "]", fcolor, clrTransparent, ftext, Setup.OSDWidth-6, ftext->Height()); - osd->DrawText(16, 3+yoff+fheight*(ii++), stext[2], fcolor, clrTransparent, ftext, Setup.OSDWidth-16, ftext->Height(), taCenter); - } - } -#endif } -#if 0 -// framebuffer can only display raw images - // show mpeg-still - char *image; - if (g_Radiotext->Rass_Archiv >= 0) - asprintf(&image, "%s/Rass_%d.mpg", DataDir, g_Radiotext->Rass_Archiv); - else - asprintf(&image, "%s/Rass_show.mpg", DataDir); - frameBuffer->useBackground(frameBuffer->loadBackground(image));// set useBackground true or false - frameBuffer->paintBackground(); -// RadioAudio->SetBackgroundImage(image); - free(image); -#endif } g_Radiotext->RT_MsgShow = false; From 20cc2a2b171be490bdd525031ffea8c274cc3a48 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 27 Nov 2017 23:18:14 +0100 Subject: [PATCH 008/107] - infoviewer: rework radiotext element; ... use OFFSET defines, larger font, fix header width Signed-off-by: Thilo Graf --- src/gui/infoviewer.cpp | 108 ++++++++++++++++++++++------------------- src/gui/infoviewer.h | 2 - 2 files changed, 59 insertions(+), 51 deletions(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index febd22e1c..ed5615982 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -108,8 +108,6 @@ CInfoViewer::CInfoViewer () infoViewerBB = CInfoViewerBB::getInstance(); InfoHeightY = 0; ButtonWidth = 0; - rt_dx = 0; - rt_dy = 0; ChanNameX = 0; ChanNameY = 0; ChanWidth = 0; @@ -265,6 +263,7 @@ void CInfoViewer::initClock() clock->setTextColor(COL_INFOBAR_TEXT); } + void CInfoViewer::showRecordIcon (const bool show) { /* FIXME if record or timeshift stopped while infobar visible, artifacts */ @@ -1347,82 +1346,93 @@ void CInfoViewer::showMotorMoving (int duration) void CInfoViewer::killRadiotext() { if (g_Radiotext->S_RtOsd) - frameBuffer->paintBackgroundBox(rt_x, rt_y, rt_w, rt_h); + frameBuffer->paintBackgroundBoxRel(rt_x, rt_y, rt_w + OFFSET_SHADOW, rt_h + OFFSET_SHADOW); rt_x = rt_y = rt_h = rt_w = 0; CInfoClock::getInstance()->enableInfoClock(true); } void CInfoViewer::showRadiotext() { - char stext[3][100]; - bool RTisIsUTF = false; + /* + Maybe there's a nice CComponents solution with user's gradients. + */ + + if (g_Radiotext == NULL) + return; - if (g_Radiotext == NULL) return; infoViewerBB->showIcon_RadioText(g_Radiotext->haveRadiotext()); - if (g_Radiotext->S_RtOsd) { + char stext[3][100]; + bool RTisUTF8 = false; + + if (g_Radiotext->S_RtOsd) + { CInfoClock::getInstance()->enableInfoClock(false); + int rt_font = SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO; + int item_h = g_Font[rt_font]->getHeight(); + // dimensions of radiotext window - int /*yoff = 8,*/ ii = 0; - rt_dx = BoxEndX - BoxStartX; - rt_dy = 25; rt_x = BoxStartX; - rt_y = g_settings.screen_StartY + 10; - rt_h = rt_y + 7 + rt_dy*(g_Radiotext->S_RtOsdRows+1)+OFFSET_SHADOW; - rt_w = rt_x+rt_dx+OFFSET_SHADOW; + rt_y = g_settings.screen_StartY + OFFSET_INNER_MID; + rt_w = BoxEndX - BoxStartX; + rt_h = (g_Radiotext->S_RtOsdRows + 1)*item_h + 4*OFFSET_INNER_SMALL; + int item_x = rt_x + OFFSET_INNER_MID; + int item_y = rt_y + OFFSET_INNER_SMALL + item_h; + int item_w = rt_w - 2*OFFSET_INNER_MID; + + int item = 0; int lines = 0; - for (int i = 0; i < g_Radiotext->S_RtOsdRows; i++) { - if (g_Radiotext->RT_Text[i][0] != '\0') lines++; + for (int i = 0; i < g_Radiotext->S_RtOsdRows; i++) + { + if (g_Radiotext->RT_Text[i][0] != '\0') + lines++; } if (lines == 0) - frameBuffer->paintBackgroundBox(rt_x, rt_y, rt_w, rt_h); - - if (g_Radiotext->RT_MsgShow) { + frameBuffer->paintBackgroundBoxRel(rt_x, rt_y, rt_w + OFFSET_SHADOW, rt_h + OFFSET_SHADOW); - if (g_Radiotext->S_RtOsdTitle == 1) { - - // Title - // sprintf(stext[0], g_Radiotext->RT_PTY == 0 ? "%s - %s %s%s" : "%s - %s (%s)%s", - // g_Radiotext->RT_Titel, tr("Radiotext"), g_Radiotext->RT_PTY == 0 ? g_Radiotext->RDS_PTYN : g_Radiotext->ptynr2string(g_Radiotext->RT_PTY), g_Radiotext->RT_MsgShow ? ":" : tr(" [waiting ...]")); - if ((lines) || (g_Radiotext->RT_PTY !=0)) { + if (g_Radiotext->RT_MsgShow) + { + // Title + if (g_Radiotext->S_RtOsdTitle == 1) + { + if (lines || g_Radiotext->RT_PTY != 0) + { sprintf(stext[0], g_Radiotext->RT_PTY == 0 ? "%s %s%s" : "%s (%s)%s", tr("Radiotext"), g_Radiotext->RT_PTY == 0 ? g_Radiotext->RDS_PTYN : g_Radiotext->ptynr2string(g_Radiotext->RT_PTY), ":"); - - // shadow - frameBuffer->paintBoxRel(rt_x+OFFSET_SHADOW, rt_y+OFFSET_SHADOW, rt_dx, rt_dy, COL_SHADOW_PLUS_0, RADIUS_LARGE, CORNER_TOP); - frameBuffer->paintBoxRel(rt_x, rt_y, rt_dx, rt_dy, COL_INFOBAR_PLUS_0, RADIUS_LARGE, CORNER_TOP); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rt_x+10, rt_y+ 30, rt_dx-20, stext[0], COL_INFOBAR_TEXT, 0, RTisIsUTF); + int title_w = g_Font[rt_font]->getRenderWidth(stext[0]) + 2*OFFSET_INNER_MID; + + g_Font[rt_font]->RenderString(item_x, item_y, title_w, stext[0], COL_INFOBAR_TEXT, 0, RTisUTF8); } -// yoff = 17; - ii = 1; + item = 1; } // Body - if (lines) { - frameBuffer->paintBoxRel(rt_x+OFFSET_SHADOW, rt_y+rt_dy+OFFSET_SHADOW, rt_dx, 7+rt_dy* g_Radiotext->S_RtOsdRows, COL_SHADOW_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); - frameBuffer->paintBoxRel(rt_x, rt_y+rt_dy, rt_dx, 7+rt_dy* g_Radiotext->S_RtOsdRows, COL_INFOBAR_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); + if (lines) + { + frameBuffer->paintBoxRel(rt_x + OFFSET_SHADOW, rt_y + 2*OFFSET_INNER_SMALL + item_h + OFFSET_SHADOW, rt_w, item_h*g_Radiotext->S_RtOsdRows + 2*OFFSET_INNER_SMALL, COL_SHADOW_PLUS_0, RADIUS_LARGE, item == 1 ? CORNER_TOP_RIGHT|CORNER_BOTTOM : CORNER_ALL); + frameBuffer->paintBoxRel(rt_x, rt_y + 2*OFFSET_INNER_SMALL + item_h, rt_w, item_h*g_Radiotext->S_RtOsdRows + 2*OFFSET_INNER_SMALL, COL_INFOBAR_PLUS_0, RADIUS_LARGE, item == 1 ? CORNER_TOP_RIGHT|CORNER_BOTTOM : CORNER_ALL); + + item_y += 2*OFFSET_INNER_SMALL; // RT-Text roundloop - int ind = (g_Radiotext->RT_Index == 0) ? g_Radiotext->S_RtOsdRows - 1 : g_Radiotext->RT_Index - 1; - int rts_x = rt_x+10; - int rts_y = rt_y+ 30; - int rts_dx = rt_dx-20; - if (g_Radiotext->S_RtOsdLoop == 1) { // latest bottom - for (int i = ind+1; i < g_Radiotext->S_RtOsdRows; i++) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisIsUTF); - for (int i = 0; i <= ind; i++) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisIsUTF); + int index = (g_Radiotext->RT_Index == 0) ? g_Radiotext->S_RtOsdRows - 1 : g_Radiotext->RT_Index - 1; + if (g_Radiotext->S_RtOsdLoop == 1) // latest bottom + { + for (int i = index + 1; i < g_Radiotext->S_RtOsdRows; i++) + g_Font[rt_font]->RenderString(item_x, item_y + (item++)*item_h, item_w, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisUTF8); + for (int i = 0; i <= index; i++) + g_Font[rt_font]->RenderString(item_x, item_y + (item++)*item_h, item_w, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisUTF8); } - else { // latest top - for (int i = ind; i >= 0; i--) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisIsUTF); - for (int i = g_Radiotext->S_RtOsdRows-1; i > ind; i--) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisIsUTF); + else // latest top + { + for (int i = index; i >= 0; i--) + g_Font[rt_font]->RenderString(item_x, item_y + (item++)*item_h, item_w, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisUTF8); + for (int i = g_Radiotext->S_RtOsdRows - 1; i > index; i--) + g_Font[rt_font]->RenderString(item_x, item_y + (item++)*item_h, item_w, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisUTF8); } } } } g_Radiotext->RT_MsgShow = false; - } int CInfoViewer::handleMsg (const neutrino_msg_t msg, neutrino_msg_data_t data) diff --git a/src/gui/infoviewer.h b/src/gui/infoviewer.h index c8df0a74a..798629a7c 100644 --- a/src/gui/infoviewer.h +++ b/src/gui/infoviewer.h @@ -67,8 +67,6 @@ class CInfoViewer int ButtonWidth; // dimensions of radiotext window - int rt_dx; - int rt_dy; int rt_x; int rt_y; int rt_h; From fb56689b0b8c013dc02a489f1a16d801c309c492 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 27 Nov 2017 23:24:55 +0100 Subject: [PATCH 009/107] - usermenu: cleanup from ITEM_RASS Signed-off-by: Thilo Graf --- src/gui/user_menue.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/gui/user_menue.cpp b/src/gui/user_menue.cpp index 65bbca3be..3d0b1b1e8 100644 --- a/src/gui/user_menue.cpp +++ b/src/gui/user_menue.cpp @@ -626,11 +626,6 @@ const char *CUserMenu::getUserMenuButtonName(int button, bool &active, bool retu return_title = true; active = true; continue; -#if 0 - case SNeutrinoSettings::ITEM_RASS: - if (!(CNeutrinoApp::getInstance()->getMode() == NeutrinoModes::mode_radio && g_Radiotext && g_Radiotext->haveRASS())) - continue; -#endif default: if(loc == NONEXISTANT_LOCALE && !text) loc = CUserMenuSetup::getLocale(item); From 3276b5358ab7ef7061e53bf5d8a3c49c939efc71 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Tue, 28 Nov 2017 14:41:42 +0100 Subject: [PATCH 010/107] - infoviewer_bb: take footer height from CComponentsFooter ... to get this footer in sync with the footers of other gui elements Signed-off-by: Thilo Graf --- src/gui/infoviewer_bb.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 5e95ba823..9816157b5 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -109,7 +109,10 @@ void CInfoViewerBB::Init() bbButtonInfo[i].x = -1; } - InfoHeightY_Info = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_FOOT]->getHeight() + 5; + // not really a CComponentsFooter but let's take its height + CComponentsFooter footer; + InfoHeightY_Info = footer.getHeight(); + initBBOffset(); changePB(); From 04eeb5d65b452f9d45e0f181e8c25ffb4c1d8d0d Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Wed, 29 Nov 2017 10:47:34 +0100 Subject: [PATCH 011/107] - infoviewer_bb: fix offset for first status-icon Signed-off-by: Thilo Graf --- src/gui/infoviewer_bb.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 9816157b5..b7027f9ba 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -153,6 +153,7 @@ void CInfoViewerBB::getBBIconInfo() BBarFontY = BBarY + InfoHeightY_Info - (InfoHeightY_Info - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_FOOT]->getHeight()) / 2; /* center in buttonbar */ bbIconMinX = g_InfoViewer->BoxEndX - OFFSET_INNER_MID; bool isRadioMode = (CNeutrinoApp::getInstance()->getMode() == NeutrinoModes::mode_radio || CNeutrinoApp::getInstance()->getMode() == NeutrinoModes::mode_webradio); + bool firstIcon = true; for (int i = 0; i < CInfoViewerBB::ICON_MAX; i++) { int w = 0, h = 0; @@ -194,8 +195,10 @@ void CInfoViewerBB::getBBIconInfo() break; } if (iconView) { - if (i > 0) - bbIconMinX -= OFFSET_INNER_MIN; + if (firstIcon) + firstIcon = false; + else + bbIconMinX -= OFFSET_INNER_SMALL; bbIconMinX -= w; bbIconInfo[i].x = bbIconMinX; bbIconInfo[i].h = h; From 38e76f6a3f8a38c65f6f5d747fe835a290c362f0 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Thu, 30 Nov 2017 10:55:14 +0100 Subject: [PATCH 012/107] - infoviewer: cleanup from some unused code Conflicts: src/gui/infoviewer.cpp Signed-off-by: Thilo Graf --- src/gui/infoviewer.cpp | 176 ++--------------------------------------- src/gui/infoviewer.h | 10 --- 2 files changed, 6 insertions(+), 180 deletions(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index ed5615982..84842055d 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -386,27 +386,7 @@ void CInfoViewer::showRecordIcon (const bool show) void CInfoViewer::paintBackground(int col_NumBox) { int c_rad_mid = RADIUS_MID; -#if 0 // kill left side - int BoxEndInfoY = BoxEndY; - if (showButtonBar) // add button bar and blinkenlights - BoxEndInfoY += infoViewerBB->InfoHeightY_Info + infoViewerBB->bottom_bar_offset; - - frameBuffer->paintBackgroundBox(BoxStartX, - BoxStartY + ChanHeight - 6, - BoxStartX + ChanWidth / 3, - BoxEndInfoY + OFFSET_SHADOW); - // kill progressbar + info-line - frameBuffer->paintBackgroundBox(BoxStartX + ChanWidth + 40, // 40 for the recording icon! - BoxStartY, BoxEndX, BoxStartY + ChanHeight); - - // shadow for channel name, epg data... - frameBuffer->paintBox(BoxEndX - c_shadow_width, ChanNameY + OFFSET_SHADOW, - BoxEndX + OFFSET_SHADOW, BoxEndInfoY + OFFSET_SHADOW, - COL_SHADOW_PLUS_0, c_rad_large, CORNER_RIGHT); - frameBuffer->paintBox(ChanInfoX + OFFSET_SHADOW, BoxEndInfoY - c_shadow_width, - BoxEndX - c_shadow_width, BoxEndInfoY + OFFSET_SHADOW, - COL_SHADOW_PLUS_0, c_rad_large, CORNER_BOTTOM_LEFT); -#endif + // background for channel name/logo and clock paintHead(); @@ -1143,10 +1123,6 @@ void CInfoViewer::loop(bool show_dot) hideIt = true; int rec_mode = CRecordManager::getInstance()->GetRecordMode(); -#if 0 - if ((rec_mode == CRecordManager::RECMODE_REC) || (rec_mode == CRecordManager::RECMODE_REC_TSHIFT)) - hideIt = true; -#endif /* hide, if record (not timeshift only) is running -> neutrino will show channel list */ if (rec_mode & CRecordManager::RECMODE_REC) hideIt = true; @@ -1188,23 +1164,6 @@ void CInfoViewer::loop(bool show_dot) else res = CNeutrinoApp::getInstance()->handleMsg(msg, data); } -#if 0 - else if (CMoviePlayerGui::getInstance().start_timeshift && (msg == NeutrinoMessages::EVT_TIMER)) { - CMoviePlayerGui::getInstance().start_timeshift = false; - } -#endif -#if 0 - else if (CMoviePlayerGui::getInstance().timeshift && ((msg == (neutrino_msg_t) g_settings.mpkey_rewind) || \ - (msg == (neutrino_msg_t) g_settings.mpkey_forward) || \ - (msg == (neutrino_msg_t) g_settings.mpkey_pause) || \ - (msg == (neutrino_msg_t) g_settings.mpkey_stop) || \ - (msg == (neutrino_msg_t) g_settings.mpkey_play) || \ - (msg == (neutrino_msg_t) g_settings.mpkey_time) || \ - (msg == (neutrino_msg_t) g_settings.key_timeshift))) { - g_RCInput->postMsg (msg, data); - res = messages_return::cancel_info; - } -#endif } if (hideIt) { @@ -1918,26 +1877,7 @@ void CInfoViewer::show_Data (bool calledFromEvent) } else last_next_id = 0; -// int ChanInfoY = BoxStartY + ChanHeight + 15; //+10 - if (showButtonBar) { -#if 0 - int posy = BoxStartY + 16; - int height2 = 20; - //percent - if (info_CurrentNext.flags & CSectionsdClient::epgflags::has_current) { -//printf("CInfoViewer::show_Data: ************************************************* runningPercent %d\n", runningPercent); - if (!calledFromEvent || (oldrunningPercent != runningPercent)) { - frameBuffer->paintBoxRel(BoxEndX - 104, posy + 6, 108, 14, COL_SHADOW_PLUS_0, 1); - frameBuffer->paintBoxRel(BoxEndX - 108, posy + 2, 108, 14, COL_INFOBAR_PLUS_0, 1); - oldrunningPercent = runningPercent; - } - timescale->paint(BoxEndX - 102, posy + 2, runningPercent); - } else { - oldrunningPercent = 255; - frameBuffer->paintBackgroundBoxRel (BoxEndX - 108, posy, 112, height2); - } -#endif infoViewerBB->showBBButtons(calledFromEvent); } @@ -1995,73 +1935,6 @@ void CInfoViewer::show_Data (bool calledFromEvent) } display_Info(current, next, true, runningPercent, curr_time, curr_rest, next_time, next_dur, curr_upd, next_upd); - -#if 0 - int height = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getHeight (); - int xStart = BoxStartX + ChanWidth; - - //frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - - if ((info_CurrentNext.flags & CSectionsdClient::epgflags::not_broadcast) || ((calledFromEvent) && !(info_CurrentNext.flags & (CSectionsdClient::epgflags::has_next | CSectionsdClient::epgflags::has_current)))) { - // no EPG available - ChanInfoY += height; - frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (BoxStartX + ChanWidth + 20, ChanInfoY + height, BoxEndX - (BoxStartX + ChanWidth + 20), g_Locale->getText (timeset ? LOCALE_INFOVIEWER_NOEPG : LOCALE_INFOVIEWER_WAITTIME), COL_INFOBAR_TEXT); - } else { - // irgendein EPG gefunden - int duration1Width = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getRenderWidth (runningRest); - int duration1TextPos = BoxEndX - duration1Width - LEFT_OFFSET; - - int duration2Width = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getRenderWidth (nextDuration); - int duration2TextPos = BoxEndX - duration2Width - LEFT_OFFSET; - - if ((info_CurrentNext.flags & CSectionsdClient::epgflags::has_next) && (!(info_CurrentNext.flags & CSectionsdClient::epgflags::has_current))) { - // there are later events available - yet no current - frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, BoxEndX - xStart, g_Locale->getText (LOCALE_INFOVIEWER_NOCURRENT), COL_INFOBAR_TEXT); - - ChanInfoY += height; - - //info next - //frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - - if (last_next_id != info_CurrentNext.next_uniqueKey) { - frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (ChanInfoX + 10, ChanInfoY + height, 100, nextStart, COL_INFOBAR_TEXT); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, duration2TextPos - xStart - 5, info_CurrentNext.next_name, COL_INFOBAR_TEXT); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (duration2TextPos, ChanInfoY + height, duration2Width, nextDuration, COL_INFOBAR_TEXT); - last_next_id = info_CurrentNext.next_uniqueKey; - } - } else { - if (last_curr_id != info_CurrentNext.current_uniqueKey) { - frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (ChanInfoX + 10, ChanInfoY + height, 100, runningStart, COL_INFOBAR_TEXT); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, duration1TextPos - xStart - 5, info_CurrentNext.current_name, COL_INFOBAR_TEXT); - - last_curr_id = info_CurrentNext.current_uniqueKey; - } - frameBuffer->paintBox (BoxEndX - 80, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0);//FIXME duration1TextPos not really good - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (duration1TextPos, ChanInfoY + height, duration1Width, runningRest, COL_INFOBAR_TEXT); - - ChanInfoY += height; - - //info next - //frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - - if ((!is_nvod) && (info_CurrentNext.flags & CSectionsdClient::epgflags::has_next)) { - if (last_next_id != info_CurrentNext.next_uniqueKey) { - frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (ChanInfoX + 10, ChanInfoY + height, 100, nextStart, COL_INFOBAR_TEXT); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, duration2TextPos - xStart - 5, info_CurrentNext.next_name, COL_INFOBAR_TEXT); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (duration2TextPos, ChanInfoY + height, duration2Width, nextDuration, COL_INFOBAR_TEXT); - last_next_id = info_CurrentNext.next_uniqueKey; - } - } //else - //frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0);//why this... - } - } -} -#endif } void CInfoViewer::killInfobarText() @@ -2140,11 +2013,6 @@ void CInfoViewer::killTitle() { is_visible = false; infoViewerBB->is_visible = false; -#if 0 //unused - int bottom = BoxEndY + OFFSET_SHADOW + infoViewerBB->bottom_bar_offset; - if (showButtonBar) - bottom += infoViewerBB->InfoHeightY_Info; -#endif if (infoViewerBB->getFooter()) infoViewerBB->getFooter()->kill(); if (infoViewerBB->getCABar()) @@ -2159,19 +2027,21 @@ void CInfoViewer::killTitle() numbox->kill(); } -#if 0 //not really required to kill sigbox, numbox does this +#if 0 + //not really required to kill sigbox, numbox does this if (sigbox) sigbox->kill(); #endif + header->kill(); -#if 1 //not really required to kill clock, header does this <--- really ???? + if (clock) { clock->kill(); delete clock; clock = NULL; } -#endif + body->kill(); if (txt_cur_event) @@ -2354,11 +2224,6 @@ void CInfoViewer::showLcdPercentOver () } int runningPercent = -1; time_t jetzt = time (NULL); -#if 0 - if (!(info_CurrentNext.flags & CSectionsdClient::epgflags::has_current) || jetzt > (int) (info_CurrentNext.current_zeit.startzeit + info_CurrentNext.current_zeit.dauer)) { - info_CurrentNext = getEPG (current_channel_id); - } -#endif if (info_CurrentNext.flags & CSectionsdClient::epgflags::has_current) { if (jetzt < info_CurrentNext.current_zeit.startzeit) runningPercent = 0; @@ -2379,14 +2244,6 @@ void CInfoViewer::showEpgInfo() //message on event change eventname = info_CurrentNext.current_name; if (g_settings.infobar_show) g_RCInput->postMsg(NeutrinoMessages::SHOW_INFOBAR , 0); -#if 0 - /* let's check if this is still needed */ - else - /* don't show anything, but update the LCD - TODO: we should not have to update the LCD from the _infoviewer_. - they have nothing to do with each other */ - showLcdPercentOver(); -#endif } } @@ -2397,27 +2254,6 @@ void CInfoViewer::setUpdateTimer(uint64_t interval) lcdUpdateTimer = g_RCInput->addTimer(interval, false); } -#if 0 -int CInfoViewerHandler::exec (CMenuTarget * parent, const std::string & /*actionkey*/) -{ - int res = menu_return::RETURN_EXIT_ALL; - CChannelList *channelList; - CInfoViewer *i; - - if (parent) { - parent->hide (); - } - - i = new CInfoViewer; - - channelList = CNeutrinoApp::getInstance ()->channelList; - i->start (); - i->showTitle (channelList->getActiveChannelNumber (), channelList->getActiveChannelName (), channelList->getActiveSatellitePosition (), channelList->getActiveChannel_ChannelID ()); // UTF-8 - delete i; - - return res; -} -#endif void CInfoViewer::ResetModules() { diff --git a/src/gui/infoviewer.h b/src/gui/infoviewer.h index 798629a7c..b1c44a49d 100644 --- a/src/gui/infoviewer.h +++ b/src/gui/infoviewer.h @@ -85,7 +85,6 @@ class CInfoViewer t_channel_id current_channel_id; t_channel_id current_epg_id; - //uint32_t fadeTimer; COSDFader fader; int time_width; @@ -213,13 +212,4 @@ class CInfoViewer inline t_channel_id get_current_channel_id(void) { return current_channel_id; } void ResetModules(); }; -#if 0 -class CInfoViewerHandler : public CMenuTarget -{ - public: - int exec( CMenuTarget* parent, const std::string &actionkey); - int doMenu(); - -}; -#endif #endif From aca5157707e67818b3b3b4965fd2724c5ecbf61f Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Thu, 30 Nov 2017 10:55:14 +0100 Subject: [PATCH 013/107] - infoviewer: avoid display of radiotext icon in virtual zap mode Signed-off-by: Thilo Graf --- src/gui/infoviewer.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index 84842055d..9d2bb9642 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -884,7 +884,7 @@ void CInfoViewer::showTitle(CZapitChannel * channel, const bool calledFromNumZap { if ((g_settings.radiotext_enable) && (!recordModeActive) && (!calledFromNumZap)) showRadiotext(); - else + else if (showButtonBar) infoViewerBB->showIcon_RadioText(false); } @@ -1319,7 +1319,8 @@ void CInfoViewer::showRadiotext() if (g_Radiotext == NULL) return; - infoViewerBB->showIcon_RadioText(g_Radiotext->haveRadiotext()); + if (showButtonBar) + infoViewerBB->showIcon_RadioText(g_Radiotext->haveRadiotext()); char stext[3][100]; bool RTisUTF8 = false; From a179a38fd942461cb77a0ceee06022a3af074b9f Mon Sep 17 00:00:00 2001 From: max_10 Date: Thu, 30 Nov 2017 12:38:40 +0100 Subject: [PATCH 014/107] - ffmpegdec: fix audio playback for ARM_HARDWARE --- src/driver/audiodec/ffmpegdec.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/driver/audiodec/ffmpegdec.cpp b/src/driver/audiodec/ffmpegdec.cpp index 02ccdb412..bd3ac8869 100644 --- a/src/driver/audiodec/ffmpegdec.cpp +++ b/src/driver/audiodec/ffmpegdec.cpp @@ -257,7 +257,12 @@ CBaseDec::RetCode CFfmpegDec::Decoder(FILE *_in, int /*OutputFd*/, State* state, mSampleRate = samplerate; mChannels = av_get_channel_layout_nb_channels(AV_CH_LAYOUT_STEREO); + +#if !HAVE_ARM_HARDWARE audioDecoder->PrepareClipPlay(mChannels, mSampleRate, 16, 1); +#else + audioDecoder->PrepareClipPlay(mChannels, mSampleRate, 16, 0); +#endif AVFrame *frame = NULL; AVPacket rpacket; From 090120f704dd4f8c569211ca3453e6bbd823d0f2 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Thu, 30 Nov 2017 12:38:40 +0100 Subject: [PATCH 015/107] Revert "- media-menu: disable currently broken audioplayer for ARM_HARDWARE" This reverts commit 3d91cd9e13ed76cfc3a67fc21b503a8deb407606 because it's fixed in 334ce41 Signed-off-by: Thilo Graf --- src/gui/mediaplayer.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/gui/mediaplayer.cpp b/src/gui/mediaplayer.cpp index 548b1a1a3..49252e8df 100644 --- a/src/gui/mediaplayer.cpp +++ b/src/gui/mediaplayer.cpp @@ -139,7 +139,6 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) bool enabled = !CMoviePlayerGui::getInstance().Playing(); -#if !HAVE_ARM_HARDWARE //audio player CMenuForwarder *fw_audio = new CMenuForwarder(LOCALE_MAINMENU_AUDIOPLAYER, enabled, NULL, this, "audioplayer", CRCInput::RC_red); fw_audio->setHint(NEUTRINO_ICON_HINT_APLAY, LOCALE_MENU_HINT_APLAY); @@ -149,7 +148,6 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) CMenuForwarder *fw_inet = new CMenuForwarder(LOCALE_INETRADIO_NAME, enabled, NULL, this, "inetplayer", CRCInput::RC_green); fw_inet->setHint(NEUTRINO_ICON_HINT_INET_RADIO, LOCALE_MENU_HINT_INET_RADIO); personalize->addItem(multimedia_menu, fw_inet, &g_settings.personalize[SNeutrinoSettings::P_MEDIA_INETPLAY]); -#endif //init movieplayer submenu CMenuWidget *movieplayer_menu = new CMenuWidget(LOCALE_MAINMENU_MOVIEPLAYER, NEUTRINO_ICON_MULTIMEDIA, width, MN_WIDGET_ID_MEDIA_MOVIEPLAYER); From 77db4a63e361726bc84259882b976faad19e5980 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Fri, 1 Dec 2017 23:26:44 +0100 Subject: [PATCH 016/107] - infoviewer_bb: use OFFSET defines; ... height of ca-bar now depends on height of ca-icons cleanup from commented code --- src/gui/infoviewer_bb.cpp | 90 +++++++++++++++------------------------ src/gui/infoviewer_bb.h | 1 + 2 files changed, 35 insertions(+), 56 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index b7027f9ba..cc52f1f95 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -113,6 +113,7 @@ void CInfoViewerBB::Init() CComponentsFooter footer; InfoHeightY_Info = footer.getHeight(); + ca_h = 0; initBBOffset(); changePB(); @@ -295,8 +296,8 @@ void CInfoViewerBB::getBBButtonInfo() if (text == g_Locale->getText(LOCALE_MPKEY_AUDIO) && !g_settings.infobar_buttons_usertitle) text = CMoviePlayerGui::getInstance(false).CurrentAudioName(); // use instance_mp } - bbButtonInfo[i].w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_FOOT]->getRenderWidth(text) + w + 10; - bbButtonInfo[i].cx = w + 5; + bbButtonInfo[i].w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_FOOT]->getRenderWidth(text) + w + OFFSET_INNER_MID; + bbButtonInfo[i].cx = w + OFFSET_INNER_SMALL; bbButtonInfo[i].h = h; bbButtonInfo[i].text = text; bbButtonInfo[i].icon = icon; @@ -306,21 +307,12 @@ void CInfoViewerBB::getBBButtonInfo() } // Calculate position/size of buttons minX = std::min(bbIconMinX, g_InfoViewer->ChanInfoX + (((g_InfoViewer->BoxEndX - g_InfoViewer->ChanInfoX) * 75) / 100)); - int MaxBr = minX - (g_InfoViewer->ChanInfoX + 10); - bbButtonMaxX = g_InfoViewer->ChanInfoX + 10; + int MaxBr = minX - (g_InfoViewer->ChanInfoX + OFFSET_INNER_MID); + bbButtonMaxX = g_InfoViewer->ChanInfoX + OFFSET_INNER_MID; int br = 0, count = 0; for (int i = 0; i < CInfoViewerBB::BUTTON_MAX; i++) { -#if 0 - if ((i == CInfoViewerBB::BUTTON_YELLOW) && (g_RemoteControl->subChannels.empty())) { // no subchannels - bbButtonInfo[i].paint = false; -// bbButtonInfo[i].x = -1; -// continue; - } - else -#else if (!bbButtonInfo[i].active) bbButtonInfo[i].paint = false; -#endif else { count++; @@ -333,35 +325,7 @@ void CInfoViewerBB::getBBButtonInfo() } if (br > MaxBr) printf("[infoviewer_bb:%s#%d] width br (%d) > MaxBr (%d) count %d\n", __func__, __LINE__, br, MaxBr, count); -#if 0 - int Btns = 0; - // counting buttons - for (int i = 0; i < CInfoViewerBB::BUTTON_MAX; i++) { - if (bbButtonInfo[i].x != -1) { - Btns++; - } - } - bbButtonMaxX = g_InfoViewer->ChanInfoX + 10; - - bbButtonInfo[CInfoViewerBB::BUTTON_RED].x = bbButtonMaxX; - bbButtonInfo[CInfoViewerBB::BUTTON_BLUE].x = minX - bbButtonInfo[CInfoViewerBB::BUTTON_BLUE].w; - - int x1 = bbButtonInfo[CInfoViewerBB::BUTTON_RED].x + bbButtonInfo[CInfoViewerBB::BUTTON_RED].w; - int rest = bbButtonInfo[CInfoViewerBB::BUTTON_BLUE].x - x1; - - if (Btns < 4) { - rest -= bbButtonInfo[CInfoViewerBB::BUTTON_GREEN].w; - bbButtonInfo[CInfoViewerBB::BUTTON_GREEN].x = x1 + rest / 2; - } - else { - rest -= bbButtonInfo[CInfoViewerBB::BUTTON_GREEN].w + bbButtonInfo[CInfoViewerBB::BUTTON_YELLOW].w; - rest = rest / 3; - bbButtonInfo[CInfoViewerBB::BUTTON_GREEN].x = x1 + rest; - bbButtonInfo[CInfoViewerBB::BUTTON_YELLOW].x = bbButtonInfo[CInfoViewerBB::BUTTON_GREEN].x + - bbButtonInfo[CInfoViewerBB::BUTTON_GREEN].w + rest; - } -#endif - bbButtonMaxX = g_InfoViewer->ChanInfoX + 10; + bbButtonMaxX = g_InfoViewer->ChanInfoX + OFFSET_INNER_MID; int step = MaxBr / 4; if (count > 0) { /* avoid div-by-zero :-) */ step = MaxBr / count; @@ -407,7 +371,7 @@ void CInfoViewerBB::showBBButtons(bool paintFooter) if (paint) { fb_pixel_t *pixbuf = NULL; - int buf_x = bbIconMinX - 5; + int buf_x = bbIconMinX - OFFSET_INNER_SMALL; int buf_y = BBarY; int buf_w = g_InfoViewer->BoxEndX-buf_x; int buf_h = InfoHeightY_Info; @@ -601,7 +565,7 @@ void CInfoViewerBB::showIcon_Resolution() switch (yres) { case 2160: icon_name = NEUTRINO_ICON_RESOLUTION_2160; - break; + break; case 1920: icon_name = NEUTRINO_ICON_RESOLUTION_1920; break; @@ -725,7 +689,7 @@ void CInfoViewerBB::showBarSys(int percent) if (is_visible){ sysscale->reset(); sysscale->doPaintBg(false); - sysscale->setDimensionsAll(bbIconMinX, BBarY + InfoHeightY_Info / 2 - 2 - 6, hddwidth, 6); + sysscale->setDimensionsAll(bbIconMinX, BBarY + InfoHeightY_Info/2 - OFFSET_INNER_MIN - InfoHeightY_Info/4, hddwidth, InfoHeightY_Info/4); sysscale->setValues(percent, 100); sysscale->paint(); } @@ -737,11 +701,11 @@ void CInfoViewerBB::showBarHdd(int percent) hddscale->reset(); hddscale->doPaintBg(false); if (percent >= 0){ - hddscale->setDimensionsAll(bbIconMinX, BBarY + InfoHeightY_Info / 2 + 2 + 0, hddwidth, 6); + hddscale->setDimensionsAll(bbIconMinX, BBarY + InfoHeightY_Info/2 + OFFSET_INNER_MIN, hddwidth, InfoHeightY_Info/4); hddscale->setValues(percent, 100); hddscale->paint(); }else { - frameBuffer->paintBoxRel(bbIconMinX, BBarY + InfoHeightY_Info / 2 + 2 + 0, hddwidth, 6, COL_INFOBAR_BUTTONS_BACKGROUND); + frameBuffer->paintBoxRel(bbIconMinX, BBarY + InfoHeightY_Info/2 + OFFSET_INNER_MIN, hddwidth, InfoHeightY_Info/4, COL_INFOBAR_BUTTONS_BACKGROUND); } } } @@ -749,11 +713,11 @@ void CInfoViewerBB::showBarHdd(int percent) void CInfoViewerBB::paint_ca_icons(int caid, const char *icon, int &icon_space_offset) { char buf[20]; - int endx = g_InfoViewer->BoxEndX - (g_settings.infobar_casystem_frame ? 20 : 10); - int py = g_InfoViewer->BoxEndY + (g_settings.infobar_casystem_frame ? 4 : 2); /* hand-crafted, should be automatic */ + int endx = g_InfoViewer->BoxEndX - OFFSET_INNER_MID - (g_settings.infobar_casystem_frame ? FRAME_WIDTH_MIN + OFFSET_INNER_SMALL : 0); + int py = g_InfoViewer->BoxEndY + OFFSET_INNER_SMALL; int px = 0; static std::map > icon_map; - const int icon_space = 10, icon_number = 10; + const int icon_space = OFFSET_INNER_SMALL, icon_number = 10; static int icon_offset[icon_number] = {0,0,0,0,0,0,0,0,0,0}; static int icon_sizeW [icon_number] = {0,0,0,0,0,0,0,0,0,0}; @@ -801,7 +765,7 @@ void CInfoViewerBB::paint_ca_icons(int caid, const char *icon, int &icon_space_o if (px) { snprintf(buf, sizeof(buf), "%s_%s", icon_map[caid].second, icon); - if ((px >= (endx-8)) || (px <= 0)) + if ((px >= (endx-OFFSET_INNER_MID)) || (px <= 0)) printf("#####[%s:%d] Error paint icon %s, px: %d, py: %d, endx: %d, icon_offset: %d\n", __FUNCTION__, __LINE__, buf, px, py, endx, icon_offset[icon_map[caid].first]); else @@ -870,12 +834,14 @@ void CInfoViewerBB::showIcon_CA_Status(int notfirst) void CInfoViewerBB::paint_ca_bar() { initBBOffset(); - int ca_width = g_InfoViewer->BoxEndX - g_InfoViewer->ChanInfoX; + int ca_x = g_InfoViewer->ChanInfoX + OFFSET_INNER_MID; + int ca_y = g_InfoViewer->BoxEndY; + int ca_w = g_InfoViewer->BoxEndX - g_InfoViewer->ChanInfoX - 2*OFFSET_INNER_MID; if (g_settings.infobar_casystem_frame) { if (ca_bar == NULL) - ca_bar = new CComponentsShapeSquare(g_InfoViewer->ChanInfoX + OFFSET_INNER_MID, g_InfoViewer->BoxEndY, ca_width - 2*OFFSET_INNER_MID, bottom_bar_offset - OFFSET_INNER_MID, NULL, CC_SHADOW_ON, COL_INFOBAR_CASYSTEM_PLUS_2, COL_INFOBAR_CASYSTEM_PLUS_0); + ca_bar = new CComponentsShapeSquare(ca_x, ca_y, ca_w, ca_h, NULL, CC_SHADOW_ON, COL_INFOBAR_CASYSTEM_PLUS_2, COL_INFOBAR_CASYSTEM_PLUS_0); ca_bar->enableShadow(CC_SHADOW_ON, OFFSET_SHADOW/2, true); ca_bar->setFrameThickness(FRAME_WIDTH_MIN); ca_bar->setCorner(RADIUS_SMALL, CORNER_ALL); @@ -883,7 +849,7 @@ void CInfoViewerBB::paint_ca_bar() } else { - paintBoxRel(g_InfoViewer->ChanInfoX, g_InfoViewer->BoxEndY, ca_width , bottom_bar_offset, COL_INFOBAR_CASYSTEM_PLUS_0); + paintBoxRel(g_InfoViewer->ChanInfoX, g_InfoViewer->BoxEndY, g_InfoViewer->BoxEndX - g_InfoViewer->ChanInfoX, bottom_bar_offset, COL_INFOBAR_CASYSTEM_PLUS_0); } #if 1 if (g_settings.infobar_casystem_dotmatrix) @@ -904,7 +870,8 @@ void CInfoViewerBB::paint_ca_bar() void CInfoViewerBB::changePB() { - hddwidth = frameBuffer->getScreenWidth(true) * ((g_settings.screen_preset == 1) ? 10 : 8) / 128; /* 80(CRT)/100(LCD) pix if screen is 1280 wide */ + hddwidth = frameBuffer->getScreenWidth(true) / 100 * 10; // 10 percent of screen width + if (!hddscale) { hddscale = new CProgressBar(); hddscale->setType(CProgressBar::PB_REDRIGHT); @@ -941,7 +908,18 @@ void CInfoViewerBB::ResetModules() void CInfoViewerBB::initBBOffset() { - bottom_bar_offset = (g_settings.infobar_casystem_display < 2) ? (g_settings.infobar_casystem_frame ? 36 : 22) : 0; + int icon_w = 0, icon_h = 0; + frameBuffer->getIconSize("nagra_white", &icon_w, &icon_h); // take any ca icon to get its height + ca_h = icon_h + 2*OFFSET_INNER_SMALL; + + bottom_bar_offset = 0; + if (g_settings.infobar_casystem_display < 2) + { + if (g_settings.infobar_casystem_frame) + bottom_bar_offset = ca_h + OFFSET_SHADOW/2 + OFFSET_INNER_SMALL; + else + bottom_bar_offset = ca_h; + } } void* CInfoViewerBB::scrambledThread(void *arg) diff --git a/src/gui/infoviewer_bb.h b/src/gui/infoviewer_bb.h index 765ddc20a..4f1f2bad6 100644 --- a/src/gui/infoviewer_bb.h +++ b/src/gui/infoviewer_bb.h @@ -106,6 +106,7 @@ class CInfoViewerBB CProgressBar *hddscale, *sysscale; CComponentsShapeSquare *foot, *ca_bar; + int ca_h; void paintFoot(int w = 0); void showBBIcons(const int modus, const std::string & icon); void getBBIconInfo(void); From 1f96c8a4d42715981c5bfb5200e726d7da368c02 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sun, 3 Dec 2017 10:47:05 +0100 Subject: [PATCH 017/107] fix resource leak --- src/gui/update.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/update.cpp b/src/gui/update.cpp index 8db1a3ba3..eae27a8fe 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -649,6 +649,7 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) c[0] = fgetc(f); printf("[update] Current partition: %s\n", c); } + fcolse(f); } // select partition From a6a256190bf4addeca6ef3b35b3ff7e947daf994 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sun, 3 Dec 2017 10:57:20 +0100 Subject: [PATCH 018/107] typo --- src/gui/update.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/update.cpp b/src/gui/update.cpp index eae27a8fe..9647dfd84 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -649,7 +649,7 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) c[0] = fgetc(f); printf("[update] Current partition: %s\n", c); } - fcolse(f); + fclose(f); } // select partition From 09858af7a825cc47b58694749a4594acc400308b Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sun, 3 Dec 2017 11:06:16 +0100 Subject: [PATCH 019/107] enable yt for generic --- src/gui/movieplayer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 604ff3f24..7a3a50347 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -408,7 +408,7 @@ int CMoviePlayerGui::exec(CMenuTarget * parent, const std::string & actionKey) moviebrowser->setMode(MB_SHOW_RECORDS); wakeup_hdd(g_settings.network_nfs_recordingdir.c_str()); } -#if HAVE_COOL_HARDWARE +#if HAVE_COOL_HARDWARE || HAVE_GENERIC_HARDWARE else if (actionKey == "ytplayback") { isMovieBrowser = true; moviebrowser->setMode(MB_SHOW_YT); From 30c0a32a48147476a29c2b3ebc8b8a5cf8f57562 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sun, 3 Dec 2017 16:55:20 +0100 Subject: [PATCH 020/107] fix radiotext title background (merge fix) --- src/gui/infoviewer.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index 9d2bb9642..ea565a6a3 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -1361,6 +1361,9 @@ void CInfoViewer::showRadiotext() sprintf(stext[0], g_Radiotext->RT_PTY == 0 ? "%s %s%s" : "%s (%s)%s", tr("Radiotext"), g_Radiotext->RT_PTY == 0 ? g_Radiotext->RDS_PTYN : g_Radiotext->ptynr2string(g_Radiotext->RT_PTY), ":"); int title_w = g_Font[rt_font]->getRenderWidth(stext[0]) + 2*OFFSET_INNER_MID; + frameBuffer->paintBoxRel(rt_x + OFFSET_SHADOW, rt_y + OFFSET_SHADOW, title_w, 2*OFFSET_INNER_SMALL + item_h, COL_SHADOW_PLUS_0, RADIUS_LARGE, CORNER_TOP); + frameBuffer->paintBoxRel(rt_x, rt_y, title_w, 2*OFFSET_INNER_SMALL + item_h, COL_INFOBAR_PLUS_0, RADIUS_LARGE, CORNER_TOP); + g_Font[rt_font]->RenderString(item_x, item_y, title_w, stext[0], COL_INFOBAR_TEXT, 0, RTisUTF8); } item = 1; From 5ff88f5c97d49340ef3f71b49e865d31a80929b7 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Fri, 1 Dec 2017 15:24:51 +0100 Subject: [PATCH 021/107] - neutrino.h: remove obsolete external genre_sub_classes variables Signed-off-by: Thilo Graf --- src/neutrino.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/neutrino.h b/src/neutrino.h index 360766b72..228143ed0 100644 --- a/src/neutrino.h +++ b/src/neutrino.h @@ -50,9 +50,6 @@ * * **************************************************************************************/ -extern const unsigned char genre_sub_classes[]; /* epgview.cpp */ -extern const neutrino_locale_t * genre_sub_classes_list[]; /* epgview.cpp */ - class CFrameBuffer; class CConfigFile; class CScanSettings; From e9883cbd2de134dd0c2d11bbf489a860f8d7219b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 3 Dec 2017 18:07:12 +0100 Subject: [PATCH 022/107] cc_item_picture.h: remove virtual declaration from setPicture() Is not really required. Avoids possible compile/linker errors like "...no reference..." for some coming changes. --- src/gui/components/cc_item_picture.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/components/cc_item_picture.h b/src/gui/components/cc_item_picture.h index fe42604e7..c96c4e221 100644 --- a/src/gui/components/cc_item_picture.h +++ b/src/gui/components/cc_item_picture.h @@ -141,9 +141,9 @@ class CComponentsPicture : public CComponentsItem } ///sets an image name (unscaled icons only), full image path or url to an image file - virtual void setPicture(const std::string& picture_name); + void setPicture(const std::string& picture_name); ///sets an image name (unscaled icons only), full image path or url to an image file - virtual void setPicture(const char* picture_name); + void setPicture(const char* picture_name); ///returns current assigned image name std::string getPictureName(){return pic_name;} From 882a4654a829453fc9b7df58407997fd7fb601f6 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 4 Dec 2017 20:14:02 +0100 Subject: [PATCH 023/107] widget/hintbox.cpp: add explicit init of var picon Had some issues while compile with gcc 7.x. Exact data type was expected. --- src/gui/widget/hintbox.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index ec9cd854e..73142b895 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -265,6 +265,9 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const /* set required font and line height */ Font* item_font = !font_text ? hb_font : font_text; + /* set picon */ + string picon = Picon; + /* pre define required info height depends of lines and minimal needed height*/ int line_breaks = CTextBox::getLines(Text); int h_font = item_font->getHeight(); @@ -276,7 +279,7 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const int txt_mode = text_mode; /* remove CENTER mode if picon defined */ - if (!Picon.empty() && (txt_mode & CTextBox::CENTER)){ + if (!picon.empty() && (txt_mode & CTextBox::CENTER)){ txt_mode &= ~CTextBox::CENTER; } @@ -313,7 +316,7 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const color_text); /* define picon and disable bg */ - info_box->setPicture(Picon); + info_box->setPicture(picon); info_box->doPaintBg(false); /* recalculate new hintbox dimensions and position*/ From 114cd36e55470934f053b23c4fc7efcbf75818b6 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Tue, 5 Dec 2017 12:34:10 +0100 Subject: [PATCH 024/107] yWeb Help: remove invalid help links --- data/y-web/Y_Info_Help.yhtm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/y-web/Y_Info_Help.yhtm b/data/y-web/Y_Info_Help.yhtm index d9cecd04d..17e9bf5a3 100644 --- a/data/y-web/Y_Info_Help.yhtm +++ b/data/y-web/Y_Info_Help.yhtm @@ -7,10 +7,10 @@ {=var-set:help_url=Help-Info-Hilfe=}{=var-set:menu={=L:info.help=}=}{=include-block:Y_Blocks.txt;work_menu=} From 3c859db7c4d34f13a5c07bb5099289e08d7caa4e Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 6 Dec 2017 10:42:05 +0100 Subject: [PATCH 025/107] localize: try to fix different path to iso tab --- data/iso-codes/Makefile.am | 2 +- src/system/localize.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/data/iso-codes/Makefile.am b/data/iso-codes/Makefile.am index e5ddfc030..3a4cc9aad 100644 --- a/data/iso-codes/Makefile.am +++ b/data/iso-codes/Makefile.am @@ -1,4 +1,4 @@ -installdir = $(datadir)/iso-codes +installdir = $(DATADIR)/iso-codes install_DATA = \ iso-639.tab diff --git a/src/system/localize.cpp b/src/system/localize.cpp index 63f562437..fd0a9c516 100644 --- a/src/system/localize.cpp +++ b/src/system/localize.cpp @@ -48,8 +48,10 @@ #include #include +#define ISO_639_TAB DATADIR "/iso-codes/iso-639.tab" //static const char * iso639filename = "/usr/share/iso-codes/iso-639.tab"; -static const char * iso639filename = "/share/iso-codes/iso-639.tab"; +//static const char * iso639filename = "/share/iso-codes/iso-639.tab"; +static const char * iso639filename = ISO_639_TAB; #define DEFAULT_LOCALE "english" From f3283ed362f1ee3df44540883dc17d6628c655d1 Mon Sep 17 00:00:00 2001 From: Frankenstone Date: Fri, 1 Dec 2017 19:13:35 +0100 Subject: [PATCH 026/107] fix frontend Uni2 / JESS (thx DboxOldie) --- src/zapit/src/frontend.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index a5093e668..73164bfb6 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -1400,7 +1400,7 @@ void CFrontend::secSetTone(const fe_sec_tone_mode_t toneMode, const uint32_t ms) if (currentToneMode == toneMode) return; - if (config.diseqcType == DISEQC_UNICABLE) { + if (config.diseqcType == DISEQC_UNICABLE || config.diseqcType == DISEQC_UNICABLE2) { /* this is too ugly for words. the "currentToneMode" is the only place where the global "highband" state is saved. So we need to fake it for unicable and still set the tone on... */ @@ -1429,7 +1429,7 @@ void CFrontend::secSetVoltage(const fe_sec_voltage_t voltage, const uint32_t ms) return; if (zapit_debug) printf("[fe%d] voltage %s\n", fenumber, voltage == SEC_VOLTAGE_OFF ? "OFF" : voltage == SEC_VOLTAGE_13 ? "13" : "18"); - if (config.diseqcType == DISEQC_UNICABLE && voltage != SEC_VOLTAGE_OFF) { + if (config.diseqcType == DISEQC_UNICABLE || config.diseqcType == DISEQC_UNICABLE2) { /* see my comment in secSetTone... */ currentVoltage = voltage; /* need to know polarization for unicable */ fop(ioctl, FE_SET_VOLTAGE, unicable_lowvolt); /* voltage must not be 18V */ From 8ba4a585543b074ec78d2d1206c91a4a91ed2711 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Sun, 3 Dec 2017 17:59:08 +0100 Subject: [PATCH 027/107] fix DVB-T2 transponders --- src/zapit/src/frontend.cpp | 8 ++++---- src/zapit/src/getservices.cpp | 13 +++++++------ src/zapit/src/transponder.cpp | 14 +++++++++----- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index 73164bfb6..b40c99b25 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -147,9 +147,9 @@ static const struct dtv_property dvbt2_cmdargs[] = { { DTV_GUARD_INTERVAL, {}, { GUARD_INTERVAL_AUTO}, 0}, { DTV_HIERARCHY, {}, { HIERARCHY_AUTO }, 0}, #if defined DTV_STREAM_ID - { DTV_STREAM_ID, {}, { 0 } ,0}, + { DTV_STREAM_ID, {}, { NO_STREAM_ID_FILTER } ,0}, #elif defined DTV_DVBT2_PLP_ID - { DTV_DVBT2_PLP_ID, {}, { 0 } ,0}, + { DTV_DVBT2_PLP_ID, {}, { NO_STREAM_ID_FILTER } ,0}, #endif { DTV_TUNE, {}, { 0 }, 0} }; @@ -1802,8 +1802,8 @@ int CFrontend::setParameters(transponder *TP, bool nowait) break; } - printf("[fe%d] tune to %d %s %s %s %s srate %d (tuner %d offset %d timeout %d)\n", fenumber, freq, s, m, f, - feparams.polarization & 1 ? "V/R" : "H/L", feparams.symbol_rate, feparams.frequency, freq_offset, TIMEOUT_MAX_MS); + printf("[fe%d] tune to %d %s %s %s %s srate %d pli %d (tuner %d offset %d timeout %d)\n", fenumber, freq, s, m, f, + feparams.polarization & 1 ? "V/R" : "H/L", feparams.symbol_rate, feparams.plp_id, feparams.frequency, freq_offset, TIMEOUT_MAX_MS); setFrontend(&feparams, nowait); return tuned; diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index 3b2d233d3..d53f02bc3 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -380,6 +380,7 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa t_original_network_id original_network_id = xmlGetNumericAttribute(node, "on", 16); feparams.frequency = xmlGetNumericAttribute(node, "frq", 0); feparams.inversion = (fe_spectral_inversion) xmlGetNumericAttribute(node, "inv", 0); + feparams.plp_id = (uint8_t) xmlGetNumericAttribute(node, "pli", 0); const char *system = xmlGetAttribute(node, "sys"); if (system) { @@ -397,7 +398,7 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa feparams.delsys = DVB_C; } else if (CFrontend::isTerr(delsys)) { - feparams.delsys = DVB_T; + feparams.delsys = delsys; } } @@ -426,8 +427,8 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa feparams.guard_interval = (fe_guard_interval_t) xmlGetNumericAttribute(node, "gi", 0); feparams.hierarchy = (fe_hierarchy_t) xmlGetNumericAttribute(node, "hi", 0); - if (feparams.frequency > 1000*1000) - feparams.frequency = feparams.frequency/1000; //transponderlist was read from tuxbox + if (feparams.frequency < 1000*1000) + feparams.frequency = feparams.frequency*1000; } else if (CFrontend::isCable(delsys)) { feparams.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(node, "fec", 0); @@ -728,7 +729,7 @@ void CServiceManager::ParseSatTransponders(delivery_system_t delsys, xmlNodePtr } } else { // Set some sane defaults. - feparams.delsys = DVB_T; + feparams.delsys = DVB_T2; } feparams.bandwidth = (fe_bandwidth_t) xmlGetNumericAttribute(tps, "bandwidth", 0); @@ -746,8 +747,8 @@ void CServiceManager::ParseSatTransponders(delivery_system_t delsys, xmlNodePtr xmlGetNumericAttribute(tps, "hierarchy", 0); feparams.plp_id = (uint8_t) xmlGetNumericAttribute(tps, "plp_id", 0); - if (feparams.frequency > 1000*1000) - feparams.frequency /= 1000; // old transponder list + if (feparams.frequency < 1000*1000) + feparams.frequency *= 1000; } else /* we'll probably crash sooner or later, so write to STDERR... */ fprintf(stderr, "[getservices] %s: unknown delivery system %d!\n", __func__, delsys); diff --git a/src/zapit/src/transponder.cpp b/src/zapit/src/transponder.cpp index 9ad962dc0..5e0e24264 100644 --- a/src/zapit/src/transponder.cpp +++ b/src/zapit/src/transponder.cpp @@ -62,7 +62,8 @@ bool transponder::operator==(const transponder& t) const //(transport_stream_id == t.transport_stream_id) && //(original_network_id == t.original_network_id) && ((getFEParams()->polarization & 1) == (t.getFEParams()->polarization & 1)) && - (abs((int) getFEParams()->frequency - (int)t.getFEParams()->frequency) <= 100) + (abs((int) getFEParams()->frequency - (int)t.getFEParams()->frequency) <= 100) && + (getFEParams()->plp_id == t.getFEParams()->plp_id) ); } @@ -98,7 +99,8 @@ bool transponder::compare(const transponder& t) const (getFEParams()->code_rate_LP == t.getFEParams()->code_rate_LP || getFEParams()->code_rate_LP == FEC_AUTO || t.getFEParams()->code_rate_LP == FEC_AUTO) && (getFEParams()->modulation == t.getFEParams()->modulation || - getFEParams()->modulation == QAM_AUTO || t.getFEParams()->modulation == QAM_AUTO) + getFEParams()->modulation == QAM_AUTO || t.getFEParams()->modulation == QAM_AUTO) && + (getFEParams()->plp_id == t.getFEParams()->plp_id) ); } @@ -127,7 +129,7 @@ void transponder::dumpServiceXml(FILE * fd) getFEParams()->modulation, CFrontend::getXMLDeliverySystem(getFEParams()->delsys)); } else if (CFrontend::isTerr(feparams.delsys)) { - fprintf(fd, "\t\t\n", + fprintf(fd, "\t\t\n", transport_stream_id, original_network_id, getFEParams()->frequency, getFEParams()->inversion, @@ -138,6 +140,7 @@ void transponder::dumpServiceXml(FILE * fd) getFEParams()->transmission_mode, getFEParams()->guard_interval, getFEParams()->hierarchy, + getFEParams()->plp_id, CFrontend::getXMLDeliverySystem(getFEParams()->delsys)); } } @@ -162,7 +165,7 @@ void transponder::dump(std::string label) getFEParams()->modulation, getFEParams()->delsys); } else if (CFrontend::isTerr(feparams.delsys)) { - printf("%s tp-id %016" PRIx64 " freq %d bw %d coderate_HP %d coderate_LP %d const %d guard %d %d\n", label.c_str(), + printf("%s tp-id %016" PRIx64 " freq %d bw %d coderate_HP %d coderate_LP %d const %d guard %d pli %d delsys %d\n", label.c_str(), transponder_id, getFEParams()->frequency, getFEParams()->bandwidth, @@ -170,6 +173,7 @@ void transponder::dump(std::string label) getFEParams()->code_rate_LP, getFEParams()->modulation, getFEParams()->guard_interval, + getFEParams()->plp_id, getFEParams()->delsys); } } @@ -209,7 +213,7 @@ std::string transponder::description() } else if (CFrontend::isTerr(feparams.delsys)) { CFrontend::getDelSys(feparams.delsys, getFEParams()->code_rate_HP, getFEParams()->modulation, f, s, m); CFrontend::getDelSys(feparams.delsys, getFEParams()->code_rate_LP, getFEParams()->modulation, f2, s, m); - snprintf(buf, sizeof(buf), "%d %d %s %s %s ", getFEParams()->frequency, CFrontend::getFEBandwidth(getFEParams()->bandwidth)/1000, f, f2, m); + snprintf(buf, sizeof(buf), "%d %d %s %s %s %d ", getFEParams()->frequency, CFrontend::getFEBandwidth(getFEParams()->bandwidth)/1000, f, f2, m, getFEParams()->plp_id); } return std::string(buf); From 4e65f22bdf994f1c1fef1f7c9b04a538fd26d7bf Mon Sep 17 00:00:00 2001 From: TangoCash Date: Mon, 4 Dec 2017 09:46:04 +0100 Subject: [PATCH 028/107] add DVB-S2X support --- data/locale/deutsch.locale | 7 +++++ data/locale/english.locale | 7 +++++ src/gui/scan.cpp | 4 +++ src/gui/scan_setup.cpp | 34 ++++++++++++++++++++++++ src/system/locals.h | 7 +++++ src/system/locals_intern.h | 7 +++++ src/system/settings.cpp | 8 ++++++ src/system/settings.h | 4 +++ src/zapit/include/zapit/frontend_c.h | 2 ++ src/zapit/include/zapit/frontend_types.h | 11 +++++++- src/zapit/src/frontend.cpp | 30 ++++++++++++++++++--- src/zapit/src/getservices.cpp | 14 ++++++++++ src/zapit/src/transponder.cpp | 15 ++++++++--- 13 files changed, 142 insertions(+), 8 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index e893c24e9..fce9fbe63 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -536,6 +536,13 @@ extra.tp_mod_auto QAM/AUTO extra.tp_pilot Pilot extra.tp_pilot_auto Auto (HW) extra.tp_pilot_auto_sw Auto (SW) +extra.tp_plc PLM Code +extra.tp_pli Stream ID +extra.tp_plm PLS Modus +extra.tp_plm_combo Combo +extra.tp_plm_gold Gold +extra.tp_plm_root Root (Standard) +extra.tp_plm_unk Unbekannt extra.tp_pol Polarisation extra.tp_pol_h H extra.tp_pol_l L diff --git a/data/locale/english.locale b/data/locale/english.locale index 094a43057..938c2d9da 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -536,6 +536,13 @@ extra.tp_mod_auto QAM/AUTO extra.tp_pilot Pilot extra.tp_pilot_auto Auto (HW) extra.tp_pilot_auto_sw Auto (SW) +extra.tp_plc PLM Code +extra.tp_pli Stream ID +extra.tp_plm PLS Mode +extra.tp_plm_combo Combo +extra.tp_plm_gold Gold +extra.tp_plm_root Root (Default) +extra.tp_plm_unk Unknown extra.tp_pol Polarization extra.tp_pol_h H extra.tp_pol_l L diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index e679b4ba0..2dbaa6f16 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -233,6 +233,9 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) TP.feparams.delsys = (delivery_system_t)scansettings.sat_TP_delsys; TP.feparams.modulation = (fe_modulation_t) scansettings.sat_TP_mod; TP.feparams.pilot = (zapit_pilot_t) scansettings.sat_TP_pilot; + TP.feparams.plp_id = atoi(scansettings.sat_TP_pli.c_str()); + TP.feparams.pls_code = atoi(scansettings.sat_TP_plc.c_str()); + TP.feparams.pls_mode = (fe_pls_mode_t) scansettings.sat_TP_plm; } else if (CFrontend::isTerr(delsys)) { /* DVB-T. TODO: proper menu and parameter setup, not all "AUTO" */ TP.feparams.frequency = atoi(scansettings.terrestrial_TP_freq.c_str()); @@ -248,6 +251,7 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) TP.feparams.guard_interval = (fe_guard_interval_t)scansettings.terrestrial_TP_guard; TP.feparams.hierarchy = (fe_hierarchy_t)scansettings.terrestrial_TP_hierarchy; TP.feparams.delsys = (delivery_system_t)scansettings.terrestrial_TP_delsys; + TP.feparams.plp_id = atoi(scansettings.terrestrial_TP_pli.c_str()); } else if (CFrontend::isCable(delsys)) { TP.feparams.frequency = atoi(scansettings.cable_TP_freq.c_str()); TP.feparams.symbol_rate = atoi(scansettings.cable_TP_rate.c_str()); diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 373b6dbac..f2bafaa27 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -349,6 +349,15 @@ const CMenuOptionChooser::keyval FRONTEND_FORCE_MODE[FRONTEND_FORCE_MODE_COUNT] { 2, LOCALE_TUNERSETUP_TERR } }; +#define SATSETUP_SCANTP_PLM_COUNT 4 +const CMenuOptionChooser::keyval SATSETUP_SCANTP_PLM[SATSETUP_SCANTP_PLM_COUNT] = +{ + { 0, LOCALE_EXTRA_TP_PLM_ROOT }, + { 1, LOCALE_EXTRA_TP_PLM_GOLD }, + { 2, LOCALE_EXTRA_TP_PLM_COMBO }, + { 3, LOCALE_EXTRA_TP_PLM_UNK } +}; + CScanSetup::CScanSetup(int wizard_mode) { width = 40; @@ -1681,6 +1690,9 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc CMenuForwarder *Freq = NULL; CMenuForwarder *Rate = NULL; CMenuOptionChooser *pilot = NULL; + CMenuForwarder *Pli = NULL; + CMenuForwarder *Plc = NULL; + CMenuOptionChooser *Plm = NULL; if (r_system == ALL_SAT) { delsys = new CMenuOptionChooser(LOCALE_EXTRA_TP_DELSYS, (int *)&scansettings.sat_TP_delsys, SATSETUP_SCANTP_DELSYS, SATSETUP_SCANTP_DELSYS_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++), "", true); delsys->setHint("", LOCALE_MENU_HINT_SCAN_DELSYS); @@ -1698,6 +1710,11 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc pol->setHint("", LOCALE_MENU_HINT_SCAN_POL); pilot = new CMenuOptionChooser(LOCALE_EXTRA_TP_PILOT, (int *)&scansettings.sat_TP_pilot, SATSETUP_SCANTP_PILOT, SATSETUP_SCANTP_PILOT_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); pilot->setHint("", LOCALE_MENU_HINT_SCAN_PILOT); + CStringInput *pli = new CStringInput(LOCALE_EXTRA_TP_PLI, &scansettings.sat_TP_pli, 1, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Pli = new CMenuDForwarder(LOCALE_EXTRA_TP_PLI, true, scansettings.sat_TP_pli, pli, "", CRCInput::convertDigitToKey(shortCut++)); + CStringInput *plc = new CStringInput(LOCALE_EXTRA_TP_PLC, &scansettings.sat_TP_plc, 6, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Plc = new CMenuDForwarder(LOCALE_EXTRA_TP_PLC, true, scansettings.sat_TP_plc, plc, "", CRCInput::convertDigitToKey(shortCut++)); + Plm = new CMenuOptionChooser(LOCALE_EXTRA_TP_PLM, (int *)&scansettings.sat_TP_plm, SATSETUP_SCANTP_PLM, SATSETUP_SCANTP_PLM_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); } else if (r_system == ALL_CABLE) { delsys = new CMenuOptionChooser(LOCALE_EXTRA_TP_DELSYS, (int *)&scansettings.cable_TP_delsys, CABLESETUP_SCANTP_DELSYS, CABLESETUP_SCANTP_DELSYS_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++), "", true); delsys->setHint("", LOCALE_MENU_HINT_SCAN_DELSYS); @@ -1730,6 +1747,8 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc coderateLP->setHint("", LOCALE_MENU_HINT_SCAN_FEC); tm = new CMenuOptionChooser(LOCALE_EXTRA_TP_TRANSMIT_MODE, (int *)&scansettings.terrestrial_TP_transmit_mode, TERRSETUP_SCANTP_TRANSMIT_MODE, TERRSETUP_SCANTP_TRANSMIT_MODE_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); tm->setHint("", LOCALE_MENU_HINT_SCAN_TRANSMIT_MODE); + CStringInput *pli = new CStringInput(LOCALE_EXTRA_TP_PLI, &scansettings.terrestrial_TP_pli, 1, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Pli = new CMenuDForwarder(LOCALE_EXTRA_TP_PLI, true, scansettings.terrestrial_TP_pli, pli, "", CRCInput::convertDigitToKey(shortCut++)); } if (delsys) @@ -1759,6 +1778,13 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc if (pilot) options_menu->addItem(pilot); + if (Pli) + options_menu->addItem(Pli); + if (Plc) + options_menu->addItem(Plc); + if (Plm) + options_menu->addItem(Plm); + return shortCut; } @@ -1945,6 +1971,9 @@ void CScanSetup::updateManualSettings() scansettings.sat_TP_delsys = tI->second.feparams.delsys; scansettings.sat_TP_mod = tI->second.feparams.modulation; scansettings.satName = CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()); + scansettings.sat_TP_pli = to_string(tI->second.feparams.plp_id); + scansettings.sat_TP_plc = to_string(tI->second.feparams.pls_code); + scansettings.sat_TP_plm = tI->second.feparams.pls_mode; } else if (CFrontend::isCable(tI->second.feparams.delsys)) { scansettings.cable_TP_freq = to_string(tI->second.feparams.frequency); scansettings.cable_TP_rate = to_string(tI->second.feparams.symbol_rate); @@ -1961,6 +1990,7 @@ void CScanSetup::updateManualSettings() scansettings.terrestrial_TP_transmit_mode = tI->second.feparams.transmission_mode; scansettings.terrestrial_TP_coderate_HP = tI->second.feparams.code_rate_HP; scansettings.terrestrial_TP_coderate_LP = tI->second.feparams.code_rate_LP; + scansettings.terrestrial_TP_pli = to_string(tI->second.feparams.plp_id); scansettings.terrestrialName = CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()); } @@ -2053,6 +2083,9 @@ int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &actionkey) scansettings.sat_TP_delsys = tmpI->second.feparams.delsys; scansettings.sat_TP_mod = tmpI->second.feparams.modulation; scansettings.sat_TP_pilot = tmpI->second.feparams.pilot; + scansettings.sat_TP_pli = to_string(tmpI->second.feparams.plp_id); + scansettings.sat_TP_plc = to_string(tmpI->second.feparams.pls_code); + scansettings.sat_TP_plm = tmpI->second.feparams.pls_mode; } else if (CFrontend::isCable(tmpI->second.feparams.delsys)) { scansettings.cable_TP_freq = to_string(tmpI->second.feparams.frequency); @@ -2069,6 +2102,7 @@ int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &actionkey) scansettings.terrestrial_TP_transmit_mode = tmpI->second.feparams.transmission_mode; scansettings.terrestrial_TP_coderate_HP = tmpI->second.feparams.code_rate_HP; scansettings.terrestrial_TP_coderate_LP = tmpI->second.feparams.code_rate_LP; + scansettings.terrestrial_TP_pli = to_string(tmpI->second.feparams.plp_id); //scansettings.terrestrialName = CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()); } } diff --git a/src/system/locals.h b/src/system/locals.h index 1648baea4..d1260c9ef 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -563,6 +563,13 @@ typedef enum LOCALE_EXTRA_TP_PILOT, LOCALE_EXTRA_TP_PILOT_AUTO, LOCALE_EXTRA_TP_PILOT_AUTO_SW, + LOCALE_EXTRA_TP_PLC, + LOCALE_EXTRA_TP_PLI, + LOCALE_EXTRA_TP_PLM, + LOCALE_EXTRA_TP_PLM_COMBO, + LOCALE_EXTRA_TP_PLM_GOLD, + LOCALE_EXTRA_TP_PLM_ROOT, + LOCALE_EXTRA_TP_PLM_UNK, LOCALE_EXTRA_TP_POL, LOCALE_EXTRA_TP_POL_H, LOCALE_EXTRA_TP_POL_L, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index b187b33f2..61003a67d 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -563,6 +563,13 @@ const char * locale_real_names[] = "extra.tp_pilot", "extra.tp_pilot_auto", "extra.tp_pilot_auto_sw", + "extra.tp_plc", + "extra.tp_pli", + "extra.tp_plm", + "extra.tp_plm_combo", + "extra.tp_plm_gold", + "extra.tp_plm_root", + "extra.tp_plm_unk", "extra.tp_pol", "extra.tp_pol_h", "extra.tp_pol_l", diff --git a/src/system/settings.cpp b/src/system/settings.cpp index 8546a2f8c..7e289071f 100644 --- a/src/system/settings.cpp +++ b/src/system/settings.cpp @@ -146,6 +146,9 @@ bool CScanSettings::loadSettings(const char * const fileName) sat_TP_mod = configfile.getInt32("sat_TP_mod", QPSK); sat_TP_delsys = configfile.getInt32("sat_TP_delsys", DVB_S); sat_TP_pilot = configfile.getInt32("sat_TP_pilot", ZPILOT_AUTO_SW); + sat_TP_pli = configfile.getString("sat_TP_pli", "0"); + sat_TP_plc = configfile.getString("sat_TP_plc", "1"); + sat_TP_plm = configfile.getInt32("sat_TP_plm", 0); cableName = configfile.getString("cableName", cableName); cable_TP_mod = configfile.getInt32("cable_TP_mod", QAM_64); @@ -164,6 +167,7 @@ bool CScanSettings::loadSettings(const char * const fileName) terrestrial_TP_hierarchy = configfile.getInt32("terrestrial_TP_hierarchy", HIERARCHY_AUTO); terrestrial_TP_transmit_mode = configfile.getInt32("terrestrial_TP_transmit_mode", TRANSMISSION_MODE_AUTO); terrestrial_TP_delsys = configfile.getInt32("terrestrial_TP_delsys", DVB_T); + terrestrial_TP_pli = configfile.getString("terrestrial_TP_pli", "0"); #if 1 if(sat_TP_fec == 4) sat_TP_fec = 5; @@ -204,6 +208,9 @@ bool CScanSettings::saveSettings(const char * const fileName) configfile.setInt32("sat_TP_delsys", sat_TP_delsys); configfile.setInt32("sat_TP_mod", sat_TP_mod); configfile.setInt32("sat_TP_pilot", sat_TP_pilot); + configfile.setString("sat_TP_pli", sat_TP_pli); + configfile.setString("sat_TP_plc", sat_TP_plc); + configfile.setInt32("sat_TP_plm", sat_TP_plm); configfile.setString("cableName", cableName); configfile.setInt32("cable_TP_fec", cable_TP_fec); @@ -222,6 +229,7 @@ bool CScanSettings::saveSettings(const char * const fileName) configfile.setInt32("terrestrial_TP_guard", terrestrial_TP_guard); configfile.setInt32("terrestrial_TP_transmit_mode", terrestrial_TP_transmit_mode); configfile.setInt32("terrestrial_TP_delsys", terrestrial_TP_delsys); + configfile.setString("terrestrial_TP_pli", terrestrial_TP_pli); if(configfile.getModifiedFlag()) configfile.saveConfig(fileName); diff --git a/src/system/settings.h b/src/system/settings.h index c16086540..7242b221a 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -1001,6 +1001,9 @@ class CScanSettings int sat_TP_delsys; int sat_TP_mod; int sat_TP_pilot; + std::string sat_TP_pli; + std::string sat_TP_plc; + int sat_TP_plm; std::string cableName; int cable_TP_mod; @@ -1019,6 +1022,7 @@ class CScanSettings int terrestrial_TP_hierarchy; int terrestrial_TP_transmit_mode; int terrestrial_TP_delsys; + std::string terrestrial_TP_pli; CScanSettings(); diff --git a/src/zapit/include/zapit/frontend_c.h b/src/zapit/include/zapit/frontend_c.h index 012b87605..7ae2597fb 100644 --- a/src/zapit/include/zapit/frontend_c.h +++ b/src/zapit/include/zapit/frontend_c.h @@ -154,6 +154,7 @@ class CFrontend uint32_t deliverySystemMask; uint32_t forcedSystemMask; + bool isMultistream; //fe_delivery_system_t deliverySystems[MAX_DELSYS]; //uint32_t numDeliverySystems; @@ -187,6 +188,7 @@ class CFrontend ~CFrontend(void); + static fe_pls_mode_t getPLSMode(const uint8_t pls_mode); static fe_code_rate_t getCodeRate(const uint8_t fec_inner, delivery_system_t delsys); static fe_hierarchy_t getHierarchy(const uint8_t hierarchy); static fe_transmit_mode_t getTransmissionMode(const uint8_t transmission_mode); diff --git a/src/zapit/include/zapit/frontend_types.h b/src/zapit/include/zapit/frontend_types.h index b4763ae43..615d7703e 100644 --- a/src/zapit/include/zapit/frontend_types.h +++ b/src/zapit/include/zapit/frontend_types.h @@ -106,6 +106,13 @@ typedef enum { ZPILOT_AUTO_SW } zapit_pilot_t; +typedef enum { + PLS_Root, + PLS_Gold, + PLS_Combo, + PLS_Unknown +} fe_pls_mode_t; + typedef struct { delivery_system_t delsys; uint32_t frequency; @@ -127,7 +134,9 @@ typedef struct { enum fe_interleaving interleaving; #endif uint8_t polarization; - uint8_t plp_id; + uint8_t plp_id; //0-255 + fe_pls_mode_t pls_mode; + uint32_t pls_code; //0-262142 } FrontendParameters; typedef struct frontend_config { diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index b40c99b25..94d08341f 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -66,6 +66,7 @@ extern int zapit_debug; // DVB-S/S2 specific #define PILOTS 7 #define ROLLOFF 8 +#define MIS 9 // DVB-T specific #define BANDWIDTH 4 #define CODE_RATE_HP 6 @@ -78,7 +79,7 @@ extern int zapit_debug; #define FE_COMMON_PROPS 2 #define FE_DVBS_PROPS 6 -#define FE_DVBS2_PROPS 8 +#define FE_DVBS2_PROPS 9 #define FE_DVBC_PROPS 6 #define FE_DVBT_PROPS 10 #define FE_DVBT2_PROPS 11 @@ -105,7 +106,8 @@ static const struct dtv_property dvbs2_cmdargs[] = { { DTV_INNER_FEC, {}, { FEC_AUTO } ,0}, { DTV_PILOT, {}, { PILOT_AUTO } ,0}, { DTV_ROLLOFF, {}, { ROLLOFF_AUTO } ,0}, - { DTV_TUNE, {}, { 0 } ,0 }, + { DTV_STREAM_ID, {}, { NO_STREAM_ID_FILTER } ,0}, + { DTV_TUNE, {}, { 0 } ,0 } }; static const struct dtv_property dvbc_cmdargs[] = { @@ -243,6 +245,7 @@ CFrontend::CFrontend(int Number, int Adapter) memset(&info, 0, sizeof(info)); deliverySystemMask = UNKNOWN_DS; + isMultistream = false; } CFrontend::~CFrontend(void) @@ -356,12 +359,14 @@ void CFrontend::getFEInfo(void) break; case SYS_DVBT2: deliverySystemMask |= DVB_T2; + isMultistream = info.caps & FE_CAN_MULTISTREAM; break; case SYS_DVBS: deliverySystemMask |= DVB_S; break; case SYS_DVBS2: deliverySystemMask |= DVB_S2; + isMultistream = info.caps & FE_CAN_MULTISTREAM; break; case SYS_DTMB: deliverySystemMask |= DTMB; @@ -688,6 +693,22 @@ fe_transmit_mode_t CFrontend::getTransmissionMode(const uint8_t transmission_mod } } +fe_pls_mode_t CFrontend::getPLSMode(const uint8_t pls_mode) +{ + switch (pls_mode) { + case 0x00: + return PLS_Root; + case 0x01: + return PLS_Gold; + case 0x02: + return PLS_Combo; + case 0x03: + return PLS_Unknown; + default: + return PLS_Root; + } +} + uint8_t CFrontend::getPolarization(void) const { return currentTransponder.getPolarization(); @@ -1269,6 +1290,7 @@ bool CFrontend::buildProperties(const FrontendParameters *feparams, struct dtv_p cmdseq.props[MODULATION].u.data = feparams->modulation; cmdseq.props[ROLLOFF].u.data = feparams->rolloff; cmdseq.props[PILOTS].u.data = pilot; + cmdseq.props[MIS].u.data = feparams->plp_id | (feparams->pls_code << 8) | (feparams->pls_mode << 26); if (zapit_debug) printf("[fe%d] tuner pilot %d (feparams %d)\n", fenumber, pilot, feparams->pilot); } else { memcpy(cmdseq.props, dvbs_cmdargs, sizeof(dvbs_cmdargs)); @@ -1802,8 +1824,8 @@ int CFrontend::setParameters(transponder *TP, bool nowait) break; } - printf("[fe%d] tune to %d %s %s %s %s srate %d pli %d (tuner %d offset %d timeout %d)\n", fenumber, freq, s, m, f, - feparams.polarization & 1 ? "V/R" : "H/L", feparams.symbol_rate, feparams.plp_id, feparams.frequency, freq_offset, TIMEOUT_MAX_MS); + printf("[fe%d] tune to %d %s %s %s %s srate %d pli %d plc %d plm %d (tuner %d offset %d timeout %d)\n", fenumber, freq, s, m, f, + feparams.polarization & 1 ? "V/R" : "H/L", feparams.symbol_rate, feparams.plp_id, feparams.pls_code, feparams.pls_mode, feparams.frequency, freq_offset, TIMEOUT_MAX_MS); setFrontend(&feparams, nowait); return tuned; diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index d53f02bc3..e0382ff13 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -415,6 +415,11 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa feparams.frequency = (int) 1000 * (int) round ((double) feparams.frequency / (double) 1000); /* TODO: add xml tag ? */ feparams.pilot = ZPILOT_AUTO; + feparams.plp_id = xmlGetNumericAttribute(node, "pli", 0); + feparams.pls_mode = (fe_pls_mode_t) xmlGetNumericAttribute(node, "plm", 0); + feparams.pls_code = xmlGetNumericAttribute(node, "plc", 0); + if (feparams.pls_code == 0) + feparams.pls_code = 1; } else if (CFrontend::isTerr(delsys)) { // @@ -615,6 +620,10 @@ void CServiceManager::ParseSatTransponders(delivery_system_t delsys, xmlNodePtr feparams.frequency = xmlGetNumericAttribute(tps, "centre_frequency", 0); feparams.inversion = INVERSION_AUTO; + feparams.plp_id = NO_STREAM_ID_FILTER; + feparams.pls_mode = PLS_Root; + feparams.pls_code = 1; + if (CFrontend::isCable(delsys)) { const char *system = xmlGetAttribute(tps, "system"); if (system) { @@ -706,6 +715,11 @@ void CServiceManager::ParseSatTransponders(delivery_system_t delsys, xmlNodePtr #endif feparams.fec_inner = (fe_code_rate_t) xml_fec; feparams.frequency = (int) 1000 * (int) round ((double) feparams.frequency / (double) 1000); + feparams.plp_id = xmlGetNumericAttribute(tps, "is_id", 0); + feparams.pls_mode = (fe_pls_mode_t) xmlGetNumericAttribute(tps, "pls_mode", 0); + feparams.pls_code = xmlGetNumericAttribute(tps, "pls_code", 0); + if (feparams.pls_code == 0) + feparams.pls_code = 1; } else if (CFrontend::isTerr(delsys)) { const char *system = xmlGetAttribute(tps, "system"); diff --git a/src/zapit/src/transponder.cpp b/src/zapit/src/transponder.cpp index 5e0e24264..8b5af8d89 100644 --- a/src/zapit/src/transponder.cpp +++ b/src/zapit/src/transponder.cpp @@ -56,7 +56,10 @@ bool transponder::operator==(const transponder& t) const //(transport_stream_id == t.transport_stream_id) && //(original_network_id == t.original_network_id) && ((getFEParams()->polarization & 1) == (t.getFEParams()->polarization & 1)) && - (abs((int) getFEParams()->frequency - (int)t.getFEParams()->frequency) <= 3000) + (abs((int) getFEParams()->frequency - (int)t.getFEParams()->frequency) <= 3000) && + (getFEParams()->plp_id == t.getFEParams()->plp_id) && + (getFEParams()->pls_mode == t.getFEParams()->pls_mode) && + (getFEParams()->pls_code == t.getFEParams()->pls_code) ); return ((satellitePosition == t.satellitePosition) && //(transport_stream_id == t.transport_stream_id) && @@ -88,7 +91,10 @@ bool transponder::compare(const transponder& t) const (getFEParams()->delsys == t.getFEParams()->delsys) && (getFEParams()->modulation == t.getFEParams()->modulation) && (getFEParams()->fec_inner == t.getFEParams()->fec_inner || - getFEParams()->fec_inner == FEC_AUTO || t.getFEParams()->fec_inner == FEC_AUTO) + getFEParams()->fec_inner == FEC_AUTO || t.getFEParams()->fec_inner == FEC_AUTO) && + (getFEParams()->plp_id == t.getFEParams()->plp_id) && + (getFEParams()->pls_mode == t.getFEParams()->pls_mode) && + (getFEParams()->pls_code == t.getFEParams()->pls_code) ); } else if (CFrontend::isTerr(feparams.delsys)) { @@ -119,7 +125,7 @@ void transponder::dumpServiceXml(FILE * fd) getFEParams()->modulation, CFrontend::getXMLDeliverySystem(getFEParams()->delsys)); } else if (CFrontend::isSat(feparams.delsys)) { - fprintf(fd, "\t\t\n", + fprintf(fd, "\t\t\n", transport_stream_id, original_network_id, getFEParams()->frequency, getFEParams()->inversion, @@ -127,6 +133,9 @@ void transponder::dumpServiceXml(FILE * fd) getFEParams()->fec_inner, getFEParams()->polarization, getFEParams()->modulation, + getFEParams()->plp_id, + getFEParams()->pls_code, + getFEParams()->pls_mode, CFrontend::getXMLDeliverySystem(getFEParams()->delsys)); } else if (CFrontend::isTerr(feparams.delsys)) { fprintf(fd, "\t\t\n", From 7b47ab46d38d951f0ec837468578601d02325f65 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Mon, 4 Dec 2017 09:46:04 +0100 Subject: [PATCH 029/107] workaround for T2 resolution display --- src/zapit/src/channel.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/zapit/src/channel.cpp b/src/zapit/src/channel.cpp index 17c0cf2b8..fd8ccb586 100644 --- a/src/zapit/src/channel.cpp +++ b/src/zapit/src/channel.cpp @@ -204,7 +204,10 @@ bool CZapitChannel::isUHD() { switch(serviceType) { case 0x1f: - return true; + if (delsys == DVB_T2) + return false; + else + return true; case ST_DIGITAL_TELEVISION_SERVICE: case 0x19: { @@ -226,6 +229,11 @@ bool CZapitChannel::isUHD() bool CZapitChannel::isHD() { switch(serviceType) { + case 0x1f: + if (delsys == DVB_T2) + return true; + else + return false; case 0x11: case 0x19: //printf("[zapit] HD channel: %s type 0x%X\n", name.c_str(), serviceType); return true; From 15e49f9d02901d8a9d04a292fa4c07713ddf1e28 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Mon, 4 Dec 2017 09:46:04 +0100 Subject: [PATCH 030/107] add PLI/PLC/PLM to manual transponder selection --- src/zapit/include/zapit/transponder.h | 1 + src/zapit/src/transponder.cpp | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/zapit/include/zapit/transponder.h b/src/zapit/include/zapit/transponder.h index 7dd2962e4..7d894e854 100644 --- a/src/zapit/include/zapit/transponder.h +++ b/src/zapit/include/zapit/transponder.h @@ -48,6 +48,7 @@ class transponder void ddump(std::string label = "tp"); static char pol(unsigned char pol); std::string description(void); + std::string getPLSMode(const uint8_t pls_mode); delivery_system_t getDelSys(void) { return feparams.delsys; } t_transport_stream_id getTransportStreamId(void) { return transport_stream_id; } diff --git a/src/zapit/src/transponder.cpp b/src/zapit/src/transponder.cpp index 8b5af8d89..6a3046f4e 100644 --- a/src/zapit/src/transponder.cpp +++ b/src/zapit/src/transponder.cpp @@ -215,7 +215,7 @@ std::string transponder::description() if (CFrontend::isSat(feparams.delsys)) { CFrontend::getDelSys(feparams.delsys, getFEParams()->fec_inner, getFEParams()->modulation, f, s, m); - snprintf(buf, sizeof(buf), "%d %c %d %s %s %s ", getFEParams()->frequency/1000, pol(getFEParams()->polarization), getFEParams()->symbol_rate/1000, f, s, m); + snprintf(buf, sizeof(buf), "%d %c %d %s %s %s (%d/%d/%s)", getFEParams()->frequency/1000, pol(getFEParams()->polarization), getFEParams()->symbol_rate/1000, f, s, m, getFEParams()->plp_id, getFEParams()->pls_code, getPLSMode(getFEParams()->pls_mode).c_str()); } else if (CFrontend::isCable(feparams.delsys)) { CFrontend::getDelSys(feparams.delsys, getFEParams()->fec_inner, getFEParams()->modulation, f, s, m); snprintf(buf, sizeof(buf), "%d %d %s %s %s ", getFEParams()->frequency/1000, getFEParams()->symbol_rate/1000, f, s, m); @@ -227,3 +227,19 @@ std::string transponder::description() return std::string(buf); } + +std::string transponder::getPLSMode(const uint8_t pls_mode) +{ + switch (pls_mode) { + case 0x00: + return "Root"; + case 0x01: + return "Gold"; + case 0x02: + return "Combo"; + case 0x03: + return "Unknown"; + default: + return "Root"; + } +} From 5a6df22226894687a23c81fcf77f912b732f8066 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Mon, 4 Dec 2017 09:46:04 +0100 Subject: [PATCH 031/107] show PLI/PLC/PLM while scanning --- src/gui/scan.cpp | 6 +++--- src/zapit/include/zapit/transponder.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index 2dbaa6f16..f4c912a93 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -192,7 +192,7 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); fw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getWidth(); - width = w_max(fw * 42, 0); + width = w_max(fw * 52, 0); int tmp = (BAR_WIDTH + 4 + 7 * fw) * 2 + fw + 40; /* that's from the crazy calculation in showSNR() */ if (width < tmp) width = w_max(tmp, 0); @@ -427,9 +427,9 @@ neutrino_msg_t CScanTs::handleMsg(neutrino_msg_t msg, neutrino_msg_data_t data) CFrontend::getDelSys(feparams->delsys, feparams->fec_inner, feparams->modulation, f, s, m); uint32_t freq = feparams->frequency/1000; if (CFrontend::isSat(feparams->delsys)) - snprintf(buffer,sizeof(buffer), "%u %c %d %s %s %s", freq, transponder::pol(feparams->polarization), feparams->symbol_rate/1000, f, s, m); + snprintf(buffer,sizeof(buffer), "%u %c %d %s %s %s (%d/%d/%s)", freq, transponder::pol(feparams->polarization), feparams->symbol_rate/1000, f, s, m, feparams->plp_id, feparams->pls_code, transponder::getPLSMode(feparams->pls_mode).c_str()); else - snprintf(buffer,sizeof(buffer), "%u %d %s %s", freq, feparams->symbol_rate/1000, s, m); + snprintf(buffer,sizeof(buffer), "%u %d %s %s %d", freq, feparams->symbol_rate/1000, s, m, feparams->plp_id); paintLine(xpos2, ypos_frequency, w - (7*fw), buffer); } break; diff --git a/src/zapit/include/zapit/transponder.h b/src/zapit/include/zapit/transponder.h index 7d894e854..e76181c3b 100644 --- a/src/zapit/include/zapit/transponder.h +++ b/src/zapit/include/zapit/transponder.h @@ -48,7 +48,7 @@ class transponder void ddump(std::string label = "tp"); static char pol(unsigned char pol); std::string description(void); - std::string getPLSMode(const uint8_t pls_mode); + static std::string getPLSMode(const uint8_t pls_mode); delivery_system_t getDelSys(void) { return feparams.delsys; } t_transport_stream_id getTransportStreamId(void) { return transport_stream_id; } From 67b8037caace142b736bbf730c8a13036668cd89 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Mon, 4 Dec 2017 09:54:34 +0100 Subject: [PATCH 032/107] update scan infos --- src/gui/scan.cpp | 19 +++++++++++++++---- src/zapit/src/transponder.cpp | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index f4c912a93..46d9aee29 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -422,14 +422,25 @@ neutrino_msg_t CScanTs::handleMsg(neutrino_msg_t msg, neutrino_msg_data_t data) case NeutrinoMessages::EVT_SCAN_REPORT_FREQUENCYP: { FrontendParameters *feparams = (FrontendParameters*) data; - const char *f, *s, *m; + const char *f, *f2, *s, *m; - CFrontend::getDelSys(feparams->delsys, feparams->fec_inner, feparams->modulation, f, s, m); uint32_t freq = feparams->frequency/1000; if (CFrontend::isSat(feparams->delsys)) - snprintf(buffer,sizeof(buffer), "%u %c %d %s %s %s (%d/%d/%s)", freq, transponder::pol(feparams->polarization), feparams->symbol_rate/1000, f, s, m, feparams->plp_id, feparams->pls_code, transponder::getPLSMode(feparams->pls_mode).c_str()); + { + CFrontend::getDelSys(feparams->delsys, feparams->fec_inner, feparams->modulation, f, s, m); + snprintf(buffer,sizeof(buffer), "%u %c %d %s %s %s (%d/%d/%s) ", freq, transponder::pol(feparams->polarization), feparams->symbol_rate/1000, f, s, m, feparams->plp_id, feparams->pls_code, transponder::getPLSMode(feparams->pls_mode).c_str()); + } + else if (CFrontend::isCable(feparams->delsys)) + { + CFrontend::getDelSys(feparams->delsys, feparams->fec_inner, feparams->modulation, f, s, m); + snprintf(buffer,sizeof(buffer), "%u %d %s %s %s ", freq, feparams->symbol_rate/1000, f, s, m); + } else - snprintf(buffer,sizeof(buffer), "%u %d %s %s %d", freq, feparams->symbol_rate/1000, s, m, feparams->plp_id); + { + CFrontend::getDelSys(feparams->delsys, feparams->code_rate_HP, feparams->modulation, f, s, m); + CFrontend::getDelSys(feparams->delsys, feparams->code_rate_LP, feparams->modulation, f2, s, m); + snprintf(buffer,sizeof(buffer), "%u %d %s %s %s %d ", freq, CFrontend::getFEBandwidth(feparams->bandwidth)/1000, f, f2, m, feparams->plp_id); + } paintLine(xpos2, ypos_frequency, w - (7*fw), buffer); } break; diff --git a/src/zapit/src/transponder.cpp b/src/zapit/src/transponder.cpp index 6a3046f4e..41dff0a1c 100644 --- a/src/zapit/src/transponder.cpp +++ b/src/zapit/src/transponder.cpp @@ -222,7 +222,7 @@ std::string transponder::description() } else if (CFrontend::isTerr(feparams.delsys)) { CFrontend::getDelSys(feparams.delsys, getFEParams()->code_rate_HP, getFEParams()->modulation, f, s, m); CFrontend::getDelSys(feparams.delsys, getFEParams()->code_rate_LP, getFEParams()->modulation, f2, s, m); - snprintf(buf, sizeof(buf), "%d %d %s %s %s %d ", getFEParams()->frequency, CFrontend::getFEBandwidth(getFEParams()->bandwidth)/1000, f, f2, m, getFEParams()->plp_id); + snprintf(buf, sizeof(buf), "%d %d %s %s %s %d ", getFEParams()->frequency/1000, CFrontend::getFEBandwidth(getFEParams()->bandwidth)/1000, f, f2, m, getFEParams()->plp_id); } return std::string(buf); From 434a9b95fdbed03057995818227926b1d6bb2fc1 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Mon, 4 Dec 2017 22:30:41 +0100 Subject: [PATCH 033/107] fix scannit --- src/zapit/src/scannit.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/zapit/src/scannit.cpp b/src/zapit/src/scannit.cpp index b16a3c83c..8270d6373 100644 --- a/src/zapit/src/scannit.cpp +++ b/src/zapit/src/scannit.cpp @@ -333,6 +333,9 @@ bool CNit::ParseSatelliteDescriptor(SatelliteDeliverySystemDescriptor * sd, Tran memset(&feparams, 0, sizeof(feparams)); feparams.polarization = sd->getPolarization(); feparams.pilot = ZPILOT_AUTO; + feparams.plp_id = 0; + feparams.pls_code = 1; + feparmas.pls_mode = 0; switch (modulation_system) { case 0: // DVB-S From c58122162384b70e159051b35d6ea2da00baef14 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 4 Dec 2017 22:30:41 +0100 Subject: [PATCH 034/107] - zapit/scannit: fix typo in last commit Signed-off-by: Thilo Graf 'last commit' = 7b75b1d9dbc856d4547168ef35084e45304b5e6f --- src/zapit/src/scannit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zapit/src/scannit.cpp b/src/zapit/src/scannit.cpp index 8270d6373..4100cc926 100644 --- a/src/zapit/src/scannit.cpp +++ b/src/zapit/src/scannit.cpp @@ -335,7 +335,7 @@ bool CNit::ParseSatelliteDescriptor(SatelliteDeliverySystemDescriptor * sd, Tran feparams.pilot = ZPILOT_AUTO; feparams.plp_id = 0; feparams.pls_code = 1; - feparmas.pls_mode = 0; + feparams.pls_mode = PLS_Root; switch (modulation_system) { case 0: // DVB-S From 5955e2b80a401528028fc17e0938e89d39a8868b Mon Sep 17 00:00:00 2001 From: Frankenstone Date: Mon, 4 Dec 2017 22:30:41 +0100 Subject: [PATCH 035/107] osd_setup.cpp: fix colormenu shadow Signed-off-by: Thilo Graf alpha was bounded to menue head alpha --- src/gui/osd_setup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp index aec366533..04c1faf5b 100644 --- a/src/gui/osd_setup.cpp +++ b/src/gui/osd_setup.cpp @@ -782,7 +782,7 @@ void COsdSetup::showOsdMenueColorSetup(CMenuWidget *menu_colors) CColorChooser* chFootTextcolor = new CColorChooser(LOCALE_COLORMENU_TEXTCOLOR, &t.menu_Foot_Text_red, &t.menu_Foot_Text_green, &t.menu_Foot_Text_blue, NULL, colorSetupNotifier); CColorChooser* chShadowColor = new CColorChooser(LOCALE_COLORMENU_SHADOW_COLOR, &t.shadow_red, &t.shadow_green, &t.shadow_blue, - &t.menu_Head_alpha, colorSetupNotifier); + &t.shadow_alpha, colorSetupNotifier); menu_colors->addItem( new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_COLORMENUSETUP_MENUHEAD)); From 29cce3fca8d2013eedc7097ec4273cc0e10b18ec Mon Sep 17 00:00:00 2001 From: TangoCash Date: Thu, 7 Dec 2017 00:02:20 +0100 Subject: [PATCH 036/107] fix cable nit Signed-off-by: Thilo Graf This should fix possible unintended multiple scans. --- src/zapit/src/transponder.cpp | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/zapit/src/transponder.cpp b/src/zapit/src/transponder.cpp index 41dff0a1c..1fde68857 100644 --- a/src/zapit/src/transponder.cpp +++ b/src/zapit/src/transponder.cpp @@ -50,24 +50,33 @@ transponder::transponder() bool transponder::operator==(const transponder& t) const { - if (!CFrontend::isTerr(feparams.delsys)) + if (CFrontend::isSat(feparams.delsys)) return ( - (satellitePosition == t.satellitePosition) && - //(transport_stream_id == t.transport_stream_id) && - //(original_network_id == t.original_network_id) && - ((getFEParams()->polarization & 1) == (t.getFEParams()->polarization & 1)) && - (abs((int) getFEParams()->frequency - (int)t.getFEParams()->frequency) <= 3000) && - (getFEParams()->plp_id == t.getFEParams()->plp_id) && - (getFEParams()->pls_mode == t.getFEParams()->pls_mode) && - (getFEParams()->pls_code == t.getFEParams()->pls_code) - ); - return ((satellitePosition == t.satellitePosition) && + (satellitePosition == t.satellitePosition) && + //(transport_stream_id == t.transport_stream_id) && + //(original_network_id == t.original_network_id) && + ((getFEParams()->polarization & 1) == (t.getFEParams()->polarization & 1)) && + (abs((int) getFEParams()->frequency - (int)t.getFEParams()->frequency) <= 3000) && + (getFEParams()->plp_id == t.getFEParams()->plp_id) && + (getFEParams()->pls_mode == t.getFEParams()->pls_mode) && + (getFEParams()->pls_code == t.getFEParams()->pls_code) + ); + else if (CFrontend::isTerr(feparams.delsys)) + return ((satellitePosition == t.satellitePosition) && //(transport_stream_id == t.transport_stream_id) && //(original_network_id == t.original_network_id) && ((getFEParams()->polarization & 1) == (t.getFEParams()->polarization & 1)) && (abs((int) getFEParams()->frequency - (int)t.getFEParams()->frequency) <= 100) && (getFEParams()->plp_id == t.getFEParams()->plp_id) - ); + ); + else + return ( + (satellitePosition == t.satellitePosition) && + //(transport_stream_id == t.transport_stream_id) && + //(original_network_id == t.original_network_id) && + ((getFEParams()->polarization & 1) == (t.getFEParams()->polarization & 1)) && + (abs((int) getFEParams()->frequency - (int)t.getFEParams()->frequency) <= 3000) + ); } bool transponder::compare(const transponder& t) const From ee685c05c2c01ea4a3e4ce3524e92da94ca348c5 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Thu, 7 Dec 2017 12:40:40 +0100 Subject: [PATCH 037/107] - acinclude: remove some double code --- acinclude.m4 | 4 ---- 1 file changed, 4 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 0830e2255..d38e3151d 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -169,9 +169,6 @@ TUXBOX_APPS_DIRECTORY_ONE(plugindir_var,PLUGINDIR_VAR,localstatedir,/var,/tuxbox TUXBOX_APPS_DIRECTORY_ONE(webtvdir_var,WEBTVDIR_VAR,localstatedir,/var,/tuxbox/plugins/webtv, [--with-webtvdir_var=PATH ],[where to find the livestreamScriptPath in /var]) -TUXBOX_APPS_DIRECTORY_ONE(webtvdir,WEBTVDIR,datadir,/share,/tuxbox/neutrino/webtv, - [--with-webtvdir=PATH ],[where to find the webtv content]) - TUXBOX_APPS_DIRECTORY_ONE(plugindir_mnt,PLUGINDIR_MNT,mntdir,/mnt,/plugins, [--with-plugindir_mnt=PATH ],[where to find the the extern plugins]) @@ -214,7 +211,6 @@ AC_SUBST(CONFIGDIR) AC_SUBST(DATADIR) AC_SUBST(FONTDIR) AC_SUBST(FONTDIR_VAR) -AC_SUBST(FLAGDIR) AC_SUBST(GAMESDIR) AC_SUBST(LIBDIR) AC_SUBST(MNTDIR) From 1a4f9ce465187283ceb850d980896ec28a8a0c49 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Thu, 7 Dec 2017 12:40:40 +0100 Subject: [PATCH 038/107] - acinclude: small resort to get the plugin-dir variables consecutively --- acinclude.m4 | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index d38e3151d..f186296bd 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -166,15 +166,18 @@ TUXBOX_APPS_DIRECTORY_ONE(plugindir,PLUGINDIR,libdir,/lib,/tuxbox/plugins, TUXBOX_APPS_DIRECTORY_ONE(plugindir_var,PLUGINDIR_VAR,localstatedir,/var,/tuxbox/plugins, [--with-plugindir_var=PATH ],[where to find the plugins in /var]) -TUXBOX_APPS_DIRECTORY_ONE(webtvdir_var,WEBTVDIR_VAR,localstatedir,/var,/tuxbox/plugins/webtv, - [--with-webtvdir_var=PATH ],[where to find the livestreamScriptPath in /var]) - TUXBOX_APPS_DIRECTORY_ONE(plugindir_mnt,PLUGINDIR_MNT,mntdir,/mnt,/plugins, [--with-plugindir_mnt=PATH ],[where to find the the extern plugins]) TUXBOX_APPS_DIRECTORY_ONE(luaplugindir,LUAPLUGINDIR,libdir,/lib,/tuxbox/luaplugins, [--with-luaplugindir=PATH ],[where to find Lua plugins]) +TUXBOX_APPS_DIRECTORY_ONE(webtvdir,WEBTVDIR,datadir,/share,/tuxbox/neutrino/webtv, + [--with-webtvdir=PATH ],[where to find the webtv content]) + +TUXBOX_APPS_DIRECTORY_ONE(webtvdir_var,WEBTVDIR_VAR,localstatedir,/var,/tuxbox/webtv, + [--with-webtvdir_var=PATH ],[where to find the webtv content in /var]) + TUXBOX_APPS_DIRECTORY_ONE(localedir,LOCALEDIR,datadir,/share, /tuxbox/neutrino/locale, [--with-localedir=PATH ],[where to find the locale]) @@ -216,10 +219,10 @@ AC_SUBST(LIBDIR) AC_SUBST(MNTDIR) AC_SUBST(PLUGINDIR) AC_SUBST(PLUGINDIR_VAR) -AC_SUBST(WEBTVDIR) -AC_SUBST(WEBTVDIR_VAR) AC_SUBST(PLUGINDIR_MNT) AC_SUBST(LUAPLUGINDIR) +AC_SUBST(WEBTVDIR) +AC_SUBST(WEBTVDIR_VAR) AC_SUBST(LOCALEDIR) AC_SUBST(LOCALEDIR_VAR) AC_SUBST(THEMESDIR) From 1e5ac799bedf4d732b6f821e62b064c8a3e613e7 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Thu, 7 Dec 2017 13:08:51 +0100 Subject: [PATCH 039/107] - acinclude/configure: unify usage of AS_HELP_STRING(); minor format changes --- acinclude.m4 | 41 ++++++++++-------- configure.ac | 119 +++++++++++++++++++++++++-------------------------- 2 files changed, 81 insertions(+), 79 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index f186296bd..874795393 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -5,36 +5,40 @@ AM_MAINTAINER_MODE AC_GNU_SOURCE AC_ARG_WITH(target, - [ --with-target=TARGET target for compilation [[native,cdk]]], - [TARGET="$withval"],[TARGET="native"]) + AS_HELP_STRING([--with-target=TARGET], [target for compilation [[native,cdk]]]), + [TARGET="$withval"], + [TARGET="native"]) AC_ARG_WITH(targetprefix, - [ --with-targetprefix=PATH prefix relative to target root (only applicable in cdk mode)], - [TARGET_PREFIX="$withval"],[TARGET_PREFIX=""]) + AS_HELP_STRING([--with-targetprefix=PATH], [prefix relative to target root (only applicable in cdk mode)]), + [TARGET_PREFIX="$withval"], + [TARGET_PREFIX=""]) AC_ARG_WITH(debug, - [ --without-debug disable debugging code], - [DEBUG="$withval"],[DEBUG="yes"]) + AS_HELP_STRING([--without-debug], [disable debugging code]), + [DEBUG="$withval"], + [DEBUG="yes"]) if test "$DEBUG" = "yes"; then DEBUG_CFLAGS="-g3 -ggdb" - AC_DEFINE(DEBUG,1,[Enable debug messages]) + AC_DEFINE(DEBUG, 1, [Enable debug messages]) fi AC_ARG_WITH(libcoolstream-static-dir, - [ --with-libcoolstream-static-dir=PATH path for static libcoolstream], - [LIBCOOLSTREAM_STATIC_DIR="$withval"],[LIBCOOLSTREAM_STATIC_DIR=""]) + AS_HELP_STRING([--with-libcoolstream-static-dir=PATH], [path for static libcoolstream]), + [LIBCOOLSTREAM_STATIC_DIR="$withval"], + [LIBCOOLSTREAM_STATIC_DIR=""]) AC_ARG_ENABLE(libcoolstream-static, - AS_HELP_STRING(--enable-libcoolstream-static,[libcoolstream static linked for testing])) -AM_CONDITIONAL(ENABLE_LIBCOOLSTREAM_STATIC,test "$enable_libcoolstream_static" = "yes") + AS_HELP_STRING([--enable-libcoolstream-static], [libcoolstream static linked for testing])) +AM_CONDITIONAL(ENABLE_LIBCOOLSTREAM_STATIC, test "$enable_libcoolstream_static" = "yes") AC_ARG_ENABLE(reschange, - AS_HELP_STRING(--enable-reschange,enable change the osd resolution (default for hd2))) + AS_HELP_STRING([--enable-reschange], [enable change the osd resolution (default for hd2 and hd51)])) AM_CONDITIONAL(ENABLE_RESCHANGE,test "$enable_reschange" = "yes") if test "$enable_reschange" = "yes"; then - AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION,1,[enable change the osd resolution]) + AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION, 1, [enable change the osd resolution]) fi AC_MSG_CHECKING(target) @@ -155,7 +159,7 @@ TUXBOX_APPS_DIRECTORY_ONE(fontdir_var,FONTDIR_VAR,localstatedir,/var,/tuxbox/fon [--with-fontdir_var=PATH ],[where to find the fonts in /var]) TUXBOX_APPS_DIRECTORY_ONE(gamesdir,GAMESDIR,localstatedir,/var,/tuxbox/games, - [--with-gamesdir=PATH ],[where games data is stored]) + [--with-gamesdir=PATH ],[where to find the games]) TUXBOX_APPS_DIRECTORY_ONE(libdir,LIBDIR,libdir,/lib,/tuxbox, [--with-libdir=PATH ],[where to find the internal libs]) @@ -311,14 +315,15 @@ _TUXBOX_APPS_LIB_PKGCONFIG($1,$2) AC_DEFUN([TUXBOX_BOXTYPE],[ AC_ARG_WITH(boxtype, - [ --with-boxtype valid values: tripledragon,coolstream,spark,azbox,generic,armbox], + AS_HELP_STRING([--with-boxtype], [valid values: tripledragon, coolstream, spark, azbox, generic, armbox]), [case "${withval}" in tripledragon|coolstream|spark|azbox|generic|armbox) BOXTYPE="$withval" ;; *) AC_MSG_ERROR([bad value $withval for --with-boxtype]) ;; - esac], [BOXTYPE="coolstream"]) + esac], + [BOXTYPE="coolstream"]) AC_ARG_WITH(boxmodel, [ --with-boxmodel valid for coolstream: hd1, hd2 @@ -361,8 +366,8 @@ AC_ARG_WITH(boxmodel, *) AC_MSG_ERROR([unsupported value $withval for --with-boxmodel]) ;; - esac], [test "$BOXTYPE" = "coolstream" && BOXMODEL="hd1" || true] - ) + esac], + [test "$BOXTYPE" = "coolstream" && BOXMODEL="hd1" || true]) AC_SUBST(BOXTYPE) AC_SUBST(BOXMODEL) diff --git a/configure.ac b/configure.ac index b476e1633..548d85db0 100644 --- a/configure.ac +++ b/configure.ac @@ -36,23 +36,23 @@ else fi AC_ARG_ENABLE(ffmpegdec, - AS_HELP_STRING(--enable-ffmpegdec,include ffmpeg decoder support), + AS_HELP_STRING([--enable-ffmpegdec], [include ffmpeg decoder support]), ,[enable_ffmpegdec=no]) AM_CONDITIONAL(ENABLE_FFMPEGDEC,test "$enable_ffmpegdec" = "yes") if test "$enable_ffmpegdec" = "yes"; then - AC_DEFINE(ENABLE_FFMPEGDEC,1,[include ffmpeg decoder support]) + AC_DEFINE(ENABLE_FFMPEGDEC, 1, [include ffmpeg decoder support]) fi if test x"$enable_ffmpegdec" != xyes; then -AC_ARG_WITH([tremor], [AS_HELP_STRING([--with-tremor], - [use libvorbisidec instead of libogg/libvorbis])], +AC_ARG_WITH(tremor, + AS_HELP_STRING([--with-tremor], [use libvorbisidec instead of libogg/libvorbis]), [TREMOR="$withval"], [TREMOR=no]) -AC_ARG_WITH([tremor-static], [AS_HELP_STRING([--with-tremor-static], - [use statically linked libvorbisidec instead of libogg/libvorbis])], +AC_ARG_WITH(tremor-static, + AS_HELP_STRING([--with-tremor-static], [use statically linked libvorbisidec instead of libogg/libvorbis]), [TREMOR_STATIC="$withval"], [TREMOR_STATIC=no]) @@ -62,7 +62,7 @@ fi if test "$TREMOR" = "yes"; then TUXBOX_APPS_LIB_PKGCONFIG(VORBISIDEC,vorbisidec) - AC_DEFINE(USE_TREMOR,1,use libvorbisidec/tremor library) + AC_DEFINE(USE_TREMOR, 1, use libvorbisidec/tremor library) fi if test "$TREMOR_STATIC" = "yes"; then @@ -147,7 +147,7 @@ if test "$BOXTYPE" = "coolstream" || test "$BOXTYPE" = "generic" || test "$BOXTYPE" = "tripledragon" || test "$BOXTYPE" = "spark"; then - AC_DEFINE(SCREENSHOT,1,[Define to 1 if the platform supports screenshots]) + AC_DEFINE(SCREENSHOT, 1, [Define to 1 if the platform supports screenshots]) fi TUXBOX_APPS_LIB_PKGCONFIG(SIGC,sigc++-2.0) @@ -165,100 +165,98 @@ TUXBOX_APPS_LIB_PKGCONFIG(SIGC,sigc++-2.0) #TUXBOX_APPS_LIB_PKGCONFIG(TUXTXT,tuxbox-tuxtxt) AC_ARG_ENABLE(keyboard-no-rc, - [ --enable-keyboard-no-rc enable keyboard control, disable rc control], - [AC_DEFINE(KEYBOARD_INSTEAD_OF_REMOTE_CONTROL,1,[enable keyboard control, disable rc control])]) + AS_HELP_STRING([--enable-keyboard-no-rc], [enable keyboard control, disable rc control]), + AC_DEFINE(KEYBOARD_INSTEAD_OF_REMOTE_CONTROL, 1, [enable keyboard control, disable rc control])) AC_ARG_ENABLE(mdev, - [ --enable-mdev disable broken neutrino mount hack, use with mdev], - [AC_DEFINE(ASSUME_MDEV,1,[disable broken neutrino mount hack, use with mdev])]) + AS_HELP_STRING([--enable-mdev], [disable broken neutrino mount hack, use with mdev]), + AC_DEFINE(ASSUME_MDEV, 1, [disable broken neutrino mount hack, use with mdev])) AC_ARG_ENABLE(freesatepg, - [ --enable-freesatepg enable Freesat EPG code (experimental)], - [AC_DEFINE(ENABLE_FREESATEPG,1,[enable Freesat EPG code])]) + AS_HELP_STRING([--enable-freesatepg], [enable Freesat EPG code (experimental)]), + AC_DEFINE(ENABLE_FREESATEPG, 1, [enable Freesat EPG code])) AC_ARG_ENABLE(viasatepg, - [ --enable-viasatepg enable ViaSat EPG code (experimental)], - [AC_DEFINE(ENABLE_VIASATEPG,1,[enable ViaSat EPG code])]) + AS_HELP_STRING([--enable-viasatepg], [enable ViaSat EPG code (experimental)]), + AC_DEFINE(ENABLE_VIASATEPG, 1, [enable ViaSat EPG code])) AC_ARG_ENABLE(fastscan, - [ --enable-fastscan enable Fastscan code)], - [AC_DEFINE(ENABLE_FASTSCAN,1,[enable fastscan code])]) + AS_HELP_STRING([--enable-fastscan], [enable fastscan code]), + AC_DEFINE(ENABLE_FASTSCAN, 1, [enable fastscan code])) AM_CONDITIONAL(ENABLE_FASTSCAN, test "$enable_fastscan" = "yes") AC_ARG_ENABLE(giflib, - AS_HELP_STRING(--enable-giflib,use giflib instead of libungif), + AS_HELP_STRING([--enable-giflib], [use giflib instead of libungif]), ,[enable_giflib=no]) -AM_CONDITIONAL(ENABLE_GIFLIB,test "$enable_giflib" = "yes") +AM_CONDITIONAL(ENABLE_GIFLIB, test "$enable_giflib" = "yes") if test "$enable_giflib" = "yes"; then - AC_DEFINE(ENABLE_GIFLIB,1,[use giflib instead of libungif]) + AC_DEFINE(ENABLE_GIFLIB, 1, [use giflib instead of libungif]) fi -### USE_PUGIXML AC_ARG_ENABLE(pugixml, - AS_HELP_STRING(--enable-pugixml,use pugixml instead of xmltree), + AS_HELP_STRING([--enable-pugixml], [use pugixml instead of xmltree]), ,[enable_pugixml=no]) -AM_CONDITIONAL(USE_PUGIXML,test "$enable_pugixml" = "yes") +AM_CONDITIONAL(USE_PUGIXML, test "$enable_pugixml" = "yes") if test "$enable_pugixml" = "yes"; then - AC_DEFINE(USE_PUGIXML,1,[use pugixml instead of xmltree]) + AC_DEFINE(USE_PUGIXML, 1, [use pugixml instead of xmltree]) fi - -# FLAC - Free Lossless Audio Codec AC_ARG_ENABLE(flac, - AS_HELP_STRING(--enable-flac,include FLAC support), + AS_HELP_STRING([--enable-flac], [include FLAC support]), ,[enable_flac=no]) -AM_CONDITIONAL(ENABLE_FLAC,test "$enable_flac" = "yes") +AM_CONDITIONAL(ENABLE_FLAC, test "$enable_flac" = "yes") if test "$enable_flac" = "yes"; then - AC_DEFINE(ENABLE_FLAC,1,[include FLAC support]) + AC_DEFINE(ENABLE_FLAC, 1, [include FLAC support]) fi -# UPNP - upnp browser (borken right now) AC_ARG_ENABLE(upnp, - AS_HELP_STRING(--disable-upnp,disable UPNP support), + AS_HELP_STRING([--disable-upnp], [disable UPNP support]), ,[enable_upnp=yes]) -AM_CONDITIONAL(ENABLE_UPNP,test "$enable_upnp" = "yes") +AM_CONDITIONAL(ENABLE_UPNP, test "$enable_upnp" = "yes") if test "$enable_upnp" = "yes"; then - AC_DEFINE(ENABLE_UPNP,1,[include UPNP support - currently broken]) + AC_DEFINE(ENABLE_UPNP, 1, [include UPNP support]) fi AC_ARG_ENABLE(extupdate, - AS_HELP_STRING(--enable-extupdate,include extended update routine), + AS_HELP_STRING([--enable-extupdate], [include extended update routine]), ,[enable_extupdate=no]) -AM_CONDITIONAL(ENABLE_EXTUPDATE,test "$enable_extupdate" = "yes") +AM_CONDITIONAL(ENABLE_EXTUPDATE, test "$enable_extupdate" = "yes") if test "$enable_extupdate" = "yes"; then - AC_DEFINE(ENABLE_EXTUPDATE,1,[include extended update routine]) + AC_DEFINE(ENABLE_EXTUPDATE, 1, [include extended update routine]) fi AC_ARG_WITH(stb-hal-includes, - [ --with-stb-hal-includes=PATH path for libstb-hal includes [[NONE]]], - [STB_HAL_INC="$withval"],[STB_HAL_INC=""]) + AS_HELP_STRING([--with-stb-hal-includes=PATH], [path for libstb-hal includes [[NONE]]]), + [STB_HAL_INC="$withval"], + [STB_HAL_INC=""]) + AC_ARG_WITH(stb-hal-build, - [ --with-stb-hal-build=PATH path where libstb-hal is built [[NONE]]], - [STB_HAL_LIB="-L$withval"],[STB_HAL_LIB=""]) + AS_HELP_STRING([--with-stb-hal-build=PATH], [path where libstb-hal is built [[NONE]]]), + [STB_HAL_LIB="-L$withval"], + [STB_HAL_LIB=""]) AM_CONDITIONAL(USE_STB_HAL, test "$BOXTYPE" != "coolstream") if test "$BOXTYPE" != coolstream; then - AC_DEFINE(USE_STB_HAL, 1,[use libstb-hal]) + AC_DEFINE(USE_STB_HAL, 1, [use libstb-hal]) if test "$STB_HAL_INC" = ""; then AC_MSG_ERROR([need libstb-hal includes path with --with-stb-hal-includes=...]) fi HWLIB_CFLAGS="-I$STB_HAL_INC" fi -# Lua - embeddable scripting language AC_ARG_ENABLE(lua, - AS_HELP_STRING(--disable-lua,disable Lua support), + AS_HELP_STRING([--disable-lua], [disable Lua support]), ,[enable_lua=yes]) -AM_CONDITIONAL(ENABLE_LUA,test "$enable_lua" = "yes") +AM_CONDITIONAL(ENABLE_LUA, test "$enable_lua" = "yes") if test "$enable_lua" = "yes"; then - AC_DEFINE(ENABLE_LUA,1,[include Lua support]) + AC_DEFINE(ENABLE_LUA, 1, [include Lua support]) PKG_CHECK_MODULES([LUA], [lua >= 5.2], echo "lua >= 5.2 found", [ PKG_CHECK_MODULES([LUA], [lua5.2 >= 5.2], echo "lua5.2 found", [ echo "=> lualib not found, assuming static lua in linker path..." @@ -267,29 +265,28 @@ if test "$enable_lua" = "yes"; then ]) ]) # hack... -AC_DEFINE(LUA_COMPAT_5_2,1,[does not really belong in config.h, but is needed for build with lua 5.3+]) +AC_DEFINE(LUA_COMPAT_5_2, 1, [does not really belong in config.h, but is needed for build with lua 5.3+]) fi AC_ARG_ENABLE(cleanup, - [ --enable-cleanup enable cleanup on exit], - [AC_DEFINE(EXIT_CLEANUP,1,[enable cleanup on exit])]) + AS_HELP_STRING([--enable-cleanup], [enable cleanup on exit]), + AC_DEFINE(EXIT_CLEANUP, 1, [enable cleanup on exit])) AC_ARG_ENABLE(pip, - [ --enable-pip enable picture in picture support], - [AC_DEFINE(ENABLE_PIP,1,[enable picture in picture support])]) - + AS_HELP_STRING([--enable-pip], [enable picture in picture support]), + AC_DEFINE(ENABLE_PIP, 1, [enable picture in picture support])) AC_ARG_ENABLE(testing, - AS_HELP_STRING(--enable-testing,include devel code parts for neutrino tests)) + AS_HELP_STRING([--enable-testing], [include dev code parts for neutrino tests])) -AM_CONDITIONAL(ENABLE_TESTING,test "$enable_testing" = "yes") +AM_CONDITIONAL(ENABLE_TESTING, test "$enable_testing" = "yes") if test "$enable_testing" = "yes"; then - AC_DEFINE(ENABLE_TESTING,1,[include devel code parts for neutrino tests - not recommended for general users!]) + AC_DEFINE(ENABLE_TESTING, 1, [include dev code parts for neutrino tests - not recommended for general users!]) fi -AC_ARG_ENABLE([fribidi], - AS_HELP_STRING([--enable-fribidi], [enable fribidi support]) -) +AC_ARG_ENABLE(fribidi, + AS_HELP_STRING([--enable-fribidi], [enable fribidi support])) + AM_CONDITIONAL(ENABLE_FRIBIDI, test "$enable_fribidi" = "yes") AS_IF([test "$enable_fribidi" = "yes"], AC_DEFINE(ENABLE_FRIBIDI, 1, [enable fribidi support]) @@ -297,16 +294,16 @@ AS_IF([test "$enable_fribidi" = "yes"], if test "$BOXTYPE" = "coolstream"; then if test -e ${srcdir}/lib/hardware/coolstream/hd1/libcoolstream/nevis_ir.h; then - AC_DEFINE(HAVE_COOLSTREAM_NEVIS_IR_H,1,[Define to 1 if you have the header file.]) + AC_DEFINE(HAVE_COOLSTREAM_NEVIS_IR_H, 1, [Define to 1 if you have the header file.]) fi HWLIB_CFLAGS='-I$(top_srcdir)/lib/hardware/coolstream/hd1/libcoolstream' if test "$BOXMODEL" = "hd2"; then if test -e ${srcdir}/lib/hardware/coolstream/hd2/libcoolstream/cs_ir_generic.h; then - AC_DEFINE(HAVE_COOLSTREAM_CS_IR_GENERIC_H,1,[Define to 1 if you have the header file.]) + AC_DEFINE(HAVE_COOLSTREAM_CS_IR_GENERIC_H, 1, [Define to 1 if you have the header file.]) fi if test -e ${srcdir}/lib/hardware/coolstream/hd2/libcoolstream/cs_frontpanel.h; then - AC_DEFINE(HAVE_COOLSTREAM_CS_FRONTPANEL_H,1,[Define to 1 if you have the header file.]) + AC_DEFINE(HAVE_COOLSTREAM_CS_FRONTPANEL_H, 1, [Define to 1 if you have the header file.]) fi HWLIB_CFLAGS='-I$(top_srcdir)/lib/hardware/coolstream/hd2/libcoolstream' fi From 7926c08093f116974d367b50100beecb550eb70e Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Thu, 7 Dec 2017 13:08:51 +0100 Subject: [PATCH 040/107] - configure: cleanup from commented code --- configure.ac | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/configure.ac b/configure.ac index 548d85db0..498529e15 100644 --- a/configure.ac +++ b/configure.ac @@ -152,18 +152,6 @@ fi TUXBOX_APPS_LIB_PKGCONFIG(SIGC,sigc++-2.0) -#TUXBOX_APPS_LIB_PKGCONFIG(CONFIGFILE,tuxbox-configfile) -#TUXBOX_APPS_LIB_PKGCONFIG(CONNECTION,tuxbox-connection) -#TUXBOX_APPS_LIB_PKGCONFIG(EVENTSERVER,tuxbox-eventserver) -#TUXBOX_APPS_LIB_PKGCONFIG(LCDDISPLAY,tuxbox-lcddisplay) -#TUXBOX_APPS_LIB_PKGCONFIG(LIRCDCLIENT,tuxbox-lircdclient) -#TUXBOX_APPS_LIB_PKGCONFIG(NET,tuxbox-net) -#TUXBOX_APPS_LIB_PKGCONFIG(PLUGINS,tuxbox-plugins) -#TUXBOX_APPS_LIB_PKGCONFIG(TUXBOX,tuxbox) -#TUXBOX_APPS_LIB_PKGCONFIG(UCODES,tuxbox-ucodes) -#TUXBOX_APPS_LIB_PKGCONFIG(MPEGTOOLS,tuxbox-mpegtools) -#TUXBOX_APPS_LIB_PKGCONFIG(TUXTXT,tuxbox-tuxtxt) - AC_ARG_ENABLE(keyboard-no-rc, AS_HELP_STRING([--enable-keyboard-no-rc], [enable keyboard control, disable rc control]), AC_DEFINE(KEYBOARD_INSTEAD_OF_REMOTE_CONTROL, 1, [enable keyboard control, disable rc control])) From 9511a086be0ba04d13d55653f6141636913b46c1 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Thu, 7 Dec 2017 13:08:51 +0100 Subject: [PATCH 041/107] - acinclude: replace custom formatting in TUXBOX_APPS_DIRECTORY_ONE with AS_HELP_STRING() --- acinclude.m4 | 92 ++++++++++++++++++++++++++-------------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 874795393..6087f7448 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -25,7 +25,7 @@ if test "$DEBUG" = "yes"; then fi AC_ARG_WITH(libcoolstream-static-dir, - AS_HELP_STRING([--with-libcoolstream-static-dir=PATH], [path for static libcoolstream]), + AS_HELP_STRING([--with-libcoolstream-static-dir=PATH], [path for static libcoolstream [[NONE]]]), [LIBCOOLSTREAM_STATIC_DIR="$withval"], [LIBCOOLSTREAM_STATIC_DIR=""]) @@ -104,7 +104,7 @@ AC_DEFUN([TUXBOX_EXPAND_VARIABLE],[__$1="$2" ]) AC_DEFUN([TUXBOX_APPS_DIRECTORY_ONE],[ -AC_ARG_WITH($1,[ $6$7 [[PREFIX$4$5]]],[ +AC_ARG_WITH($1, AS_HELP_STRING([$6], [$7 [[PREFIX$4$5]]], [32], [79]), [ _$2=$withval if test "$TARGET" = "cdk"; then $2=`eval echo "$TARGET_PREFIX$withval"` # no indirection possible IMNSHO @@ -146,71 +146,71 @@ else mntdir="/mnt" # hack fi -TUXBOX_APPS_DIRECTORY_ONE(configdir,CONFIGDIR,localstatedir,/var,/tuxbox/config, - [--with-configdir=PATH ],[where to find the config files]) +TUXBOX_APPS_DIRECTORY_ONE(configdir, CONFIGDIR, localstatedir, /var, /tuxbox/config, + [--with-configdir=PATH], [where to find the config files]) -TUXBOX_APPS_DIRECTORY_ONE(datadir,DATADIR,datadir,/share,/tuxbox, - [--with-datadir=PATH ],[where to find data]) +TUXBOX_APPS_DIRECTORY_ONE(datadir, DATADIR, datadir, /share, /tuxbox, + [--with-datadir=PATH], [where to find data]) -TUXBOX_APPS_DIRECTORY_ONE(fontdir,FONTDIR,datadir,/share,/fonts, - [--with-fontdir=PATH ],[where to find the fonts]) +TUXBOX_APPS_DIRECTORY_ONE(fontdir, FONTDIR, datadir, /share, /fonts, + [--with-fontdir=PATH], [where to find the fonts]) -TUXBOX_APPS_DIRECTORY_ONE(fontdir_var,FONTDIR_VAR,localstatedir,/var,/tuxbox/fonts, - [--with-fontdir_var=PATH ],[where to find the fonts in /var]) +TUXBOX_APPS_DIRECTORY_ONE(fontdir_var, FONTDIR_VAR, localstatedir, /var, /tuxbox/fonts, + [--with-fontdir_var=PATH], [where to find the fonts in /var]) -TUXBOX_APPS_DIRECTORY_ONE(gamesdir,GAMESDIR,localstatedir,/var,/tuxbox/games, - [--with-gamesdir=PATH ],[where to find the games]) +TUXBOX_APPS_DIRECTORY_ONE(gamesdir, GAMESDIR, localstatedir, /var, /tuxbox/games, + [--with-gamesdir=PATH], [where to find the games]) -TUXBOX_APPS_DIRECTORY_ONE(libdir,LIBDIR,libdir,/lib,/tuxbox, - [--with-libdir=PATH ],[where to find the internal libs]) +TUXBOX_APPS_DIRECTORY_ONE(libdir, LIBDIR, libdir, /lib, /tuxbox, + [--with-libdir=PATH], [where to find the internal libs]) -TUXBOX_APPS_DIRECTORY_ONE(plugindir,PLUGINDIR,libdir,/lib,/tuxbox/plugins, - [--with-plugindir=PATH ],[where to find the plugins]) +TUXBOX_APPS_DIRECTORY_ONE(plugindir, PLUGINDIR, libdir, /lib, /tuxbox/plugins, + [--with-plugindir=PATH], [where to find the plugins]) -TUXBOX_APPS_DIRECTORY_ONE(plugindir_var,PLUGINDIR_VAR,localstatedir,/var,/tuxbox/plugins, - [--with-plugindir_var=PATH ],[where to find the plugins in /var]) +TUXBOX_APPS_DIRECTORY_ONE(plugindir_var, PLUGINDIR_VAR, localstatedir, /var, /tuxbox/plugins, + [--with-plugindir_var=PATH], [where to find the plugins in /var]) -TUXBOX_APPS_DIRECTORY_ONE(plugindir_mnt,PLUGINDIR_MNT,mntdir,/mnt,/plugins, - [--with-plugindir_mnt=PATH ],[where to find the the extern plugins]) +TUXBOX_APPS_DIRECTORY_ONE(plugindir_mnt, PLUGINDIR_MNT, mntdir, /mnt, /plugins, + [--with-plugindir_mnt=PATH], [where to find the the extern plugins]) -TUXBOX_APPS_DIRECTORY_ONE(luaplugindir,LUAPLUGINDIR,libdir,/lib,/tuxbox/luaplugins, - [--with-luaplugindir=PATH ],[where to find Lua plugins]) +TUXBOX_APPS_DIRECTORY_ONE(luaplugindir, LUAPLUGINDIR, libdir, /lib, /tuxbox/luaplugins, + [--with-luaplugindir=PATH], [where to find Lua plugins]) -TUXBOX_APPS_DIRECTORY_ONE(webtvdir,WEBTVDIR,datadir,/share,/tuxbox/neutrino/webtv, - [--with-webtvdir=PATH ],[where to find the webtv content]) +TUXBOX_APPS_DIRECTORY_ONE(webtvdir, WEBTVDIR, datadir, /share, /tuxbox/neutrino/webtv, + [--with-webtvdir=PATH], [where to find the webtv content]) -TUXBOX_APPS_DIRECTORY_ONE(webtvdir_var,WEBTVDIR_VAR,localstatedir,/var,/tuxbox/webtv, - [--with-webtvdir_var=PATH ],[where to find the webtv content in /var]) +TUXBOX_APPS_DIRECTORY_ONE(webtvdir_var, WEBTVDIR_VAR, localstatedir, /var, /tuxbox/webtv, + [--with-webtvdir_var=PATH], [where to find the webtv content in /var]) -TUXBOX_APPS_DIRECTORY_ONE(localedir,LOCALEDIR,datadir,/share, /tuxbox/neutrino/locale, - [--with-localedir=PATH ],[where to find the locale]) +TUXBOX_APPS_DIRECTORY_ONE(localedir, LOCALEDIR,datadir, /share, /tuxbox/neutrino/locale, + [--with-localedir=PATH], [where to find the locale]) -TUXBOX_APPS_DIRECTORY_ONE(localedir_var,LOCALEDIR_VAR,localstatedir,/var,/tuxbox/locale, - [--with-localedir_var=PATH ],[where to find the locale in /var]) +TUXBOX_APPS_DIRECTORY_ONE(localedir_var, LOCALEDIR_VAR, localstatedir, /var, /tuxbox/locale, + [--with-localedir_var=PATH], [where to find the locale in /var]) -TUXBOX_APPS_DIRECTORY_ONE(themesdir,THEMESDIR,datadir,/share, /tuxbox/neutrino/themes, - [--with-themesdir=PATH ],[where to find the themes]) +TUXBOX_APPS_DIRECTORY_ONE(themesdir, THEMESDIR, datadir, /share, /tuxbox/neutrino/themes, + [--with-themesdir=PATH], [where to find the themes]) -TUXBOX_APPS_DIRECTORY_ONE(themesdir_var,THEMESDIR_VAR,localstatedir,/var,/tuxbox/themes, - [--with-themesdir_var=PATH ],[where to find the themes in /var]) +TUXBOX_APPS_DIRECTORY_ONE(themesdir_var, THEMESDIR_VAR, localstatedir, /var, /tuxbox/themes, + [--with-themesdir_var=PATH], [where to find the themes in /var]) -TUXBOX_APPS_DIRECTORY_ONE(iconsdir,ICONSDIR,datadir,/share, /tuxbox/neutrino/icons, - [--with-iconsdir=PATH ],[where to find the icons]) +TUXBOX_APPS_DIRECTORY_ONE(iconsdir, ICONSDIR, datadir, /share, /tuxbox/neutrino/icons, + [--with-iconsdir=PATH], [where to find the icons]) -TUXBOX_APPS_DIRECTORY_ONE(iconsdir_var,ICONSDIR_VAR,localstatedir,/var,/tuxbox/icons, - [--with-iconsdir_var=PATH ],[where to find the icons in /var]) +TUXBOX_APPS_DIRECTORY_ONE(iconsdir_var, ICONSDIR_VAR, localstatedir, /var, /tuxbox/icons, + [--with-iconsdir_var=PATH], [where to find the icons in /var]) -TUXBOX_APPS_DIRECTORY_ONE(private_httpddir,PRIVATE_HTTPDDIR,datadir,/share,/tuxbox/neutrino/httpd, - [--with-private_httpddir=PATH ],[where to find the the private httpd files]) +TUXBOX_APPS_DIRECTORY_ONE(private_httpddir, PRIVATE_HTTPDDIR, datadir, /share, /tuxbox/neutrino/httpd, + [--with-private_httpddir=PATH], [where to find the the private httpd files]) -TUXBOX_APPS_DIRECTORY_ONE(public_httpddir,PUBLIC_HTTPDDIR,localstatedir,/var,/tuxbox/httpd, - [--with-public_httpddir=PATH ],[where to find the the public httpd files]) +TUXBOX_APPS_DIRECTORY_ONE(public_httpddir, PUBLIC_HTTPDDIR, localstatedir, /var, /tuxbox/httpd, + [--with-public_httpddir=PATH], [where to find the the public httpd files]) -TUXBOX_APPS_DIRECTORY_ONE(hosted_httpddir,HOSTED_HTTPDDIR,mntdir,/mnt,/hosted, - [--with-hosted_httpddir=PATH ],[where to find the the hosted files]) +TUXBOX_APPS_DIRECTORY_ONE(hosted_httpddir, HOSTED_HTTPDDIR, mntdir, /mnt, /hosted, + [--with-hosted_httpddir=PATH], [where to find the the hosted files]) -TUXBOX_APPS_DIRECTORY_ONE(flagdir,FLAGDIR,localstatedir,/var,/etc, - [--with-flagdir=PATH ],[where to find flagfiles]) +TUXBOX_APPS_DIRECTORY_ONE(flagdir, FLAGDIR, localstatedir, /var, /etc, + [--with-flagdir=PATH], [where to find flagfiles]) ]) dnl automake <= 1.6 needs this specifications From d50c5bfdcef8193f811a6dee7170ed81ba8031f7 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sun, 10 Dec 2017 14:44:50 +0100 Subject: [PATCH 042/107] femanager.h increase max adapters to 4 --- src/zapit/include/zapit/femanager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zapit/include/zapit/femanager.h b/src/zapit/include/zapit/femanager.h index 95e504b2e..10890d40d 100644 --- a/src/zapit/include/zapit/femanager.h +++ b/src/zapit/include/zapit/femanager.h @@ -32,7 +32,7 @@ #include #define MAX_FE 4 -#define MAX_ADAPTERS 1 +#define MAX_ADAPTERS 4 //#define DYNAMIC_DEMUX //#define MAKE_FE_KEY(adapter, number) ((adapter << 8) | (number & 0xFF)) From d12e43ce05bd45c1dc4db7e1dc511210104932b3 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 13:01:37 +0100 Subject: [PATCH 043/107] - acinclude/configure: show defaults Signed-off-by: Thilo Graf --- acinclude.m4 | 19 ++++++++----------- configure.ac | 46 +++++++++++++++++++++++----------------------- 2 files changed, 31 insertions(+), 34 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 6087f7448..0c7b3ed1b 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -15,13 +15,13 @@ AC_ARG_WITH(targetprefix, [TARGET_PREFIX=""]) AC_ARG_WITH(debug, - AS_HELP_STRING([--without-debug], [disable debugging code]), + AS_HELP_STRING([--without-debug], [disable debugging code @<:@default=no@:>@]), [DEBUG="$withval"], [DEBUG="yes"]) if test "$DEBUG" = "yes"; then DEBUG_CFLAGS="-g3 -ggdb" - AC_DEFINE(DEBUG, 1, [Enable debug messages]) + AC_DEFINE(DEBUG, 1, [enable debugging code]) fi AC_ARG_WITH(libcoolstream-static-dir, @@ -30,16 +30,13 @@ AC_ARG_WITH(libcoolstream-static-dir, [LIBCOOLSTREAM_STATIC_DIR=""]) AC_ARG_ENABLE(libcoolstream-static, - AS_HELP_STRING([--enable-libcoolstream-static], [libcoolstream static linked for testing])) + AS_HELP_STRING([--enable-libcoolstream-static], [libcoolstream static linked for testing @<:@default=no@:>@])) AM_CONDITIONAL(ENABLE_LIBCOOLSTREAM_STATIC, test "$enable_libcoolstream_static" = "yes") AC_ARG_ENABLE(reschange, - AS_HELP_STRING([--enable-reschange], [enable change the osd resolution (default for hd2 and hd51)])) - -AM_CONDITIONAL(ENABLE_RESCHANGE,test "$enable_reschange" = "yes") -if test "$enable_reschange" = "yes"; then - AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION, 1, [enable change the osd resolution]) -fi + AS_HELP_STRING([--enable-reschange], [enable change the osd resolution @<:@default for hd2 and hd51@:>@]), + AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION, 1, [enable change the osd resolution])) +AM_CONDITIONAL(ENABLE_RESCHANGE, test "$enable_reschange" = "yes") AC_MSG_CHECKING(target) @@ -403,9 +400,9 @@ if test "$BOXMODEL" = "hd1"; then AC_DEFINE(BOXMODEL_CS_HD1, 1, [coolstream hd1/neo/neo2/zee]) elif test "$BOXMODEL" = "hd2"; then AC_DEFINE(BOXMODEL_CS_HD2, 1, [coolstream tank/trinity/trinity v2/trinity duo/zee2/link]) - AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION,1,[enable change the osd resolution]) + AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION, 1, [enable change the osd resolution]) elif test "$BOXMODEL" = "hd51"; then - AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION,1,[enable change the osd resolution]) + AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION, 1, [enable change the osd resolution]) elif test "$BOXMODEL" = "raspi"; then AC_DEFINE(BOXMODEL_RASPI, 1, [Raspberry pi]) fi diff --git a/configure.ac b/configure.ac index 498529e15..1799b6fcd 100644 --- a/configure.ac +++ b/configure.ac @@ -36,7 +36,7 @@ else fi AC_ARG_ENABLE(ffmpegdec, - AS_HELP_STRING([--enable-ffmpegdec], [include ffmpeg decoder support]), + AS_HELP_STRING([--enable-ffmpegdec], [enable ffmpeg decoder support @<:@default=no@:>@]), ,[enable_ffmpegdec=no]) AM_CONDITIONAL(ENABLE_FFMPEGDEC,test "$enable_ffmpegdec" = "yes") @@ -47,12 +47,12 @@ fi if test x"$enable_ffmpegdec" != xyes; then AC_ARG_WITH(tremor, - AS_HELP_STRING([--with-tremor], [use libvorbisidec instead of libogg/libvorbis]), + AS_HELP_STRING([--with-tremor], [use libvorbisidec instead of libogg/libvorbis @<:@default=no@:>@]), [TREMOR="$withval"], [TREMOR=no]) AC_ARG_WITH(tremor-static, - AS_HELP_STRING([--with-tremor-static], [use statically linked libvorbisidec instead of libogg/libvorbis]), + AS_HELP_STRING([--with-tremor-static], [use statically linked libvorbisidec instead of libogg/libvorbis @<:@default=no@:>@]), [TREMOR_STATIC="$withval"], [TREMOR_STATIC=no]) @@ -153,29 +153,29 @@ fi TUXBOX_APPS_LIB_PKGCONFIG(SIGC,sigc++-2.0) AC_ARG_ENABLE(keyboard-no-rc, - AS_HELP_STRING([--enable-keyboard-no-rc], [enable keyboard control, disable rc control]), + AS_HELP_STRING([--enable-keyboard-no-rc], [enable keyboard control, disable rc control @<:@default=no@:>@]), AC_DEFINE(KEYBOARD_INSTEAD_OF_REMOTE_CONTROL, 1, [enable keyboard control, disable rc control])) AC_ARG_ENABLE(mdev, - AS_HELP_STRING([--enable-mdev], [disable broken neutrino mount hack, use with mdev]), - AC_DEFINE(ASSUME_MDEV, 1, [disable broken neutrino mount hack, use with mdev])) + AS_HELP_STRING([--enable-mdev], [use mdev instead of broken neutrino mount hack @<:@default=no@:>@]), + AC_DEFINE(ASSUME_MDEV, 1, [use mdev instead of broken neutrino mount hack])) AC_ARG_ENABLE(freesatepg, - AS_HELP_STRING([--enable-freesatepg], [enable Freesat EPG code (experimental)]), + AS_HELP_STRING([--enable-freesatepg], [enable Freesat EPG code @<:@default=no@:>@]), AC_DEFINE(ENABLE_FREESATEPG, 1, [enable Freesat EPG code])) AC_ARG_ENABLE(viasatepg, - AS_HELP_STRING([--enable-viasatepg], [enable ViaSat EPG code (experimental)]), + AS_HELP_STRING([--enable-viasatepg], [enable ViaSat EPG code @<:@default=no@:>@]), AC_DEFINE(ENABLE_VIASATEPG, 1, [enable ViaSat EPG code])) AC_ARG_ENABLE(fastscan, - AS_HELP_STRING([--enable-fastscan], [enable fastscan code]), + AS_HELP_STRING([--enable-fastscan], [enable fastscan code @<:@default=no@:>@]), AC_DEFINE(ENABLE_FASTSCAN, 1, [enable fastscan code])) AM_CONDITIONAL(ENABLE_FASTSCAN, test "$enable_fastscan" = "yes") AC_ARG_ENABLE(giflib, - AS_HELP_STRING([--enable-giflib], [use giflib instead of libungif]), + AS_HELP_STRING([--enable-giflib], [use giflib instead of libungif @<:@default=no@:>@]), ,[enable_giflib=no]) AM_CONDITIONAL(ENABLE_GIFLIB, test "$enable_giflib" = "yes") @@ -184,7 +184,7 @@ if test "$enable_giflib" = "yes"; then fi AC_ARG_ENABLE(pugixml, - AS_HELP_STRING([--enable-pugixml], [use pugixml instead of xmltree]), + AS_HELP_STRING([--enable-pugixml], [use pugixml instead of xmltree @<:@default=no@:>@]), ,[enable_pugixml=no]) AM_CONDITIONAL(USE_PUGIXML, test "$enable_pugixml" = "yes") @@ -193,30 +193,30 @@ if test "$enable_pugixml" = "yes"; then fi AC_ARG_ENABLE(flac, - AS_HELP_STRING([--enable-flac], [include FLAC support]), + AS_HELP_STRING([--enable-flac], [enable FLAC support @<:@default=no@:>@]), ,[enable_flac=no]) AM_CONDITIONAL(ENABLE_FLAC, test "$enable_flac" = "yes") if test "$enable_flac" = "yes"; then - AC_DEFINE(ENABLE_FLAC, 1, [include FLAC support]) + AC_DEFINE(ENABLE_FLAC, 1, [enable FLAC support]) fi AC_ARG_ENABLE(upnp, - AS_HELP_STRING([--disable-upnp], [disable UPNP support]), + AS_HELP_STRING([--disable-upnp], [disable UPNP support @<:@default=no@:>@]), ,[enable_upnp=yes]) AM_CONDITIONAL(ENABLE_UPNP, test "$enable_upnp" = "yes") if test "$enable_upnp" = "yes"; then - AC_DEFINE(ENABLE_UPNP, 1, [include UPNP support]) + AC_DEFINE(ENABLE_UPNP, 1, [enable UPNP support]) fi AC_ARG_ENABLE(extupdate, - AS_HELP_STRING([--enable-extupdate], [include extended update routine]), + AS_HELP_STRING([--enable-extupdate], [enable extended update routine @<:@default=no@:>@]), ,[enable_extupdate=no]) AM_CONDITIONAL(ENABLE_EXTUPDATE, test "$enable_extupdate" = "yes") if test "$enable_extupdate" = "yes"; then - AC_DEFINE(ENABLE_EXTUPDATE, 1, [include extended update routine]) + AC_DEFINE(ENABLE_EXTUPDATE, 1, [enable extended update routine]) fi AC_ARG_WITH(stb-hal-includes, @@ -239,7 +239,7 @@ if test "$BOXTYPE" != coolstream; then fi AC_ARG_ENABLE(lua, - AS_HELP_STRING([--disable-lua], [disable Lua support]), + AS_HELP_STRING([--disable-lua], [disable Lua support @<:@default=no@:>@]), ,[enable_lua=yes]) AM_CONDITIONAL(ENABLE_LUA, test "$enable_lua" = "yes") @@ -257,23 +257,23 @@ AC_DEFINE(LUA_COMPAT_5_2, 1, [does not really belong in config.h, but is needed fi AC_ARG_ENABLE(cleanup, - AS_HELP_STRING([--enable-cleanup], [enable cleanup on exit]), + AS_HELP_STRING([--enable-cleanup], [enable cleanup on exit @<:@default=no@:>@]), AC_DEFINE(EXIT_CLEANUP, 1, [enable cleanup on exit])) AC_ARG_ENABLE(pip, - AS_HELP_STRING([--enable-pip], [enable picture in picture support]), + AS_HELP_STRING([--enable-pip], [enable picture in picture support @<:@default=no@:>@]), AC_DEFINE(ENABLE_PIP, 1, [enable picture in picture support])) AC_ARG_ENABLE(testing, - AS_HELP_STRING([--enable-testing], [include dev code parts for neutrino tests])) + AS_HELP_STRING([--enable-testing], [enable development code @<:@default=no@:>@])) AM_CONDITIONAL(ENABLE_TESTING, test "$enable_testing" = "yes") if test "$enable_testing" = "yes"; then - AC_DEFINE(ENABLE_TESTING, 1, [include dev code parts for neutrino tests - not recommended for general users!]) + AC_DEFINE(ENABLE_TESTING, 1, [enable development code]) fi AC_ARG_ENABLE(fribidi, - AS_HELP_STRING([--enable-fribidi], [enable fribidi support])) + AS_HELP_STRING([--enable-fribidi], [enable fribidi support @<:@default=no@:>@])) AM_CONDITIONAL(ENABLE_FRIBIDI, test "$enable_fribidi" = "yes") AS_IF([test "$enable_fribidi" = "yes"], From 7981682173605b102c516098798186012d66db12 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 13:01:37 +0100 Subject: [PATCH 044/107] - configure: unify and simplify some AC_ARG_ENABLE() calls Signed-off-by: Thilo Graf --- configure.ac | 47 ++++++++++------------------------------------- 1 file changed, 10 insertions(+), 37 deletions(-) diff --git a/configure.ac b/configure.ac index 1799b6fcd..dc18c08d7 100644 --- a/configure.ac +++ b/configure.ac @@ -37,12 +37,8 @@ fi AC_ARG_ENABLE(ffmpegdec, AS_HELP_STRING([--enable-ffmpegdec], [enable ffmpeg decoder support @<:@default=no@:>@]), - ,[enable_ffmpegdec=no]) - + AC_DEFINE(ENABLE_FFMPEGDEC, 1, [include ffmpeg decoder support])) AM_CONDITIONAL(ENABLE_FFMPEGDEC,test "$enable_ffmpegdec" = "yes") -if test "$enable_ffmpegdec" = "yes"; then - AC_DEFINE(ENABLE_FFMPEGDEC, 1, [include ffmpeg decoder support]) -fi if test x"$enable_ffmpegdec" != xyes; then @@ -171,35 +167,22 @@ AC_ARG_ENABLE(viasatepg, AC_ARG_ENABLE(fastscan, AS_HELP_STRING([--enable-fastscan], [enable fastscan code @<:@default=no@:>@]), AC_DEFINE(ENABLE_FASTSCAN, 1, [enable fastscan code])) - AM_CONDITIONAL(ENABLE_FASTSCAN, test "$enable_fastscan" = "yes") AC_ARG_ENABLE(giflib, AS_HELP_STRING([--enable-giflib], [use giflib instead of libungif @<:@default=no@:>@]), - ,[enable_giflib=no]) - + AC_DEFINE(ENABLE_GIFLIB, 1, [use giflib instead of libungif])) AM_CONDITIONAL(ENABLE_GIFLIB, test "$enable_giflib" = "yes") -if test "$enable_giflib" = "yes"; then - AC_DEFINE(ENABLE_GIFLIB, 1, [use giflib instead of libungif]) -fi AC_ARG_ENABLE(pugixml, - AS_HELP_STRING([--enable-pugixml], [use pugixml instead of xmltree @<:@default=no@:>@]), - ,[enable_pugixml=no]) - + AS_HELP_STRING([--enable-pugixml], [use pugixml instead of xmltree @<:@default=no@:>@]), + AC_DEFINE(USE_PUGIXML, 1, [use pugixml instead of xmltree])) AM_CONDITIONAL(USE_PUGIXML, test "$enable_pugixml" = "yes") -if test "$enable_pugixml" = "yes"; then - AC_DEFINE(USE_PUGIXML, 1, [use pugixml instead of xmltree]) -fi AC_ARG_ENABLE(flac, AS_HELP_STRING([--enable-flac], [enable FLAC support @<:@default=no@:>@]), - ,[enable_flac=no]) - + AC_DEFINE(ENABLE_FLAC, 1, [enable FLAC support])) AM_CONDITIONAL(ENABLE_FLAC, test "$enable_flac" = "yes") -if test "$enable_flac" = "yes"; then - AC_DEFINE(ENABLE_FLAC, 1, [enable FLAC support]) -fi AC_ARG_ENABLE(upnp, AS_HELP_STRING([--disable-upnp], [disable UPNP support @<:@default=no@:>@]), @@ -212,12 +195,8 @@ fi AC_ARG_ENABLE(extupdate, AS_HELP_STRING([--enable-extupdate], [enable extended update routine @<:@default=no@:>@]), - ,[enable_extupdate=no]) - + AC_DEFINE(ENABLE_EXTUPDATE, 1, [enable extended update routine])) AM_CONDITIONAL(ENABLE_EXTUPDATE, test "$enable_extupdate" = "yes") -if test "$enable_extupdate" = "yes"; then - AC_DEFINE(ENABLE_EXTUPDATE, 1, [enable extended update routine]) -fi AC_ARG_WITH(stb-hal-includes, AS_HELP_STRING([--with-stb-hal-includes=PATH], [path for libstb-hal includes [[NONE]]]), @@ -265,20 +244,14 @@ AC_ARG_ENABLE(pip, AC_DEFINE(ENABLE_PIP, 1, [enable picture in picture support])) AC_ARG_ENABLE(testing, - AS_HELP_STRING([--enable-testing], [enable development code @<:@default=no@:>@])) - + AS_HELP_STRING([--enable-testing], [enable development code @<:@default=no@:>@]), + AC_DEFINE(ENABLE_TESTING, 1, [enable development code])) AM_CONDITIONAL(ENABLE_TESTING, test "$enable_testing" = "yes") -if test "$enable_testing" = "yes"; then - AC_DEFINE(ENABLE_TESTING, 1, [enable development code]) -fi AC_ARG_ENABLE(fribidi, - AS_HELP_STRING([--enable-fribidi], [enable fribidi support @<:@default=no@:>@])) - + AS_HELP_STRING([--enable-fribidi], [enable fribidi support @<:@default=no@:>@]), + AC_DEFINE(ENABLE_FRIBIDI, 1, [enable fribidi support])) AM_CONDITIONAL(ENABLE_FRIBIDI, test "$enable_fribidi" = "yes") -AS_IF([test "$enable_fribidi" = "yes"], - AC_DEFINE(ENABLE_FRIBIDI, 1, [enable fribidi support]) -) if test "$BOXTYPE" = "coolstream"; then if test -e ${srcdir}/lib/hardware/coolstream/hd1/libcoolstream/nevis_ir.h; then From 013c56274964829861839b89fe3d3f6623c671ef Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 13:01:37 +0100 Subject: [PATCH 045/107] - acinclude: unify descriptions in TUXBOX_APPS_DIRECTORY_ONE() Signed-off-by: Thilo Graf --- acinclude.m4 | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 0c7b3ed1b..5d4b9a6ab 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -144,70 +144,70 @@ else fi TUXBOX_APPS_DIRECTORY_ONE(configdir, CONFIGDIR, localstatedir, /var, /tuxbox/config, - [--with-configdir=PATH], [where to find the config files]) + [--with-configdir=PATH], [where to find config files]) TUXBOX_APPS_DIRECTORY_ONE(datadir, DATADIR, datadir, /share, /tuxbox, - [--with-datadir=PATH], [where to find data]) + [--with-datadir=PATH], [where to find data files]) TUXBOX_APPS_DIRECTORY_ONE(fontdir, FONTDIR, datadir, /share, /fonts, - [--with-fontdir=PATH], [where to find the fonts]) + [--with-fontdir=PATH], [where to find fonts]) TUXBOX_APPS_DIRECTORY_ONE(fontdir_var, FONTDIR_VAR, localstatedir, /var, /tuxbox/fonts, - [--with-fontdir_var=PATH], [where to find the fonts in /var]) + [--with-fontdir_var=PATH], [where to find fonts in /var]) TUXBOX_APPS_DIRECTORY_ONE(gamesdir, GAMESDIR, localstatedir, /var, /tuxbox/games, - [--with-gamesdir=PATH], [where to find the games]) + [--with-gamesdir=PATH], [where to find games]) TUXBOX_APPS_DIRECTORY_ONE(libdir, LIBDIR, libdir, /lib, /tuxbox, - [--with-libdir=PATH], [where to find the internal libs]) + [--with-libdir=PATH], [where to find internal libs]) TUXBOX_APPS_DIRECTORY_ONE(plugindir, PLUGINDIR, libdir, /lib, /tuxbox/plugins, - [--with-plugindir=PATH], [where to find the plugins]) + [--with-plugindir=PATH], [where to find plugins]) TUXBOX_APPS_DIRECTORY_ONE(plugindir_var, PLUGINDIR_VAR, localstatedir, /var, /tuxbox/plugins, - [--with-plugindir_var=PATH], [where to find the plugins in /var]) + [--with-plugindir_var=PATH], [where to find plugins in /var]) TUXBOX_APPS_DIRECTORY_ONE(plugindir_mnt, PLUGINDIR_MNT, mntdir, /mnt, /plugins, - [--with-plugindir_mnt=PATH], [where to find the the extern plugins]) + [--with-plugindir_mnt=PATH], [where to find external plugins]) TUXBOX_APPS_DIRECTORY_ONE(luaplugindir, LUAPLUGINDIR, libdir, /lib, /tuxbox/luaplugins, [--with-luaplugindir=PATH], [where to find Lua plugins]) TUXBOX_APPS_DIRECTORY_ONE(webtvdir, WEBTVDIR, datadir, /share, /tuxbox/neutrino/webtv, - [--with-webtvdir=PATH], [where to find the webtv content]) + [--with-webtvdir=PATH], [where to find webtv content]) TUXBOX_APPS_DIRECTORY_ONE(webtvdir_var, WEBTVDIR_VAR, localstatedir, /var, /tuxbox/webtv, - [--with-webtvdir_var=PATH], [where to find the webtv content in /var]) + [--with-webtvdir_var=PATH], [where to find webtv content in /var]) TUXBOX_APPS_DIRECTORY_ONE(localedir, LOCALEDIR,datadir, /share, /tuxbox/neutrino/locale, - [--with-localedir=PATH], [where to find the locale]) + [--with-localedir=PATH], [where to find locale]) TUXBOX_APPS_DIRECTORY_ONE(localedir_var, LOCALEDIR_VAR, localstatedir, /var, /tuxbox/locale, - [--with-localedir_var=PATH], [where to find the locale in /var]) + [--with-localedir_var=PATH], [where to find locale in /var]) TUXBOX_APPS_DIRECTORY_ONE(themesdir, THEMESDIR, datadir, /share, /tuxbox/neutrino/themes, - [--with-themesdir=PATH], [where to find the themes]) + [--with-themesdir=PATH], [where to find themes]) TUXBOX_APPS_DIRECTORY_ONE(themesdir_var, THEMESDIR_VAR, localstatedir, /var, /tuxbox/themes, - [--with-themesdir_var=PATH], [where to find the themes in /var]) + [--with-themesdir_var=PATH], [where to find themes in /var]) TUXBOX_APPS_DIRECTORY_ONE(iconsdir, ICONSDIR, datadir, /share, /tuxbox/neutrino/icons, - [--with-iconsdir=PATH], [where to find the icons]) + [--with-iconsdir=PATH], [where to find icons]) TUXBOX_APPS_DIRECTORY_ONE(iconsdir_var, ICONSDIR_VAR, localstatedir, /var, /tuxbox/icons, - [--with-iconsdir_var=PATH], [where to find the icons in /var]) + [--with-iconsdir_var=PATH], [where to find icons in /var]) TUXBOX_APPS_DIRECTORY_ONE(private_httpddir, PRIVATE_HTTPDDIR, datadir, /share, /tuxbox/neutrino/httpd, - [--with-private_httpddir=PATH], [where to find the the private httpd files]) + [--with-private_httpddir=PATH], [where to find private httpd files]) TUXBOX_APPS_DIRECTORY_ONE(public_httpddir, PUBLIC_HTTPDDIR, localstatedir, /var, /tuxbox/httpd, - [--with-public_httpddir=PATH], [where to find the the public httpd files]) + [--with-public_httpddir=PATH], [where to find public httpd files]) TUXBOX_APPS_DIRECTORY_ONE(hosted_httpddir, HOSTED_HTTPDDIR, mntdir, /mnt, /hosted, - [--with-hosted_httpddir=PATH], [where to find the the hosted files]) + [--with-hosted_httpddir=PATH], [where to find hosted files]) TUXBOX_APPS_DIRECTORY_ONE(flagdir, FLAGDIR, localstatedir, /var, /etc, - [--with-flagdir=PATH], [where to find flagfiles]) + [--with-flagdir=PATH], [where to find flag files]) ]) dnl automake <= 1.6 needs this specifications From 8d855a2d19a58577060a873cafb6155960b51514 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 13:01:37 +0100 Subject: [PATCH 046/107] - configure: invert --disable-upnp false logic to --enable-upnp true Signed-off-by: Thilo Graf --- configure.ac | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index dc18c08d7..c4f545aec 100644 --- a/configure.ac +++ b/configure.ac @@ -185,8 +185,9 @@ AC_ARG_ENABLE(flac, AM_CONDITIONAL(ENABLE_FLAC, test "$enable_flac" = "yes") AC_ARG_ENABLE(upnp, - AS_HELP_STRING([--disable-upnp], [disable UPNP support @<:@default=no@:>@]), - ,[enable_upnp=yes]) + AS_HELP_STRING([--enable-upnp], [enable UPNP support @<:@default=yes@:>@]), + [enable_upnp="$enableval"], + [enable_upnp="yes"]) AM_CONDITIONAL(ENABLE_UPNP, test "$enable_upnp" = "yes") if test "$enable_upnp" = "yes"; then From 12d132d66581da96966e8c54240cdc981f126bd0 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 13:01:37 +0100 Subject: [PATCH 047/107] - configure: invert --disable-lua false logic to --enable-lua true Signed-off-by: Thilo Graf --- configure.ac | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index c4f545aec..5d6da7f3e 100644 --- a/configure.ac +++ b/configure.ac @@ -219,8 +219,9 @@ if test "$BOXTYPE" != coolstream; then fi AC_ARG_ENABLE(lua, - AS_HELP_STRING([--disable-lua], [disable Lua support @<:@default=no@:>@]), - ,[enable_lua=yes]) + AS_HELP_STRING([--enable-lua], [enable Lua support @<:@default=yes@:>@]), + [enable_lua="$enableval"], + [enable_lua="yes"]) AM_CONDITIONAL(ENABLE_LUA, test "$enable_lua" = "yes") if test "$enable_lua" = "yes"; then From 892818b69fd67baf9acfdd97ef118ad5fdc48d41 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 13:01:37 +0100 Subject: [PATCH 048/107] - acinclude: use AS_HELP_STRING() for --with-boxmodel; ... i don't know any other way to get linefeeds in right-hand text Signed-off-by: Thilo Graf --- acinclude.m4 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 5d4b9a6ab..108af6e8b 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -83,7 +83,7 @@ AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_SYS_LARGEFILE -check_path () { +check_path() { return $(perl -e "if(\"$1\"=~m#^/usr/(local/)?bin#){print \"0\"}else{print \"1\";}") } @@ -323,9 +323,9 @@ AC_ARG_WITH(boxtype, [BOXTYPE="coolstream"]) AC_ARG_WITH(boxmodel, - [ --with-boxmodel valid for coolstream: hd1, hd2 - valid for armbox: hd51 - valid for generic: raspi], + AS_HELP_STRING([--with-boxmodel], [valid for coolstream: hd1, hd2]) +AS_HELP_STRING([], [valid for armbox: hd51]) +AS_HELP_STRING([], [valid for generic: raspi]), [case "${withval}" in hd1|hd2) if test "$BOXTYPE" = "coolstream"; then From e57a8ebb98be45d29c34dc86b06a51f783006794 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 13:01:37 +0100 Subject: [PATCH 049/107] - configure: move libstb-hal block down Signed-off-by: Thilo Graf --- configure.ac | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/configure.ac b/configure.ac index 5d6da7f3e..b7f8311dc 100644 --- a/configure.ac +++ b/configure.ac @@ -199,25 +199,6 @@ AC_ARG_ENABLE(extupdate, AC_DEFINE(ENABLE_EXTUPDATE, 1, [enable extended update routine])) AM_CONDITIONAL(ENABLE_EXTUPDATE, test "$enable_extupdate" = "yes") -AC_ARG_WITH(stb-hal-includes, - AS_HELP_STRING([--with-stb-hal-includes=PATH], [path for libstb-hal includes [[NONE]]]), - [STB_HAL_INC="$withval"], - [STB_HAL_INC=""]) - -AC_ARG_WITH(stb-hal-build, - AS_HELP_STRING([--with-stb-hal-build=PATH], [path where libstb-hal is built [[NONE]]]), - [STB_HAL_LIB="-L$withval"], - [STB_HAL_LIB=""]) - -AM_CONDITIONAL(USE_STB_HAL, test "$BOXTYPE" != "coolstream") -if test "$BOXTYPE" != coolstream; then - AC_DEFINE(USE_STB_HAL, 1, [use libstb-hal]) - if test "$STB_HAL_INC" = ""; then - AC_MSG_ERROR([need libstb-hal includes path with --with-stb-hal-includes=...]) - fi - HWLIB_CFLAGS="-I$STB_HAL_INC" -fi - AC_ARG_ENABLE(lua, AS_HELP_STRING([--enable-lua], [enable Lua support @<:@default=yes@:>@]), [enable_lua="$enableval"], @@ -255,6 +236,25 @@ AC_ARG_ENABLE(fribidi, AC_DEFINE(ENABLE_FRIBIDI, 1, [enable fribidi support])) AM_CONDITIONAL(ENABLE_FRIBIDI, test "$enable_fribidi" = "yes") +AC_ARG_WITH(stb-hal-includes, + AS_HELP_STRING([--with-stb-hal-includes=PATH], [path for libstb-hal includes [[NONE]]]), + [STB_HAL_INC="$withval"], + [STB_HAL_INC=""]) + +AC_ARG_WITH(stb-hal-build, + AS_HELP_STRING([--with-stb-hal-build=PATH], [path where libstb-hal is built [[NONE]]]), + [STB_HAL_LIB="-L$withval"], + [STB_HAL_LIB=""]) + +AM_CONDITIONAL(USE_STB_HAL, test "$BOXTYPE" != "coolstream") +if test "$BOXTYPE" != coolstream; then + AC_DEFINE(USE_STB_HAL, 1, [use libstb-hal]) + if test "$STB_HAL_INC" = ""; then + AC_MSG_ERROR([need libstb-hal includes path with --with-stb-hal-includes=...]) + fi + HWLIB_CFLAGS="-I$STB_HAL_INC" +fi + if test "$BOXTYPE" = "coolstream"; then if test -e ${srcdir}/lib/hardware/coolstream/hd1/libcoolstream/nevis_ir.h; then AC_DEFINE(HAVE_COOLSTREAM_NEVIS_IR_H, 1, [Define to 1 if you have the header file.]) From af01615e7b339bf5529f70c36469b56205da9e44 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 13:01:37 +0100 Subject: [PATCH 050/107] - configure: fix logic around libswresample Signed-off-by: Thilo Graf --- configure.ac | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index b7f8311dc..022230b72 100644 --- a/configure.ac +++ b/configure.ac @@ -80,17 +80,17 @@ TUXBOX_APPS_LIB_PKGCONFIG_CHECK(OGG,ogg) if test -z "$OGG_CFLAGS" ; then TUXBOX_APPS_LIB_PKGCONFIG(OGG,ogg) fi -TUXBOX_APPS_LIB_PKGCONFIG(SWRESAMPLE,libswresample) -else -TUXBOX_APPS_LIB_PKGCONFIG(SWRESAMPLE,libswresample) + fi +TUXBOX_APPS_LIB_PKGCONFIG(SWRESAMPLE,libswresample) + +AM_CONDITIONAL(USE_TREMOR, test "$TREMOR" = "yes") + if test "$BOXTYPE" = "tripledragon"; then TUXBOX_APPS_LIB_PKGCONFIG(DIRECTFB, directfb) fi -AM_CONDITIONAL(USE_TREMOR, test "$TREMOR" = "yes") - # TUXBOX_APPS_LIB_PKGCONFIG(OPENSSL,openssl) TUXBOX_APPS_LIB_PKGCONFIG(CURL,libcurl) @@ -109,6 +109,7 @@ PKG_CHECK_MODULES([FREETYPE], [freetype2 >= 16.2.10], if test -z "$CURL_LIBS" -a -z "$CURL_CFLAGS"; then TUXBOX_APPS_LIB_CONFIG(CURL,curl-config) fi + # fallback to freetype-config (which is ugly for cross-compilation) if test -z "$FREETYPE_LIBS" -a -z "$FREETYPE_CFLAGS"; then TUXBOX_APPS_LIB_CONFIG(FREETYPE,freetype-config) From 28450dcca0ec7318b45594a61b057fda16d3107f Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 13:01:37 +0100 Subject: [PATCH 051/107] - acinclude/configure: some minor format changes; fix indentations Signed-off-by: Thilo Graf --- acinclude.m4 | 69 ++++++++++++++++++++++++++-------------------------- configure.ac | 52 ++++++++++++++++++++------------------- 2 files changed, 61 insertions(+), 60 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 108af6e8b..4248dda31 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1,4 +1,4 @@ -AC_DEFUN([TUXBOX_APPS],[ +AC_DEFUN([TUXBOX_APPS], [ AM_CONFIG_HEADER(config.h) AM_MAINTAINER_MODE @@ -30,7 +30,7 @@ AC_ARG_WITH(libcoolstream-static-dir, [LIBCOOLSTREAM_STATIC_DIR=""]) AC_ARG_ENABLE(libcoolstream-static, - AS_HELP_STRING([--enable-libcoolstream-static], [libcoolstream static linked for testing @<:@default=no@:>@])) + AS_HELP_STRING([--enable-libcoolstream-static], [libcoolstream static linked for testing @<:@default=no@:>@])) AM_CONDITIONAL(ENABLE_LIBCOOLSTREAM_STATIC, test "$enable_libcoolstream_static" = "yes") AC_ARG_ENABLE(reschange, @@ -68,7 +68,7 @@ elif test "$TARGET" = "cdk"; then AC_MSG_ERROR([invalid prefix, you need to specify one in cdk mode]) fi if test "$TARGET_PREFIX" != "NONE"; then - AC_DEFINE_UNQUOTED(TARGET_PREFIX, "$TARGET_PREFIX",[The targets prefix]) + AC_DEFINE_UNQUOTED(TARGET_PREFIX, "$TARGET_PREFIX", [The targets prefix]) fi if test "$TARGET_PREFIX" = "NONE"; then AC_MSG_ERROR([invalid targetprefix, you need to specify one in cdk mode]) @@ -90,9 +90,8 @@ check_path() { ]) dnl expand nested ${foo}/bar -AC_DEFUN([TUXBOX_EXPAND_VARIABLE],[__$1="$2" +AC_DEFUN([TUXBOX_EXPAND_VARIABLE], [__$1="$2" for __CNT in false false false false true; do dnl max 5 levels of indirection - $1=`eval echo "$__$1"` echo ${$1} | grep -q '\$' || break # 'grep -q' is POSIX, exit if no $ in variable __$1="${$1}" @@ -100,7 +99,7 @@ AC_DEFUN([TUXBOX_EXPAND_VARIABLE],[__$1="$2" $__CNT && AC_MSG_ERROR([can't expand variable $1=$2]) dnl bail out if we did not expand ]) -AC_DEFUN([TUXBOX_APPS_DIRECTORY_ONE],[ +AC_DEFUN([TUXBOX_APPS_DIRECTORY_ONE], [ AC_ARG_WITH($1, AS_HELP_STRING([$6], [$7 [[PREFIX$4$5]]], [32], [79]), [ _$2=$withval if test "$TARGET" = "cdk"; then @@ -109,7 +108,7 @@ AC_ARG_WITH($1, AS_HELP_STRING([$6], [$7 [[PREFIX$4$5]]], [32], [79]), [ $2=$withval fi TARGET_$2=${$2} -],[ +], [ # RFC 1925: "you can always add another level of indirection..." TUXBOX_EXPAND_VARIABLE($2,"${$3}$5") if test "$TARGET" = "cdk"; then @@ -119,13 +118,12 @@ AC_ARG_WITH($1, AS_HELP_STRING([$6], [$7 [[PREFIX$4$5]]], [32], [79]), [ fi TARGET_$2=$_$2 ]) - dnl AC_SUBST($2) AC_DEFINE_UNQUOTED($2,"$_$2",$7) AC_SUBST(TARGET_$2) ]) -AC_DEFUN([TUXBOX_APPS_DIRECTORY],[ +AC_DEFUN([TUXBOX_APPS_DIRECTORY], [ AC_REQUIRE([TUXBOX_APPS]) if test "$TARGET" = "cdk"; then @@ -235,7 +233,7 @@ AC_SUBST(PUBLIC_HTTPDDIR) AC_SUBST(HOSTED_HTTPDDIR) dnl end workaround -AC_DEFUN([_TUXBOX_APPS_LIB_CONFIG],[ +AC_DEFUN([_TUXBOX_APPS_LIB_CONFIG], [ AC_PATH_PROG($1_CONFIG,$2,no) if test "$$1_CONFIG" != "no"; then if test "$TARGET" = "cdk" && check_path "$$1_CONFIG"; then @@ -255,23 +253,22 @@ if test "$$1_CONFIG" != "no"; then fi fi fi - AC_SUBST($1_CFLAGS) AC_SUBST($1_LIBS) ]) -AC_DEFUN([TUXBOX_APPS_LIB_CONFIG],[ +AC_DEFUN([TUXBOX_APPS_LIB_CONFIG], [ _TUXBOX_APPS_LIB_CONFIG($1,$2,ERROR) if test "$$1_CONFIG" = "no"; then AC_MSG_ERROR([could not find $2]); fi ]) -AC_DEFUN([TUXBOX_APPS_LIB_CONFIG_CHECK],[ +AC_DEFUN([TUXBOX_APPS_LIB_CONFIG_CHECK], [ _TUXBOX_APPS_LIB_CONFIG($1,$2,WARN) ]) -AC_DEFUN([TUXBOX_APPS_PKGCONFIG],[ +AC_DEFUN([TUXBOX_APPS_PKGCONFIG], [ m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl @@ -283,7 +280,7 @@ if test x"$PKG_CONFIG" = x"" ; then fi ]) -AC_DEFUN([_TUXBOX_APPS_LIB_PKGCONFIG],[ +AC_DEFUN([_TUXBOX_APPS_LIB_PKGCONFIG], [ AC_REQUIRE([TUXBOX_APPS_PKGCONFIG]) AC_MSG_CHECKING(for package $2) if $PKG_CONFIG --exists "$2" ; then @@ -294,23 +291,22 @@ if $PKG_CONFIG --exists "$2" ; then else AC_MSG_RESULT(no) fi - AC_SUBST($1_CFLAGS) AC_SUBST($1_LIBS) ]) -AC_DEFUN([TUXBOX_APPS_LIB_PKGCONFIG],[ +AC_DEFUN([TUXBOX_APPS_LIB_PKGCONFIG], [ _TUXBOX_APPS_LIB_PKGCONFIG($1,$2) if test x"$$1_EXISTS" != xyes; then AC_MSG_ERROR([could not find package $2]); fi ]) -AC_DEFUN([TUXBOX_APPS_LIB_PKGCONFIG_CHECK],[ +AC_DEFUN([TUXBOX_APPS_LIB_PKGCONFIG_CHECK], [ _TUXBOX_APPS_LIB_PKGCONFIG($1,$2) ]) -AC_DEFUN([TUXBOX_BOXTYPE],[ +AC_DEFUN([TUXBOX_BOXTYPE], [ AC_ARG_WITH(boxtype, AS_HELP_STRING([--with-boxtype], [valid values: tripledragon, coolstream, spark, azbox, generic, armbox]), [case "${withval}" in @@ -376,10 +372,10 @@ AM_CONDITIONAL(BOXTYPE_SPARK, test "$BOXTYPE" = "spark") AM_CONDITIONAL(BOXTYPE_GENERIC, test "$BOXTYPE" = "generic") AM_CONDITIONAL(BOXTYPE_ARMBOX, test "$BOXTYPE" = "armbox") -AM_CONDITIONAL(BOXMODEL_CS_HD1,test "$BOXMODEL" = "hd1") -AM_CONDITIONAL(BOXMODEL_CS_HD2,test "$BOXMODEL" = "hd2") +AM_CONDITIONAL(BOXMODEL_CS_HD1, test "$BOXMODEL" = "hd1") +AM_CONDITIONAL(BOXMODEL_CS_HD2, test "$BOXMODEL" = "hd2") -AM_CONDITIONAL(BOXMODEL_RASPI,test "$BOXMODEL" = "raspi") +AM_CONDITIONAL(BOXMODEL_RASPI, test "$BOXMODEL" = "raspi") if test "$BOXTYPE" = "azbox"; then AC_DEFINE(HAVE_AZBOX_HARDWARE, 1, [building for an azbox]) @@ -404,28 +400,31 @@ elif test "$BOXMODEL" = "hd2"; then elif test "$BOXMODEL" = "hd51"; then AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION, 1, [enable change the osd resolution]) elif test "$BOXMODEL" = "raspi"; then - AC_DEFINE(BOXMODEL_RASPI, 1, [Raspberry pi]) + AC_DEFINE(BOXMODEL_RASPI, 1, [raspberry pi]) fi ]) dnl backward compatiblity -AC_DEFUN([AC_GNU_SOURCE], -[AH_VERBATIM([_GNU_SOURCE], -[/* Enable GNU extensions on systems that have them. */ +AC_DEFUN([AC_GNU_SOURCE], [ +AH_VERBATIM([_GNU_SOURCE], [ +/* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE -#endif])dnl +#endif +])dnl AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_DEFINE([_GNU_SOURCE]) ]) -AC_DEFUN([AC_PROG_EGREP], -[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], - [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi]) - EGREP=$ac_cv_prog_egrep - AC_SUBST([EGREP]) +AC_DEFUN([AC_PROG_EGREP], [ +AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], [ +if echo a | (grep -E '(a|b)') >/dev/null 2>&1; then + ac_cv_prog_egrep='grep -E' +else + ac_cv_prog_egrep='egrep' +fi +]) +EGREP=$ac_cv_prog_egrep +AC_SUBST([EGREP]) ]) diff --git a/configure.ac b/configure.ac index 022230b72..d19fd4593 100644 --- a/configure.ac +++ b/configure.ac @@ -38,9 +38,9 @@ fi AC_ARG_ENABLE(ffmpegdec, AS_HELP_STRING([--enable-ffmpegdec], [enable ffmpeg decoder support @<:@default=no@:>@]), AC_DEFINE(ENABLE_FFMPEGDEC, 1, [include ffmpeg decoder support])) -AM_CONDITIONAL(ENABLE_FFMPEGDEC,test "$enable_ffmpegdec" = "yes") +AM_CONDITIONAL(ENABLE_FFMPEGDEC, test "$enable_ffmpegdec" = "yes") -if test x"$enable_ffmpegdec" != xyes; then +if test "$enable_ffmpegdec" != "yes"; then AC_ARG_WITH(tremor, AS_HELP_STRING([--with-tremor], [use libvorbisidec instead of libogg/libvorbis @<:@default=no@:>@]), @@ -131,9 +131,10 @@ TUXBOX_APPS_LIB_PKGCONFIG(PNG,libpng) TUXBOX_APPS_LIB_PKGCONFIG(AVFORMAT,libavformat) TUXBOX_APPS_LIB_PKGCONFIG(AVCODEC,libavcodec) TUXBOX_APPS_LIB_PKGCONFIG(AVUTIL,libavutil) +TUXBOX_APPS_LIB_PKGCONFIG(SIGC,sigc++-2.0) if test "$BOXTYPE" = "armbox"; then -TUXBOX_APPS_LIB_PKGCONFIG(SWSCALE,libswscale) + TUXBOX_APPS_LIB_PKGCONFIG(SWSCALE,libswscale) fi if test "$BOXTYPE" = "coolstream"; then @@ -147,8 +148,6 @@ if test "$BOXTYPE" = "coolstream" || AC_DEFINE(SCREENSHOT, 1, [Define to 1 if the platform supports screenshots]) fi -TUXBOX_APPS_LIB_PKGCONFIG(SIGC,sigc++-2.0) - AC_ARG_ENABLE(keyboard-no-rc, AS_HELP_STRING([--enable-keyboard-no-rc], [enable keyboard control, disable rc control @<:@default=no@:>@]), AC_DEFINE(KEYBOARD_INSTEAD_OF_REMOTE_CONTROL, 1, [enable keyboard control, disable rc control])) @@ -190,10 +189,10 @@ AC_ARG_ENABLE(upnp, [enable_upnp="$enableval"], [enable_upnp="yes"]) -AM_CONDITIONAL(ENABLE_UPNP, test "$enable_upnp" = "yes") if test "$enable_upnp" = "yes"; then AC_DEFINE(ENABLE_UPNP, 1, [enable UPNP support]) fi +AM_CONDITIONAL(ENABLE_UPNP, test "$enable_upnp" = "yes") AC_ARG_ENABLE(extupdate, AS_HELP_STRING([--enable-extupdate], [enable extended update routine @<:@default=no@:>@]), @@ -205,7 +204,6 @@ AC_ARG_ENABLE(lua, [enable_lua="$enableval"], [enable_lua="yes"]) -AM_CONDITIONAL(ENABLE_LUA, test "$enable_lua" = "yes") if test "$enable_lua" = "yes"; then AC_DEFINE(ENABLE_LUA, 1, [include Lua support]) PKG_CHECK_MODULES([LUA], [lua >= 5.2], echo "lua >= 5.2 found", [ @@ -215,9 +213,10 @@ if test "$enable_lua" = "yes"; then AC_DEFINE(STATIC_LUAPOSIX,1,[Define to 1 for static lua build.]) ]) ]) -# hack... -AC_DEFINE(LUA_COMPAT_5_2, 1, [does not really belong in config.h, but is needed for build with lua 5.3+]) + # hack... + AC_DEFINE(LUA_COMPAT_5_2, 1, [does not really belong in config.h, but is needed for build with lua 5.3+]) fi +AM_CONDITIONAL(ENABLE_LUA, test "$enable_lua" = "yes") AC_ARG_ENABLE(cleanup, AS_HELP_STRING([--enable-cleanup], [enable cleanup on exit @<:@default=no@:>@]), @@ -247,7 +246,6 @@ AC_ARG_WITH(stb-hal-build, [STB_HAL_LIB="-L$withval"], [STB_HAL_LIB=""]) -AM_CONDITIONAL(USE_STB_HAL, test "$BOXTYPE" != "coolstream") if test "$BOXTYPE" != coolstream; then AC_DEFINE(USE_STB_HAL, 1, [use libstb-hal]) if test "$STB_HAL_INC" = ""; then @@ -255,24 +253,28 @@ if test "$BOXTYPE" != coolstream; then fi HWLIB_CFLAGS="-I$STB_HAL_INC" fi +AM_CONDITIONAL(USE_STB_HAL, test "$BOXTYPE" != "coolstream") if test "$BOXTYPE" = "coolstream"; then -if test -e ${srcdir}/lib/hardware/coolstream/hd1/libcoolstream/nevis_ir.h; then - AC_DEFINE(HAVE_COOLSTREAM_NEVIS_IR_H, 1, [Define to 1 if you have the header file.]) -fi -HWLIB_CFLAGS='-I$(top_srcdir)/lib/hardware/coolstream/hd1/libcoolstream' + if test "$BOXMODEL" = "hd1"; then + if test -e ${srcdir}/lib/hardware/coolstream/hd1/libcoolstream/nevis_ir.h; then + AC_DEFINE(HAVE_COOLSTREAM_NEVIS_IR_H, 1, [Define to 1 if you have the header file.]) + fi + HWLIB_CFLAGS='-I$(top_srcdir)/lib/hardware/coolstream/hd1/libcoolstream' + fi -if test "$BOXMODEL" = "hd2"; then -if test -e ${srcdir}/lib/hardware/coolstream/hd2/libcoolstream/cs_ir_generic.h; then - AC_DEFINE(HAVE_COOLSTREAM_CS_IR_GENERIC_H, 1, [Define to 1 if you have the header file.]) -fi -if test -e ${srcdir}/lib/hardware/coolstream/hd2/libcoolstream/cs_frontpanel.h; then - AC_DEFINE(HAVE_COOLSTREAM_CS_FRONTPANEL_H, 1, [Define to 1 if you have the header file.]) -fi -HWLIB_CFLAGS='-I$(top_srcdir)/lib/hardware/coolstream/hd2/libcoolstream' -fi -HWLIB_CFLAGS="$HWLIB_CFLAGS "'-I$(top_srcdir)/src/zapit/include/private' -HWLIB_CFLAGS="$HWLIB_CFLAGS "'-I$(top_srcdir)/lib/hardware/coolstream' + if test "$BOXMODEL" = "hd2"; then + if test -e ${srcdir}/lib/hardware/coolstream/hd2/libcoolstream/cs_ir_generic.h; then + AC_DEFINE(HAVE_COOLSTREAM_CS_IR_GENERIC_H, 1, [Define to 1 if you have the header file.]) + fi + if test -e ${srcdir}/lib/hardware/coolstream/hd2/libcoolstream/cs_frontpanel.h; then + AC_DEFINE(HAVE_COOLSTREAM_CS_FRONTPANEL_H, 1, [Define to 1 if you have the header file.]) + fi + HWLIB_CFLAGS='-I$(top_srcdir)/lib/hardware/coolstream/hd2/libcoolstream' + fi + + HWLIB_CFLAGS="$HWLIB_CFLAGS "'-I$(top_srcdir)/src/zapit/include/private' + HWLIB_CFLAGS="$HWLIB_CFLAGS "'-I$(top_srcdir)/lib/hardware/coolstream' fi # hack, so that framebuffer.h does not need to be included everywhere... From c091bd6fc94aef12e790b57792e0473001e530ff Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 13:01:37 +0100 Subject: [PATCH 052/107] - acinclude/configure: some more minor format changes Signed-off-by: Thilo Graf --- acinclude.m4 | 18 ++++++++++-------- configure.ac | 49 ++++++++++++++++++++++++++----------------------- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 4248dda31..d0daddef7 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -90,7 +90,8 @@ check_path() { ]) dnl expand nested ${foo}/bar -AC_DEFUN([TUXBOX_EXPAND_VARIABLE], [__$1="$2" +AC_DEFUN([TUXBOX_EXPAND_VARIABLE], [ + __$1="$2" for __CNT in false false false false true; do dnl max 5 levels of indirection $1=`eval echo "$__$1"` echo ${$1} | grep -q '\$' || break # 'grep -q' is POSIX, exit if no $ in variable @@ -312,9 +313,10 @@ AC_ARG_WITH(boxtype, [case "${withval}" in tripledragon|coolstream|spark|azbox|generic|armbox) BOXTYPE="$withval" - ;; + ;; *) - AC_MSG_ERROR([bad value $withval for --with-boxtype]) ;; + AC_MSG_ERROR([bad value $withval for --with-boxtype]) + ;; esac], [BOXTYPE="coolstream"]) @@ -329,7 +331,7 @@ AS_HELP_STRING([], [valid for generic: raspi]), else AC_MSG_ERROR([unknown model $withval for boxtype $BOXTYPE]) fi - ;; + ;; nevis|apollo) if test "$BOXTYPE" = "coolstream"; then if test "$withval" = "nevis"; then @@ -341,24 +343,24 @@ AS_HELP_STRING([], [valid for generic: raspi]), else AC_MSG_ERROR([unknown model $withval for boxtype $BOXTYPE]) fi - ;; + ;; hd51) if test "$BOXTYPE" = "armbox"; then BOXMODEL="$withval" else AC_MSG_ERROR([unknown model $withval for boxtype $BOXTYPE]) fi - ;; + ;; raspi) if test "$BOXTYPE" = "generic"; then BOXMODEL="$withval" else AC_MSG_ERROR([unknown model $withval for boxtype $BOXTYPE]) fi - ;; + ;; *) AC_MSG_ERROR([unsupported value $withval for --with-boxmodel]) - ;; + ;; esac], [test "$BOXTYPE" = "coolstream" && BOXMODEL="hd1" || true]) diff --git a/configure.ac b/configure.ac index d19fd4593..a6a47e0d9 100644 --- a/configure.ac +++ b/configure.ac @@ -81,7 +81,7 @@ if test -z "$OGG_CFLAGS" ; then TUXBOX_APPS_LIB_PKGCONFIG(OGG,ogg) fi -fi +fi # test "$enable_ffmpegdec" TUXBOX_APPS_LIB_PKGCONFIG(SWRESAMPLE,libswresample) @@ -96,14 +96,12 @@ TUXBOX_APPS_LIB_PKGCONFIG(CURL,libcurl) ## For the check you must use the corresponding libtool number as version number, ## see freetype source code docs/VERSIONS.TXT -PKG_CHECK_MODULES([FREETYPE], [freetype2 >= 16.2.10], - [echo "freetype2 >= 2.5.0 found"], [ - ## If freetype is not found: - ## Activate this line if you want to search with freetype-config instead - [echo "freetype2 >= 2.5.0 not found, use alternative search method with freetype-config"] - ## Activate this line if you want to abort -# AC_MSG_ERROR([freetype2 >= 2.5.0 not found]) - ]) +PKG_CHECK_MODULES([FREETYPE], [freetype2 >= 16.2.10], [ + echo "freetype2 >= 2.5.0 found" +], [ + echo "freetype2 >= 2.5.0 not found, use alternative search method with freetype-config" + #AC_MSG_ERROR([freetype2 >= 2.5.0 not found]) +]) # fallback to curl-config (which is ugly for cross-compilation) if test -z "$CURL_LIBS" -a -z "$CURL_CFLAGS"; then @@ -115,16 +113,17 @@ if test -z "$FREETYPE_LIBS" -a -z "$FREETYPE_CFLAGS"; then TUXBOX_APPS_LIB_CONFIG(FREETYPE,freetype-config) CPPFLAGS+=" $FREETYPE_CFLAGS" AC_MSG_CHECKING([whether FreeType version is 2.5.0 or higher]) - AC_TRY_CPP([ - #include - #include FT_FREETYPE_H - #if FREETYPE_MAJOR < 2 || (FREETYPE_MAJOR == 2 && FREETYPE_MINOR < 5) - #error Freetype version too low. - #endif - ], - [AC_MSG_RESULT(yes)], - [AC_MSG_ERROR([Need FreeType library version 2.5.0 or higher]) - ]) + AC_TRY_CPP([ + #include + #include FT_FREETYPE_H + #if FREETYPE_MAJOR < 2 || (FREETYPE_MAJOR == 2 && FREETYPE_MINOR < 5) + #error Freetype version too low. + #endif + ], [ + AC_MSG_RESULT(yes) + ], [ + AC_MSG_ERROR([Need FreeType library version 2.5.0 or higher]) + ]) fi TUXBOX_APPS_LIB_PKGCONFIG(PNG,libpng) @@ -206,11 +205,15 @@ AC_ARG_ENABLE(lua, if test "$enable_lua" = "yes"; then AC_DEFINE(ENABLE_LUA, 1, [include Lua support]) - PKG_CHECK_MODULES([LUA], [lua >= 5.2], echo "lua >= 5.2 found", [ - PKG_CHECK_MODULES([LUA], [lua5.2 >= 5.2], echo "lua5.2 found", [ - echo "=> lualib not found, assuming static lua in linker path..." + PKG_CHECK_MODULES([LUA], [lua >= 5.2], [ + echo "lua >= 5.2 found" + ], [ + PKG_CHECK_MODULES([LUA], [lua5.2 >= 5.2], [ + echo "lua5.2 found" + ], [ + echo "lualib not found, assuming static lua in linker path..." LUA_LIBS="-llua -ldl" - AC_DEFINE(STATIC_LUAPOSIX,1,[Define to 1 for static lua build.]) + AC_DEFINE(STATIC_LUAPOSIX, 1, [Define to 1 for static lua build.]) ]) ]) # hack... From 6f826c740c8b8aac2f07847fbd2fbdb0611c24f7 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Sat, 9 Dec 2017 20:51:29 +0100 Subject: [PATCH 053/107] fix bouquets freq handling for DVB-T/T2 --- src/zapit/src/getservices.cpp | 9 +++++++-- src/zapit/src/scan.cpp | 12 +++++++++--- src/zapit/src/scannit.cpp | 4 ++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index e0382ff13..a64585252 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -444,7 +444,9 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa feparams.frequency = feparams.frequency/1000; //transponderlist was read from tuxbox } - freq_id_t freq = CREATE_FREQ_ID(feparams.frequency, !CFrontend::isSat(delsys)); + freq_id_t freq = CREATE_FREQ_ID(feparams.frequency, CFrontend::isCable(delsys)); + if (CFrontend::isTerr(delsys)) + freq = (freq_id_t) (feparams.frequency/(1000*1000)); transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition,original_network_id,transport_stream_id); transponder t(tid, feparams); @@ -767,7 +769,10 @@ void CServiceManager::ParseSatTransponders(delivery_system_t delsys, xmlNodePtr else /* we'll probably crash sooner or later, so write to STDERR... */ fprintf(stderr, "[getservices] %s: unknown delivery system %d!\n", __func__, delsys); - freq_id_t freq = CREATE_FREQ_ID(feparams.frequency, !CFrontend::isSat(delsys)); + freq_id_t freq = CREATE_FREQ_ID(feparams.frequency, CFrontend::isCable(delsys)); + if (CFrontend::isTerr(delsys)) + freq = (freq_id_t) (feparams.frequency/(1000*1000)); + feparams.polarization &= 7; transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition, fake_nid, fake_tid); diff --git a/src/zapit/src/scan.cpp b/src/zapit/src/scan.cpp index bba6e472f..1757d734f 100644 --- a/src/zapit/src/scan.cpp +++ b/src/zapit/src/scan.cpp @@ -286,7 +286,9 @@ bool CServiceScan::ReadNitSdt(t_satellite_position satellitePosition) if(abort_scan) return false; - freq_id_t freq = CREATE_FREQ_ID(tI->second.feparams.frequency, !CFrontend::isSat(tI->second.feparams.delsys)); + freq_id_t freq = CREATE_FREQ_ID(tI->second.feparams.frequency, CFrontend::isCable(tI->second.feparams.delsys)); + if (CFrontend::isTerr(tI->second.feparams.delsys)) + freq = (freq_id_t) (tI->second.feparams.frequency/(1000*1000)); CNit nit(satellitePosition, freq, cable_nid); if(flags & SCAN_NIT) @@ -622,7 +624,9 @@ bool CServiceScan::ScanTransponder() printf("[scan] NIT %s, fta only: %s, satellites %s\n", flags & SCAN_NIT ? "yes" : "no", flags & SCAN_FTA ? "yes" : "no", scanProviders.size() == 1 ? "single" : "multi"); - freq_id_t freq = CREATE_FREQ_ID(TP->feparams.frequency, !CFrontend::isSat(TP->feparams.delsys)); + freq_id_t freq = CREATE_FREQ_ID(TP->feparams.frequency, CFrontend::isCable(TP->feparams.delsys)); + if (CFrontend::isTerr(TP->feparams.delsys)) + freq = (freq_id_t) (TP->feparams.frequency/(1000*1000)); fake_tid++; fake_nid++; @@ -669,7 +673,9 @@ bool CServiceScan::ReplaceTransponderParams(freq_id_t freq, t_satellite_position bool ret = false; for (transponder_list_t::iterator tI = transponders.begin(); tI != transponders.end(); ++tI) { if (tI->second.satellitePosition == satellitePosition) { - freq_id_t newfreq = CREATE_FREQ_ID(tI->second.feparams.frequency, !frontend->isSat()); + freq_id_t newfreq = CREATE_FREQ_ID(tI->second.feparams.frequency, frontend->isCable()); + if (frontend->isTerr()) + newfreq = (freq_id_t) (tI->second.feparams.frequency/(1000*1000)); if (freq == newfreq) { memcpy(&tI->second.feparams, feparams, sizeof(FrontendParameters)); printf("[scan] replacing transponder parameters\n"); diff --git a/src/zapit/src/scannit.cpp b/src/zapit/src/scannit.cpp index 4100cc926..7912fd2db 100644 --- a/src/zapit/src/scannit.cpp +++ b/src/zapit/src/scannit.cpp @@ -440,7 +440,7 @@ bool CNit::ParseTerrestrialDescriptor(TerrestrialDeliverySystemDescriptor * sd, if(feparams.frequency > 1000*1000) feparams.frequency /= 1000; - freq_id_t freq = CREATE_FREQ_ID(feparams.frequency, true); + freq_id_t freq = (freq_id_t) (feparams.frequency/(1000*1000)); transponder_id_t TsidOnid = CREATE_TRANSPONDER_ID64( freq, satellitePosition, tsinfo->getOriginalNetworkId(), tsinfo->getTransportStreamId()); @@ -471,7 +471,7 @@ bool CNit::ParseTerrestrial2Descriptor(T2DeliverySystemDescriptor * sd, Transpor for (T2FrequencyConstIterator T2freq = (*cell)->getCentreFrequencies()->begin(); T2freq != (*cell)->getCentreFrequencies()->end(); ++T2freq) { feparams.frequency = (*T2freq) * 10; - freq_id_t freq = CREATE_FREQ_ID(feparams.frequency, true); + freq_id_t freq = (freq_id_t) (feparams.frequency/(1000*1000)); transponder_id_t TsidOnid = CREATE_TRANSPONDER_ID64( freq, satellitePosition, tsinfo->getOriginalNetworkId(), tsinfo->getTransportStreamId()); From e11610bf323260cd7a70fd1d5b6fb0804957c064 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sat, 9 Dec 2017 23:21:14 +0100 Subject: [PATCH 054/107] - webradio_usr.xml: add link to stompfm.de Signed-off-by: Thilo Graf --- data/webradio_usr.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/data/webradio_usr.xml b/data/webradio_usr.xml index aa5a38857..2767fbe22 100644 --- a/data/webradio_usr.xml +++ b/data/webradio_usr.xml @@ -10,4 +10,5 @@ + From 1d0545e19c5630689ad4c2b09a7e03cf069cb22f Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 10 Dec 2017 19:54:07 +0100 Subject: [PATCH 055/107] CServiceManager: use value 0 as init value for feparams.plp_id Value of NO_STREAM_ID_FILTER = ~0U This could provokate overflow errors or possible compile errors related with compiler flags (e.g: -Werror=overflow) --- src/zapit/src/getservices.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index a64585252..d4fe5fe3b 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -622,7 +622,7 @@ void CServiceManager::ParseSatTransponders(delivery_system_t delsys, xmlNodePtr feparams.frequency = xmlGetNumericAttribute(tps, "centre_frequency", 0); feparams.inversion = INVERSION_AUTO; - feparams.plp_id = NO_STREAM_ID_FILTER; + feparams.plp_id = 0; // NO_STREAM_ID_FILTER = ~0U, seems not suitable here feparams.pls_mode = PLS_Root; feparams.pls_code = 1; From 2a2d51d255376183ee7b8ac85f28e631ee5dc675 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 9 Dec 2017 23:49:37 +0100 Subject: [PATCH 056/107] CComponentsInfoBox: add possibility for scalable picons --- src/gui/components/cc_item_infobox.cpp | 24 +++++++++++++++--------- src/gui/components/cc_item_infobox.h | 10 ++++++---- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/gui/components/cc_item_infobox.cpp b/src/gui/components/cc_item_infobox.cpp index 2dccb9820..3961a10d9 100644 --- a/src/gui/components/cc_item_infobox.cpp +++ b/src/gui/components/cc_item_infobox.cpp @@ -3,7 +3,7 @@ Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. - Copyright (C) 2012-2014, Thilo Graf 'dbt' + Copyright (C) 2012-2017, Thilo Graf 'dbt' Copyright (C) 2012, Michael Liebmann 'micha-bbg' License: GPL @@ -70,6 +70,8 @@ CComponentsInfoBox::CComponentsInfoBox( const int& x_pos, pic = NULL; cctext = NULL; pic_name = ""; + pic_height = 0; + pic_width = 0; x_offset = OFFSET_INNER_MID; initParent(parent); } @@ -80,22 +82,25 @@ CComponentsInfoBox::~CComponentsInfoBox() delete cctext; } -void CComponentsInfoBox::setPicture(const std::string& picture_name) +void CComponentsInfoBox::setPicture(const std::string& picture_name, const int& dx, const int& dy) { - pic_name = picture_name; + pic_name = picture_name; if (!pic_name.empty()){ - int w, h; - frameBuffer->getIconSize(pic_name.c_str(), &w, &h); - height = max(h, height); + frameBuffer->getIconSize(pic_name.c_str(), &pic_width, &pic_height); + if (dx > -1) + pic_width = dx; + if (dy > -1) + pic_height = dy; + height = max(pic_height, height); } } -void CComponentsInfoBox::setPicture(const char* picture_name) +void CComponentsInfoBox::setPicture(const char* picture_name, const int& dx, const int& dy) { string s_tmp = ""; if (picture_name) s_tmp = string(picture_name); - setPicture(s_tmp); + setPicture(s_tmp, dx, dy); } void CComponentsInfoBox::paintPicture() @@ -115,7 +120,8 @@ void CComponentsInfoBox::paintPicture() int y_pic = (cc_parent ? cc_yr : y) + fr_thickness; //init pic object and set icon paint position - pic = new CComponentsPicture(x_pic+x_offset, y_pic, 0, min(48, height-2*fr_thickness), pic_name); //NOTE: icons do not scale! + string image = frameBuffer->getIconPath(pic_name); + pic = new CComponentsPicture(x_pic+x_offset, y_pic, pic_width, min(pic_height, height-2*fr_thickness), image); //NOTE: icons do not scale! pic->setColorBody(col_body); diff --git a/src/gui/components/cc_item_infobox.h b/src/gui/components/cc_item_infobox.h index f82eab80e..afad2989d 100644 --- a/src/gui/components/cc_item_infobox.h +++ b/src/gui/components/cc_item_infobox.h @@ -3,7 +3,7 @@ Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. - Copyright (C) 2012-2014, Thilo Graf 'dbt' + Copyright (C) 2012-2017, Thilo Graf 'dbt' License: GPL @@ -57,6 +57,8 @@ class CComponentsInfoBox : public CComponentsText ///property: path or name of displayed image std::string pic_name; + int pic_height, pic_width; + public: ///object: internal used CTextBox object CComponentsText * cctext; @@ -74,15 +76,15 @@ class CComponentsInfoBox : public CComponentsText fb_pixel_t color_frame = COL_FRAME_PLUS_0, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_SHADOW_PLUS_0); - + ~CComponentsInfoBox(); ///set property: space around fram and beetween picture and textbox void setSpaceOffset(const int offset){x_offset = offset;}; ///set property: path or name of displayed image, parameter as string - void setPicture(const std::string& picture_name); + void setPicture(const std::string& picture_name, const int& dx = -1, const int& dy = -1); ///set property: path or name of displayed image, parameter as const char* - void setPicture(const char* picture_name); + void setPicture(const char* picture_name, const int& dx = -1, const int& dy = -1); ///retur internal picture object CComponentsPicture * getPictureObject(){return pic;} ///paint item From 7b55de6ae77830ece68e1fd40230a8ec1bdc7d77 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 10 Dec 2017 21:57:06 +0100 Subject: [PATCH 057/107] CMenuWidget: ensure use of unified data type const char* This should avoid possible compiler errors for this overloaded method. --- src/gui/widget/menue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 343efb2a5..be9fff00f 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -1532,7 +1532,7 @@ void CMenuWidget::paintHint(int pos) info_box->setColorAll(COL_FRAME_PLUS_0, COL_MENUCONTENTDARK_PLUS_0); info_box->setTextColor(COL_MENUCONTENTDARK_TEXT); info_box->enableShadow(); - info_box->setPicture(item->hintIcon ? item->hintIcon : ""); + info_box->setPicture(item->hintIcon ? item->hintIcon : NULL); info_box->enableColBodyGradient(g_settings.theme.menu_Hint_gradient, COL_MENUFOOT_PLUS_0, g_settings.theme.menu_Hint_gradient_direction);// COL_MENUFOOT_PLUS_0 is default footer color //paint result From 6768d9035e95faaa139a26ef8f8b25dbcf6c160a Mon Sep 17 00:00:00 2001 From: TangoCash Date: Sun, 10 Dec 2017 09:18:55 +0100 Subject: [PATCH 058/107] tryfix scan frontend selection --- src/zapit/src/femanager.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index 233b1dd70..294fb2b55 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -727,15 +727,20 @@ bool CFEManager::canTune(CZapitChannel * channel) CFrontend * CFEManager::getScanFrontend(t_satellite_position satellitePosition) { + delivery_system_t delsys = UNKNOWN_DS; + if (SAT_POSITION_CABLE(satellitePosition)) + delsys = ALL_CABLE; + if (SAT_POSITION_TERR(satellitePosition)) + delsys = ALL_TERR; CFrontend * frontend = NULL; for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * mfe = it->second; - if (mfe->hasCable() && SAT_POSITION_CABLE(satellitePosition)) { + if (mfe->hasCable() && SAT_POSITION_CABLE(satellitePosition) && !mfe->forcedDelivery(delsys)) { if (mfe->getMode() != CFrontend::FE_MODE_UNUSED) { frontend = mfe; break; } - } else if (mfe->hasTerr() && SAT_POSITION_TERR(satellitePosition)) { + } else if (mfe->hasTerr() && SAT_POSITION_TERR(satellitePosition) && !mfe->forcedDelivery(delsys)) { if (mfe->getMode() != CFrontend::FE_MODE_UNUSED) { frontend = mfe; break; From 441491d2532a1bc08a062ac85910229dcc2cab3d Mon Sep 17 00:00:00 2001 From: TangoCash Date: Sun, 10 Dec 2017 17:49:24 +0100 Subject: [PATCH 059/107] adding adapter to debug output --- src/zapit/src/frontend.cpp | 89 +++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index 94d08341f..c19cb69e3 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -171,8 +171,8 @@ static const struct dtv_property dvbt2_cmdargs[] = { timer_start); \ if(tmin > timer_msec) tmin = timer_msec; \ if(tmax < timer_msec) tmax = timer_msec; \ - printf("[fe%d] %s: %u msec (min %u max %u)\n", \ - fenumber, label, timer_msec, tmin, tmax); + printf("[fe%d/%d] %s: %u msec (min %u max %u)\n", \ + adapter, fenumber, label, timer_msec, tmin, tmax); #define SETCMD(c, d) { \ prop[cmdseq.num].cmd = (c); \ @@ -207,7 +207,7 @@ static fe_sec_voltage_t unicable_lowvolt = SEC_VOLTAGE_13; CFrontend::CFrontend(int Number, int Adapter) { - DBG("[fe%d] New frontend on adapter %d\n", Number, Adapter); + DBG("[fe%d/%d] New frontend on adapter %d\n", Adapter, Number, Adapter); fd = -1; fenumber = Number; adapter = Adapter; @@ -250,7 +250,7 @@ CFrontend::CFrontend(int Number, int Adapter) CFrontend::~CFrontend(void) { - DBG("[fe%d] close frontend fd %d\n", fenumber, fd); + DBG("[fe%d/%d] close frontend fd %d\n", adapter, fenumber, fd); if(fd >= 0) Close(); } @@ -262,7 +262,7 @@ bool CFrontend::Open(bool init) char filename[128]; snprintf(filename, sizeof(filename), "/dev/dvb/adapter%d/frontend%d", adapter, fenumber); - DBG("[fe%d] open %s\n", fenumber, filename); + DBG("[fe%d/%d] open %s\n", adapter, fenumber, filename); if (adapter == -1) { deliverySystemMask |= DVB_S; @@ -301,12 +301,13 @@ void CFrontend::getFEInfo(void) //FIXME if (fenumber > 1) info.type = FE_QAM; - printf("[fe%d] frontend fd %d type %d\n", fenumber, fd, info.type); + printf("[fe%d/%d] frontend fd %d type %d\n", adapter, fenumber, fd, info.type); bool legacy = true; #if HAVE_ARM_HARDWARE std::ifstream in; - in.open("/proc/bus/nim_sockets"); + if (adapter == 0) + in.open("/proc/bus/nim_sockets"); if (in.is_open()) { std::string line; @@ -425,7 +426,7 @@ void CFrontend::Close(void) if(standby) return; - INFO("[fe%d] close frontend fd %d", fenumber, fd); + INFO("[fe%d/%d] close frontend fd %d", adapter, fenumber, fd); if (!slave && config.diseqcType > MINI_DISEQC) sendDiseqcStandby(); @@ -468,14 +469,14 @@ void CFrontend::reset(void) void CFrontend::Lock() { usecount++; - INFO("[fe%d] usecount %d tp %" PRIx64, fenumber, usecount, getTsidOnid()); + INFO("[fe%d/%d] usecount %d tp %" PRIx64, adapter, fenumber, usecount, getTsidOnid()); } void CFrontend::Unlock() { if(usecount > 0) usecount--; - INFO("[fe%d] usecount %d tp %" PRIx64, fenumber, usecount, getTsidOnid()); + INFO("[fe%d/%d] usecount %d tp %" PRIx64, adapter, fenumber, usecount, getTsidOnid()); } fe_code_rate_t CFrontend::getCFEC() @@ -808,30 +809,30 @@ struct dvb_frontend_event CFrontend::getEvent(void) ERROR("ioctl"); continue; } - //printf("[fe%d] poll events %d status %x\n", fenumber, pfd.revents, event.status); + //printf("[fe%d/%d] poll events %d status %x\n", adapter, fenumber, pfd.revents, event.status); if (event.status == 0) /* some drivers always deliver an empty event after tune */ continue; if (event.status & FE_HAS_LOCK) { - INFO("[fe%d] ******** FE_HAS_LOCK: freq %lu", fenumber, (long unsigned int)event.parameters.frequency); + INFO("[fe%d/%d] ******** FE_HAS_LOCK: freq %lu", adapter, fenumber, (long unsigned int)event.parameters.frequency); tuned = true; break; } else if (event.status & FE_TIMEDOUT) { if(timedout < timer_msec) timedout = timer_msec; - INFO("[fe%d] ######## FE_TIMEDOUT (max %d)", fenumber, timedout); + INFO("[fe%d/%d] ######## FE_TIMEDOUT (max %d)", adapter, fenumber, timedout); /*break;*/ } else { if (event.status & FE_HAS_SIGNAL) - printf("[fe%d] FE_HAS_SIGNAL\n", fenumber); + printf("[fe%d/%d] FE_HAS_SIGNAL\n", adapter, fenumber); if (event.status & FE_HAS_CARRIER) - printf("[fe%d] FE_HAS_CARRIER\n", fenumber); + printf("[fe%d/%d] FE_HAS_CARRIER\n", adapter, fenumber); if (event.status & FE_HAS_VITERBI) - printf("[fe%d] FE_HAS_VITERBI\n", fenumber); + printf("[fe%d/%d] FE_HAS_VITERBI\n", adapter, fenumber); if (event.status & FE_HAS_SYNC) - printf("[fe%d] FE_HAS_SYNC\n", fenumber); + printf("[fe%d/%d] FE_HAS_SYNC\n", adapter, fenumber); if (event.status & FE_REINIT) - printf("[fe%d] FE_REINIT\n", fenumber); + printf("[fe%d/%d] FE_REINIT\n", adapter, fenumber); /* msec = TIME_STEP; */ } } else if (pfd.revents & POLLHUP) { @@ -839,7 +840,7 @@ struct dvb_frontend_event CFrontend::getEvent(void) reset(); } } - //printf("[fe%d] event after: %d\n", fenumber, tmsec); + //printf("[fe%d/%d] event after: %d\n", adapter, fenumber, tmsec); return event; } @@ -1257,7 +1258,7 @@ bool CFrontend::buildProperties(const FrontendParameters *feparams, struct dtv_p fec = FEC_NONE; break; default: - INFO("[fe%d] DEMOD: unknown FEC: %d\n", fenumber, fec_inner); + INFO("[fe%d/%d] DEMOD: unknown FEC: %d\n", adapter, fenumber, fec_inner); /* fall through */ case FEC_AUTO: fec = FEC_AUTO; @@ -1291,7 +1292,7 @@ bool CFrontend::buildProperties(const FrontendParameters *feparams, struct dtv_p cmdseq.props[ROLLOFF].u.data = feparams->rolloff; cmdseq.props[PILOTS].u.data = pilot; cmdseq.props[MIS].u.data = feparams->plp_id | (feparams->pls_code << 8) | (feparams->pls_mode << 26); - if (zapit_debug) printf("[fe%d] tuner pilot %d (feparams %d)\n", fenumber, pilot, feparams->pilot); + if (zapit_debug) printf("[fe%d/%d] tuner pilot %d (feparams %d)\n", adapter, fenumber, pilot, feparams->pilot); } else { memcpy(cmdseq.props, dvbs_cmdargs, sizeof(dvbs_cmdargs)); nrOfProps = FE_DVBS_PROPS; @@ -1381,7 +1382,7 @@ int CFrontend::setFrontend(const FrontendParameters *feparams, bool nowait) while (1) { if (ioctl(fd, FE_GET_EVENT, &ev) < 0) break; - //printf("[fe%d] DEMOD: event status %d\n", fenumber, ev.status); + //printf("[fe%d/%d] DEMOD: event status %d\n", adapter, fenumber, ev.status); } } @@ -1432,7 +1433,7 @@ void CFrontend::secSetTone(const fe_sec_tone_mode_t toneMode, const uint32_t ms) return; } - if (zapit_debug) printf("[fe%d] tone %s\n", fenumber, toneMode == SEC_TONE_ON ? "on" : "off"); + if (zapit_debug) printf("[fe%d/%d] tone %s\n", adapter, fenumber, toneMode == SEC_TONE_ON ? "on" : "off"); //FE_TIMER_INIT(); //FE_TIMER_START(); if (fop(ioctl, FE_SET_TONE, toneMode) == 0) { @@ -1450,7 +1451,7 @@ void CFrontend::secSetVoltage(const fe_sec_voltage_t voltage, const uint32_t ms) if (currentVoltage == voltage) return; - if (zapit_debug) printf("[fe%d] voltage %s\n", fenumber, voltage == SEC_VOLTAGE_OFF ? "OFF" : voltage == SEC_VOLTAGE_13 ? "13" : "18"); + if (zapit_debug) printf("[fe%d/%d] voltage %s\n", adapter, fenumber, voltage == SEC_VOLTAGE_OFF ? "OFF" : voltage == SEC_VOLTAGE_13 ? "13" : "18"); if (config.diseqcType == DISEQC_UNICABLE || config.diseqcType == DISEQC_UNICABLE2) { /* see my comment in secSetTone... */ currentVoltage = voltage; /* need to know polarization for unicable */ @@ -1469,7 +1470,7 @@ void CFrontend::sendDiseqcCommand(const struct dvb_diseqc_master_cmd *cmd, const if (slave || info.type != FE_QPSK) return; - printf("[fe%d] Diseqc cmd: ", fenumber); + printf("[fe%d/%d] Diseqc cmd: ", adapter, fenumber); for (int i = 0; i < cmd->msg_len; i++) printf("0x%X ", cmd->msg[i]); printf("\n"); @@ -1552,7 +1553,7 @@ void CFrontend::setLnbOffsets(int32_t _lnbOffsetLow, int32_t _lnbOffsetHigh, int lnbOffsetLow = _lnbOffsetLow * 1000; lnbOffsetHigh = _lnbOffsetHigh * 1000; lnbSwitch = _lnbSwitch * 1000; - //printf("[fe%d] setLnbOffsets %d/%d/%d\n", fenumber, lnbOffsetLow, lnbOffsetHigh, lnbSwitch); + //printf("[fe%d/%d] setLnbOffsets %d/%d/%d\n", adapter, fenumber, lnbOffsetLow, lnbOffsetHigh, lnbSwitch); } void CFrontend::sendMotorCommand(uint8_t cmdtype, uint8_t address, uint8_t command, uint8_t num_parameters, uint8_t parameter1, uint8_t parameter2, int repeat) @@ -1561,8 +1562,8 @@ void CFrontend::sendMotorCommand(uint8_t cmdtype, uint8_t address, uint8_t comma int i; fe_sec_tone_mode_t oldTone = currentToneMode; - printf("[fe%d] sendMotorCommand: cmdtype = %x, address = %x, cmd = %x\n", fenumber, cmdtype, address, command); - printf("[fe%d] sendMotorCommand: num_parms = %d, parm1 = %x, parm2 = %x\n", fenumber, num_parameters, parameter1, parameter2); + printf("[fe%d/%d] sendMotorCommand: cmdtype = %x, address = %x, cmd = %x\n", adapter, fenumber, cmdtype, address, command); + printf("[fe%d/%d] sendMotorCommand: num_parms = %d, parm1 = %x, parm2 = %x\n", adapter, fenumber, num_parameters, parameter1, parameter2); cmd.msg[0] = cmdtype; //command type cmd.msg[1] = address; //address @@ -1583,7 +1584,7 @@ void CFrontend::sendMotorCommand(uint8_t cmdtype, uint8_t address, uint8_t comma //secSetVoltage(oldVoltage, 15); secSetTone(oldTone, 15); - printf("[fe%d] motor command sent.\n", fenumber); + printf("[fe%d/%d] motor command sent.\n", adapter, fenumber); } @@ -1601,7 +1602,7 @@ void CFrontend::positionMotor(uint8_t motorPosition) for (int i = 0; i <= repeatUsals; ++i) sendDiseqcCommand(&cmd, 50); - printf("[fe%d] motor positioning command sent.\n", fenumber); + printf("[fe%d/%d] motor positioning command sent.\n", adapter, fenumber); } } @@ -1690,8 +1691,8 @@ uint32_t CFrontend::sendEN50494TuningCommand(const uint32_t frequency, const int cmd.msg_len = 6; } uint32_t ret = (t + 350) * 4000 - frequency; - INFO("[fe%d] 18V=%d 22k=%d freq=%d qrg=%d scr=%d bank=%d pin=%d ret=%d", - fenumber, horizontal, high_band, frequency, bpf, config.uni_scr, bank, pin, ret); + INFO("[fe%d/%d] 18V=%d 22k=%d freq=%d qrg=%d scr=%d bank=%d pin=%d ret=%d", + adapter, fenumber, horizontal, high_band, frequency, bpf, config.uni_scr, bank, pin, ret); if (!slave && info.type == FE_QPSK) { cmd.msg[3] = (config.uni_scr << 5); /* adress */ if (bank < 2) { /* bank = 0/1 => tune, bank = 2 => standby */ @@ -1781,7 +1782,7 @@ int CFrontend::setParameters(transponder *TP, bool nowait) feparams = TP->feparams; if (!supportsDelivery(feparams.delsys)) { - printf("[fe%d]: does not support delivery system %d\n", fenumber, feparams.delsys); + printf("[fe%d/%d]: does not support delivery system %d\n", adapter, fenumber, feparams.delsys); return 0; } @@ -1820,11 +1821,11 @@ int CFrontend::setParameters(transponder *TP, bool nowait) secSetVoltage(config.powered ? SEC_VOLTAGE_13 : SEC_VOLTAGE_OFF, 100); break; default: - printf("[fe%d] unknown delsys %d\n", fenumber, feparams.delsys); + printf("[fe%d/%d] unknown delsys %d\n", adapter, fenumber, feparams.delsys); break; } - printf("[fe%d] tune to %d %s %s %s %s srate %d pli %d plc %d plm %d (tuner %d offset %d timeout %d)\n", fenumber, freq, s, m, f, + printf("[fe%d/%d] tune to %d %s %s %s %s srate %d pli %d plc %d plm %d (tuner %d offset %d timeout %d)\n", adapter, fenumber, freq, s, m, f, feparams.polarization & 1 ? "V/R" : "H/L", feparams.symbol_rate, feparams.plp_id, feparams.pls_code, feparams.pls_mode, feparams.frequency, freq_offset, TIMEOUT_MAX_MS); setFrontend(&feparams, nowait); @@ -1837,7 +1838,7 @@ bool CFrontend::sendUncommittedSwitchesCommand(int input) {0xe0, 0x10, 0x39, 0x00, 0x00, 0x00}, 4 }; - printf("[fe%d] uncommitted %d -> %d\n", fenumber, uncommitedInput, input); + printf("[fe%d/%d] uncommitted %d -> %d\n", adapter, fenumber, uncommitedInput, input); if ((input < 0) /* || (uncommitedInput == input) */) return false; @@ -1860,7 +1861,7 @@ bool CFrontend::setDiseqcSimple(int sat_no, const uint8_t pol, const uint32_t fr {0xe0, 0x10, 0x38, 0x00, 0x00, 0x00}, 4 }; - INFO("[fe%d] diseqc input %d -> %d", fenumber, currentDiseqc, sat_no); + INFO("[fe%d/%d] diseqc input %d -> %d", adapter, fenumber, currentDiseqc, sat_no); currentDiseqc = sat_no; if (slave) return true; @@ -1894,7 +1895,7 @@ void CFrontend::setDiseqc(int sat_no, const uint8_t pol, const uint32_t frequenc if ((config.diseqcType == NO_DISEQC) || sat_no < 0) return; - if (zapit_debug) printf("[fe%d] diseqc input %d -> %d\n", fenumber, currentDiseqc, sat_no); + if (zapit_debug) printf("[fe%d/%d] diseqc input %d -> %d\n", adapter, fenumber, currentDiseqc, sat_no); currentDiseqc = sat_no; if (slave) return; @@ -1974,27 +1975,27 @@ void CFrontend::setSec(const uint8_t pol, const bool high_band) void CFrontend::sendDiseqcPowerOn(uint32_t ms) { - printf("[fe%d] diseqc power on\n", fenumber); + printf("[fe%d/%d] diseqc power on\n", adapter, fenumber); // Send power on to 'all' equipment sendDiseqcZeroByteCommand(0xe0, 0x00, 0x03, ms); } void CFrontend::sendDiseqcReset(uint32_t ms) { - printf("[fe%d] diseqc reset\n", fenumber); + printf("[fe%d/%d] diseqc reset\n", adapter, fenumber); // Send reset to 'all' equipment sendDiseqcZeroByteCommand(0xe0, 0x00, 0x00, ms); } void CFrontend::sendDiseqcStandby(uint32_t ms) { - printf("[fe%d] diseqc standby\n", fenumber); + printf("[fe%d/%d] diseqc standby\n", adapter, fenumber); if (config.diseqcType > DISEQC_ADVANCED) { /* use ODU_Power_OFF command for unicable or jess here to set the used UB frequency of the frontend to standby */ struct dvb_diseqc_master_cmd cmd = {{0}, 6}; - printf("[fe%d] standby scr: %d\n", fenumber, config.uni_scr); + printf("[fe%d/%d] standby scr: %d\n", adapter, fenumber, config.uni_scr); if (config.diseqcType == DISEQC_UNICABLE) { cmd.msg[0] = 0xe0; @@ -2065,7 +2066,7 @@ int CFrontend::driveToSatellitePosition(t_satellite_position satellitePosition, sat_iterator_t sit = satellites.find(satellitePosition); if (sit == satellites.end()) { - printf("[fe%d] satellite position %d not found!\n", fenumber, satellitePosition); + printf("[fe%d/%d] satellite position %d not found!\n", adapter, fenumber, satellitePosition); return 0; } else { new_position = sit->second.motor_position; @@ -2075,7 +2076,7 @@ int CFrontend::driveToSatellitePosition(t_satellite_position satellitePosition, if (sit != satellites.end()) old_position = sit->second.motor_position; - if (zapit_debug) printf("[fe%d] sat pos %d -> %d motor pos %d -> %d usals %s\n", fenumber, rotorSatellitePosition, satellitePosition, old_position, new_position, use_usals ? "on" : "off"); + if (zapit_debug) printf("[fe%d/%d] sat pos %d -> %d motor pos %d -> %d usals %s\n", adapter, fenumber, rotorSatellitePosition, satellitePosition, old_position, new_position, use_usals ? "on" : "off"); if (rotorSatellitePosition == satellitePosition) return 0; From ac9a7c43cb9fc229a46753b7b438fa52615c7e45 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 11 Dec 2017 12:57:56 +0100 Subject: [PATCH 060/107] - rcinput: fix compiler warnings about unused variables Signed-off-by: Thilo Graf --- src/driver/rcinput.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 2f45b9269..7c0da87a4 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -194,10 +194,8 @@ void CRCInput::open(bool recheck) /* close() takes the lock, too... */ OpenThreads::ScopedLock m_lock(mutex); - unsigned long evbit; struct in_dev id; DIR *dir; - struct dirent *dentry; dir = opendir("/dev/input"); if (! dir) { printf("[rcinput:%s] opendir failed: %m\n", __func__); @@ -205,6 +203,8 @@ void CRCInput::open(bool recheck) } #if !HAVE_GENERIC_HARDWARE + unsigned long evbit; + struct dirent *dentry; while ((dentry = readdir(dir)) != NULL) { id.path = "/dev/input/" + std::string(dentry->d_name); From 889c9966244c77a8a1a47d450d3512c4ee5585a0 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 11 Dec 2017 13:05:18 +0100 Subject: [PATCH 061/107] - channellist: fix segfault while virtual zapping and bouquets are empty Signed-off-by: Thilo Graf --- src/gui/channellist.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 91be050da..6892988e9 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -1471,7 +1471,10 @@ void CChannelList::virtual_zap_mode(bool up) g_RCInput->getMsg(&msg, &data, 15*10); // 15 seconds, not user changable if ((msg == CRCInput::RC_left) || (msg == CRCInput::RC_right)) { - channel = bouquetList->Bouquets[bactive]->channelList->getPrevNextChannel(msg, sl); + if (!bouquetList->Bouquets.empty()) + channel = bouquetList->Bouquets[bactive]->channelList->getPrevNextChannel(msg, sl); + else + channel = CNeutrinoApp::getInstance()->channelList->getPrevNextChannel(msg, sl); bactive = bouquetList->getActiveBouquetNumber(); } else if (msg == CRCInput::RC_up || msg == CRCInput::RC_down) { From 4bacd77f8bcd61c21b99a1cfc52fce6a8d46c5fd Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 11 Dec 2017 17:20:04 +0100 Subject: [PATCH 062/107] CZapitChannel: add issue tag This should be reworked --- src/zapit/src/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zapit/src/channel.cpp b/src/zapit/src/channel.cpp index fd8ccb586..7779d6728 100644 --- a/src/zapit/src/channel.cpp +++ b/src/zapit/src/channel.cpp @@ -218,7 +218,7 @@ bool CZapitChannel::isUHD() if(strstr(name.c_str(),uhd.c_str())) return true; uhd = "4k"; - if(strstr(name.c_str(),uhd.c_str())) + if(strstr(name.c_str(),uhd.c_str())) //FIXME: this statement may fall through return true; } default: From 057cee2408917d580402b261382b720685035255 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 14 Dec 2017 12:36:44 +0100 Subject: [PATCH 063/107] src/gui/screensetup.cpp reset channellist modules --- src/gui/screensetup.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/screensetup.cpp b/src/gui/screensetup.cpp index 2ffd55c76..9b1066211 100644 --- a/src/gui/screensetup.cpp +++ b/src/gui/screensetup.cpp @@ -160,6 +160,9 @@ int CScreenSetup::exec(CMenuTarget* parent, const std::string &) if (g_InfoViewer) /* recalc infobar position */ g_InfoViewer->start(); + if (CNeutrinoApp::getInstance()->channelList) + CNeutrinoApp::getInstance()->channelList->ResetModules(); + loop = false; break; } From 8b1b72267a88c6e5ba8b4725164a3c05ba7838a6 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 15 Dec 2017 17:52:30 +0100 Subject: [PATCH 064/107] CTestMenu: add example for variable caption inside message buttons --- src/gui/test_menu.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 4d1e6fb5b..6229825f6 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -975,6 +975,22 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) DisplayInfoMessage("Info Test!"); return menu_return::RETURN_REPAINT; } + else if (actionKey == "msgbox_alt_btn"){ + CMsgBox msgBox("Variable buttontext...", "Msgbox Test"); + msgBox.setShowedButtons(CMsgBox::mbNo | CMsgBox::mbYes); + msgBox.setButtonText(CMsgBox::mbNo, "Left Button"); + msgBox.setButtonText(CMsgBox::mbYes, "Right Button"); + msgBox.paint(); + res = msgBox.exec(); + msgBox.hide(); + + std::string msg_txt = "Return value of MsgBox test is "; + msg_txt += to_string(msgBox.getResult()); + + ShowHint("MsgBox test returns", msg_txt.c_str(), 700, 10, NULL, NULL, CComponentsHeader::CC_BTN_EXIT); + + return res; + } else if (actionKey == "footer_key"){ CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, "Footer-Key pressed. Press EXIT to return", 350, NULL, NULL, CComponentsHeader::CC_BTN_EXIT); hintBox.setTimeOut(15); @@ -1229,6 +1245,7 @@ void CTestMenu::showMsgTests(CMenuWidget *widget) { widget->addIntroItems(); widget->addItem(new CMenuForwarder("HintBox test!", true, NULL, this, "hintbox_test")); + widget->addItem(new CMenuForwarder("Other buttontext", true, NULL, this, "msgbox_alt_btn")); widget->addItem(new CMenuSeparator(CMenuSeparator::STRING | CMenuSeparator::LINE, "MsgBox")); widget->addItem(new CMenuForwarder("cancel on timeout", true, NULL, this, "msgbox_test_cancel_timeout")); widget->addItem(new CMenuForwarder("yes no", true, NULL, this, "msgbox_test_yes_no")); From 39fb9f47f4c55e4165df685944048feb22eed2d1 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 15 Dec 2017 18:01:03 +0100 Subject: [PATCH 065/107] CComponentsFooter: fix force re init of button container clear() removes only items and their instances inside button container, but all other properties (e.g. width) are not touched. Re init should avoids this. --- src/gui/components/cc_frm_footer.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index 00cdf49df..88e8589a2 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -107,8 +107,10 @@ void CComponentsFooter::initVarFooter( const int& x_pos, const int& y_pos, const void CComponentsFooter::setButtonLabels(const struct button_label_cc * const content, const size_t& label_count, const int& chain_width, const int& label_width) { /* clean up before init */ - if (btn_container) - btn_container->clear(); + if (btn_container){ + removeCCItem(btn_container); + btn_container = NULL; + } if (label_count == 0) return; From ac696e9ba32c16cf3dc8c33dc0f18046617ef9f3 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Mon, 11 Dec 2017 21:00:17 +0100 Subject: [PATCH 066/107] update cryptsystems --- src/gui/infoviewer_bb.cpp | 15 ++++++++++----- src/gui/streaminfo1.cpp | 7 +++++-- src/gui/streaminfo2.cpp | 7 +++++-- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index cc52f1f95..6e615f191 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -717,10 +717,12 @@ void CInfoViewerBB::paint_ca_icons(int caid, const char *icon, int &icon_space_o int py = g_InfoViewer->BoxEndY + OFFSET_INNER_SMALL; int px = 0; static std::map > icon_map; - const int icon_space = OFFSET_INNER_SMALL, icon_number = 10; - static int icon_offset[icon_number] = {0,0,0,0,0,0,0,0,0,0}; - static int icon_sizeW [icon_number] = {0,0,0,0,0,0,0,0,0,0}; + const int icon_space = OFFSET_INNER_SMALL, icon_number = 11; + + static int icon_offset[icon_number] = {0,0,0,0,0,0,0,0,0,0,0}; + static int icon_sizeW [icon_number] = {0,0,0,0,0,0,0,0,0,0,0}; + static bool init_flag = false; if (!init_flag) { @@ -737,7 +739,8 @@ void CInfoViewerBB::paint_ca_icons(int caid, const char *icon, int &icon_space_o icon_map[0x1800] = std::make_pair(index++,"nagra"); icon_map[0x0B00] = std::make_pair(index++,"conax"); icon_map[0x0D00] = std::make_pair(index++,"cw"); - icon_map[0x0900] = std::make_pair(index ,"nds"); + icon_map[0x0900] = std::make_pair(index++,"nds"); + icon_map[0x1000] = std::make_pair(index ,"tan"); for (it=icon_map.begin(); it!=icon_map.end(); ++it) { snprintf(buf, sizeof(buf), "%s_%s", (*it).second.second, icon); @@ -785,7 +788,9 @@ void CInfoViewerBB::showIcon_CA_Status(int notfirst) return; } - int caids[] = { 0x900, 0xD00, 0xB00, 0x1800, 0x0500, 0x0100, 0x600, 0x2600, 0x4a00, 0x0E00 }; + + int caids[] = { 0x1000, 0x900, 0xD00, 0xB00, 0x1800, 0x0500, 0x0100, 0x600, 0x2600, 0x4a00, 0x0E00}; +// const char *green = "green"; // unused const char *white = "white"; const char *yellow = "yellow"; int icon_space_offset = 0; diff --git a/src/gui/streaminfo1.cpp b/src/gui/streaminfo1.cpp index 494cbe8b9..fcb6b5445 100644 --- a/src/gui/streaminfo1.cpp +++ b/src/gui/streaminfo1.cpp @@ -876,7 +876,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) } } -#define NUM_CAIDS 11 +#define NUM_CAIDS 12 void CStreamInfo2::paintCASystem(int xpos, int ypos) { unsigned short i; @@ -884,7 +884,7 @@ void CStreamInfo2::paintCASystem(int xpos, int ypos) if (box_h2 > ypos+(iheight*2)) frameBuffer->paintBox(0, ypos+(iheight*2), box_width, box_h2, COL_MENUCONTENT_PLUS_0); - std::string casys[NUM_CAIDS]={"Irdeto:","Betacrypt:","Seca:","Viaccess:","Nagra:","Conax: ","Cryptoworks:","Videoguard:","EBU:","XCrypt:","PowerVU:"}; + std::string casys[NUM_CAIDS]={"Irdeto:","Betacrypt:","Seca:","Viaccess:","Nagra:","Conax: ","Cryptoworks:","Videoguard:","Biss:","DreCrypt:","PowerVU:","Tandberg:"}; bool caids[NUM_CAIDS]; int array[NUM_CAIDS]; char tmp[100]; @@ -936,6 +936,9 @@ void CStreamInfo2::paintCASystem(int xpos, int ypos) case 0x0E: idx = 10; break; + case 0x10: + idx = 11; + break; default: break; } diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index 0e666d11a..4eaa78b09 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -1190,7 +1190,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) paintCASystem(xpos, ypos); } -#define NUM_CAIDS 11 +#define NUM_CAIDS 12 void CStreamInfo2::paintCASystem(int xpos, int ypos) { int ypos1 = ypos; @@ -1198,7 +1198,7 @@ void CStreamInfo2::paintCASystem(int xpos, int ypos) if (box_h2 > 0) frameBuffer->paintBoxRel (0, ypos, box_width, box_h2, COL_MENUCONTENT_PLUS_0); - std::string casys[NUM_CAIDS]={"Irdeto:","Betacrypt:","Seca:","Viaccess:","Nagra:","Conax: ","Cryptoworks:","Videoguard:","EBU:","XCrypt:","PowerVU:"}; + std::string casys[NUM_CAIDS]={"Irdeto:","Betacrypt:","Seca:","Viaccess:","Nagra:","Conax: ","Cryptoworks:","Videoguard:","Biss:","DreCrypt:","PowerVU:","Tandberg:"}; bool caids[NUM_CAIDS]; int array[NUM_CAIDS]; char tmp[100]; @@ -1268,6 +1268,9 @@ void CStreamInfo2::paintCASystem(int xpos, int ypos) case 0x0E: idx = 10; break; + case 0x10: + idx = 11; + break; default: break; } From 3a2f289ad92321aa4fcd13cc9c5b98a854d599f9 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Tue, 12 Dec 2017 21:37:55 +0100 Subject: [PATCH 067/107] data: update crypt icons thx OneOfNine --- data/icons/status/ca/Makefile.am | 3 +++ data/icons/status/ca/biss_green.png | Bin 506 -> 1120 bytes data/icons/status/ca/biss_white.png | Bin 650 -> 1008 bytes data/icons/status/ca/biss_yellow.png | Bin 592 -> 1128 bytes data/icons/status/ca/conax_green.png | Bin 508 -> 993 bytes data/icons/status/ca/conax_white.png | Bin 652 -> 912 bytes data/icons/status/ca/conax_yellow.png | Bin 590 -> 1005 bytes data/icons/status/ca/cw_green.png | Bin 816 -> 851 bytes data/icons/status/ca/cw_white.png | Bin 1057 -> 797 bytes data/icons/status/ca/cw_yellow.png | Bin 1004 -> 857 bytes data/icons/status/ca/d_green.png | Bin 526 -> 953 bytes data/icons/status/ca/d_white.png | Bin 675 -> 878 bytes data/icons/status/ca/d_yellow.png | Bin 604 -> 962 bytes data/icons/status/ca/ird_green.png | Bin 468 -> 868 bytes data/icons/status/ca/ird_white.png | Bin 592 -> 808 bytes data/icons/status/ca/ird_yellow.png | Bin 548 -> 874 bytes data/icons/status/ca/nagra_green.png | Bin 537 -> 974 bytes data/icons/status/ca/nagra_white.png | Bin 668 -> 896 bytes data/icons/status/ca/nagra_yellow.png | Bin 609 -> 978 bytes data/icons/status/ca/nds_green.png | Bin 954 -> 996 bytes data/icons/status/ca/nds_white.png | Bin 1176 -> 925 bytes data/icons/status/ca/nds_yellow.png | Bin 1126 -> 1010 bytes data/icons/status/ca/powervu_green.png | Bin 493 -> 928 bytes data/icons/status/ca/powervu_white.png | Bin 640 -> 853 bytes data/icons/status/ca/powervu_yellow.png | Bin 576 -> 932 bytes data/icons/status/ca/seca_green.png | Bin 509 -> 914 bytes data/icons/status/ca/seca_white.png | Bin 667 -> 852 bytes data/icons/status/ca/seca_yellow.png | Bin 605 -> 919 bytes data/icons/status/ca/tan_green.png | Bin 0 -> 887 bytes data/icons/status/ca/tan_white.png | Bin 0 -> 833 bytes data/icons/status/ca/tan_yellow.png | Bin 0 -> 889 bytes data/icons/status/ca/via_green.png | Bin 525 -> 848 bytes data/icons/status/ca/via_white.png | Bin 653 -> 795 bytes data/icons/status/ca/via_yellow.png | Bin 593 -> 855 bytes data/icons/status/ca/x_green.png | Bin 526 -> 617 bytes data/icons/status/ca/x_white.png | Bin 658 -> 558 bytes data/icons/status/ca/x_yellow.png | Bin 602 -> 619 bytes 37 files changed, 3 insertions(+) create mode 100644 data/icons/status/ca/tan_green.png create mode 100644 data/icons/status/ca/tan_white.png create mode 100644 data/icons/status/ca/tan_yellow.png diff --git a/data/icons/status/ca/Makefile.am b/data/icons/status/ca/Makefile.am index 2da5da09e..8378a40b7 100644 --- a/data/icons/status/ca/Makefile.am +++ b/data/icons/status/ca/Makefile.am @@ -28,6 +28,9 @@ install_DATA = \ seca_green.png \ seca_white.png \ seca_yellow.png \ + tan_green.png \ + tan_white.png \ + tan_yellow.png \ via_green.png \ via_white.png \ via_yellow.png \ diff --git a/data/icons/status/ca/biss_green.png b/data/icons/status/ca/biss_green.png index de13f2a1eed5c3897ed96d5dc97a2200b8e51258..828d0db23aa150006b1d30eb1beebd9430d42b12 100644 GIT binary patch delta 1085 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 diff --git a/data/icons/status/ca/conax_yellow.png b/data/icons/status/ca/conax_yellow.png index 19bddec5f234e85f4777200668f9a6cf7967a6ba..a039b78e41faf5035301e0e33210ea33493d5e9a 100644 GIT binary patch delta 969 zcmV;)12+851nmbQiBL{Q4GJ0x0000DNk~Le0000e0000I2nGNE04X1wrja2ue*=O^ zL_t(YOU;#ANK`=>$A?HPxAL}?8mp_W8k*&5n{0U{7NIgVAuKORwP0(ynHFtP4lZ8N zBf3&~30YATH&D=B=^+Sw@=2fc$)|b|AB2$XZJL>FzMb{*z6(Fj%>VoU=X~d!opTWT z?d~o{{r&5CvA5^Ofxw?Xi*NS!f0nfWo12aL{rf8kM0R#&GtkzS^Ue151PM%>82$YD z3IF=_ne1n5td0~Eq!FDiiqIQPGBe{zb#)&3@dNYv3QI%n@s7De{XCo0$pf& zeH>^51JztxSZF4}!N<9lntFk(ulIo8OCLrX8+J?~g4Wi%uuww6Su!;AkT{)>NnhW6 zKEHM?p8GmF?txD*GE&29_4S3IiFMuXMrcN@K1J5nTFI3w8t~1{S->lS(dw!VudUf= zz>8X~;sLgp$72DVv9j`tfAsg4^Ko0-ZCG5KI3?vguhrG%KuyleI`fKgWu?K-Ct$sy zl@%+d(34wfLuLr&=O=RQDBiy}f!AWW0b`~=eVPq(IkUX{oM^S-P-8?#pW(XflfY6c>6XVye?M-NlJ?3kdCQHD!T!e7uNjMq@N+0y%59Uk6>K3W9NMZJM7? zzG_IFD zi-+k?p6Iw%Q7sxc5&37@eu_567@Pqs rK6-@O+fP(8_j1(VV*2{00000NkvXXu0mjfc#_kb delta 550 zcmV+>0@?lT2hIc`iBL{Q4GJ0x0000DNk~Le0000I0000J2nGNE0G*Ou@{u7le*xo3 zL_t(IPo>n$D+Ev!2Jr6>u<|HdI~zNHgSE1o%|uhAn7npY7PC+qq7)G!<83s9@fh!S zo)J+*qtp~-Vf*R2Zs!=oW)`Pzx9;zp`*pjhukj}8{61zeMMZ+ROx(2$e{ymHUR)?h zBb}WBm6uy29{-t%My{?DLL zxgd9U3UWv!0xm3o+1VD#%ChgrAcuz*X>PW-LmnO!G&?KE(h}IxB2(q$fL6shgoD&4Yd^?pMNp}Wo_}NLjV8(07*qoM6N<$f*s`b%K!iX diff --git a/data/icons/status/ca/cw_green.png b/data/icons/status/ca/cw_green.png index e1d73cfaf1ae79eefda35f91f73bdfa9583a5fcf..df4ab4f4198252fd9b33b62aac4ee8209768ea73 100644 GIT binary patch delta 813 zcmV+|1JeAk2Ga&1iBL{Q4GJ0x0000DNk~Le0000Y0000I2nGNE06skoZ;>H2f9Od> zK~zXf#gbo0(@_-1FFL2&n#O)xDmeYca2u|TxhXVZXo^fjs`;nPLDWEqz!nkdNaTW) zAvp;p1&Npl)f6I_`Vt?-Ccse z>|wTU=hx1y?W1k_Kgs^gPVFA;f68o#%weW(>&F(9lFavvpQOK~r`8YFp_HT#(v+-x zS)r?6SD_I4mO|)a2%I4&C>IBkU4pjrZ7{Jh!Sen-Kg)T#JQ^R@k){15q4QptSJxvr z16kN#psD>7s2QFe23@6&4NwfM@%DPfe)`=s(=e**5?cwT&wrX18v6J-e;k~F%zmDw z3c#7%n-oJ}?7iI!@pPQwJ)1im>-v-ZqWReJ7}EwH3pBj!uVWUj$0V_r|FLaLV=N%w(=J3+-<>`*ROje@qXf zo1<)v1g-_d8gO57ldQqAjjl84G`<2T z2|o|h@QX00G07&;K!02hH7zw@ZZ-=|U0d6kzd^(|<70Z@Vg8*UQoE$_X;5Y$!E}%Y z*Mp$Ozv>4mENL2Xe=Mghnp$~W7P+#DGH89;Dstt<+`~ugF}ud6L79QL)?C!R=7wUp zp17d#PNSgtaq}NFsPTMLvPqMZXXJl+IXDBcFWG71vQk_^a0X&qwE3+mE0hxHk#s@% r`v|GJUo~o&Gtg3CoHJe}gpl8Rz0@(-F=$f&0000gZ{|Wpwk$WYYD8Uqs2Ek23%UqXLtU7T znV5~an2&{6jHOtPl~|3nSceVRe}paAh8@_2J=li>ID{iOisLwmQ#cdyN&HJ-1_QG& z2lKE1i?9UCumY>F2E_vJ#BS`xejLPMRO1*gbu4 zP`R}{7Dxs_<*ssLdXK>27Vh{2e3Pk+_JYcr>~8gfmD`@v_*i!@t)X)FjrW?&P29#^ z-1iCi?(PNqh{lU`_cYjZf9i?e@mgzbJM^3y)85hlY!ccLHm>GV z;3s&77d`>MrzgT*>H~k6Xc;oFJ*{nJ&q^Dp$;P-bX$u!Pyuurwe?amG?E-tb8-`#Y znm}u8hlv`}2O0)7nG*HmL-8Ch@fvUO&L`m4Sxu%TQDFZOqpG;Wq_EziZLD=xleLIr zqO%~*I^^&kAAJJF&TgHKD!FE+aw{>8P=A=@d&jo1wi(@>FSjP7#@0K!kFyRR@Cjdh z0>#d5on-FpF3kEmUlM!TcXwL33xPl5E57>#O8jE|S8g9Tv8U6T%$M5-4nOeACy@Nb zQed04FLyjbQv;WpHRTT9P=lZNjXyDgOt!pM7xf`iSzh}WMdkMhxUADR00000NkvXX Hu0mjfkJ4-q diff --git a/data/icons/status/ca/cw_white.png b/data/icons/status/ca/cw_white.png index 6fac2677c8c3d8b18df9a57fe94dc36e77d5d3f7..3dd7e51edf747661d604a927bdfa9032d296a580 100644 GIT binary patch delta 759 zcmVH1e*&^e zL_t(YOU0EjNUBj3$L~;PDVRfHIQR;o#G(c%5EMZK3loi^w-m1-YDf))s6o4n=%|B> zE-j5k5Rq#wPC;9vIEtf1<9YX7-aXv!!}rFg@Z;Y5Kj(k%x%d0NE5qOC=cj8h7@U87 zeewT^SoiY#`}>D1qSx!W`u#qPe-cr{8tZgAm)&j`Mhs^kA0J!*W}cp&Ae~Ob`uaME zg9EqQ4O?4V&}cMdJQ|J4SSS=S_>_*kzrT~N=EAt1{|C|ajs0eINPEMd!f2&DwH>hJ? zCX=DbOQn+3a05z1Fb8$?nl&A)fjvJz^H!?`idZaWFzGR*SS-r6UawOg9y@Bf7YPP~ zQa?I6A`N|NE(O-W?(XjR{rx>C=I7_hr0c_&o}QL@%gf7hJUcrp$2OadTGTf-HVk7k zSOdGgz2yQ>jE|2?)6C2ae`$Xs91hFesi`TbR;#j)?Ck7NA9ajlKM)8Eokze~v)SYV zP&gb8X+pEE4?{ol&CN~O;zsbDP>XMGZ&S|x{{GN;1e^&IS1%*t^ZCeleSJ;3qEe|) zALA-_a&l6(UawciR#sLFI&yJwL0%J_mCI!=07WX5BIClsf?Q0+f3n#u%+1Zw7;!qC zl#k$-g?b{9Fz8mR)!;M1S)owi0?=`}Tr`2*ZU>LYBQG?i>A9<`tE3}`hlf%>K0Y?+ zi;If}p9#+L`8*eZ&e_=+`2BvvM2e-QB|~mJ9;evY*cjw;If_k8Oi&CjGTmo_GjU<@ z)6-KJ2JR}EOcMBVO`3C1Q*pdc^w{q1?mxW>tbrXI9B@3&QGzwFy}i9PtbCM+dnY9x pA7kP<{}lHC9|htc{TE}5{RV28eg1|{Q5*mO002ovPDHLkV1kTFVsQWf delta 1021 zcmVkU;;tRx=}$efubS^3g(=%j@dEioO8}O=N$1D-QRGx=W+Vc z^YxuK%G=#V@pbo9cbz(QszzrpRQ_sfslwl|_9p!=9T$m-iAYXPMrvv*($mwCnVE^~ z>}=%b<|02oABBa5C@wBWX=y3Sf6L2JSy>6aUXSYPYSh-&qQ1T!jg5_HYHC7DOAFfC z+R)L_fv&DD^z`(gudfdS0|OWu8p6oP2*$?7FflP9KnMUSDJe)xOG8FR2C}lUkdu>x zyu3UV6cnJSs0bw`B`7N^Lq$c!w}G3Ro6*|ZiuU$)bar;4ySp2`y}jt~fA7cO;2?&F zhcP-jit+JrOioT>dU{#|pa%Xa>#C|M)YR0VuC5LZ4Gl0D3}yrWl=alq6lP{-FgG`+ z0We2*LP7#uTwGvjX$hT9C%&GZo=8ec5f969BYR(v#v|CtMh`q0`uaRzBTU(JwqCBLV^^S;$5LuIMH#axo-&AR2v1H^nW_SP}+a zTU*1%#)bw!6DeR|4!X3m-M4ZgMxy@+S}XPcuui7IXQ`SSXh|IdTVP7J3Bkr z+uPFssOn}-2`};UNJk$WF zJslDfV!T8K)WD`af9>bzC;X%yXl%8BfB>;(*U0nbA0Mil5o|Tt4$k z;NajthKZ~d^fu(PEsBd6C>zmCvb$S!-V%_ zr!ae}n{;yuQagN;)XS`IZ*Osbe~-t+37t-{0~1 r`H8QuuYUnF8}z@q_#4*Vr2qX7o#z&R>cYsi00000NkvXXu0mjfbPMdB diff --git a/data/icons/status/ca/cw_yellow.png b/data/icons/status/ca/cw_yellow.png index 2879b11ec1ee7332ee03726b1d30ce8098b04c06..24fca4bcbb6b036a3b8f415266b5637270a93269 100644 GIT binary patch delta 820 zcmV-41IzsE2iXQ8iBL{Q4GJ0x0000DNk~Le0000Y0000I2nGNE06skoZ;>H1e**4F zL_t(YOU0B+NLxV^hKE*TO-w6^+6aw}h*8vr)KoBq5N#136s>*uXrNR<5TRN`ticin z#0Nza#9)OW5)phv5JBxqP_lBRD_v!!8*w3s7}-xCvbTpxON*V@?PfwB95EX8q^ao{Sz7wc;&pXa7OSc%mHD_1L?San=d~a%%?F?d z6p2jXNW@D`aYjbok+ifF)_@X_Q&aOqocH&?F%4E}-uikU(~pn83k`hyf1Wr~7@eGq zU<%=c!(T-cu=e-YkYKQr(a;dP9P-@mdQsf(|G>1du{S~kAP02tCTa;_ba?2-M@MeL zX>7Cz)9`Se&^bQeTehyQ#*4dL6-<+Qf$C~A(|dcXga$rdivvBNgM&UyAsn+gTbQJ} z5_-Lw<&~E|V&~l4`|PaMf2N5Qbf>dGc2)qRaJUOo=qrh#Qr%@HgF!2_zfoTw8{~`( z6$ypf*dFNUC>MLsAr5wzr${&Q3Go*lZ7labclW=$ugKmDod^=V~;me{8i_vRKS+&z0$b z-~U2*r9cm8W1|*R2&cQdL>SA;bo9INQpCL8=OjO0E6zYpPV5PCT3ZX4-q~3!(>0nD znJ)p1mX{rPWyL|Hm`oZ`ATv`%N=hD(!a}Xkq`6LK{0RackA>+I6Y)6#Dk}6cpA_f; z1%o!cxM(9%=H{$)f3WnjLY&Gh)&P yK};T#lls^6^&vDmdarGKJRK(o^(TZ7`UPuQfO+P?j6nbZ3IG5}MNUMnLSTZ<1AEv2 delta 968 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 A@c;k- delta 552 zcmV+@0@wYh2G9f{iBL{Q4GJ0x0000DNk~Le0000I0000J2nGNE0G*Ou@{u7le*xu5 zL_t(IPo>mJiYh@624L@@A}-vxaHmHQL_`HaaJC(BR-ET~#t}tPP!t70Q1D89hTg`b z@==j=S>2mn{E(|JBQhgX5Q%(zCgWcCOHxtKr+``LbUH8^jbJjFz-%^y)oKNY!vSu$ z8+<+=1cN~chrBAHAEky@<=tyYUd ze2CZUMI;uB{fKnCT?(;?-EK!jp-_NOCmu zUav>U@Ao6JSS%3P@AnkqL#ov(8B`WxW{M9v9*-1CBoc@ei$z4_ayddOm5Mx_)oO*v z;c$TS`Ai`$(r7e5DwQI_enuvfy&>1@l|n31sZPqkD2@Z|GAkwj07H+ zmutG~>y2-Lz&ib(TwSeM1A)y)e>aC()?HluX3@m?`EnUKJ@s18&gNNk;icsG_$NI% z`NcTp<%MB1H$T5MudaT=T&@qy@1MpV0CS<;-d+ovo&Bolg#u?He!r9Y{VwUIL8MPN zjO^^xTXRljrJfxg{=hEGMd|^N?d*KVt`a9DM@M!l!8l&;XV%eCi8p|~f6w;?bMDRN z0=esUzh!!T270*W-K?w>*{Riua@Xl>ljnFB=Jxi6urEN#{=SVK9N3u1$jECPhP{|^ z-_%r!ZfNKg`u_ep^qHB-vV)a70A?fgIdCSjyW34An8@&OJr2TN%(%B$O3<~oK108> z^d5aiMw0AcX55F;(2%F-0XkiRoWUyk&CPb4 zGZ?gr>;_8K*IVeuMhg?^=`rCT?8S_GlS#|$_6nAe5F=l!RCn3Te@vaCtJMbIO;|-g zK5oYQw6zr~G62p*R#qCQ1QY4%dWwUv7c=f_YO>^OtJR1uJw1*sEYxBbuDR#VZhs-Y zn0vC1iMhijCSGDDK*{2wnfiQY=_esbNlCKwSM>LL1N({!4d&ceRcX;RHfEtW7#^V4 zXkyVvqO-FQyCQHVf8zC;=={8iaU$J7tyYEQW^)?4xj7>%E)IUt0gFW^dzj-+q_i}N zb$93Ed?;`x;_(zwk4MiqeSJA$*lf9Bx!s4((q z&XInxqX#$>nVi&=xm;@LpK$cxaHPGFK5{}vM`PQ^#^Pvn8xa4I5JLU{=Ex6(8+ylZ P00000NkvXXu0mjfF}j_| delta 508 zcmVn$N;^K4KzoFhxng(Jp)Z>#pERD_k+P8I5Pvz z&VqAu;Nl{ze6cosetgh+^(4MX?D{^(EKxV{f z$L$tmV!|G|zE+@x1wq!=b!2<{>%oXXQ&U!?R08kr6vz(Q-32`!fwb|ke?ux21u~FW zOpwDv(CZZ_5CG55t;oZJ0-2G612CBc$HoK-g#@|173Aqjf$Wf@Bhcp)NE;D5q*ha) ztt~+k2|;>#1nTPp$H&2PS&(WKY%~F^Bx|G1 z+5Eh|Z)W7>MS;x7*%^3wQVAA|`k!d++}{gQuM5&@DUgO}=OCABM{aHed3>}--rf{Q yMJ_J>Mw(4QUSGlY_aA7~HTa`87E_w>1apN^&d7 z+0^GLKK*4Hh^Fo)I2Jl4z_mI@dRL-LqaRi`HLF#%_HPO)x_x50yr z2Rr;YADh^m;EBxy5XCjcpu7S}?`*Hkk=A^pS!#qk=$83?2lm0}#^??YfA%ujOwzX< zJbQZ$&c{YRjc^4Z3QrYk3LQR&%#qf3y-{k&!0Lde25G;C~~J!?H&0SHIXAsS(9f6*=*S6r#ktjQmJ8He+(n;-HoX)fM13V zFTYeS{kSH*b+#3vD^bvA>&2dWAeLf_^pQq;LhV<Eug+-( zM0_!y^qZV}|5_2OM_+z@>KP%YM@|bZJRTMpEC!*|nHrS&So1!-&iyooZP1b4jf88kUD-~Y^AP9{rmhfiU2q8 zlZrV_!TFf&ku6|NSRq}>dzjazJO{=MqlReaSSC+5jAO>jj4}2HBMZIUzO1i)00000 LNkvXXu0mjfhib~e delta 497 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 Q00000NkvXX1g=70f`6{Tg#Z8m delta 570 zcmV-A0>%B(2jK)EiBL{Q4GJ0x0000DNk~Le0000I0000J2nGNE0G*Ou@{u7le*yMM zL_t(IPo>mLE3Q!#2k`&M+z4|M2KWMe2okxyrFZI_4jK3miU<)Qa?3UM`~8}0L=@4h zl%fnw|5}#S+HW}~2CLSy+t2S=Ywg{G%8E$r-`^;I6V+9b7$m8!1?%g<#zwHY8Ek6< zJ37FwF0i*3?C%GMhQQHLaAE?Sf1U>C=D@{8aCH@**e6t1=SXYo&&br2BP%Q5`g#C; zhxGI~GBWaiWNRyc3~6r%qfsy|4NOl5v$DW}0Y@@2z|2f--H_eg05U`>$;|};kFqjF zW@mj(=4r^mK>!&d?d0XfLkS6BUmv)z;A=7pLynIFsIyZMc_BYvHzy`)e@HG>%1jJu zYEtCr2s}FrAVUTR!GZ$aoRkFC)cDI%wdE}>j$B*>kRijvU}2#{(oSlsK4)h;Br`SS z>MDQ?86O9WiX2*A*1;NJA=Mdja}z*@OiqHu#kx5;8C+WfH#fnYoOnoPYRKJP0F8|) zGBX2~mO3QJ&W;|0oSs45f8C1Q-hvMg0c6PhJQ#`S=9Cmg_V>ZVL$IX8A%P8fd<-B% zmX`D;H#F$&HRSYEQM+p=CyqQl1&|>&lkM$z(`2jmAKiBL{Q4GJ0x0000DNk~Le0000f0000I2nGNE0LI<-n2{khe|bqn zK~zXf&6M3sQ*ju_fAnH!N9LTHx@8{c+?Fl0mMs(9(lUl5xwW#%lDJGD>D8DANvoRQ&2!?3k$E4X|v zP%Bi?(=pHi7w0Y(WpO_?wlc;zFMq;491w?cxO0{q@EL_#5sv@@6#1T957cg}r9O#q zt^v*xiwT}sN`Ry}-Aql=*}OK>Ftt{tnzmmfAA1rb-#6DMmP7Asb&~&|-Pd-5VpnKJ z&s2{&qwmLJFJoK>e&Qo^qQc?P+Gr&o91aSPv)!F; z=z7vc{fINObN7zALsaD9>?kRq3M(X?PDQlcv?kNXb z&<0k2;mg>!*(pot`?0os8*iIw1BpA~rY57`a&rr;S-(d3e==toc}JwMyb)DXK|7(D zX814rL2(xztpw-R#A+b)IAqET^!?c8>CL=(x)~%*cbY)EtO<-B@m%)^-;iw}=NIQN&uYjy65l=FsyPJrWA)?pTzjC0OBCFXRo}1P?#wx%RB_yM#PwH#G3Az$vfQ@t hQbWD1o?wiz6~9qNv&>uX)lmQd002ovPDHLkV1oVY-c|qr delta 916 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 Hu0mjf5FrS4 diff --git a/data/icons/status/ca/nds_yellow.png b/data/icons/status/ca/nds_yellow.png index 989a3000c0f6a17d4f06f383b74fb5f3dd269d74..51a102d8a461a552755c81e141402e827e0bc974 100644 GIT binary patch delta 973 zcmV;;12X*P2=WIZiBL{Q4GJ0x0000DNk~Le0000f0000I2nGNE0LI<-n2{khe}_p# zK~zXf&6M3sQ*ju_fAr$Z!nbYeOr6uFm65i}OmL>XFeGU%OGkpaFc=p0df}krM^lv0 zd7+?YA_~3G0t?!_$t$nAvb(N!RX5Rv5TV^Y{hr_aJv+zw2Tb^I&iOpw=h-vQ*D=zqNlr^&-vv1*7MrA;mRGO*(A<0s>~;%eXB%Ws zXJ-S1!w-|PxF3tf#(69j5(DE547fl%1%%JnM755NI_XMEj7e@c($n|Bf15Y`ltpmf zZds(h-mc5W8RzW#_aGO5;?A8GT_b+b@^Zhdc{~p3ii>k8uN*Qy-U%;X_JG%$SUf8$ zgZd+p0rF?gl*{WcUmn5K)D3VtE2UF&HE_1R9^l`;1wi5VH_{+n5RWY_RkC*FN{zfe zcrb_Z$|2EcKl$g+FOygOe-jfO(_f+0E)i8dK&cLLE_d-Pj^6D zTeUndD$1t3a>&PzKJp0W(3?yKd5v|IMX-ML>TwtvYK676ySiQtoUN_h<^mCl`niI6XbbsS&TAJW1SsqcKw+EtUh6ceyI4{`z%0dBkqdlRhnNFRZM1$%jH0p|-Y= z`V`u^8aRtYJUklpi02_rclQx$Qm&#RM>njn&_K0Im#pL$7F^`R;WoJ(`kERu`JFs{ zdKU8XGHAx^>_uH2fA?d{%PuYuzrZ+MU5BVaxnNNLnkgvAq}uuO#pGvao20{Id3hFj zzrR{~oZZ-1B)&{D^&<|4nX)@;0?yvPb@F%boS?XNE%Bex`noz3`TYD0^5@Pa-!?67 zcPVAHvu(BmP+grPp7q3+sjbbUtOECAi;JiD($XnVcsxbaf28$8Lq}o%{yoy0&1vMF z&cyOstX2c`_F8o_9zU)Wzv#rRRp4Bgs{rQb9lAV%`?0yX!+dV;2q;EJ4~bz`iPj^} zp4p@i1j@(-gB6rVuwUD=8)}YXY|OrEF3w@jCMQez)Ra}c^-~kvk4;SEp9qD_;P vjE$Mv#UsJkBk*vBcVr}!ryho0#u)n#N0WMAcccJ000000NkvXXu0mjf^62c4 delta 1090 zcmV-I1ikz62j&PNiBL{Q4GJ0x0000DNk~Le0000c0000J2nGNE0Q`!7u#q7(fBQ*9 zK~zXf&6P=P&QTP_&xVyW5<^KhLK=}`BeAI|7Tt&xA*MxzN+q;tOO%L2%%X;(Vu-1w zr8U${O{L}(+rAe>Q*{H-eisfw{ThmM!4ct>E_U;Eo;O&Yj@y-Qb=* zU|t@$Zy&gSKUi1@9y|yZ6@iBifrk%+M~{NXj)BLIgC|ddr%!`t&Vc96f#=VI7cPL8 zE`gUXgIBJg8Lk!#Q&p_qn z;Pva^&6@#O2$Ylr_UviVzrVo=NNalavRJXgfacE!Hy?ylQ15TZ4f21W)b~ZR* z0NAb_2!LI?f`bNuD_4RyZh*ILfp_i%V4F94g@zBemt0JoXbMSHms_;R6q+&P=e1$z zaP8?7QXRK#Yrp9;HrB80f7j1|Dk{Kx_X02hZQEv+B_{e86z$tvUW&Qg;>BiJTAI&E zMOi3lr%0DBU~#coHgKTj1SAEekSxr~0*4GSp!@g1%E|yNtf7%3Z36)*^gL`BnpM@a zV(C(_qy(Hb%jeY9XU}@eTwVtYK$h!!hYsM9CE)GbULgnc=n?q%e{lfjihA!}aMUQ< zpi?KSH$As$V|CyTTfQ7TaRN+F_c?X8EW3Eo6mj{nW38x@lYP!be7x1Q1A6)teEvKD z6Oik&(WC7pffW>hF){YNdw0K~AXU_vnLej+Bg@LlOd)6I;K5eZ>bgmj{Q5AaPY0hp z17ExVU%d*zG#mw?f3_bp#uj((3?4aRo!4?B*(S^8&h@$V>wVj6RJgoU4K33wTeuJ$ zF~YBjiZaDszXspF4ZsAXX{|z)^ja)1%^_LVx3Awsp&F89^XB=SZV3%X6?H;_&&ve? zO_^f9JIka{N{U}6Ro}e>tEvJp0jbNR(D?DTFgn`ikp7|Sf52^^(CCn5p_*!tapS;l z-F$A^G%MgP!1wP1FafE{WWj_9wpd`U%XFU&9qJF% zEg{Raxyywi04XFODfHxt-ZdG##=)(uFt}Xx*kSvozx(8K5I$S`qOxK657I(1= zSe7a026K3Qe}zDv_&ty-YF9(m)vW`4{tPxW1YnT>xeNAhf!@4{9O%mzu(2@!YYj-P z9|@3#qXW`#j1=hO$6tY(n!vALe}JW@PX4Bc|0y!k7$$%F4r_4ek+CQZ#sB~S07*qo IM6N<$f>vb_4*&oF diff --git a/data/icons/status/ca/powervu_green.png b/data/icons/status/ca/powervu_green.png index 7ee4fc6b163d0aad79b5979bc6f63d3a2a2b9487..0164269d9012787ccd2c2cf7dd0023c905cf6a78 100644 GIT binary patch delta 891 zcmV->1BCqT1E2>XiBL{Q4GJ0x0000DNk~Le0000d0000I2nGNE0N51AE0G~Ie*-m1 zL_t(YOU;s7NYhaq#}DS#oR@i-&6UoHx21X67V5|)Iz&X1yp+iTO%g;fl`gu#JZ3jW z&4;cK6%(OYLIqx4>dBXS(x-azsb0c|AS8SH_5YoAe*CA)*EaaDb3W($`<>tZ|1tb5 zZY^dl|6U$l+Fs)So5f#?6D!**e^xPAXe*Sp@N)rTjnI!!B@2EJPRwo2L97wn4087P z>tp`p+Y^v@&U>K9RTP2ivdP*u9N=Jg^Y} zNkMf1C~rF|w&OPNfA&MmXGhI}R*jw#%HvMrLdi*`K$F({uJ>IGIe+bUSX1>gD z1(4)b<%xnMV-oZS`=R4j2c#ZKrABR2Z7{w%PWwW4A=OT;Pk}C37vZs9W^paEi1c`; z+K1uHx8~!%bstD9M=hejaL_=mbGDNj*-zOca`F4)VQh6wxbBDDlxw-(A{>72bQ0;Y zm)Z-Ix!B035v~A|Y)7^ze@HQ>kZZotOpT5W9TTo$yn$TfWTS8;ttDc=PrDBW-wz6h zXFGEe>G4jr55w8O>Ht>&iP>%z1==JnILIGIVL0=C@Nxx^m?}(Ew3DjQD$1#|_@wIZf7DaXb;U&)Tu1YW z^w>x3!*JHV)Xv+N+d*P1H;MvHq6TbUo1nC>6q;T%QAXk%bJ7KR)8D6tgSNeGqfE_Y z4P~&G^sTR3$(x)e@`N%MYkJef6+n`HBwZ9F97rJdFFf-eh||Q;C5XA!9FeJgP)ld2 zMXAsjY81ZwVmbNTe-pV8HDNe&zjSl=D>q0CB?eKT%hZwEi?oU~x&*OZun*& zK?8Y1dAsrgWiD3yw3yqTD*vr8)@xR Riy#01002ovPDHLkV1mV&u2%p6 delta 453 zcmV;$0XqJm2kiqPiBL{Q4GJ0x0000DNk~Le0000I0000J2nGNE0G*Ou@{u7le*uC? zL_t(IPo>mZD}+%P!13qGN3eVaODkU}-e%mm_|@Apo&TJ3rgtO~3&oon>yrNwX%59jAEZT+(uQ_)q8oh}zz{|- zhDpp|9!proru@WyL#+&aqzivVf9BvL8`!p?RFOgW$OO_vWY30tq!${gK`!!;j{+wK zJ(h{cp$*xH?xYx!Miop%PHf0VhEW1tlnFhKepcvaN{{Cva&ANY418o1rO*XgSi}k< zZl-#mkuzM`kd5fYmcfTKqOl@3%fLEZL~d-zN5(OYa`S}BJycN vHgbf&B60Z02fkb=8Ve`%8{t2q4dKK$PJ&df*zqhi00000NkvXXu0mjf&J4%K diff --git a/data/icons/status/ca/powervu_white.png b/data/icons/status/ca/powervu_white.png index 8030685f09c3563f381c89c191aa5482d90e4fb1..4efe83cfc3cd35183f7a6143ec9bedeba4e01c09 100644 GIT binary patch delta 815 zcmV+~1JL|{1=R*2iBL{Q4GJ0x0000DNk~Le0000d0000I2nGNE0N51AE0G~Jf9gp@ zK~zXf&6PbYY(W&qr(okNf`V{QdGnv_Ihnn0z4q-UzwFHa{?EtUJ9DqW@ALCB{PFRz{`K`m{~O!O z#`pJk#5MNz_7;ABf9HI|_SIote_mcTUSD514n>%s`%*W$Q2KV!Ub@^yf|Oe&S4bUMvKYip|usIIP7Egp|+qM4Z)r!6fl zskXAR;11yTF@tmj+(v>(3d$sKPL+dEiElBproXPCnhF%Y;4Sp zB@qq=e8=I7_tgK;h$h>kqIo`Hs+LTPEKdo>098OYcZ zM9a&|EKE*Lx)X{|maqQ=3d0W&o693eZUM2md;oo!+1Xjbw=Lg5UuJ4*ssk&^H|*a1 tWgopUcHhK?hK49#7#<$}ZHzI00JvL4u+mdXFaQ7m07*qo1w^hwV1f`~hUfqQ delta 600 zcmV-e0;m1e27m=2iBL{Q4GJ0x0000DNk~Le0000I0000J2nGNE0G*Ou@{u7me-%kY zK~y+TrPRr4GC>dra1Wkct{U+qDy}*B0v_}vCvaNMLcCrtMxxQ^RixEw5$J?Colb=4bUF|S1RxX&;pXNBL?RK2(P)HRE_a4> zyIle?5xNtpR0=E>>teK8E!1i?j0^??0x=Q4-w!gG3>9%W95hZa7zD9ce~ht8rGk;+ za7ZAx+l`S>C+Rq6YkH-W$A(2P~5{U#Tl}h~f@6qe^XUKFqB@h!yrBa|$seS-_J|7GQ143S3 zUokSD&k4jtve_)C)oN7Cf8+6>*=$0m(}8}!e-T+M76gjN;~1g$q0wk?7vGWh_jinZ ze0;!awIUD`p|AG#_7+1l^8EaK71?Yy1Uez*av7@CD*CP-9v*UtHjb7=MUhPV6q>DgAy?c6}vz>=`y1Z?JA3Nvw{-5VO@4I&lKYM#W z;tvm(8V(K?`Tu5r|3}Ng!B4$+e=ukK?(SCzH2(Z?=CGX|N6YWuGZ1(oQ`=X+&RJ*?30g;iRJ|6337S}S1NRMZ#y%)~b z)@*!z-KI45ke8P%3KA2wn}l)Lv}G$x3Gh=^dQsmX<^svNPFji#m^iQK|MB{_@bvT)JS;bLz# zU!;Dmt+y$MYv~c`@l3V%!r8B1m0STN+1YVabd-jMe9Eb__@w&#fA3JPsi}Z6xc27} z>9LR6d*N(x@gZMYdI*xNES)IOXo8@!(jcg=z6R6NC6tjgHk#;wxH!*K!$H4)FQZIb z+YQQKFX_L0v645L;>b&IF81wP30D9~W@fY~h>Z;+_b+B=Ef5rRiVi^v3ln@Yqoaj% zEj2X?oX%q5-@VHse}Dh}C7&8EoXyP@@%i~8kYr?NML|qVD7ll!&OS$nAaC9nj%8#| zM58$adcB7Bcys;zxyNd7F6MBU_{@w6Bo4aa zjkA%Fi+pr6S$Q`C3!IA$569%#?Kt>XXy delta 536 zcmV+z0_Xjt2fzd&iBL{Q4GJ0x0000DNk~Le0000I0000J2nGNE0G*Ou@{u7le*x7= zL_t(IPo>n$N`gTY2k`&OM<{!RN?f)yx{*)NvWQ%TMMaMxBqV`dC{T(bt>}K!E|wM9 zg(5L1422*lXwmi`6dmu&xfQuLm6t9bT_)OCrgnfFzUw8(>?TPPW^@<74pj6g)pKk32sMXlcnH+uQnxttx&a zcXtMPdIDcw1SAnPNVnTSZVI`){2R&V1!N(6d*H!=zGH!azAh4Zcqm0)Uj-x)HItK* z(n=(f%^KwGO+X4!&%x1AF>-xvkW8jL^6?=ciJYBPMshiWyuX8=pFhx`xBE*i{u4ue a-Cy6=ZTyBNn!nTl0000=+ diff --git a/data/icons/status/ca/seca_green.png b/data/icons/status/ca/seca_green.png index 14a41cdf507f2c39ab2768afd1c99e1a42b21a13..a1706c66be8af81c710d1e4303c3defd14dc8279 100644 GIT binary patch delta 877 zcmV-z1Cspx1Cj?JiBL{Q4GJ0x0000DNk~Le0000d0000I2nGNE0N51AE0G~Ie*-5; zL_t(YOU;yDNK;W5zz_c2A2&j|B%5pWlRA@&6|BJuv?OK4*2WDAmw&`AiR zwNGm}_&EqtW67)t9(!E(g{J%JwXG+b|>`9z34!ouMKIBq#;E}NAhAu-;Ppee19Bd zDjD@iZR`D3?$lhZp>gI)z{r2-$NnQfFh=%AXaPY}s)4bCF`gp~MThu(_N8pXh_Zo+k%az!igc&r6-$it|%of3bfABhRh}d!ior z6Rvd^Nwnr~trHPe{Np0J%z`bf=$#V_so@IxMAQub1$DCZJIKT_hhlgmJD@I`y!11%Ok_8)UR?5Z(rF;QdW2c0TDQqYyA3#w`5mBbdn0cPZj1f^p zuTqM#u;qWar%pF)EPnO$bnpMY=MJxwl;uY%D+)jUqog`NBD#=9`H*I`pcU=tL^pad zfFX=x0@IkoB39)q_8n?s!y;|?e=9Nti>zSXhklCmz#=2~B_dlsWRVV7q#kLAh9Djp zXn>2zt`CJHHHd-+G?W;uRSH~04t&T*`jHGhDFK6+g^pE;Ot^>~`%o7f7SR(mprKgQ zVgaFXz9L6B^C2J68=D6k#iT=DlTbu1e8?ih7>CAk5ss-MxQJZ&kdI7ae+D{EAF7ZA z3&r3RK}2qRC>+tz^u1ZbCU%ewi|KelMDBcOj17y-Ll2Ha4(gy!ORq%tQ(=)?Jou20 zEJGvq>s}I;;3D$qLl)74Y#jY?^~EfPUX^}#mk34V$%n#`ZS3O^dSlPwBlid*^6Wzz z;qO2;;3Frn$Tfb5$g2zr diff --git a/data/icons/status/ca/seca_white.png b/data/icons/status/ca/seca_white.png index ab0871821fa70d5c22e47bf3598d2075c9637120..5d09f490f9787c22dcf3504e1bcaf88428e11d93 100644 GIT binary patch delta 814 zcmV+}1JV4O1=I#1iBL{Q4GJ0x0000DNk~Le0000d0000I2nGNE0N51AE0G~Jf9Xj? zK~zXf&6Z6_Dp3@G@1iucER|9WO=v6hvj~cC)5ctcMy1dXZ(}7CJxwBl;4Z=f4GO`H z5V&X~B~lApv`N>lT}I1jS<&*mdoJ%@uH(E%yA(cV=G^bxIdkUDj0ArlA0N*5_xInQ zpP%%nVYM87eSLX(VXv>R&bPNWf9Nz=UE}2W`T6kWAIJk#f)lrE=B67a9wY9eKlamvEPHi0PBDc4Vu=r5ll`_f6Bbw-QBivYyzT< zGblMdJ*5l~#9}emP{u3xeg8v zT5|qE$?@?qWq@E~V?$0hFfafkBO{!yt}Yo%Bof@kec@{H`~7mx(a}*E@9F80bBY*t zRJaP1?C!T9?6x^yiTi>`-EPfts4Z*Px(8T33{F8BZnSAi1t^wI6@ zZP0=*+=Yb&$)ltEGt&bP3I(V0~jsWW-tP>QaP6O*A%gf8-*p*IWad9!k sZaX1?Kp;9lKTkUa_HXAGA%y$^S!!4ZwLQwW00000NkvXX1g=70f-s(fZ~y=R delta 627 zcmV-(0*w9C2Ac&TiBL{Q4GJ0x0000DNk~Le0000I0000J2nGNE0G*Ou@{u7me=tcz zK~y+TrPRr4GC>dkU?B$)1y6c02MH*66%UdJh+xpDxPYR@s6h{t~f}`-6oNjYb1{y&jB4BUmgJ zu-Rmh!0B{;L59O2g%~6h3PCg)g}b}EZ!r`X7Z(S}cs!=iJ`#_|@jOsFs5-Q) za=Dy991aIwUtb9_nM^2je~g@;pX2Q2EEX}s+`b>Dr>FSS?<4Q;?-XK?LZN`$saC6a zZU%z^R4Nsi&1QVrXf*nQtX3-u9V3lK13H}!^m;u!*uh|MfXwG}NrJ4`YYP2@yu7>+ zLKpx5 N002ovPDHLkV1k0W8n6HW diff --git a/data/icons/status/ca/seca_yellow.png b/data/icons/status/ca/seca_yellow.png index 5b9817b9cdf0bcab3c4cbb250534d5e7556b17f6..a9d1d53c2511180026f7822efecb220748e9f032 100644 GIT binary patch delta 882 zcmV-&1C9LM1eXUPiBL{Q4GJ0x0000DNk~Le0000d0000I2nGNE0N51AE0G~Ie*-K@ zL_t(YOU;x^NE<;IfQQz%My*DT#%C+OKuxtG0Ut$_h)C5URw(u%wMY@$s>KH-9Z)eA zjRzl%29XG&n1UWOUi2V2NKWSF$&+5hgCJtO{hb+|$!3#MZ%yE1cK`qT|NXPGyNLd- zuC`P+H?}V>*Eas&TwiYuxLiBwe|Lket1d5pgTHZcv93X9XO@BU^JVZqEEt`f{KBWF zCXjP*FbXX#TF`2jtkzZ!ht~4CdxFv4 z-fK(%IacdS(CHrg9CBr)kvS?=I6IGt2_f87&|wzr$G&DKP2 z`QMqJuZEl)_nX<(rD5@egfMnaS9uMmvNBoJ84TrK`OVE240)W+g*G;Hm;jvN;S$Ko ziiYv=QW2wccIJtT^!668SbY5L=Yg(LR|<7`omw4EK2y&{Zf2&8U2A^6!lUL6j8<36 z@!DEBaP)e2v$(hrf5^*=Vgv?05HXXfl)3bnyKRBv-gfrT6p5X=+Lo-s0j@sIOP~^a=_h$)D8-mqX`5 zW^*<+n{z;p!SDq7`cegYeY%%3IGE<)NTKy|e{L?@!n$D}+%P2JmNNB?~sztdxz7QB(c_%^Eu;?9j}ls7cKqpeUt?D7VPWko#@i zuenA<5sgxcvao%4=lDABH-nAETc@x0{J!&?@0<^T`l^J#v4;PtreIY9GH7c9J37G5 zPOz&B?CAmf`oMt!aA*h|9RXTgO9aCsSATSF2{LhbDq>F)j;nVGRj zJPvMbDCj3-aL^)=$nVJZwt^g_x7Q-At)RyPW@dr_n41fFyovIXO{Kf4@a!f1&^aWoLse zE#T5pdK^KHkHPbE1!+V!wzASjajK*Q$zzg=TwW^3K_(`^$w`A%RHS24wY6^K`dUF6 znVtsc=1iR7VK5K?%gQX2l?9%iS>*OsL8*vDlXJ7a4sLCMySt#zXEBNAAouqQip4Cl zxM-Sla=`L(FckV~{Q6q5e-e3KTx^lMJMi&QK^j?IHHhB#f5f>M#49q`})JUTKPdvW1L9v&?6@}eL?IP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0}M$-K~zXf&6G_{ z6G0TmCxMjGS|GHfEgwr;YFSA^prA3(G!+^`VvtG@4GBnNIp6_9G-*?XNr=G%)PovG zI2FIJl6Wa4nsD-@7rA-jq!+`%#1Qc|?wc~x&bo57O@4VZ@Be>q-|p-d!7p=|v1NZ} zZ*L!M1KE zUG5^D3!W26yh~88R?Xa-IY9&ZZuW5v}@EBh-rxt}CJb$vBaPWnV< zUd~W25PKgJwC<5^t})!_-GXOoZHjB`dRlcb7h3$Xh!qGhy*W)HsR+d`+j&El0}`JS z)C&Y}1-S>%oAhL1Z-MK8^PE%gRMk~+53C{A5$+Ibj=?DYIgaCdaiT`*l6XTc9WXo1 zRIjY9uGHqF8~bv3KN;RZH)j>ZDqUu7phP zOp>O)+=X?gbR@DH;Xc*};^^~H>W97es+X8-Cc5?vdW7D`U^KovjunU+>sc!;1hjOc zEq6?{-L-Vzd#{)KgAaq;$NE5oy*wh*Jq!sq0&CZRi~9?}D7+oU;cS?wv9wwE#nf6L z8Q_{0Qb^)n)(0Z&2VV^Gr>EuTD088Kw*y##sHyhm|5ntR^NRQdswp*=l2AG%^nu9g zjRPbdY<(V zT~+Q#0c*g@HI6bD@}+#(x8WmdOlNX0D^Qr1=ks@M58DN;HQCBFv)@c}tPjLOuOphj z5#|+8=0eTu%~)QSi5kbegGhHIN@3o;?B;n`7is|08sm+0&-y_8m)EuE`b&ekP{ZQ} zEIm<7MFz};Y97_JTap%1Y?znL!^)8(q<^5lR=!k@iv`1y;RZqo{Q>{6f=d=#_PqcA N002ovPDHLkV1mZZpVt5Y literal 0 HcmV?d00001 diff --git a/data/icons/status/ca/tan_white.png b/data/icons/status/ca/tan_white.png new file mode 100644 index 0000000000000000000000000000000000000000..d761032309b3ea2496c4c7e73667ad9b398a8af9 GIT binary patch literal 833 zcmV-H1HSx;P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0@g`HK~zXf&6ZC{ zYC#mnXCs8RP$CmWe25ZJ^oO9xg-9q=SUjUZg5tGETLe98Q;T3g!9}!)7J`D*!ezB9 z7jAUl+NHFNmK81M%{Mf|oq6}QeF{Hj=6v5d_uMYy4^12FtD<+!sh1YzUBV@UU=>s_CUcLDjQ4Rxszn}4){+4RBD!kzK_EytYS67uLnVp^0JQo)i zN|V>K%i~beZntTt(_x@esj$n-OF=XmRRv`XJUl!IFWBAPRUR-nILKP9meRq@%#7yo z`FzTQIbzGp%UTXVU*z%ekv5x6W->WBsS4WZAQ%h^ePm=rc}t~|=8<(g9*^?m^Le4k zyi_WsU-Ud-KYH>=m{ z%8Ut&q<3m+N@*4-IX*t79A+Yq31E%mqB4#zfmPev+f&;3__&D4 zIvA~9d?8G)0VVv*q5J#$%w%I@gRQNt39NDa9LYH5Rt-oklgWs+tb_4i-fTAemxjK` z_VzZ#Mfwf&MK(7#r*T*P20urC@+~KX?|+v6zR`Yx|6BP*2qAv}b^Ai9oqnXs00000 LNkvXXu0mjfGG2$` literal 0 HcmV?d00001 diff --git a/data/icons/status/ca/tan_yellow.png b/data/icons/status/ca/tan_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..99765a45ec2a933691e94ad07fd61296c2d46321 GIT binary patch literal 889 zcmV-<1BU#GP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0}e?8-47HU)TZ8GL9$JcmK}`ol^pM7bN`;)_ zXN(0e8d1o}lU~ftQ%-sj4}ysCHr+SLOfuW8*Cz1e&Ak8ry?wirT?D_Yt1a!#P4HVZ zx{d!g*VkJk(dbTLe6WD_^71!HH7+g!)#&WZH*$WyNKy|UMkgn~@agFS0lK>CNpo}A zt?cfOQm<0Y#>RI+0|o}#xDMWAjnz7x-9jFKxlknX6GtK*0u&THBGO6U%IfMD>IL@p zMg+}fYv3BAsi{QpEG+bMja^Tv4(39~#}inB0Dk{x;`7-l27`__WI5pQaFlw1!NC^p z0aU7V5)S|1I?&iyBzW@kv$+S>kh5BAgqk=Q9UVDwIP8=PMC$AHyrGf~6cwqdo|pHK zd*|oh3Le%+qsio+;o(SRaUH^HaK3t20P2=pZ`X1I3y+813&numq7)QMb{l2WkT;b7==Rbv4qr6q^c^H76MATRvSB} zhK4-49~*ng{nOJe+{gMrguTsXpnDh+ZUolt?Zw=m1V-E2RvZjkrN=B%S*hU{lWQK2 znQKZ|EPC!`eIUYqWu=2ZJtaQ_=0cmB?O1}yF&Yz}6}i^aBff!hGBfXzK)@pOfynCZ z_Sn;7w6^AREeVX))=b#%H%Xrnk&24M8z|Rua?)wOv{WVJ`}zubjniqQIo1av^DQmC zAlccmBL&RnT&^)-F68so;l;%|BB#7O_Gbl>^DbB7uB}#`pm{vcxn?q{X^!=QnCx{p z5;wxU$-rF5>wSj3UIUTiaut%HAw4BI?{=5)Jgk#7fN4(W6S`-8ApXlcF;V=N26Lg= z*~fTpPES$|mX>R{b2|}Y?B}#qKB}TeCx@ldI=wbknHVrf5)BEJ==PAgAd#9`{$hBNT>5d4W}6N0Y>e|AAjUze}~ z0TvGyiAJlTMPs{>YK(Gyxu6G<0pg4L_(f8SMCb75u+XcltK=D=!`mVF8DJFp62hT_ z5MkJ^+ju$fK0vkc*f`hv0)0FSFx}K;5_CY_tEjD@-|)b*`?FbDin0ru-k-(_gyDJY z;fM4G`>ED-r;BU;l%Hn-f2P-W)(bkodWFS>#Qng{vv5adHVsDpkAAE`7`{CpDK0Oj zMX5ugnzlwO%xc&rxjfc0UNX{iVKJCxx15ztgVE^TC{`e9tV33Q(O_hd|L&gY7IFad zs@tmtJy);RSxaYFY-D#t$fv=`oAhFD%1hL^R$crst?~3J0rv~He~<&1r?=?^-Ez&s zy<9khP9aZGc0ogLhOh$3q@=P$IH2lcRaOT0pP$*!M7kmg`7{{0Ub(RAwTomTU6q6b zoy4~A@1F`eb&qul&J~c}=e>dlyC6r@fgLdi$wUsx z{7@*{x9ozibLqIRe+GJnegmJ|B5gvi?q(hLEK?T2gI!Sbb~A3-ZXvla-8WGhLJe7- zb;-(oHBIYH#JphUb7l{G<~6Q13Lfl&j2lL5dZGmK0N4c?9vSTVh@RvFx`#TC@+uM1 pENezeS4#0&Qnpfd7a@fH0wbCuDeSM4r~m)}07*qoM6N<$0fMfJgIWLp delta 485 zcmVj4NY!B&$MI)!a&vJIot;9^#aTDkpzV~jc|)88H@6@t5`;uiFtWm1cq=vS z;x)<(hLNBYClG`L2Uq?6^nKvr&&kE%1Mhj^{ht5xp8v6?mR!EQ?cv33G3pyO>eal4bD2683 z@W^|7fMPzLlwcEk@W>(l#85W!5noUb58Xw9i2aQrk1WC?YtXpL9{Gg=5j%~c7}>y0kvu%|4`(UV+|qci#cedV bHlAMstpZiHNHyW=00000NkvXXu0mjfX^7j2 diff --git a/data/icons/status/ca/via_white.png b/data/icons/status/ca/via_white.png index c002ef2a8b77784bf396a65a268bc20ba6ed9bff..aacaad0690177132b37aef1f585b8eb26a357a9b 100644 GIT binary patch delta 756 zcmV4i^xfu z&8E@{g#xP8xxc?hK8U5}_xo9=(?PlcO5We!DTe{MT#oTw6lAkmk(2E1?ker^@sWi> zArtyYWP-Q6+C<>jRsB$Y~u+|JI9%2g^ARSU@c($W&j1JXA= zJuS|htc5v@wE*-&>h(J1e=te4T4l4dv%=_fIz`T6v7lH-PBKoDzUAd*F)lO)@!Hzj zNbL|x%H=ZUFdeVgt0p=-J5#^o@i?jjq~>rqP=1^bRuN)otXM3f`XQ9?gGk{p>cAT& z2a|gbTwPtEIzVcRi;F1l^ZArEj>E%4R6m50d_GS(%*fo_92#I@e_>&y2Kb+D^c#U~ z)a!>(!VegQLuSO|@t^_1;V{zI*Vozn{Jhdo|F0000dqjD~Lw_e54Y7_)Vl^z7GK=7K;UJHXAq`4sbf1 z;C8#=^70bAUN2lI^{2<38_ zA>D45LswT<1PKO%5DtgQ_}CmM!WImrWWV6|D=sV=??TsPhJMs7=vfJ%Ag#Q$Z z)a&&hk>zs9knMI0`~ChO6p#8oG5JlTW4_P7C&&N1*aRUU00000NkvXXu0mjfZXper diff --git a/data/icons/status/ca/via_yellow.png b/data/icons/status/ca/via_yellow.png index 4bc94fba09597a855c320f821de6df7dad37c6a4..715fbe087dfe9a0311fb7b1422ca04f0f83740ee 100644 GIT binary patch delta 818 zcmV-21I_%=1lI;3iBL{Q4GJ0x0000DNk~Le0000a0000I2nGNE05c#AO=Cy(pm(IdPqGeak1C| z6?4$lpim)#B;p5B5X3|Ta}W;_FXrYcC%uRVLBx2Q?we%ColSbyz>nnpKW5)%Sp=V} zt1a!#jjul(_TszX`g&_99Nx}}e=f7Gy}bNO?gJMW>m}&y%sq5|?jiRBH%2EXfAHz) zJOKounN(F7CsEp@+*V+1VN9dN9jgP0d>p3e9r964(WWLQ^;t5~ZL> zoX)RAdWw|6!A7ddbaZ@R-rn9X($ZpLvyzpSKCai(^NI5p7k_X*&lE<-f5)R(f&jtb zZ<3mtM2kkFo@z20O$w)by*A=@cd-i<6zJ%DcsR`Uva-@x2C!O7IbQ`vM@Iq<1_f!E z2u)4Jth~ExqngL_jcGPp4a)+uUQv437AnfZ)z+Rxr)y>t(zRJf(SK95~U6hE`y{r&H` z93Xo};|orY*E5+i=?sf)Z?|#zC>VLYR_yaxrAKj#!(nEJ>GhGje*~77EnE(ez2agG zr#Cd@GA|x>yNSyKunXGQsK*jSO}VBo7@Lr7c@PcQ6h>O>94(e wCMVOIrALX-_;^y=#KaSPw>jKD79e_2k`&O%Ff0@tgWQjShKTLb_dxyU+7yXJ3FO_QbZKF<(m8be$6!^ zis&e%C=1*F*BDPTj`P`AOwIe${N9;)pBGgXkyz!Qa{ea%R!3rxq@e+9Y64qYz}8l< zy&dfA1iQPz-d?c39~>G2M@PYle+h7U8l0O07Z<_RReWF{P-CMZZEZgzQ&Wbltbpt5 z4oZad^cXTS@_%G&%RvF@=l}}~!OToBFYh~&lLKaDfsu$IySokwh;&j~3IZC<&4$$1 z+j&imAqNKz3W$s&-GzeUVnt?WHJ7ubBpoXt$Hxxp>Qbby4;&l>v$M4*e=SXsg#|D* zRnPMC4LLdj&(0j=5!p#JYF)|lW%Te|SN9dUxNuNFhKIrNad2QjN035UY)Ogc$;rAK zk6c|j$Rm@J;LHq|o2$j?>0m~N=JG`aIXyMx=Egzsi0q`cR*QYeeTzr#?i@5WX2|?J zxV)@b7*8T41>D~U&(96Hf4v1C9vl>ptgV5Yn_xkKK}AK0k;g{|1!QT-kewYJH(XZv zIWI52BTr8bibuA$b&SJ9-HCMKk^6f?o}V2gh`e!Q<12D1r@1nC4JiBL{Q4GJ0x0000DNk~Le0000K0000I2nGNE09(-h5RoA@fBs2C zK~y+Tti92ee`;%o7l(>fe^x!O_8v_+n7AfApO+mqrp1 zzRxe^Te3`a!SeAk3e-$*=;RCfxJU}C;g(zz1pSka0=1JZW?h9dTQhBQ4hVA}=TM+_ zLSrFU;b3O4ZO#FqP%mJiQJ`k2dnqpR_&t1|d6;R*GSLOoAEr?tr^%O-)aB{23j9$& zO_V42>wWx2)n8W)m3K^ZL1Hg~$-N}mlt&81AH*%A&qjGJ4L=#?-B4-BwUcBQ z#Gc16{z8O0Kz2d+X*d-sho}>RTfy7na{%-_?wRe~=*9ox+wjc;7XbVPak}<5()&M% P00000NkvXXu0mjfJ}(vx delta 485 zcmV0I@CR6^ z96N|a9%{xuenGE+&Fd8i5xMapi|DfT?O)Idi|Co?LEBx^7l(-4`jAD| zu!(K>$T3b~+qp)F$ej;qJA}Uj*?^B6z#`{(AtL{L$Vc|@RwNCJ+~a=;C6e)s4&EbC bAJ04jSE5n`7q diff --git a/data/icons/status/ca/x_white.png b/data/icons/status/ca/x_white.png index feddccee36002ed6262522dcbc35b480965ebbc1..6f08d13b4344d5030c2d9e1664235cddf7f019f1 100644 GIT binary patch delta 518 zcmV+h0{Q)t1+D}kiBL{Q4GJ0x0000DNk~Le0000K0000I2nGNE09(-h5RoA?e*wcu zL_t(IPp#9xtNCFR2kT(vC}r^v_)+>MB*HZ@@hzpBQfD)p6r~In#fX)~ zWH!nuBQl=*oKN@j^n5UVztpSG=Q-y*Z#+JLU)SsP<8rzDz1?p3FU0=u`~Ci@g`G~P zkMsFV?;x^*a5x;kkH;gu3BrEAe@B6IgTa8p;jpGuD#<$IwcZ<#$A;c7gxzk30_nEf zE%|&t5~rczH{d#7^;#$tlJgG`*6THHHXBm)`+d3D>-ExNvCyu(Hk-{folXt&I?jUS za*3bjdR?wm3YidCh0ALHNh>*^u(Bv;@p%xZ4HX;~E2q=oa>%K;b5tFD1?hCFcih`mj z2!eutDZe4@d7OF7%!^r?6o-56F!Rlsm{_e=xVpN6>+5T{ zy}bp8!vQXr3p^eV_zr2@5D zP5M)$UaxbAB3KDlbar+IB9VwZ5lSYLAdyH&n_Mo3d_K>RR;$G!ir{hre}Mq01P5Vg zwOY{Y_3S+y4u3$p-7bgRZZ|`)BUW*7aX|)(#bOee8;wRNm&*+4bUH8?3^;U(;8H@N z5CbsI&(GoY_4N}n8jUzakytE7ko)_45;B>LL6?`8P^;BGA(P33L#Ie4lL3>-#1I;I zT8Q-feTK|tGY*|1cz@`!e>55mxeAy|rBW!BN*|ELV!@%iyE}$FK0dOI#(_^yPXwk_ z;VDvNKA*#Cwc^nKh{a-IgKlnapxJCfyWIwzPRH7DVv1}w8xBzIY;v9Kv`!X3JSFmkinMb{zT+LFx5+44F=+Um}OY zfkXIDp-7|A_z_vJ*9_V3_i#KO|3UGn@Q%rEA{7(f{{mUS_$qgbQ>_31002ovPDHLk FV1hpc3oQTu diff --git a/data/icons/status/ca/x_yellow.png b/data/icons/status/ca/x_yellow.png index 1657f6f3f81b31f0ebdf81c905c5e33b079a8aa2..bcf4df321409c457ae02def1c0fe2add1e328c24 100644 GIT binary patch delta 580 zcmV-K0=xa%1nUGLiBL{Q4GJ0x0000DNk~Le0000K0000I2nGNE09(-h5RoA?e*yqW zL_t(IPp#5FNE=Zc2k;-#kk$;QMDb5hLR*s%1S26x3Ra;*yIBXJ(8a-Y5Tiu}Jp}nd z5JlpND6|qp5=4UvF6O%EL_Un6B-}7FQNptYw?)`qh_vP+!z^}Wz zy}E}7<5xbP#pk%c-@MaCMcMxV}zPd8807E`HiNx2Ea~22(2S1RZQUZZ$ zB`_RrC^=_=kj?g>Vf3(1R1FRWWst*Rlh5Ph;i6fAXTk377i7q4W#tpuY!zmJ+wCA- z|0vf^r=8Z;x|Defgw4$kf6Qb$*st=Wwe_uhBTZ{DYu(+AvewyItIP{L3sR{Nrqdx3 zqEV0B7z#OMeRZ{ss;ZtoUDLd>C-5vtCViMp`bn6Y^3d2=lWB3WS=PDP+4r&+kH1rT z|M?J>mKt$+xrxewXTickO;FdX*}=bDBH{YRjsswN`t|pjnK$?{8kKzj0RI4*IAnY_ SL6X@30000n!E5%V12k`I8+OV<5f`#e7U}I@v@d{hRBRlnqwIZa5ybzhm5P6yBj1f`f z^^{VSh3!|zbvx%h!^YzDJHOlSe(pK9(+_o3fmpDnlK+W@`alelw6uV2ZD2AH3iPje}W4O;L;MfvI4HH;S>9WT3Z$A?*1E@pI2mc72Mb` z&`-$Vpdyo#za!h*2J%R6FBk}b+1X%D4p>{ONK+G-n+xXUfz8c|?ClxIBT|Xv$;lw# zp5x=Lt&|kEmYL})^2p(#fjlDZ3=g|XWRpZm30PXH@A9ohPEHKe->=B%f2eDxu+VKx zN^&82Sy?=Cd<>qS8z>Q(nE?j|6p%@hC`yIKy zHc%q6xCmBMDB>d&a>&`4BDc2&NZZm<@ZbPEI&x#+*JT7e^7v>Vk4V{adV4$A*{O)! ziCnawH96QLPfrH&$oe|CwFU0%#3L6M;MJA3^YEa^^Rs~jk>A1QW;}9ws>sdF&&cbm zfh@AW|2GngDf03HzP)`xbyel>lKdy?tIOX%0OteuGT486aR2}S2>?k&PDHLkV1ma@ B5!C Date: Mon, 11 Dec 2017 21:59:44 +0100 Subject: [PATCH 068/107] - infoviewer_bb: always show hdd fill level for a more uniform view; ... mark undetected hdd fill level with a small line over the progressbar. this avoids a "whole" in footer when gradient is active Signed-off-by: Thilo Graf --- src/gui/infoviewer_bb.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 6e615f191..18cded5f1 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -672,24 +672,28 @@ void CInfoViewerBB::showIcon_Tuner() void CInfoViewerBB::showSysfsHdd() { - if (g_settings.infobar_show_sysfs_hdd) { - //sysFS info + if (g_settings.infobar_show_sysfs_hdd) + { + // sysfs info int percent = 0; uint64_t t, u; if (get_fs_usage("/", t, u)) percent = (int)((u * 100ULL) / t); showBarSys(percent); + // hdd info showBarHdd(cHddStat::getInstance()->getPercent()); } } void CInfoViewerBB::showBarSys(int percent) { - if (is_visible){ + if (is_visible) + { + int sysscale_height = InfoHeightY_Info/4; sysscale->reset(); sysscale->doPaintBg(false); - sysscale->setDimensionsAll(bbIconMinX, BBarY + InfoHeightY_Info/2 - OFFSET_INNER_MIN - InfoHeightY_Info/4, hddwidth, InfoHeightY_Info/4); + sysscale->setDimensionsAll(bbIconMinX, BBarY + InfoHeightY_Info/2 - OFFSET_INNER_MIN - sysscale_height, hddwidth, sysscale_height); sysscale->setValues(percent, 100); sysscale->paint(); } @@ -697,15 +701,19 @@ void CInfoViewerBB::showBarSys(int percent) void CInfoViewerBB::showBarHdd(int percent) { - if (is_visible) { + if (is_visible) + { + int hddscale_height = InfoHeightY_Info/4; hddscale->reset(); hddscale->doPaintBg(false); - if (percent >= 0){ - hddscale->setDimensionsAll(bbIconMinX, BBarY + InfoHeightY_Info/2 + OFFSET_INNER_MIN, hddwidth, InfoHeightY_Info/4); - hddscale->setValues(percent, 100); - hddscale->paint(); - }else { - frameBuffer->paintBoxRel(bbIconMinX, BBarY + InfoHeightY_Info/2 + OFFSET_INNER_MIN, hddwidth, InfoHeightY_Info/4, COL_INFOBAR_BUTTONS_BACKGROUND); + hddscale->setDimensionsAll(bbIconMinX, BBarY + InfoHeightY_Info/2 + OFFSET_INNER_MIN, hddwidth, hddscale_height); + hddscale->setValues(percent, 100); + hddscale->paint(); + + if (percent < 0) + { + // mark undetected hdd fill level strike through + frameBuffer->paintHLineRel(bbIconMinX, hddwidth, BBarY + InfoHeightY_Info/2 + OFFSET_INNER_MIN + hddscale_height/2, COL_INFOBAR_BUTTONS_BACKGROUND); } } } From 5e2fe0a1953863b94d45e2fe9b3c3a590829683a Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 11 Dec 2017 22:26:22 +0100 Subject: [PATCH 069/107] - infoviewer_bb: add gradient to ca-bar; ... use always CComponentsShapeSquare to paint ca-bar Signed-off-by: Thilo Graf --- src/gui/infoviewer_bb.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 18cded5f1..1a663bdf6 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -847,23 +847,29 @@ void CInfoViewerBB::showIcon_CA_Status(int notfirst) void CInfoViewerBB::paint_ca_bar() { initBBOffset(); - int ca_x = g_InfoViewer->ChanInfoX + OFFSET_INNER_MID; + int ca_x = g_InfoViewer->ChanInfoX; int ca_y = g_InfoViewer->BoxEndY; - int ca_w = g_InfoViewer->BoxEndX - g_InfoViewer->ChanInfoX - 2*OFFSET_INNER_MID; + int ca_w = g_InfoViewer->BoxEndX - g_InfoViewer->ChanInfoX; if (g_settings.infobar_casystem_frame) { - if (ca_bar == NULL) - ca_bar = new CComponentsShapeSquare(ca_x, ca_y, ca_w, ca_h, NULL, CC_SHADOW_ON, COL_INFOBAR_CASYSTEM_PLUS_2, COL_INFOBAR_CASYSTEM_PLUS_0); - ca_bar->enableShadow(CC_SHADOW_ON, OFFSET_SHADOW/2, true); - ca_bar->setFrameThickness(FRAME_WIDTH_MIN); - ca_bar->setCorner(RADIUS_SMALL, CORNER_ALL); - ca_bar->paint(CC_SAVE_SCREEN_NO); + ca_x += OFFSET_INNER_MID; + ca_w -= 2*OFFSET_INNER_MID; } - else + + if (ca_bar == NULL) + ca_bar = new CComponentsShapeSquare(ca_x, ca_y, ca_w, ca_h, NULL, CC_SHADOW_ON, COL_INFOBAR_CASYSTEM_PLUS_2, COL_INFOBAR_CASYSTEM_PLUS_0); + //ca_bar->setColorBody(COL_INFOBAR_CASYSTEM_PLUS_0); + ca_bar->enableColBodyGradient(g_settings.theme.infobar_gradient_bottom, COL_INFOBAR_BUTTONS_BACKGROUND, g_settings.theme.infobar_gradient_bottom_direction); + ca_bar->enableShadow(CC_SHADOW_ON, OFFSET_SHADOW/2, true); + + if (g_settings.infobar_casystem_frame) { - paintBoxRel(g_InfoViewer->ChanInfoX, g_InfoViewer->BoxEndY, g_InfoViewer->BoxEndX - g_InfoViewer->ChanInfoX, bottom_bar_offset, COL_INFOBAR_CASYSTEM_PLUS_0); + ca_bar->setFrameThickness(FRAME_WIDTH_MIN); + ca_bar->setCorner(RADIUS_SMALL, CORNER_ALL); } + + ca_bar->paint(CC_SAVE_SCREEN_NO); #if 1 if (g_settings.infobar_casystem_dotmatrix) { From 45d61f49e384d56fad613d20f364a0a215cea5cd Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 11 Dec 2017 23:38:08 +0100 Subject: [PATCH 070/107] - zapit/channel: fix issue tag from 4bacd77f8bcd61c21b99a1cfc52fce6a8d46c5fd Signed-off-by: Thilo Graf --- src/zapit/src/channel.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/zapit/src/channel.cpp b/src/zapit/src/channel.cpp index 7779d6728..b36242c74 100644 --- a/src/zapit/src/channel.cpp +++ b/src/zapit/src/channel.cpp @@ -211,14 +211,9 @@ bool CZapitChannel::isUHD() case ST_DIGITAL_TELEVISION_SERVICE: case 0x19: { - std::string uhd = "UHD"; - if(strstr(name.c_str(),uhd.c_str())) + if (strstr(name.c_str(), "UHD")) return true; - uhd = "4K"; - if(strstr(name.c_str(),uhd.c_str())) - return true; - uhd = "4k"; - if(strstr(name.c_str(),uhd.c_str())) //FIXME: this statement may fall through + if (strstr(name.c_str(), "4k")) return true; } default: From cb7cf4a2251904eb85768b63ada3ae7504ff4972 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Tue, 12 Dec 2017 12:01:36 +0100 Subject: [PATCH 071/107] - locale: small changes in infobar ca system locales Signed-off-by: Thilo Graf --- data/locale/deutsch.locale | 6 +++--- data/locale/english.locale | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index fce9fbe63..6e4d34163 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -1093,7 +1093,7 @@ menu.hint_inet_radio Internetradio menu.hint_info Systeminformationen anzeigen. menu.hint_infobar_back Ändern Sie die Hintergrundfarbe für die Infobar menu.hint_infobar_buttons_usertitle Erzwingt die benutzerdefinierten Titel der Farbtasten -menu.hint_infobar_casys ein: zeigt alle Aktiven farbig, Mini: einzelnes Symbol ob gesperrt, Diskret: alle Aktiven CA-Systeme +menu.hint_infobar_casys ein: zeigt alle CA-Systeme; diskret: zeigt nur aktive CA-Systeme; mini: einzelnes Symbol in der Fußleiste menu.hint_infobar_casys_color Ändern Sie die Hintergrundfarbe für die CA-Systemanzeige der Infobar menu.hint_infobar_casys_dotmatrix ein: CA-Systemanzeige mit Punktematrix im Hintergrund menu.hint_infobar_casys_frame ein: CA-Systemanzeige mit Rahmen @@ -1542,8 +1542,8 @@ miscsettings.infobar_buttons_usertitle Benutzertitel für Farbtasten miscsettings.infobar_casystem_display CA-Systemanzeige miscsettings.infobar_casystem_dotmatrix CA-Anzeige mit Punktematrix miscsettings.infobar_casystem_frame CA-Anzeige mit Rahmen -miscsettings.infobar_casystem_mini Mini -miscsettings.infobar_casystem_mode Diskret +miscsettings.infobar_casystem_mini mini +miscsettings.infobar_casystem_mode diskret miscsettings.infobar_disp Logo-Anzeige miscsettings.infobar_disp_0 Kanalname [Kanalnummer] miscsettings.infobar_disp_1 Kanalnummer, Kanalname [Logo] diff --git a/data/locale/english.locale b/data/locale/english.locale index 938c2d9da..5e3b5c825 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1093,7 +1093,7 @@ menu.hint_inet_radio Internet radio menu.hint_info Show system informations. menu.hint_infobar_back Change infobar background color menu.hint_infobar_buttons_usertitle Forces userdefined titles for the color keys -menu.hint_infobar_casys On: display all with colored active, mini: single\nlocked icon, descreet: all active ca-systems +menu.hint_infobar_casys on: display all CA systems, descreet: display active CA systems; mini: single symbol in footer menu.hint_infobar_casys_color Change CA-System background color menu.hint_infobar_casys_dotmatrix on: CA-System with dot matrix in background menu.hint_infobar_casys_frame on: CA-System with frame From c367c803359c494564664ce866f368942aa37e34 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Tue, 12 Sep 2017 22:30:35 +0200 Subject: [PATCH 072/107] - menu: fix right offset for very long right texts Signed-off-by: Thilo Graf --- src/gui/widget/menue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index be9fff00f..a269722e0 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -256,7 +256,7 @@ void CMenuItem::paintItemCaption(const bool select_mode, const char * right_text } if (*right_text) { stringstartposOption -= (icon_w == 0 ? 0 : icon_w + OFFSET_INNER_MID); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(stringstartposOption, y+item_height - desc_height, dx- (stringstartposOption- x), right_text, item_color); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(stringstartposOption, y+item_height - desc_height, dx - stringstartposOption + x - OFFSET_INNER_MID, right_text, item_color); } } if (desc_text && *desc_text) From 2f5f5f70c3a6920f0e13d62b3d88830c377010a2 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Tue, 12 Dec 2017 20:33:03 +0100 Subject: [PATCH 073/107] fix icon alignment Conflicts: src/gui/infoviewer_bb.cpp Signed-off-by: Thilo Graf --- src/gui/infoviewer_bb.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 1a663bdf6..3c6cd5e65 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -739,16 +739,16 @@ void CInfoViewerBB::paint_ca_icons(int caid, const char *icon, int &icon_space_o std::map >::const_iterator it; icon_map[0x0E00] = std::make_pair(index++,"powervu"); - icon_map[0x4A00] = std::make_pair(index++,"d"); + icon_map[0x1000] = std::make_pair(index++,"tan"); icon_map[0x2600] = std::make_pair(index++,"biss"); + icon_map[0x4A00] = std::make_pair(index++,"d"); icon_map[0x0600] = std::make_pair(index++,"ird"); icon_map[0x0100] = std::make_pair(index++,"seca"); icon_map[0x0500] = std::make_pair(index++,"via"); icon_map[0x1800] = std::make_pair(index++,"nagra"); icon_map[0x0B00] = std::make_pair(index++,"conax"); icon_map[0x0D00] = std::make_pair(index++,"cw"); - icon_map[0x0900] = std::make_pair(index++,"nds"); - icon_map[0x1000] = std::make_pair(index ,"tan"); + icon_map[0x0900] = std::make_pair(index ,"nds"); for (it=icon_map.begin(); it!=icon_map.end(); ++it) { snprintf(buf, sizeof(buf), "%s_%s", (*it).second.second, icon); @@ -796,8 +796,7 @@ void CInfoViewerBB::showIcon_CA_Status(int notfirst) return; } - - int caids[] = { 0x1000, 0x900, 0xD00, 0xB00, 0x1800, 0x0500, 0x0100, 0x600, 0x2600, 0x4a00, 0x0E00}; + int caids[] = { 0x900, 0xD00, 0xB00, 0x1800, 0x0500, 0x0100, 0x600, 0x4a00, 0x2600, 0x1000, 0x0E00 }; // const char *green = "green"; // unused const char *white = "white"; const char *yellow = "yellow"; From ce0aa768b9ee311591e1a76a10471b942ba930b3 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Wed, 13 Dec 2017 09:39:12 +0100 Subject: [PATCH 074/107] - infoviewer_bb: small renamings to get more logic in function names showOne_CAIcon() => showIcon_CA() paint_ca_icons() => paint_ca_icon() showIcon_CA_Status() => paint_ca_icons() Conflicts: src/gui/infoviewer.cpp src/gui/infoviewer_bb.cpp Signed-off-by: Thilo Graf --- src/gui/infoviewer.cpp | 8 ++++---- src/gui/infoviewer_bb.cpp | 30 ++++++++++++++++-------------- src/gui/infoviewer_bb.h | 6 +++--- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index ea565a6a3..c91f0e185 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -1110,7 +1110,7 @@ void CInfoViewer::loop(bool show_dot) showRadiotext(); infoViewerBB->showIcon_16_9(); - //infoViewerBB->showIcon_CA_Status(0); + //infoViewerBB->paint_ca_icons(0); infoViewerBB->showIcon_Resolution(); } else if ((msg == NeutrinoMessages::EVT_RECORDMODE) && (CMoviePlayerGui::getInstance().timeshift) && (CRecordManager::getInstance()->GetRecordCount() == 1)) { @@ -1412,9 +1412,9 @@ int CInfoViewer::handleMsg (const neutrino_msg_t msg, neutrino_msg_data_t data) } else if (msg == NeutrinoMessages::EVT_ZAP_GOTPIDS) { if ((*(t_channel_id *) data) == current_channel_id) { if (is_visible && showButtonBar) { + //infoViewerBB->paint_ca_icons(0); infoViewerBB->showIcon_VTXT(); infoViewerBB->showIcon_SubT(); - //infoViewerBB->showIcon_CA_Status(0); infoViewerBB->showIcon_Resolution(); infoViewerBB->showIcon_Tuner(); } @@ -1429,7 +1429,7 @@ int CInfoViewer::handleMsg (const neutrino_msg_t msg, neutrino_msg_data_t data) //chanready = 1; showSNR (); if (is_visible && showButtonBar) - infoViewerBB->showIcon_CA_Status(0); + infoViewerBB->paint_ca_icons(0); //Set_CA_Status (data); return messages_return::handled; } else if (msg == NeutrinoMessages::EVT_TIMER) { @@ -2077,7 +2077,7 @@ void CInfoViewer::killTitle() void CInfoViewer::Set_CA_Status (int /*Status*/) { if (is_visible && showButtonBar) - infoViewerBB->showIcon_CA_Status(1); + infoViewerBB->paint_ca_icons(1); } #endif /****************************************************************************** diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 3c6cd5e65..4d1cba306 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -450,15 +450,16 @@ void CInfoViewerBB::paintshowButtonBar(bool noTimer/*=false*/) // Buttons showBBButtons(); +#if 0 + scrambledCheck(true); +#endif + paint_ca_icons(0); + // Icons, starting from right showIcon_SubT(); showIcon_VTXT(); showIcon_DD(); showIcon_16_9(); -#if 0 - scrambledCheck(true); -#endif - showIcon_CA_Status(0); showIcon_Resolution(); showIcon_Tuner(); showSysfsHdd(); @@ -626,7 +627,7 @@ void CInfoViewerBB::showIcon_Resolution() showBBIcons(CInfoViewerBB::ICON_RES, icon_name); } -void CInfoViewerBB::showOne_CAIcon() +void CInfoViewerBB::showIcon_CA() { std::string sIcon = ""; #if 0 @@ -718,7 +719,7 @@ void CInfoViewerBB::showBarHdd(int percent) } } -void CInfoViewerBB::paint_ca_icons(int caid, const char *icon, int &icon_space_offset) +void CInfoViewerBB::paint_ca_icon(int caid, const char *icon, int &icon_space_offset) { char buf[20]; int endx = g_InfoViewer->BoxEndX - OFFSET_INNER_MID - (g_settings.infobar_casystem_frame ? FRAME_WIDTH_MIN + OFFSET_INNER_SMALL : 0); @@ -784,14 +785,15 @@ void CInfoViewerBB::paint_ca_icons(int caid, const char *icon, int &icon_space_o } } -void CInfoViewerBB::showIcon_CA_Status(int notfirst) +void CInfoViewerBB::paint_ca_icons(int notfirst) { if (g_settings.infobar_casystem_display == 3) return; + if(NeutrinoModes::mode_ts == CNeutrinoApp::getInstance()->getMode() && !CMoviePlayerGui::getInstance().timeshift){ if (g_settings.infobar_casystem_display == 2) { fta = true; - showOne_CAIcon(); + showIcon_CA(); } return; } @@ -805,11 +807,11 @@ void CInfoViewerBB::showIcon_CA_Status(int notfirst) if(!g_InfoViewer->chanready) { if (g_settings.infobar_casystem_display == 2) { fta = true; - showOne_CAIcon(); + showIcon_CA(); } else if(g_settings.infobar_casystem_display == 0) { for (int i = 0; i < (int)(sizeof(caids)/sizeof(int)); i++) { - paint_ca_icons(caids[i], white, icon_space_offset); + paint_ca_icon(caids[i], white, icon_space_offset); } } return; @@ -821,7 +823,7 @@ void CInfoViewerBB::showIcon_CA_Status(int notfirst) if (g_settings.infobar_casystem_display == 2) { fta = channel->camap.empty(); - showOne_CAIcon(); + showIcon_CA(); return; } @@ -836,9 +838,9 @@ void CInfoViewerBB::showIcon_CA_Status(int notfirst) break; } if(g_settings.infobar_casystem_display == 0) - paint_ca_icons(caids[i], (found ? yellow : white), icon_space_offset); + paint_ca_icon(caids[i], (found ? yellow : white), icon_space_offset); else if(found) - paint_ca_icons(caids[i], yellow, icon_space_offset); + paint_ca_icon(caids[i], yellow, icon_space_offset); } } } @@ -964,7 +966,7 @@ void CInfoViewerBB::scrambledCheck(bool force) } if ((scrambledErr != scrambledErrSave) || (scrambledNoSig != scrambledNoSigSave) || force) { - showIcon_CA_Status(0); + paint_ca_icons(0); showIcon_Resolution(); scrambledErrSave = scrambledErr; scrambledNoSigSave = scrambledNoSig; diff --git a/src/gui/infoviewer_bb.h b/src/gui/infoviewer_bb.h index 4f1f2bad6..7d998e15e 100644 --- a/src/gui/infoviewer_bb.h +++ b/src/gui/infoviewer_bb.h @@ -112,9 +112,8 @@ class CInfoViewerBB void getBBIconInfo(void); bool checkBBIcon(const char * const icon, int *w, int *h); - void paint_ca_icons(int, const char*, int&); + void paint_ca_icon(int, const char*, int&); void paint_ca_bar(); - void showOne_CAIcon(); static void* scrambledThread(void *arg); void scrambledCheck(bool force=false); @@ -132,8 +131,8 @@ class CInfoViewerBB int bottom_bar_offset, InfoHeightY_Info; bool is_visible; + void paint_ca_icons(int); void showSysfsHdd(void); - void showIcon_CA_Status(int); void showIcon_16_9(); void showIcon_RadioText(bool rt_available); void showIcon_VTXT(); @@ -141,6 +140,7 @@ class CInfoViewerBB void showIcon_Resolution(); void showIcon_Tuner(void); void showIcon_DD(void); + void showIcon_CA(); void showBBButtons(bool paintFooter = false); void paintshowButtonBar(bool noTimer = false); void getBBButtonInfo(void); From 73fa25f936b4881aae66e8bedc76539228e6e90f Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 16 Dec 2017 21:04:38 +0100 Subject: [PATCH 075/107] CSettingsManager: add hintbox while execute backup_sh --- src/gui/settings_manager.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gui/settings_manager.cpp b/src/gui/settings_manager.cpp index 156ec6489..beaf20ca8 100644 --- a/src/gui/settings_manager.cpp +++ b/src/gui/settings_manager.cpp @@ -112,9 +112,13 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) int ret = ::statfs(fileBrowser.getSelectedFile()->Name.c_str(), &s); if(ret == 0 && s.f_type != 0x72b6L) /*jffs2*/ { + CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_SETTINGS_BACKUP)); + hintBox->paint(); const char backup_sh[] = "/bin/backup.sh"; - printf("backup: executing [%s %s]\n",backup_sh, fileBrowser.getSelectedFile()->Name.c_str()); + printf("backup: executing [%s %s]\n", backup_sh, fileBrowser.getSelectedFile()->Name.c_str()); my_system(2, backup_sh, fileBrowser.getSelectedFile()->Name.c_str()); + hintBox->hide(); + delete hintBox; } else ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_SETTINGS_BACKUP_FAILED),CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_ERROR); From fc2629eec5f0a11540ca37a771bc50e0f249741b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 17 Dec 2017 14:02:39 +0100 Subject: [PATCH 076/107] CPictureViewer: add current image into debug line It's not possible to see which file causes this error. --- src/driver/pictureviewer/pictureviewer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/pictureviewer/pictureviewer.cpp b/src/driver/pictureviewer/pictureviewer.cpp index 90947fe39..1afb445a4 100644 --- a/src/driver/pictureviewer/pictureviewer.cpp +++ b/src/driver/pictureviewer/pictureviewer.cpp @@ -629,7 +629,7 @@ void CPictureViewer::rescaleImageDimensions(int *width, int *height, const int m bool CPictureViewer::DisplayImage(const std::string & name, int posx, int posy, int width, int height, int transp) { if(width < 1 || height < 1){ - dprintf(DEBUG_NORMAL, "[CPictureViewer] [%s - %d] Error: width %i height %i \n", __func__, __LINE__, width, height); + dprintf(DEBUG_NORMAL, "[CPictureViewer] [%s - %d] Error: image [%s] width %i height %i \n", __func__, __LINE__, name.c_str(), width, height); return false; } From aa1c16609c27684bc198c498f0b43746895cb6d9 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 17 Dec 2017 15:06:46 +0100 Subject: [PATCH 077/107] icons: add missing picon vor save as --- data/icons/hints/Makefile.am | 1 + data/icons/hints/hint_saveas.png | Bin 0 -> 2091 bytes 2 files changed, 1 insertion(+) create mode 100644 data/icons/hints/hint_saveas.png diff --git a/data/icons/hints/Makefile.am b/data/icons/hints/Makefile.am index 6447b47aa..1279c08e8 100644 --- a/data/icons/hints/Makefile.am +++ b/data/icons/hints/Makefile.am @@ -36,6 +36,7 @@ install_DATA = \ hint_reload.png \ hint_restart.png \ hint_save.png \ + hint_saveas.png \ hint_scan.png \ hint_scripts.png \ hint_service.png \ diff --git a/data/icons/hints/hint_saveas.png b/data/icons/hints/hint_saveas.png new file mode 100644 index 0000000000000000000000000000000000000000..c43ae333b214b4f2e0633df5f15cd6ca32b345e5 GIT binary patch literal 2091 zcmV+`2-Nq9P)6+U-f`JtoRAhJNRVu#HWboU4JxQYYSkvCs49{AJ5)kQ@CW`- zl?Egrpa7}>As4E)s#B^KQe1i0apPAV6B4iO#ILL!Kh|sS&g^66aPG|RW_P{o)XqAs zq1U>eJG*md&Ue4>Jnq;GHh5znw*j95C_LG}f4|5W+e5wX<2I~JL(??F!C-K>B7i_3 z@B|{hL_?)$s=9?mlskp&eUPTH>&L>+)-qoHor|TQcD{@3HA_K^Q9no^u2ll?8=CZV z>8zax4huce`dcQqEj|V0p*PLx$W<))D#^_Zg+hI00US7R;1mIPN|t5Vvu7_G8ymxk ziE-S0?;}FjT&-ZQ4v#%3HE+N0V_YPt@uywZZPg#|#v1Y;Uepr21< zCjNWZX&9Mlhh!!Wxs+H)%wi1T?NgnmY$&*934QySXN9Ma99SwdTzn%LgGU(80j>PFF#r6G3v-Bka?r*b}#{nAFj(zVd` z$AOOqppt~PZM&T{HQiQGLVUFTK#282vK zbo?cJa}qjy_?yB54}7hn56sTa;;!bq8Je_2$s|%|88ZWlQ$k4+EIp&uAU}re_+J

`pmaYBb4!y&9-ak)lHrHG zS10ofn4V;yNjd%If)x~eXr?c47Hug41xMYd`h0I`^m{NPqS;2}ToIGmsm6TERI(&@Ct#KrJ{#Q<*| zL+#KNc>^?@070Q5QA|MGoCWe)sz_}|Kq`EVG=O4yAU?Sn7TeW?QfCB0ulH5o2PE0c z6t@dh)q|?j#j+r*YqD~}{(tu{4gl@9W9;SNNzmOFU?ww&8k=XL6M&dNLA326*Fj7R z%$2+Y23kzhr`2gts|A9sJ=F)0O36%86i|I0^m;vvGf^t1?!Hde(9n>-M@(CQlc662 zHeA32n_-fh2yikaN!b9>fU2>L^}c49u5crNlcA$46$t&~T=fA&7cxvBFH|?F==G^g z^}4y7keFbK?bz7a6)Xb4=k^SD!|ACPQSgs3=1PO?=Kf&6a&a1)a5U(J`L}!&MrAvZ zNhG1Rv(-;z6H_tZn>8PWQm@a;nc#8)k`rgbicaUcJD`4ZebL+ns`=j@d;@0v??Bu$ z42qXnaB;&#FfZQ$J-;$d_tK_Zc1t3|Ku55n`V3s2oM&-O2d~S6HL8~p6U*fE;rVmR z7>GurAjuB=eg99GW9I#(cOP-u^DF|G8*NIDS)|(<)i6J*9Ov5ixF&A5v zgdTqQ5#iv$`&N|D_|zgSY6{15!pIDzOc#UZlR839W%y@i>qb~abg3^un z&^Ml}O&dm@8Bq{dlv6=;vO+8+JEmzGym;pOc;(`FTI-|Q93f}NEZz1|GQPd^*`)wJ zONSrO#dQS$(Bo0tD1NuN-EPz4@mQtYEl{Vh)AvQejJ2DR;U7{?vSm{ z{{kwD5_OvewC-bCZ1BDik8)=Z>x;=l^k@oSaFs6kCF#DW+~WOj{j0%7Y#ScHe*x|q VT&eGAk#+z8002ovPDHLkV1f&(>+%2q literal 0 HcmV?d00001 From 615688f3b98e3e04a31c91b185d78b2022e5cc5a Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Fri, 15 Dec 2017 23:20:55 +0100 Subject: [PATCH 078/107] - acinclude: fix TARGET_PREFIX define for native target Signed-off-by: Thilo Graf Note: TARGET_PREFIX describes inside the yocto SDK the toolchain binary prefix for the target tools. Maybe this could make confuse with usage of yocto SDK environment. Maybe we should rename this variable. e.g EXEC_PREFIX or so ... --- acinclude.m4 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/acinclude.m4 b/acinclude.m4 index d0daddef7..9db7454bf 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -50,11 +50,12 @@ if test "$TARGET" = "native"; then if test "$prefix" = "NONE"; then prefix=/usr/local fi - TARGET_PREFIX=$prefix if test "$exec_prefix" = "NONE"; then exec_prefix=$prefix fi targetprefix=$prefix + TARGET_PREFIX=$prefix + AC_DEFINE_UNQUOTED(TARGET_PREFIX, "$TARGET_PREFIX", [The targets prefix]) elif test "$TARGET" = "cdk"; then AC_MSG_RESULT(cdk) From 4f3f435bc5428348ec34fd033011fd6d5ef21fb1 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Fri, 15 Dec 2017 23:20:55 +0100 Subject: [PATCH 079/107] - settings_manager: add TARGET_PREFIX define to backup/restore calls Signed-off-by: Thilo Graf --- src/gui/settings_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/settings_manager.cpp b/src/gui/settings_manager.cpp index beaf20ca8..f2f8ef170 100644 --- a/src/gui/settings_manager.cpp +++ b/src/gui/settings_manager.cpp @@ -114,7 +114,7 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) { CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_SETTINGS_BACKUP)); hintBox->paint(); - const char backup_sh[] = "/bin/backup.sh"; + const char backup_sh[] = TARGET_PREFIX "/bin/backup.sh"; printf("backup: executing [%s %s]\n", backup_sh, fileBrowser.getSelectedFile()->Name.c_str()); my_system(2, backup_sh, fileBrowser.getSelectedFile()->Name.c_str()); hintBox->hide(); @@ -134,7 +134,7 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) int result = ShowMsg(LOCALE_SETTINGS_RESTORE, g_Locale->getText(LOCALE_SETTINGS_RESTORE_WARN), CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo); if(result == CMsgBox::mbrYes) { - const char restore_sh[] = "/bin/restore.sh"; + const char restore_sh[] = TARGET_PREFIX "/bin/restore.sh"; printf("restore: executing [%s %s]\n", restore_sh, fileBrowser.getSelectedFile()->Name.c_str()); my_system(2, restore_sh, fileBrowser.getSelectedFile()->Name.c_str()); } From 483f4053a526e234e3d9d45f670fdc8677799228 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Fri, 15 Dec 2017 23:20:55 +0100 Subject: [PATCH 080/107] - settings_manager: remember last used directory Conflicts: data/locale/deutsch.locale data/locale/english.locale src/gui/settings_manager.cpp Signed-off-by: Thilo Graf --- data/locale/deutsch.locale | 1 + data/locale/english.locale | 1 + src/gui/settings_manager.cpp | 78 +++++++++++++++++++++++------------- src/neutrino.cpp | 4 ++ src/system/locals.h | 1 + src/system/locals_intern.h | 1 + src/system/settings.h | 2 + 7 files changed, 61 insertions(+), 27 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 6e4d34163..651df3d38 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -2266,6 +2266,7 @@ servicemenu.restart_refused_recording Aufnahme läuft. Neustart nicht möglich. servicemenu.scants Kanalsuche servicemenu.update Software-Aktualisierung settings.backup System-Einstellungen sichern +settings.backup_dir Nach %s sichern?\n"Nein" wählt ein anderes Verzeichnis settings.backup_failed Sicherung fehlgeschlagen! settings.help Hilfe settings.menu_hints Hinweise anzeigen diff --git a/data/locale/english.locale b/data/locale/english.locale index 5e3b5c825..7106641bc 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -2266,6 +2266,7 @@ servicemenu.restart_refused_recording Cant restart, recording in progress servicemenu.scants Servicescan servicemenu.update Software Update settings.backup Save system settings +settings.backup_dir Save to %s?\n"No" chooses another directory. settings.backup_failed Backup failed! settings.help Help settings.menu_hints Show menu hints diff --git a/src/gui/settings_manager.cpp b/src/gui/settings_manager.cpp index f2f8ef170..526c4b269 100644 --- a/src/gui/settings_manager.cpp +++ b/src/gui/settings_manager.cpp @@ -75,8 +75,9 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) { fileFilter.addFilter("conf"); fileBrowser.Filter = &fileFilter; - if (fileBrowser.exec(CONFIGDIR) == true) + if (fileBrowser.exec(g_settings.backup_dir.c_str()) == true) { + g_settings.backup_dir = fileBrowser.getCurrentDir(); CNeutrinoApp::getInstance()->loadSetup(fileBrowser.getSelectedFile()->Name.c_str()); CColorSetupNotifier *colorSetupNotifier = new CColorSetupNotifier; colorSetupNotifier->changeNotify(NONEXISTANT_LOCALE, NULL); @@ -89,48 +90,71 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) } else if(actionKey == "saveconfig") { - fileBrowser.Dir_Mode = true; - if (fileBrowser.exec("/media") == true) + char msgtxt[1024]; + snprintf(msgtxt, sizeof(msgtxt), g_Locale->getText(LOCALE_SETTINGS_BACKUP_DIR), g_settings.backup_dir.c_str()); + + int result = ShowMsg(LOCALE_EXTRA_SAVECONFIG, msgtxt, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo); + if (result == CMsgBox::mbrNo) { - std::string fname = "neutrino.conf"; - CKeyboardInput * sms = new CKeyboardInput(LOCALE_EXTRA_SAVECONFIG, &fname); - sms->exec(NULL, ""); - - std::string sname = fileBrowser.getSelectedFile()->Name + "/" + fname; - printf("[neutrino] save settings: %s\n", sname.c_str()); - CNeutrinoApp::getInstance()->saveSetup(sname.c_str()); - delete sms; + fileBrowser.Dir_Mode = true; + if (fileBrowser.exec(g_settings.backup_dir.c_str()) == true) + g_settings.backup_dir = fileBrowser.getSelectedFile()->Name; + else + return res; } + + std::string fname = "neutrino.conf"; + CKeyboardInput * sms = new CKeyboardInput(LOCALE_EXTRA_SAVECONFIG, &fname); + sms->exec(NULL, ""); + delete sms; + + std::string sname = g_settings.backup_dir + "/" + fname; + printf("[neutrino] save settings: %s\n", sname.c_str()); + CNeutrinoApp::getInstance()->saveSetup(sname.c_str()); + return res; } else if(actionKey == "backup") { - fileBrowser.Dir_Mode = true; - if (fileBrowser.exec("/media") == true) + char msgtxt[1024]; + snprintf(msgtxt, sizeof(msgtxt), g_Locale->getText(LOCALE_SETTINGS_BACKUP_DIR), g_settings.backup_dir.c_str()); + + int result = ShowMsg(LOCALE_SETTINGS_BACKUP, msgtxt, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo); + if (result == CMsgBox::mbrNo) { - struct statfs s; - int ret = ::statfs(fileBrowser.getSelectedFile()->Name.c_str(), &s); - if(ret == 0 && s.f_type != 0x72b6L) /*jffs2*/ - { - CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_SETTINGS_BACKUP)); - hintBox->paint(); - const char backup_sh[] = TARGET_PREFIX "/bin/backup.sh"; - printf("backup: executing [%s %s]\n", backup_sh, fileBrowser.getSelectedFile()->Name.c_str()); - my_system(2, backup_sh, fileBrowser.getSelectedFile()->Name.c_str()); - hintBox->hide(); - delete hintBox; - } + fileBrowser.Dir_Mode = true; + if (fileBrowser.exec(g_settings.backup_dir.c_str()) == true) + g_settings.backup_dir = fileBrowser.getSelectedFile()->Name; else - ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_SETTINGS_BACKUP_FAILED),CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_ERROR); + return res; } + + struct statfs s; + int ret = ::statfs(g_settings.backup_dir.c_str(), &s); + if (ret == 0 && s.f_type != 0x72b6L) /*jffs2*/ + { + CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_SETTINGS_BACKUP)); + hintBox->paint(); + + const char backup_sh[] = TARGET_PREFIX "/bin/backup.sh"; + printf("backup: executing [%s %s]\n", backup_sh, g_settings.backup_dir.c_str()); + my_system(2, backup_sh, g_settings.backup_dir.c_str()); + + hintBox->hide(); + delete hintBox; + } + else + ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_SETTINGS_BACKUP_FAILED),CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_ERROR); + return res; } else if(actionKey == "restore") { fileFilter.addFilter("tar"); fileBrowser.Filter = &fileFilter; - if (fileBrowser.exec("/media") == true) + if (fileBrowser.exec(g_settings.backup_dir.c_str()) == true) { + g_settings.backup_dir = fileBrowser.getCurrentDir(); int result = ShowMsg(LOCALE_SETTINGS_RESTORE, g_Locale->getText(LOCALE_SETTINGS_RESTORE_WARN), CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo); if(result == CMsgBox::mbrYes) { diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 522a885f1..39d26c862 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -827,6 +827,8 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.font_scaling_x = configfile.getInt32("font_scaling_x", 100); g_settings.font_scaling_y = configfile.getInt32("font_scaling_y", 100); + g_settings.backup_dir = configfile.getString("backup_dir", "/media"); + g_settings.update_dir = configfile.getString("update_dir", "/tmp"); g_settings.update_dir_opkg = configfile.getString("update_dir_opkg", g_settings.update_dir); @@ -1446,6 +1448,8 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setString("softupdate_proxyusername" , g_settings.softupdate_proxyusername ); configfile.setString("softupdate_proxypassword" , g_settings.softupdate_proxypassword ); + configfile.setString("backup_dir", g_settings.backup_dir); + configfile.setString("update_dir", g_settings.update_dir); configfile.setString("update_dir_opkg", g_settings.update_dir_opkg); diff --git a/src/system/locals.h b/src/system/locals.h index d1260c9ef..339ad53f9 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -2293,6 +2293,7 @@ typedef enum LOCALE_SERVICEMENU_SCANTS, LOCALE_SERVICEMENU_UPDATE, LOCALE_SETTINGS_BACKUP, + LOCALE_SETTINGS_BACKUP_DIR, LOCALE_SETTINGS_BACKUP_FAILED, LOCALE_SETTINGS_HELP, LOCALE_SETTINGS_MENU_HINTS, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 61003a67d..013449970 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -2293,6 +2293,7 @@ const char * locale_real_names[] = "servicemenu.scants", "servicemenu.update", "settings.backup", + "settings.backup_dir", "settings.backup_failed", "settings.help", "settings.menu_hints", diff --git a/src/system/settings.h b/src/system/settings.h index 7242b221a..e813dd0f0 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -668,6 +668,8 @@ struct SNeutrinoSettings int flashupdate_createimage_add_spare; int flashupdate_createimage_add_kernel; + std::string backup_dir; + std::string update_dir; std::string update_dir_opkg; From 52c279fc4f34a556185a684419ef5d70d110b185 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 17 Dec 2017 19:39:48 +0100 Subject: [PATCH 081/107] CSettingsManager: use neutrino internal debug output, --- src/gui/settings_manager.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/gui/settings_manager.cpp b/src/gui/settings_manager.cpp index 526c4b269..0da1b5f40 100644 --- a/src/gui/settings_manager.cpp +++ b/src/gui/settings_manager.cpp @@ -44,11 +44,11 @@ #include #include #include +#include #include - CSettingsManager::CSettingsManager(int wizard_mode) { width = 40; @@ -62,7 +62,7 @@ CSettingsManager::~CSettingsManager() int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) { - printf("[neutrino] CSettingsManager %s: init...\n",__FUNCTION__); + dprintf(DEBUG_NORMAL, "[CSettingsManager]\t[%s - %d] actionKey = [%s]\n", __func__, __LINE__, actionKey.c_str()); int res = menu_return::RETURN_REPAINT; if (parent) @@ -78,12 +78,13 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) if (fileBrowser.exec(g_settings.backup_dir.c_str()) == true) { g_settings.backup_dir = fileBrowser.getCurrentDir(); - CNeutrinoApp::getInstance()->loadSetup(fileBrowser.getSelectedFile()->Name.c_str()); + std::string new_config = fileBrowser.getSelectedFile()->Name.c_str(); + CNeutrinoApp::getInstance()->loadSetup(new_config.c_str()); CColorSetupNotifier *colorSetupNotifier = new CColorSetupNotifier; colorSetupNotifier->changeNotify(NONEXISTANT_LOCALE, NULL); CNeutrinoApp::getInstance()->SetupFonts(CNeutrinoFonts::FONTSETUP_ALL); CVFD::getInstance()->setlcdparameter(); - printf("[neutrino] new settings: %s\n", fileBrowser.getSelectedFile()->Name.c_str()); + dprintf(DEBUG_NORMAL, "[CSettingsManager]\t[%s - %d] load config from %s\n", __func__, __LINE__, new_config.c_str()); delete colorSetupNotifier; } return res; @@ -109,7 +110,8 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) delete sms; std::string sname = g_settings.backup_dir + "/" + fname; - printf("[neutrino] save settings: %s\n", sname.c_str()); + dprintf(DEBUG_NORMAL, "[CSettingsManager]\t[%s - %d] save neutrino settings to %s\n", __func__, __LINE__, sname.c_str()); + CNeutrinoApp::getInstance()->saveSetup(sname.c_str()); return res; @@ -137,7 +139,7 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) hintBox->paint(); const char backup_sh[] = TARGET_PREFIX "/bin/backup.sh"; - printf("backup: executing [%s %s]\n", backup_sh, g_settings.backup_dir.c_str()); + dprintf(DEBUG_NORMAL, "[CSettingsManager]\t[%s - %d] executing [%s %s]\n", __func__, __LINE__, backup_sh, g_settings.backup_dir.c_str()); my_system(2, backup_sh, g_settings.backup_dir.c_str()); hintBox->hide(); @@ -159,8 +161,9 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) if(result == CMsgBox::mbrYes) { const char restore_sh[] = TARGET_PREFIX "/bin/restore.sh"; - printf("restore: executing [%s %s]\n", restore_sh, fileBrowser.getSelectedFile()->Name.c_str()); - my_system(2, restore_sh, fileBrowser.getSelectedFile()->Name.c_str()); + std::string restore_file = fileBrowser.getSelectedFile()->Name; + dprintf(DEBUG_NORMAL, "[CSettingsManager]\t[%s - %d] executing [%s %s]\n", __func__, __LINE__, restore_sh, restore_file.c_str()); + my_system(2, restore_sh, restore_file.c_str()); } } return res; From 6c781b05a1f45976155e2274fc9be97496ff2361 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 17 Dec 2017 20:43:03 +0100 Subject: [PATCH 082/107] CSettingsManager: add cancel buttons to backup/save config messages User should have this possibility because 'yes' and 'no' are coming with defined effects. --- src/gui/settings_manager.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gui/settings_manager.cpp b/src/gui/settings_manager.cpp index 0da1b5f40..a9544fdd8 100644 --- a/src/gui/settings_manager.cpp +++ b/src/gui/settings_manager.cpp @@ -94,7 +94,9 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) char msgtxt[1024]; snprintf(msgtxt, sizeof(msgtxt), g_Locale->getText(LOCALE_SETTINGS_BACKUP_DIR), g_settings.backup_dir.c_str()); - int result = ShowMsg(LOCALE_EXTRA_SAVECONFIG, msgtxt, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo); + int result = ShowMsg(LOCALE_EXTRA_SAVECONFIG, msgtxt, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo | CMsgBox::mbCancel); + if (result == CMsgBox::mbrCancel) + return res; if (result == CMsgBox::mbrNo) { fileBrowser.Dir_Mode = true; @@ -121,7 +123,9 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) char msgtxt[1024]; snprintf(msgtxt, sizeof(msgtxt), g_Locale->getText(LOCALE_SETTINGS_BACKUP_DIR), g_settings.backup_dir.c_str()); - int result = ShowMsg(LOCALE_SETTINGS_BACKUP, msgtxt, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo); + int result = ShowMsg(LOCALE_SETTINGS_BACKUP, msgtxt, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo | CMsgBox::mbCancel); + if (result == CMsgBox::mbrCancel) + return res; if (result == CMsgBox::mbrNo) { fileBrowser.Dir_Mode = true; From f38e03a4312945372c44a1c943034f4a0e33db3b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 17 Dec 2017 21:44:51 +0100 Subject: [PATCH 083/107] icons: fix assignment of settings, network and mainmenu icons Assignment was confused. There are probaly more. --- data/icons/headers/mainmenue.png | Bin 1775 -> 2050 bytes data/icons/headers/settings.png | Bin 386 -> 1775 bytes src/gui/network_setup.cpp | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/icons/headers/mainmenue.png b/data/icons/headers/mainmenue.png index a43f2a61d4e1a8190b7d8d76a8952eb36a81e6cc..251e5378651c6014fe14bc2d4be42fa4d5e389d7 100644 GIT binary patch delta 2036 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 BT9p6* diff --git a/data/icons/headers/settings.png b/data/icons/headers/settings.png index 7d7217c8167ed018e6e40d855e93532fa946388e..a43f2a61d4e1a8190b7d8d76a8952eb36a81e6cc 100644 GIT binary patch literal 1775 zcmVVGd000McNliru-U}2FHX;qvKkxtm27F0G zK~z}7#g}bNmFF49f6w!rH#kQEM?5G>rO8u%le@#)(`zs zidh)-n>wo|6`&OtzLt#G(RX{4B^1n3!bRqdIg3Ah3JP-U4g-2@=kd$fc zq8``~e(~ts0Fj|0cpM$jp(v$@YX`59pO}v(HD=#GteY{DpP0{yy(hT(@>N=Y-AYYy z&GI>dWQ8{w17ZNq{_-5|b!iAG_^{vJH=_m0OW1VBYS-|o?Z{bQ^PB^(_wZ{`IAa^Zr;gEXa*q! z*T22a@tem9>cQo61%4F~=A{5nuZQ;<-@~F>@CAINI8!*7eUSMvOL=Z$F1wR=6VgLS zA?X|M<4n^Te16}mxdwpnOk_y%spnIg?>D2MAf+UIT{^BP*RpdoNfSGgc3@V`k-qu@ zKKjP`7R5SD4(iJ4=5qk`!L|%c3~=nTV_f+A1-gg3aoJtGnDrtm>XL2L6b+Z%g%Be0 zF4`Q;2FHd4aq-dd)Rfea6qB?tpC8R}VAjW{$GO#giyQ4X@Q3`owCyDCN?V8C`=ksrzi#( z1qBtA^Ix6k>OZa`WTa}pM$TdmEaxrXwGhw){5-3SqV%7Uo0JPe;#%Y4R@W`uE;pK@ zVKZA%&`=c>lWM{j@NwnNpZI;lDQ1E*3v^&b4lHFKH+@Xu6NO~1e~O?U03dB$8aMCW zq<_4hgf$7gbNwAQJ2w*>9ZT<6FSozDOXk<}=T%7}D+sddYuAugdT4JJNa5-F<;Q4~WpZ6+Hf zTT6(Gilb|=i^-YE)p+IC*s?l+7q-2?tGiw$HYyhPdNU^iQQ_)o!}-VK83o5Ix-S7uv_fL z(hKM4LMJXdj$LWHXzXg_`^oQD*bP_Uz`o3VR6JW@h|BEUg~X(qh_S`s9r03qp&E;3 znd4Ph19V--VR3N!<?+(%%w-Lf9rlK_g6CQpGG2)LPSJm)Hlkpi^pi|X=8YD z7>mimmW^8$@L?8=ib`R6A)fml2FC}N7(vEj0HwL59NKfpkk|Q@Ntl?P;N+E)GLN_`!3j&GNWF=>F4jsK642%st0KmPF10^{nloytxDymUA#>Z4e zC8UR_JXc9ecguoGe10F_{QDaUo-Dv-wndibED#|DYpiQ{I`wHG6**{%E^l-@!az~lwx{^yd14RO3zRaDr!U{`~g3wuAky^ z)8z&68mV&}h_lD>OvW>0J(flOllg@75Xa9Sr@6EF2VFWwCPujHy-Qwd9(Jo8UFg)^ zsN-Ve#YH-x@dR%ou_3|pFAqUI$R_6|I{P|#``p{K_q6|4H=p70VH&?}qQJd_Gk-qA zrKU?u-H!YUMSKNp<^N-C8jmxG;J~~KM$3VSdCr9d^1^oT0&0e%Bq_z#IO{%IFB Rh(Q1V002ovPDHLkV1gvxR}KIG literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ipR~8SJh7Bb#-NBlrsshRU zZZ-DmnaW;0j_i?afByZMIAP-IHLK(2gwCHof5*-pCiVKZ%h+Rpdbvu1{DS|(0K=v; zI_H6+oCO|{#S9GGLLkg|>2BR0px`4<7sn8Z%gHl3StJ~eu&}ZDNwhCy=8#aB!zr6^ zfb&^FNy(b1s~0aaJo0(*f~m+NjA5xnTG5s@QPtny-3@inY?~*|}y zJuIpmB(kF*u7U*&cW~Ws@wjTdOpY9FKR59ckBQ9>e|)JCkh#h z4xK)~ci&Z}r&s1!vIjn!RQ7xBqBFa%XD0Z4x?B7H-rn1@ryV+JF!?N3(s?891>6xm zih3U243<}ZgkQM3dsX*k2fn#C|JY|-)moasy`etshPZ5ymj1hzit4t?%F0^xZ48af Z3>xb5<@X#bDhK+O!PC{xWt~$(699fLqsetWizardMode(is_wizard); //apply button @@ -352,9 +352,9 @@ int CNetworkSetup::showNetworkSetup() networkSettings->addItem( m5); //nameserver //------------------------------------------------ sectionsdConfigNotifier = NULL; - CMenuWidget ntp(LOCALE_MAINSETTINGS_NETWORK, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_NETWORKSETUP_NTP); + CMenuWidget ntp(LOCALE_MAINSETTINGS_NETWORK, NEUTRINO_ICON_NETWORK, width, MN_WIDGET_ID_NETWORKSETUP_NTP); #ifdef ENABLE_GUI_MOUNT - CMenuWidget networkmounts(LOCALE_MAINSETTINGS_NETWORK, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_NETWORKSETUP_MOUNTS); + CMenuWidget networkmounts(LOCALE_MAINSETTINGS_NETWORK, NEUTRINO_ICON_NETWORK, width, MN_WIDGET_ID_NETWORKSETUP_MOUNTS); #endif CProxySetup proxy(LOCALE_MAINSETTINGS_NETWORK); CNetworkServiceSetup services; @@ -805,7 +805,7 @@ int CNetworkSetup::showWlanList() return res; } - CMenuWidget wlist(LOCALE_MAINSETTINGS_NETWORK, NEUTRINO_ICON_SETTINGS, width); + CMenuWidget wlist(LOCALE_MAINSETTINGS_NETWORK, NEUTRINO_ICON_NETWORK, width); wlist.addIntroItems(LOCALE_NETWORKMENU_SSID_SCAN); //intros char cnt[5]; From e6da7fdda7ecf4bcebeca79e77a54a46b4578316 Mon Sep 17 00:00:00 2001 From: GetAway Date: Sun, 17 Dec 2017 17:16:11 +0100 Subject: [PATCH 084/107] audiomute.cpp: fix clear screen after audiomute --- src/gui/audiomute.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/audiomute.cpp b/src/gui/audiomute.cpp index 47723052c..51a047c64 100644 --- a/src/gui/audiomute.cpp +++ b/src/gui/audiomute.cpp @@ -98,9 +98,10 @@ void CAudioMute::AudioMute(int newValue, bool isEvent) if (!CInfoClock::getInstance()->isBlocked()){ CInfoClock::getInstance()->ClearDisplay(); this->kill(); - clearSavedScreen(); - }else + } + else this->hide(); + clearSavedScreen(); frameBuffer->setFbArea(CFrameBuffer::FB_PAINTAREA_MUTEICON1); } frameBuffer->fbNoCheck(false); From b9f0bf8f7daee7fa9d4a79b54021d365f344ee7a Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 18 Dec 2017 10:15:15 +0100 Subject: [PATCH 085/107] Icons: add missing hint icons and fix some files with format errors --- data/icons/hints/Makefile.am | 5 +++++ data/icons/hints/hint_backup.png | Bin 0 -> 2585 bytes data/icons/hints/hint_factory.png | Bin 0 -> 3652 bytes data/icons/hints/hint_load.png | Bin 0 -> 2061 bytes data/icons/hints/hint_reset.png | Bin 0 -> 3440 bytes data/icons/hints/hint_restore.png | Bin 0 -> 3383 bytes data/icons/hints/hint_saveas.png | Bin 2091 -> 2111 bytes data/icons/status/various/mute.png | Bin 6777 -> 2689 bytes 8 files changed, 5 insertions(+) create mode 100644 data/icons/hints/hint_backup.png create mode 100644 data/icons/hints/hint_factory.png create mode 100644 data/icons/hints/hint_load.png create mode 100644 data/icons/hints/hint_reset.png create mode 100644 data/icons/hints/hint_restore.png diff --git a/data/icons/hints/Makefile.am b/data/icons/hints/Makefile.am index 1279c08e8..98a29dba0 100644 --- a/data/icons/hints/Makefile.am +++ b/data/icons/hints/Makefile.am @@ -6,11 +6,13 @@ install_DATA = \ hint_aplay.png \ hint_audio.png \ hint_back.png \ + hint_backup.png \ hint_bedit.png \ hint_ci.png \ hint_dboxinfo.png \ hint_delete.png \ hint_extended.png \ + hint_factory.png \ hint_fileplay.png \ hint_games.png \ hint_hdd.png \ @@ -19,6 +21,7 @@ install_DATA = \ hint_info.png \ hint_keys.png \ hint_language.png \ + hint_load.png \ hint_manage.png \ hint_mb.png \ hint_media.png \ @@ -34,7 +37,9 @@ install_DATA = \ hint_reboot.png \ hint_recording.png \ hint_reload.png \ + hint_reset.png \ hint_restart.png \ + hint_restore.png \ hint_save.png \ hint_saveas.png \ hint_scan.png \ diff --git a/data/icons/hints/hint_backup.png b/data/icons/hints/hint_backup.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4099792ba1e5c5c00de04887ef99f09b501513 GIT binary patch literal 2585 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 SgrP_P0000tT&B0ck0c2F#m5QZ|+BrY(4b) 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 N002ovPDHLkV1fjvU2OmW literal 0 HcmV?d00001 diff --git a/data/icons/hints/hint_saveas.png b/data/icons/hints/hint_saveas.png index c43ae333b214b4f2e0633df5f15cd6ca32b345e5..9f013e4ed21350723ded43b60b4ef6aa5f9fd860 100644 GIT binary patch delta 2099 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 JPDHLkV1lnw@e=?5 diff --git a/data/icons/status/various/mute.png b/data/icons/status/various/mute.png index 095e892de5e648462d95c2bb218f0da0589657c9..2ee846d7044c462a396c43ba23411d51eea8e25c 100644 GIT binary patch literal 2689 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 Date: Mon, 18 Dec 2017 11:00:17 +0100 Subject: [PATCH 086/107] - icons: add default hint icon Signed-off-by: Thilo Graf --- data/icons/hints/Makefile.am | 1 + data/icons/hints/hint_default.png | Bin 0 -> 437 bytes src/gui/widget/icons.h | 1 + src/gui/widget/menue.cpp | 2 +- 4 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 data/icons/hints/hint_default.png diff --git a/data/icons/hints/Makefile.am b/data/icons/hints/Makefile.am index 98a29dba0..895a4f4cb 100644 --- a/data/icons/hints/Makefile.am +++ b/data/icons/hints/Makefile.am @@ -10,6 +10,7 @@ install_DATA = \ hint_bedit.png \ hint_ci.png \ hint_dboxinfo.png \ + hint_default.png \ hint_delete.png \ hint_extended.png \ hint_factory.png \ diff --git a/data/icons/hints/hint_default.png b/data/icons/hints/hint_default.png new file mode 100644 index 0000000000000000000000000000000000000000..afc7e537a6c358eee5eb3d8bb2cf5d1fe724aaa6 GIT binary patch literal 437 zcmV;m0ZRUfP)MDQ^w1cP}(aExKO_rp0x@R&i0MGxjH>r{eue8qIfubg0=DzKhlzG9GJj;RL6 zFj?HTG9MYL8VutjW{SMnjM*m#_F*>3i_4g$a$qUua{LU8kOLzy*W|@3Om8{R2lGl^ zyvOvF1AQ^?<;6YB1UWDfb5CAe#Vm=MsetColorAll(COL_FRAME_PLUS_0, COL_MENUCONTENTDARK_PLUS_0); info_box->setTextColor(COL_MENUCONTENTDARK_TEXT); info_box->enableShadow(); - info_box->setPicture(item->hintIcon ? item->hintIcon : NULL); + info_box->setPicture(item->hintIcon ? item->hintIcon : NEUTRINO_ICON_HINT_DEFAULT); info_box->enableColBodyGradient(g_settings.theme.menu_Hint_gradient, COL_MENUFOOT_PLUS_0, g_settings.theme.menu_Hint_gradient_direction);// COL_MENUFOOT_PLUS_0 is default footer color //paint result From d2c2ec070d28e32a637c89b594fbea44c8142d39 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 18 Dec 2017 16:58:00 +0100 Subject: [PATCH 087/107] Icons: use default hint from own icon set --- data/icons/hints/hint_default.png | Bin 437 -> 2925 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/hints/hint_default.png b/data/icons/hints/hint_default.png index afc7e537a6c358eee5eb3d8bb2cf5d1fe724aaa6..fac7493d2207c11559b4b4bc122310f8c292d1d6 100644 GIT binary patch literal 2925 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 Date: Mon, 18 Dec 2017 16:59:08 +0100 Subject: [PATCH 088/107] Icons: use fixed language and youtube icon Format was wrong. --- data/icons/hints/hint_language.png | Bin 6821 -> 3020 bytes data/icons/hints/hint_ytplay.png | Bin 3495 -> 2631 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/hints/hint_language.png b/data/icons/hints/hint_language.png index 1585e8237ab477d677d229dc62d0f9ab9a34a173..75bc9ce2f51274a074ca12581c2bb42268c6a23d 100644 GIT binary patch delta 2979 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 Z{R36=<^)s;(l!79002ovPDHLkV1i#di*5h_ literal 6821 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 S`g!1vf~6p%3N3?}2K^V)JO~j0 diff --git a/data/icons/hints/hint_ytplay.png b/data/icons/hints/hint_ytplay.png index 0d687cca0861acb476e86a42068f16ebf6ff898a..f40e4d3a1d735b5b82b1056a80a3d3317d2f8b6b 100644 GIT binary patch delta 2623 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 Date: Mon, 18 Dec 2017 11:49:43 +0100 Subject: [PATCH 089/107] - settings_manager: fix issue tag on reset settings item Signed-off-by: Thilo Graf --- src/gui/settings_manager.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/gui/settings_manager.cpp b/src/gui/settings_manager.cpp index a9544fdd8..3663e20fb 100644 --- a/src/gui/settings_manager.cpp +++ b/src/gui/settings_manager.cpp @@ -212,9 +212,8 @@ int CSettingsManager::showMenu() mset->addIntroItems(LOCALE_MAINSETTINGS_MANAGE); CMenuForwarder * mf; - mf = new CMenuForwarder(LOCALE_RESET_SETTINGS, true, NULL, resetNotifier, "settings", CRCInput::RC_recall); - - mf->setHint(NEUTRINO_ICON_HINT_RESET, LOCALE_MENU_HINT_RESET); // FIXME: RC-button RECALL is broken + mf = new CMenuForwarder(LOCALE_RESET_SETTINGS, true, NULL, resetNotifier, "settings"); + mf->setHint(NEUTRINO_ICON_HINT_RESET, LOCALE_MENU_HINT_RESET); mset->addItem(mf); mset->addItem(GenericMenuSeparatorLine); @@ -230,12 +229,10 @@ int CSettingsManager::showMenu() mset->addItem(GenericMenuSeparatorLine); mf = new CMenuForwarder(LOCALE_SETTINGS_BACKUP, true, NULL, this, "backup", CRCInput::RC_yellow); - mf->setHint(NEUTRINO_ICON_HINT_BACKUP, LOCALE_MENU_HINT_BACKUP); mset->addItem(mf); mf = new CMenuForwarder(LOCALE_SETTINGS_RESTORE, true, NULL, this, "restore", CRCInput::RC_blue); - mf->setHint(NEUTRINO_ICON_HINT_RESTORE, LOCALE_MENU_HINT_RESTORE); mset->addItem(mf); From 9b79b011cbc238112ad1d99efe630af52e304a74 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 18 Dec 2017 12:23:57 +0100 Subject: [PATCH 090/107] - streaminfo: add fallback to delivery system detection Signed-off-by: Thilo Graf --- src/gui/streaminfo1.cpp | 2 ++ src/gui/streaminfo2.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/gui/streaminfo1.cpp b/src/gui/streaminfo1.cpp index fcb6b5445..d696c8346 100644 --- a/src/gui/streaminfo1.cpp +++ b/src/gui/streaminfo1.cpp @@ -764,6 +764,8 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) snprintf(buf, sizeof(buf), "%s:",g_Locale->getText (LOCALE_CHANNELLIST_PROVS)); else if (CFrontend::isTerr(t.feparams.delsys)) snprintf(buf, sizeof(buf), "%s:",g_Locale->getText (LOCALE_TERRESTRIALSETUP_AREA)); + else + snprintf(buf, sizeof(buf), "Unknown:"); g_Font[font_info]->RenderString(xpos, ypos, box_width, buf, COL_MENUCONTENT_TEXT); diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index 4eaa78b09..002f39ba9 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -899,6 +899,8 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) r.key = g_Locale->getText (LOCALE_CHANNELLIST_PROVS); else if (CFrontend::isTerr(t.feparams.delsys)) r.key = g_Locale->getText (LOCALE_TERRESTRIALSETUP_AREA); + else + r.key = "Unknown:"; r.key += ": "; r.val = CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()).c_str(); From ae2a6c06f8fdd765f837ae7008bcaa514db71339 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 18 Dec 2017 14:51:30 +0100 Subject: [PATCH 091/107] - acinclude: configure for generic hardware by default Signed-off-by: Thilo Graf --- acinclude.m4 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 9db7454bf..3c815c590 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -319,7 +319,7 @@ AC_ARG_WITH(boxtype, AC_MSG_ERROR([bad value $withval for --with-boxtype]) ;; esac], - [BOXTYPE="coolstream"]) + [BOXTYPE="generic"]) AC_ARG_WITH(boxmodel, AS_HELP_STRING([--with-boxmodel], [valid for coolstream: hd1, hd2]) @@ -362,8 +362,7 @@ AS_HELP_STRING([], [valid for generic: raspi]), *) AC_MSG_ERROR([unsupported value $withval for --with-boxmodel]) ;; - esac], - [test "$BOXTYPE" = "coolstream" && BOXMODEL="hd1" || true]) + esac]) AC_SUBST(BOXTYPE) AC_SUBST(BOXMODEL) From a4670c75a9d2a7c16a21a19dce78ac9602c4dc17 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Tue, 19 Dec 2017 10:58:44 +0100 Subject: [PATCH 092/107] - rcinput: add RC_playpause key Conflicts: src/driver/rcinput.cpp src/driver/rcinput.h Signed-off-by: Thilo Graf --- src/driver/rcinput.cpp | 4 ++++ src/driver/rcinput.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 7c0da87a4..c9cf5e5f9 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -1677,6 +1677,10 @@ const char * CRCInput::getSpecialKeyName(const unsigned int key) return "previous song"; case RC_bookmarks: return "bookmarks"; + case RC_program: + return "program"; + case RC_playpause: + return "play / pause"; default: printf("unknown key: %d (0x%x) \n", key, key); return "unknown"; diff --git a/src/driver/rcinput.h b/src/driver/rcinput.h index 44692a4b2..173bd76a8 100644 --- a/src/driver/rcinput.h +++ b/src/driver/rcinput.h @@ -252,6 +252,8 @@ class CRCInput RC_nextsong = KEY_NEXTSONG, RC_previoussong = KEY_PREVIOUSSONG, RC_bookmarks = KEY_BOOKMARKS, + RC_program = KEY_PROGRAM, + RC_playpause = KEY_PLAYPAUSE, RC_power_on = KEY_POWERON, RC_power_off = KEY_POWEROFF, From c9e4712011918adfe48545297a36400da3e96fb9 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Tue, 19 Dec 2017 10:58:44 +0100 Subject: [PATCH 093/107] - neutrino: add RC_playpause handling; change some key defaults for ARM_HARDWARE Conflicts: src/neutrino.cpp Signed-off-by: Thilo Graf --- src/neutrino.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 39d26c862..95c963a55 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -310,8 +310,12 @@ static SNeutrinoSettings::usermenu_t usermenu_default[] = { { CRCInput::RC_green, "6", "", "green" }, { CRCInput::RC_yellow, "7,31", "", "yellow" }, { CRCInput::RC_blue, "12,11,20,21,19,14,29,30,15", "", "blue" }, +#if HAVE_ARM_HARDWARE + { CRCInput::RC_playpause, "9", "", "5" }, +#else { CRCInput::RC_play, "9", "", "5" }, - { CRCInput::RC_audio, "27", "", "6" }, +#endif + { CRCInput::RC_audio, "27", "", "6" }, { CRCInput::RC_nokey, "", "", "" }, }; @@ -2855,7 +2859,8 @@ void CNeutrinoApp::RealRun() as.exec(NULL, "-1"); StartSubtitles(); } - else if( msg == CRCInput::RC_video || msg == CRCInput::RC_play ) { + else if( msg == CRCInput::RC_video || msg == CRCInput::RC_play || msg == CRCInput::RC_playpause) + { //open moviebrowser via media player menu object if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) CMediaPlayerMenu::getInstance()->exec(NULL, "moviebrowser"); @@ -4672,7 +4677,11 @@ void CNeutrinoApp::loadKeys(const char * fname) g_settings.key_list_start = tconfig.getInt32( "key_list_start", (unsigned int)CRCInput::RC_nokey ); g_settings.key_list_end = tconfig.getInt32( "key_list_end", (unsigned int)CRCInput::RC_nokey ); +#if HAVE_ARM_HARDWARE + g_settings.key_timeshift = tconfig.getInt32( "key_timeshift", CRCInput::RC_nokey ); // FIXME +#else g_settings.key_timeshift = tconfig.getInt32( "key_timeshift", CRCInput::RC_pause ); +#endif g_settings.key_unlock = tconfig.getInt32( "key_unlock", CRCInput::RC_setup ); g_settings.key_screenshot = tconfig.getInt32( "key_screenshot", (unsigned int)CRCInput::RC_nokey ); #ifdef ENABLE_PIP @@ -4700,9 +4709,14 @@ void CNeutrinoApp::loadKeys(const char * fname) g_settings.mpkey_rewind = tconfig.getInt32( "mpkey.rewind", CRCInput::RC_rewind ); g_settings.mpkey_forward = tconfig.getInt32( "mpkey.forward", CRCInput::RC_forward ); - g_settings.mpkey_pause = tconfig.getInt32( "mpkey.pause", CRCInput::RC_pause ); g_settings.mpkey_stop = tconfig.getInt32( "mpkey.stop", CRCInput::RC_stop ); +#if HAVE_ARM_HARDWARE + g_settings.mpkey_play = tconfig.getInt32( "mpkey.play", CRCInput::RC_playpause ); + g_settings.mpkey_pause = tconfig.getInt32( "mpkey.pause", CRCInput::RC_playpause ); +#else g_settings.mpkey_play = tconfig.getInt32( "mpkey.play", CRCInput::RC_play ); + g_settings.mpkey_pause = tconfig.getInt32( "mpkey.pause", CRCInput::RC_pause ); +#endif g_settings.mpkey_audio = tconfig.getInt32( "mpkey.audio", CRCInput::RC_green ); g_settings.mpkey_time = tconfig.getInt32( "mpkey.time", CRCInput::RC_timeshift ); g_settings.mpkey_bookmark = tconfig.getInt32( "mpkey.bookmark", CRCInput::RC_yellow ); From 3d5aa5977af5705665f4eddf7fe81b3690c55d22 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Tue, 19 Dec 2017 10:58:44 +0100 Subject: [PATCH 094/107] - neutrino: add more RC_playpause handling Conflicts: src/gui/movieplayer.cpp Signed-off-by: Thilo Graf --- src/gui/audioplayer.cpp | 9 +++++++ src/gui/audioplayer.h | 1 + src/gui/channellist.cpp | 2 +- src/gui/filebrowser.cpp | 2 +- src/gui/moviebrowser/mb.cpp | 6 ++--- src/gui/movieplayer.cpp | 16 +++++++++-- src/gui/pictureviewer.cpp | 53 ++++++++++++++++++++++--------------- src/gui/timerlist.cpp | 2 +- src/gui/upnpbrowser.cpp | 2 +- 9 files changed, 63 insertions(+), 30 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index bcf70e4ae..cf27eaab5 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -408,6 +408,15 @@ int CAudioPlayerGui::show() } g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout to update play/stop state display + if (msg == CRCInput::RC_playpause) + { + // manipulate msg + if (m_state == CAudioPlayerGui::PAUSE) + msg = CRCInput::RC_play; + else + msg = CRCInput::RC_pause; + } + if (msg == CRCInput::RC_timeout || msg == NeutrinoMessages::EVT_TIMER) { int delay = time(NULL) - m_idletime; diff --git a/src/gui/audioplayer.h b/src/gui/audioplayer.h index 86810d109..3a7d43b9b 100644 --- a/src/gui/audioplayer.h +++ b/src/gui/audioplayer.h @@ -250,6 +250,7 @@ class CAudioPlayerGui : public CMenuTarget bool playNext(bool allow_rotate = false); bool playPrev(bool allow_rotate = false); int getAudioPlayerM_current() { return m_current; } + State getState() { return m_state; } }; #endif diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 6892988e9..dc0f47c1f 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -889,7 +889,7 @@ int CChannelList::show() moveChannelToBouquet(); } #ifdef ENABLE_PIP - else if (!empty && ((msg == CRCInput::RC_play) || (msg == (neutrino_msg_t) g_settings.key_pip_close))) { + else if (!empty && ((msg == CRCInput::RC_play) || (msg == CRCInput::RC_playpause) || (msg == (neutrino_msg_t) g_settings.key_pip_close))) { if(SameTP()) { if (CZapit::getInstance()->GetPipChannelID() == (*chanlist)[selected]->getChannelID()) { g_Zapit->stopPip(); diff --git a/src/gui/filebrowser.cpp b/src/gui/filebrowser.cpp index 04230bd79..281de4686 100644 --- a/src/gui/filebrowser.cpp +++ b/src/gui/filebrowser.cpp @@ -714,7 +714,7 @@ bool CFileBrowser::exec(const char * const dirname) if ((filelist.empty())) continue; - if (msg == CRCInput::RC_yellow || msg == CRCInput::RC_play) + if (msg == CRCInput::RC_yellow || msg == CRCInput::RC_play || msg == CRCInput::RC_playpause) { if ((Multi_Select) && (selected < filelist.size())) { diff --git a/src/gui/moviebrowser/mb.cpp b/src/gui/moviebrowser/mb.cpp index 7b9e34e6e..d3cefce0e 100644 --- a/src/gui/moviebrowser/mb.cpp +++ b/src/gui/moviebrowser/mb.cpp @@ -2236,7 +2236,7 @@ bool CMovieBrowser::onButtonPressBrowserList(neutrino_msg_t msg) scrollBrowserItem(false, true); else if (msg == (neutrino_msg_t)g_settings.key_pagedown) scrollBrowserItem(true, true); - else if (msg == CRCInput::RC_play) + else if (msg == CRCInput::RC_play || msg == CRCInput::RC_playpause) markItem(m_pcBrowser); else result = false; @@ -2260,7 +2260,7 @@ bool CMovieBrowser::onButtonPressLastPlayList(neutrino_msg_t msg) m_pcLastPlay->scrollPageUp(1); else if (msg == (neutrino_msg_t)g_settings.key_pagedown) m_pcLastPlay->scrollPageDown(1); - else if (msg == CRCInput::RC_play) + else if (msg == CRCInput::RC_play || msg == CRCInput::RC_playpause) markItem(m_pcLastPlay); else result = false; @@ -2284,7 +2284,7 @@ bool CMovieBrowser::onButtonPressLastRecordList(neutrino_msg_t msg) m_pcLastRecord->scrollPageUp(1); else if (msg == (neutrino_msg_t)g_settings.key_pagedown) m_pcLastRecord->scrollPageDown(1); - else if (msg == CRCInput::RC_play) + else if (msg == CRCInput::RC_play || msg == CRCInput::RC_playpause) markItem(m_pcLastRecord); else result = false; diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 7a3a50347..adee1c70f 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -1580,7 +1580,19 @@ void CMoviePlayerGui::PlayFileLoop(void) neutrino_msg_data_t data; g_RCInput->getMsg(&msg, &data, 10); // 1 secs.. + // handle CRCInput::RC_playpause key + bool handle_key_play = true; + bool handle_key_pause = true; + #if 0 //bisectional jumps + if (g_settings.mpkey_play == g_settings.mpkey_pause) + { + if (playstate == CMoviePlayerGui::PLAY) + handle_key_play = false; + else if (playstate == CMoviePlayerGui::PAUSE) + handle_key_pause = false; + } + if (bisection_loop > -1) bisection_loop++; if (bisection_loop > bisection_loop_max) @@ -1772,7 +1784,7 @@ void CMoviePlayerGui::PlayFileLoop(void) } else if (msg == (neutrino_msg_t) g_settings.key_switchformat) { g_videoSettings->SwitchFormat(); #endif - } else if (msg == (neutrino_msg_t) g_settings.mpkey_play) { + } else if (msg == (neutrino_msg_t) g_settings.mpkey_play && handle_key_play) { if (time_forced) { time_forced = false; FileTimeOSD->kill(); @@ -1816,7 +1828,7 @@ void CMoviePlayerGui::PlayFileLoop(void) delete playlist; enableOsdElements(MUTE); } - } else if (msg == (neutrino_msg_t) g_settings.mpkey_pause) { + } else if (msg == (neutrino_msg_t) g_settings.mpkey_pause && handle_key_pause) { if (time_forced) { time_forced = false; FileTimeOSD->kill(); diff --git a/src/gui/pictureviewer.cpp b/src/gui/pictureviewer.cpp index f251f8647..150a2e7fb 100644 --- a/src/gui/pictureviewer.cpp +++ b/src/gui/pictureviewer.cpp @@ -582,29 +582,40 @@ int CPictureViewerGui::show() // FIXME: do not accept volume-keys while decoding } // control keys for audioplayer - else if (audioplayer && msg==CRCInput::RC_pause) + else if (audioplayer) { m_currentTitle = m_audioPlayer->getAudioPlayerM_current(); - m_audioPlayer->pause(); - } - else if (audioplayer && msg==CRCInput::RC_stop) - { - m_currentTitle = m_audioPlayer->getAudioPlayerM_current(); - m_audioPlayer->stop(); - } - else if (audioplayer && msg==CRCInput::RC_play) - { - m_currentTitle = m_audioPlayer->getAudioPlayerM_current(); - 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(); + + if (msg == CRCInput::RC_playpause) + { + // manipulate msg + if (m_audioPlayer->getState() == CAudioPlayerGui::PAUSE) + msg = CRCInput::RC_play; + else + msg = CRCInput::RC_pause; + } + + if (msg == CRCInput::RC_play) + { + if (m_currentTitle > -1) + m_audioPlayer->play((unsigned int)m_currentTitle); + } + else if (msg == CRCInput::RC_pause) + { + m_audioPlayer->pause(); + } + else if (msg == CRCInput::RC_stop) + { + m_audioPlayer->stop(); + } + else if (msg == CRCInput::RC_forward || msg == CRCInput::RC_nextsong) + { + m_audioPlayer->playNext(); + } + else if (msg == CRCInput::RC_rewind || msg == CRCInput::RC_previoussong) + { + m_audioPlayer->playPrev(); + } } else if (msg == NeutrinoMessages::CHANGEMODE) { diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index 569f983ce..74dca35ad 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -943,7 +943,7 @@ int CTimerList::show() else update=true; } - else if (!timerlist.empty() && (msg == CRCInput::RC_play && g_settings.timer_remotebox_ip.size() > 0)) + else if (!timerlist.empty() && ((msg == CRCInput::RC_play || msg == CRCInput::RC_playpause) && g_settings.timer_remotebox_ip.size() > 0)) { if (timerlist[selected].eventType == CTimerd::TIMER_RECORD ) { diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index c042df621..d8b1d9ef5 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -863,7 +863,7 @@ bool CUpnpBrowserGui::selectItem(std::string id) } } } - else if (msg == CRCInput::RC_play) { + else if (msg == CRCInput::RC_play || msg == CRCInput::RC_playpause) { if ((selected - liststart) >= (*entries).size()) continue; m_folderplay = true; From fb2d6f95e83f1ed808759d5a434f80be63a1755b Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Tue, 19 Dec 2017 12:46:04 +0100 Subject: [PATCH 095/107] - user-menu: add audio fileplay item Conflicts: src/gui/user_menue_setup.cpp src/system/settings.h Signed-off-by: Thilo Graf --- src/gui/user_menue.cpp | 7 +++++++ src/gui/user_menue_setup.cpp | 1 + src/system/settings.h | 1 + 3 files changed, 9 insertions(+) diff --git a/src/gui/user_menue.cpp b/src/gui/user_menue.cpp index 3d0b1b1e8..7a6af6697 100644 --- a/src/gui/user_menue.cpp +++ b/src/gui/user_menue.cpp @@ -419,6 +419,13 @@ bool CUserMenu::showUserMenu(neutrino_msg_t msg) menu_item->setHint(NEUTRINO_ICON_HINT_FILEPLAY, LOCALE_MENU_HINT_FILEPLAY); break; } + case SNeutrinoSettings::ITEM_FILEPLAY_AUDIO: + { + keyhelper.get(&key,&icon); + menu_item = new CMenuForwarder(LOCALE_MOVIEPLAYER_FILEPLAYBACK_AUDIO, !_mode_ts, NULL, neutrino, "fileplayback_audio", key, icon); + menu_item->setHint(NEUTRINO_ICON_HINT_FILEPLAY, LOCALE_MENU_HINT_FILEPLAY); + break; + } case SNeutrinoSettings::ITEM_TOOLS: { keyhelper.get(&key,&icon); diff --git a/src/gui/user_menue_setup.cpp b/src/gui/user_menue_setup.cpp index 01e87ae32..5150028ea 100644 --- a/src/gui/user_menue_setup.cpp +++ b/src/gui/user_menue_setup.cpp @@ -100,6 +100,7 @@ static keyvals usermenu_items[] = { SNeutrinoSettings::ITEM_SWUPDATE, LOCALE_SERVICEMENU_UPDATE, usermenu_show }, { SNeutrinoSettings::ITEM_LIVESTREAM_RESOLUTION,LOCALE_LIVESTREAM_RESOLUTION, usermenu_show }, { SNeutrinoSettings::ITEM_ADZAP, LOCALE_USERMENU_ITEM_ADZAP, usermenu_show }, + { SNeutrinoSettings::ITEM_FILEPLAY_AUDIO, LOCALE_MOVIEPLAYER_FILEPLAYBACK_AUDIO, usermenu_show }, { SNeutrinoSettings::ITEM_MAX, NONEXISTANT_LOCALE, usermenu_show } }; diff --git a/src/system/settings.h b/src/system/settings.h index e813dd0f0..5b8d98a6a 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -864,6 +864,7 @@ struct SNeutrinoSettings ITEM_SWUPDATE = 30, ITEM_LIVESTREAM_RESOLUTION = 31, ITEM_ADZAP = 32, + ITEM_FILEPLAY_AUDIO = 33, ITEM_MAX // MUST be always the last in the list } USER_ITEM; From 91ee69f22ea1159bff6c1940174868994cda9dd8 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 21 Dec 2017 12:10:40 +0100 Subject: [PATCH 096/107] Fileplay: add separat fileplay for audio and video --- data/locale/deutsch.locale | 4 +- data/locale/english.locale | 4 +- src/gui/filebrowser.cpp | 4 +- src/gui/filebrowser.h | 2 +- src/gui/mediaplayer.cpp | 19 +++-- src/gui/movieplayer.cpp | 130 ++++++++++++++++++++++------------- src/gui/movieplayer.h | 4 +- src/gui/user_menue.cpp | 4 +- src/gui/user_menue_setup.cpp | 2 +- src/system/locals.h | 4 +- src/system/locals_intern.h | 4 +- src/system/settings.cpp | 3 +- src/system/settings.h | 20 +++--- 13 files changed, 128 insertions(+), 76 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 651df3d38..d3f255c50 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -929,6 +929,7 @@ mainmenu.games Spiele mainmenu.head Hauptmenü mainmenu.lua Plugins mainmenu.media Multimedia +mainmenu.mediaplayer Mediaplayer mainmenu.movieplayer Movieplayer mainmenu.pausesectionsd EPG auslesen mainmenu.pictureviewer Bildbetrachter @@ -1827,7 +1828,8 @@ movieplayer.bookmarkname Bookmark Name movieplayer.bookmarkname_hint1 Geben Sie den Namen für das neue Lesezeichen ein movieplayer.bookmarkname_hint2 movieplayer.chapters Kapitel -movieplayer.fileplayback Abspielen (Multiformat) +movieplayer.fileplayback_audio Multiformat-Audiowiedergabe +movieplayer.fileplayback_video Multiformat-Videowiedergabe movieplayer.head Movieplayer movieplayer.help_additional Weitere benutzerdefinierte Tastenbelegungen sind unter "Hauptmenü" > "Einstellungen" > "Tasten" > "Bearbeiten" > "Movieplayer" zu finden.\n\nWährend der Wiedergabe von Filmen sind im Hauptmenü einige Menüpunkte deaktiviert. movieplayer.help_button_1 1 Minute zurück diff --git a/data/locale/english.locale b/data/locale/english.locale index 7106641bc..b8fe2f59c 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -929,6 +929,7 @@ mainmenu.games Games mainmenu.head Main Menu mainmenu.lua Lua Plugins mainmenu.media Media +mainmenu.mediaplayer Mediaplayer mainmenu.movieplayer Movieplayer mainmenu.pausesectionsd Read EPG mainmenu.pictureviewer Picture viewer @@ -1827,7 +1828,8 @@ movieplayer.bookmarkname Bookmarkname movieplayer.bookmarkname_hint1 Enter a name for your new bookmark movieplayer.bookmarkname_hint2 movieplayer.chapters Chapters -movieplayer.fileplayback File play +movieplayer.fileplayback_audio Multiformat Audio Player +movieplayer.fileplayback_video Multiformat Video Player movieplayer.head Movieplayer movieplayer.help_additional To find more user definable key bindings, see "Mainmenu" > "Settings" > "Keys" > "Edit" > "Movieplayer".\n\nWhile movie playback some menuitems in mainmenu are deactivated. movieplayer.help_button_1 1 minute backward diff --git a/src/gui/filebrowser.cpp b/src/gui/filebrowser.cpp index 281de4686..2b813525f 100644 --- a/src/gui/filebrowser.cpp +++ b/src/gui/filebrowser.cpp @@ -929,7 +929,7 @@ bool CFileBrowser::exec(const char * const dirname) return res; } -bool CFileBrowser::playlist_manager(CFileList &playlist, unsigned int playing) +bool CFileBrowser::playlist_manager(CFileList &playlist, unsigned int playing, bool is_audio_player) { neutrino_msg_t msg; neutrino_msg_data_t data; @@ -1066,7 +1066,7 @@ bool CFileBrowser::playlist_manager(CFileList &playlist, unsigned int playing) addfiles->Hide_records = true; addfiles->Multi_Select = true; addfiles->Dirs_Selectable = true; - addfiles->exec(g_settings.network_nfs_moviedir.c_str()); + addfiles->exec(is_audio_player ? g_settings.network_nfs_audioplayerdir.c_str() : g_settings.network_nfs_moviedir.c_str()); CFileList tmplist = addfiles->getSelectedFiles(); filelist.insert( filelist.end(), tmplist.begin(), tmplist.end() ); tmplist.clear(); diff --git a/src/gui/filebrowser.h b/src/gui/filebrowser.h index 4de5981c2..c5ca5b8fc 100644 --- a/src/gui/filebrowser.h +++ b/src/gui/filebrowser.h @@ -220,7 +220,7 @@ class CFileBrowser ~CFileBrowser(); bool exec(const char * const dirname); - bool playlist_manager(CFileList &playlist,unsigned int playing); + bool playlist_manager(CFileList &playlist, unsigned int playing, bool is_audio_player = false); CFile *getSelectedFile(); inline const CFileList & getSelectedFiles(void) const diff --git a/src/gui/mediaplayer.cpp b/src/gui/mediaplayer.cpp index 49252e8df..7c7c1b08b 100644 --- a/src/gui/mediaplayer.cpp +++ b/src/gui/mediaplayer.cpp @@ -150,7 +150,7 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) personalize->addItem(multimedia_menu, fw_inet, &g_settings.personalize[SNeutrinoSettings::P_MEDIA_INETPLAY]); //init movieplayer submenu - CMenuWidget *movieplayer_menu = new CMenuWidget(LOCALE_MAINMENU_MOVIEPLAYER, NEUTRINO_ICON_MULTIMEDIA, width, MN_WIDGET_ID_MEDIA_MOVIEPLAYER); + CMenuWidget *movieplayer_menu = new CMenuWidget(LOCALE_MAINMENU_MEDIAPLAYER, NEUTRINO_ICON_MULTIMEDIA, width, MN_WIDGET_ID_MEDIA_MOVIEPLAYER); personalize->addWidget(movieplayer_menu); personalize->addIntroItems(movieplayer_menu); @@ -159,18 +159,23 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) fw_mbrowser->setHint(NEUTRINO_ICON_HINT_MB, LOCALE_MENU_HINT_MB); personalize->addItem(movieplayer_menu, fw_mbrowser, &g_settings.personalize[SNeutrinoSettings::P_MPLAYER_MBROWSER]); - //fileplayback - CMenuForwarder *fw_fileplay = new CMenuForwarder(LOCALE_MOVIEPLAYER_FILEPLAYBACK, true, NULL, &CMoviePlayerGui::getInstance(), "fileplayback", CRCInput::RC_green); - fw_fileplay->setHint(NEUTRINO_ICON_HINT_FILEPLAY, LOCALE_MENU_HINT_FILEPLAY); - personalize->addItem(movieplayer_menu, fw_fileplay, &g_settings.personalize[SNeutrinoSettings::P_MPLAYER_FILEPLAY]); + //fileplayback video + CMenuForwarder *fw_fileplay_video = new CMenuForwarder(LOCALE_MOVIEPLAYER_FILEPLAYBACK_VIDEO, true, NULL, &CMoviePlayerGui::getInstance(), "fileplayback_video", CRCInput::RC_green); + fw_fileplay_video->setHint(NEUTRINO_ICON_HINT_FILEPLAY, LOCALE_MENU_HINT_FILEPLAY); + personalize->addItem(movieplayer_menu, fw_fileplay_video, &g_settings.personalize[SNeutrinoSettings::P_MPLAYER_FILEPLAY_VIDEO]); + + //fileplayback audio + CMenuForwarder *fw_fileplay_audio = new CMenuForwarder(LOCALE_MOVIEPLAYER_FILEPLAYBACK_AUDIO, true, NULL, &CMoviePlayerGui::getInstance(), "fileplayback_audio", CRCInput::RC_yellow); + fw_fileplay_audio->setHint(NEUTRINO_ICON_HINT_FILEPLAY, LOCALE_MENU_HINT_FILEPLAY); + personalize->addItem(movieplayer_menu, fw_fileplay_audio, &g_settings.personalize[SNeutrinoSettings::P_MPLAYER_FILEPLAY_AUDIO]); //ytplayback - CMenuForwarder *fw_ytplay = new CMenuForwarder(LOCALE_MOVIEPLAYER_YTPLAYBACK, g_settings.youtube_enabled, NULL, &CMoviePlayerGui::getInstance(), "ytplayback", CRCInput::RC_yellow); + CMenuForwarder *fw_ytplay = new CMenuForwarder(LOCALE_MOVIEPLAYER_YTPLAYBACK, g_settings.youtube_enabled, NULL, &CMoviePlayerGui::getInstance(), "ytplayback", CRCInput::RC_blue); fw_ytplay->setHint(NEUTRINO_ICON_HINT_YTPLAY, LOCALE_MENU_HINT_YTPLAY); personalize->addItem(movieplayer_menu, fw_ytplay, &g_settings.personalize[SNeutrinoSettings::P_MPLAYER_YTPLAY]); //add movieplayer submenu - CMenuForwarder *fw_mp = new CMenuForwarder(LOCALE_MAINMENU_MOVIEPLAYER, enabled, NULL, movieplayer_menu, NULL, CRCInput::RC_yellow); + CMenuForwarder *fw_mp = new CMenuForwarder(LOCALE_MAINMENU_MEDIAPLAYER, enabled, NULL, movieplayer_menu, NULL, CRCInput::RC_yellow); fw_mp->setHint(NEUTRINO_ICON_HINT_MOVIE, LOCALE_MENU_HINT_MOVIE); personalize->addItem(multimedia_menu, fw_mp, &g_settings.personalize[SNeutrinoSettings::P_MEDIA_MPLAYER], false, CPersonalizeGui::PERSONALIZE_SHOW_AS_ACCESS_OPTION); diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index adee1c70f..b32270b89 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -193,35 +193,49 @@ void CMoviePlayerGui::Init(void) if (bookmarkmanager == NULL) bookmarkmanager = new CBookmarkManager(); - tsfilefilter.addFilter("ts"); -#if HAVE_TRIPLEDRAGON - tsfilefilter.addFilter("vdr"); -#else - tsfilefilter.addFilter("avi"); - tsfilefilter.addFilter("mkv"); - tsfilefilter.addFilter("wav"); - tsfilefilter.addFilter("asf"); - tsfilefilter.addFilter("aiff"); -#endif - tsfilefilter.addFilter("mpg"); - tsfilefilter.addFilter("mpeg"); - tsfilefilter.addFilter("m2p"); - tsfilefilter.addFilter("mpv"); - tsfilefilter.addFilter("vob"); - tsfilefilter.addFilter("m2ts"); - tsfilefilter.addFilter("mp4"); - tsfilefilter.addFilter("mov"); - tsfilefilter.addFilter("m3u"); - tsfilefilter.addFilter("m3u8"); - tsfilefilter.addFilter("pls"); - tsfilefilter.addFilter("iso"); -#if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE - tsfilefilter.addFilter("trp"); - tsfilefilter.addFilter("vdr"); - tsfilefilter.addFilter("mp3"); - tsfilefilter.addFilter("flv"); - tsfilefilter.addFilter("wmv"); -#endif + // video files + filefilter_video.addFilter("ts"); +#if !HAVE_TRIPLEDRAGON + filefilter_video.addFilter("asf"); + filefilter_video.addFilter("avi"); + filefilter_video.addFilter("mkv"); +#endif + filefilter_video.addFilter("flv"); + filefilter_video.addFilter("iso"); + filefilter_video.addFilter("m2p"); + filefilter_video.addFilter("m2ts"); + filefilter_video.addFilter("mov"); + filefilter_video.addFilter("mp4"); + filefilter_video.addFilter("mpeg"); + filefilter_video.addFilter("mpg"); + filefilter_video.addFilter("mpv"); + filefilter_video.addFilter("pls"); + filefilter_video.addFilter("trp"); + filefilter_video.addFilter("vdr"); + filefilter_video.addFilter("vob"); + filefilter_video.addFilter("wmv"); + // video playlists + filefilter_video.addFilter("m3u"); + filefilter_video.addFilter("m3u8"); + + // audio files + filefilter_audio.addFilter("aac"); + filefilter_audio.addFilter("aif"); + filefilter_audio.addFilter("aiff"); + filefilter_audio.addFilter("cdr"); + filefilter_audio.addFilter("dts"); + filefilter_audio.addFilter("flac"); + filefilter_audio.addFilter("flv"); + filefilter_audio.addFilter("m2a"); + filefilter_audio.addFilter("m4a"); + filefilter_audio.addFilter("mp2"); + filefilter_audio.addFilter("mp3"); + filefilter_audio.addFilter("mpa"); + filefilter_audio.addFilter("ogg"); + filefilter_audio.addFilter("wav"); + // audio playlists + filefilter_audio.addFilter("m3u"); + filefilter_audio.addFilter("m3u8"); if (g_settings.network_nfs_moviedir.empty()) Path_local = "/"; @@ -233,7 +247,7 @@ void CMoviePlayerGui::Init(void) else filebrowser = new CFileBrowser(); - filebrowser->Filter = &tsfilefilter; + // filebrowser->Filter is set in exec() function filebrowser->Hide_records = true; filebrowser->Multi_Select = true; filebrowser->Dirs_Selectable = true; @@ -375,19 +389,23 @@ int CMoviePlayerGui::exec(CMenuTarget * parent, const std::string & actionKey) if (parent) parent->hide(); -#if 0 - if (actionKey == "fileplayback" || actionKey == "tsmoviebrowser") + + if (actionKey == "fileplayback_video" || actionKey == "fileplayback_audio" || actionKey == "tsmoviebrowser") { - if(actionKey == "fileplayback") { + if (actionKey == "fileplayback_video") { printf("[movieplayer] wakeup_hdd(%s) for %s\n", g_settings.network_nfs_moviedir.c_str(), actionKey.c_str()); - wakeup_hdd(g_settings.network_nfs_moviedir.c_str(),true); + wakeup_hdd(g_settings.network_nfs_moviedir.c_str()); + } + else if (actionKey == "fileplayback_audio") { + printf("[movieplayer] wakeup_hdd(%s) for %s\n", g_settings.network_nfs_audioplayerdir.c_str(), actionKey.c_str()); + wakeup_hdd(g_settings.network_nfs_audioplayerdir.c_str()); } else { printf("[movieplayer] wakeup_hdd(%s) for %s\n", g_settings.network_nfs_recordingdir.c_str(), actionKey.c_str()); - wakeup_hdd(g_settings.network_nfs_recordingdir.c_str(),true); + wakeup_hdd(g_settings.network_nfs_recordingdir.c_str()); } } -#endif + if (!access(MOVIEPLAYER_START_SCRIPT, X_OK)) { puts("[movieplayer.cpp] executing " MOVIEPLAYER_START_SCRIPT "."); if (my_system(MOVIEPLAYER_START_SCRIPT) != 0) @@ -406,17 +424,24 @@ int CMoviePlayerGui::exec(CMenuTarget * parent, const std::string & actionKey) if (actionKey == "tsmoviebrowser") { isMovieBrowser = true; moviebrowser->setMode(MB_SHOW_RECORDS); - wakeup_hdd(g_settings.network_nfs_recordingdir.c_str()); + //wakeup_hdd(g_settings.network_nfs_recordingdir.c_str()); } -#if HAVE_COOL_HARDWARE || HAVE_GENERIC_HARDWARE else if (actionKey == "ytplayback") { isMovieBrowser = true; moviebrowser->setMode(MB_SHOW_YT); isYT = true; } -#endif - else if (actionKey == "fileplayback") { - wakeup_hdd(g_settings.network_nfs_moviedir.c_str()); + else if (actionKey == "fileplayback_video") { + is_audio_player = false; + if (filebrowser) + filebrowser->Filter = &filefilter_video; + //wakeup_hdd(g_settings.network_nfs_moviedir.c_str()); + } + else if (actionKey == "fileplayback_audio") { + is_audio_player = true; + if (filebrowser) + filebrowser->Filter = &filefilter_audio; + //wakeup_hdd(g_settings.network_nfs_audioplayerdir.c_str()); } else if (actionKey == "timeshift") { timeshift = TSHIFT_MODE_ON; @@ -618,6 +643,7 @@ void CMoviePlayerGui::ClearFlags() isWebChannel = false; isYT = false; is_file_player = false; + is_audio_player = false; timeshift = TSHIFT_MODE_OFF; } @@ -719,12 +745,19 @@ bool CMoviePlayerGui::SelectFile() file_name.clear(); cookie_header.clear(); //reinit Path_local for webif reloadsetup - if (g_settings.network_nfs_moviedir.empty()) - Path_local = "/"; + Path_local = "/"; + if (is_audio_player) + { + if (!g_settings.network_nfs_audioplayerdir.empty()) + Path_local = g_settings.network_nfs_audioplayerdir; + } else - Path_local = g_settings.network_nfs_moviedir; + { + if (!g_settings.network_nfs_moviedir.empty()) + Path_local = g_settings.network_nfs_moviedir; + } - printf("CMoviePlayerGui::SelectFile: isBookmark %d timeshift %d isMovieBrowser %d\n", isBookmark, timeshift, isMovieBrowser); + printf("CMoviePlayerGui::SelectFile: isBookmark %d timeshift %d isMovieBrowser %d is_audio_player %d\n", isBookmark, timeshift, isMovieBrowser, is_audio_player); #if 0 wakeup_hdd(g_settings.network_nfs_recordingdir.c_str()); #endif @@ -796,7 +829,8 @@ bool CMoviePlayerGui::SelectFile() menu_ret = filebrowser->getMenuRet(); enableOsdElements(MUTE); } - g_settings.network_nfs_moviedir = Path_local; + if (!is_audio_player) + g_settings.network_nfs_moviedir = Path_local; return ret; } @@ -1722,7 +1756,7 @@ void CMoviePlayerGui::PlayFileLoop(void) pfile = &(*filelist_it); int selected = std::distance( filelist.begin(), filelist_it ); filelist_it = filelist.end(); - if (playlist->playlist_manager(filelist, selected)) + if (playlist->playlist_manager(filelist, selected, is_audio_player)) { playstate = CMoviePlayerGui::STOPPED; CFile *sfile = NULL; @@ -1809,7 +1843,7 @@ void CMoviePlayerGui::PlayFileLoop(void) CFile *pfile = NULL; int selected = std::distance( filelist.begin(), filelist_it ); filelist_it = filelist.end(); - if (playlist->playlist_manager(filelist, selected)) + if (playlist->playlist_manager(filelist, selected, is_audio_player)) { playstate = CMoviePlayerGui::STOPPED; CFile *sfile = NULL; diff --git a/src/gui/movieplayer.h b/src/gui/movieplayer.h index d9c4e3b83..d8bab8f6b 100644 --- a/src/gui/movieplayer.h +++ b/src/gui/movieplayer.h @@ -186,10 +186,12 @@ class CMoviePlayerGui : public CMenuTarget /* playback from file */ bool is_file_player; + bool is_audio_player; bool iso_file; bool stopped; CFileBrowser * filebrowser; - CFileFilter tsfilefilter; + CFileFilter filefilter_video; + CFileFilter filefilter_audio; CFileList filelist; CFileList::iterator filelist_it; CFileList::iterator vzap_it; diff --git a/src/gui/user_menue.cpp b/src/gui/user_menue.cpp index 7a6af6697..aedc4af8c 100644 --- a/src/gui/user_menue.cpp +++ b/src/gui/user_menue.cpp @@ -412,10 +412,10 @@ bool CUserMenu::showUserMenu(neutrino_msg_t msg) menu_item->setHint(NEUTRINO_ICON_HINT_YTPLAY, LOCALE_MENU_HINT_YTPLAY); break; } - case SNeutrinoSettings::ITEM_FILEPLAY: + case SNeutrinoSettings::ITEM_FILEPLAY_VIDEO: { keyhelper.get(&key,&icon); - menu_item = new CMenuForwarder(LOCALE_MOVIEPLAYER_FILEPLAYBACK, !_mode_ts, NULL, neutrino, "fileplayback", key, icon); + menu_item = new CMenuForwarder(LOCALE_MOVIEPLAYER_FILEPLAYBACK_VIDEO, !_mode_ts, NULL, neutrino, "fileplayback_video", key, icon); menu_item->setHint(NEUTRINO_ICON_HINT_FILEPLAY, LOCALE_MENU_HINT_FILEPLAY); break; } diff --git a/src/gui/user_menue_setup.cpp b/src/gui/user_menue_setup.cpp index 5150028ea..101de9daa 100644 --- a/src/gui/user_menue_setup.cpp +++ b/src/gui/user_menue_setup.cpp @@ -90,7 +90,7 @@ static keyvals usermenu_items[] = { SNeutrinoSettings::ITEM_GAMES, LOCALE_MAINMENU_GAMES, usermenu_show }, { SNeutrinoSettings::ITEM_SCRIPTS, LOCALE_MAINMENU_SCRIPTS, usermenu_show }, { SNeutrinoSettings::ITEM_YOUTUBE, LOCALE_MOVIEPLAYER_YTPLAYBACK, usermenu_show }, - { SNeutrinoSettings::ITEM_FILEPLAY, LOCALE_MOVIEPLAYER_FILEPLAYBACK, usermenu_show }, + { SNeutrinoSettings::ITEM_FILEPLAY_VIDEO, LOCALE_MOVIEPLAYER_FILEPLAYBACK_VIDEO, usermenu_show }, { SNeutrinoSettings::ITEM_TOOLS, LOCALE_MAINMENU_TOOLS, usermenu_show }, { SNeutrinoSettings::ITEM_LUA, LOCALE_MAINMENU_LUA, usermenu_show }, { SNeutrinoSettings::ITEM_HDDMENU, LOCALE_HDD_SETTINGS, usermenu_show }, diff --git a/src/system/locals.h b/src/system/locals.h index 339ad53f9..fa8d48d06 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -956,6 +956,7 @@ typedef enum LOCALE_MAINMENU_HEAD, LOCALE_MAINMENU_LUA, LOCALE_MAINMENU_MEDIA, + LOCALE_MAINMENU_MEDIAPLAYER, LOCALE_MAINMENU_MOVIEPLAYER, LOCALE_MAINMENU_PAUSESECTIONSD, LOCALE_MAINMENU_PICTUREVIEWER, @@ -1854,7 +1855,8 @@ typedef enum LOCALE_MOVIEPLAYER_BOOKMARKNAME_HINT1, LOCALE_MOVIEPLAYER_BOOKMARKNAME_HINT2, LOCALE_MOVIEPLAYER_CHAPTERS, - LOCALE_MOVIEPLAYER_FILEPLAYBACK, + LOCALE_MOVIEPLAYER_FILEPLAYBACK_AUDIO, + LOCALE_MOVIEPLAYER_FILEPLAYBACK_VIDEO, LOCALE_MOVIEPLAYER_HEAD, LOCALE_MOVIEPLAYER_HELP_ADDITIONAL, LOCALE_MOVIEPLAYER_HELP_BUTTON_1, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 013449970..8993167b5 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -956,6 +956,7 @@ const char * locale_real_names[] = "mainmenu.head", "mainmenu.lua", "mainmenu.media", + "mainmenu.mediaplayer", "mainmenu.movieplayer", "mainmenu.pausesectionsd", "mainmenu.pictureviewer", @@ -1854,7 +1855,8 @@ const char * locale_real_names[] = "movieplayer.bookmarkname_hint1", "movieplayer.bookmarkname_hint2", "movieplayer.chapters", - "movieplayer.fileplayback", + "movieplayer.fileplayback_audio", + "movieplayer.fileplayback_video", "movieplayer.head", "movieplayer.help_additional", "movieplayer.help_button_1", diff --git a/src/system/settings.cpp b/src/system/settings.cpp index 7e289071f..4a0814b80 100644 --- a/src/system/settings.cpp +++ b/src/system/settings.cpp @@ -95,7 +95,8 @@ const struct personalize_settings_t personalize_settings[SNeutrinoSettings::P_SE //media menu->movieplayer {"personalize_mplayer_mbrowswer" , CPersonalizeGui::PERSONALIZE_MODE_VISIBLE}, - {"personalize_mplayer_fileplay" , CPersonalizeGui::PERSONALIZE_MODE_VISIBLE}, + {"personalize_mplayer_fileplay_video" , CPersonalizeGui::PERSONALIZE_MODE_VISIBLE}, + {"personalize_mplayer_fileplay_audio" , CPersonalizeGui::PERSONALIZE_MODE_VISIBLE}, {"personalize_mplayer_ytplay" , CPersonalizeGui::PERSONALIZE_MODE_VISIBLE}, //key diff --git a/src/system/settings.h b/src/system/settings.h index 5b8d98a6a..3921d24aa 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -385,7 +385,8 @@ struct SNeutrinoSettings //movieplayer menu P_MPLAYER_MBROWSER, - P_MPLAYER_FILEPLAY, + P_MPLAYER_FILEPLAY_VIDEO, + P_MPLAYER_FILEPLAY_AUDIO, P_MPLAYER_YTPLAY, //feature keys @@ -857,14 +858,15 @@ struct SNeutrinoSettings ITEM_FILEPLAY = 23, ITEM_TOOLS = 24, ITEM_LUA = 25, - ITEM_HDDMENU = 26, - ITEM_AUDIOPLAY = 27, - ITEM_INETPLAY = 28, - ITEM_NETSETTINGS = 29, - ITEM_SWUPDATE = 30, - ITEM_LIVESTREAM_RESOLUTION = 31, - ITEM_ADZAP = 32, - ITEM_FILEPLAY_AUDIO = 33, + ITEM_FILEPLAY_VIDEO = 26, + ITEM_HDDMENU = 27, + ITEM_AUDIOPLAY = 28, + ITEM_INETPLAY = 29, + ITEM_NETSETTINGS = 30, + ITEM_SWUPDATE = 31, + ITEM_LIVESTREAM_RESOLUTION = 32, + ITEM_ADZAP = 33, + ITEM_FILEPLAY_AUDIO = 34, ITEM_MAX // MUST be always the last in the list } USER_ITEM; From 97327f0212b6d796ef8554f7f9d32c4847676e03 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Wed, 20 Dec 2017 10:55:33 +0100 Subject: [PATCH 097/107] - filebrowser: add size() and getFilter() members --- src/gui/filebrowser.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/filebrowser.h b/src/gui/filebrowser.h index c5ca5b8fc..5e9d30297 100644 --- a/src/gui/filebrowser.h +++ b/src/gui/filebrowser.h @@ -135,6 +135,8 @@ class CFileFilter return false; }; void Clear(void) { Filter.clear();}; + size_t size(void) { return Filter.size();}; + std::string getFilter(int i) { return Filter.at(i);}; }; //------------------------------------------------------------------------ From 3fef93574ac5e3715a6ef96709029ce42a7e8fd5 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Wed, 20 Dec 2017 10:55:33 +0100 Subject: [PATCH 098/107] - user-menu: avoid empty headers in user-menu Signed-off-by: Thilo Graf --- src/gui/user_menue.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/user_menue.cpp b/src/gui/user_menue.cpp index aedc4af8c..34836f193 100644 --- a/src/gui/user_menue.cpp +++ b/src/gui/user_menue.cpp @@ -164,6 +164,8 @@ bool CUserMenu::showUserMenu(neutrino_msg_t msg) std::string txt = g_settings.usermenu[button]->title; if (button < COL_BUTTONMAX && txt.empty()) txt = g_Locale->getText(user_menu[button].caption); + if (txt.empty()) + txt = g_Locale->getText(LOCALE_USERMENU_HEAD); CMenuWidget *menu = new CMenuWidget(txt, (button < COL_BUTTONMAX) ? user_menu[button].menu_icon_def : "", width); if (menu == NULL) From 946d9e4bd64e76854ab037e6336aba1e0e87d694 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 21 Dec 2017 11:25:59 +0100 Subject: [PATCH 099/107] update version to 3.7.0 eplayer beta --- ChangeLog | 891 +++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 2 +- 2 files changed, 892 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 92c21356e..e2c98db61 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,894 @@ +2017-12-21 Thilo Graf + + update version to 3.7.0 + eplayer beta + +2017-12-21 svenhoefer + + - user-menu: avoid empty headers in user-menu + +2017-12-21 TangoCash + + - filebrowser: add size() and getFilter() members + +2017-12-21 Thilo Graf + + Fileplay: add separat fileplay for audio and video + +2017-12-19 svenhoefer + + - user-menu: add audio fileplay item + Conflicts: + src/gui/user_menue_setup.cpp + src/system/settings.h + + - neutrino: add more RC_playpause handling + Conflicts: + src/gui/movieplayer.cpp + + - neutrino: add RC_playpause handling; change some key defaults for ARM_HARDWARE + Conflicts: + src/neutrino.cpp + + - rcinput: add RC_playpause key + Conflicts: + src/driver/rcinput.cpp + src/driver/rcinput.h + +2017-12-18 GetAway + + audiomute.cpp: fix clear screen after audiomute + +2017-12-18 svenhoefer + + - acinclude: configure for generic hardware by default + + - streaminfo: add fallback to delivery system detection + + - settings_manager: fix issue tag on reset settings item + +2017-12-18 Thilo Graf + + Icons: use fixed language and youtube icon + Format was wrong. + + Icons: use default hint from own icon set + +2017-12-18 svenhoefer + + - icons: add default hint icon + +2017-12-18 Thilo Graf + + Icons: add missing hint icons and fix some files with format errors + +2017-12-17 Thilo Graf + + icons: fix assignment of settings, network and mainmenu icons + Assignment was confused. There are probaly more. + + CSettingsManager: add cancel buttons to backup/save config messages + User should have this possibility because 'yes' and 'no' + are coming with defined effects. + + CSettingsManager: use neutrino internal debug output, + +2017-12-17 svenhoefer + + - settings_manager: remember last used directory + Conflicts: + data/locale/deutsch.locale + data/locale/english.locale + src/gui/settings_manager.cpp + + - settings_manager: add TARGET_PREFIX define to backup/restore calls + +2017-12-17 svenhoefer + + - acinclude: fix TARGET_PREFIX define for native target + + Note: TARGET_PREFIX describes inside the yocto SDK the toolchain + binary prefix for the target tools. Maybe this could make confuse + with usage of yocto SDK environment. Maybe we should rename this variable. + e.g EXEC_PREFIX or so ... + +2017-12-17 Thilo Graf + + icons: add missing picon vor save as + + CPictureViewer: add current image into debug line + It's not possible to see which file causes this error. + +2017-12-16 Thilo Graf + + CSettingsManager: add hintbox while execute backup_sh + +2017-12-15 svenhoefer + + - infoviewer_bb: small renamings to get more logic in function names + showOne_CAIcon() => showIcon_CA() + paint_ca_icons() => paint_ca_icon() + showIcon_CA_Status() => paint_ca_icons() + + Conflicts: + src/gui/infoviewer.cpp + src/gui/infoviewer_bb.cpp + +2017-12-15 TangoCash + + fix icon alignment + Conflicts: + src/gui/infoviewer_bb.cpp + +2017-12-15 svenhoefer + + - menu: fix right offset for very long right texts + + - locale: small changes in infobar ca system locales + + - zapit/channel: fix issue tag from 4bacd77f8bcd61c21b99a1cfc52fce6a8d46c5fd + + - infoviewer_bb: add gradient to ca-bar; ... + use always CComponentsShapeSquare to paint ca-bar + + - infoviewer_bb: always show hdd fill level for a more uniform view; ... + mark undetected hdd fill level with a small line over the progressbar. + this avoids a "whole" in footer when gradient is active + +2017-12-15 Thilo Graf + + data: update crypt icons + thx OneOfNine + +2017-12-15 TangoCash + + update cryptsystems + +2017-12-15 Thilo Graf + + CComponentsFooter: fix force re init of button container + clear() removes only items and their instances inside button container, but all + other properties (e.g. width) are not touched. Re init should avoids this. + + CTestMenu: add example for variable caption inside message buttons + +2017-12-14 Jacek Jendrzej + + src/gui/screensetup.cpp reset channellist modules + +2017-12-11 Thilo Graf + + CZapitChannel: add issue tag + This should be reworked + +2017-12-11 svenhoefer + + - channellist: fix segfault while virtual zapping and bouquets are empty + + - rcinput: fix compiler warnings about unused variables + +2017-12-10 TangoCash + + adding adapter to debug output + + tryfix scan frontend selection + +2017-12-10 Thilo Graf + + CMenuWidget: ensure use of unified data type const char* + This should avoid possible compiler errors for this overloaded method. + + CComponentsInfoBox: add possibility for scalable picons + + CServiceManager: use value 0 as init value for feparams.plp_id + Value of NO_STREAM_ID_FILTER = ~0U + This could provokate overflow errors or possible compile errors + related with compiler flags (e.g: -Werror=overflow) + +2017-12-10 svenhoefer + + - webradio_usr.xml: add link to stompfm.de + +2017-12-10 TangoCash + + fix bouquets freq handling for DVB-T/T2 + +2017-12-10 svenhoefer + + - acinclude/configure: some more minor format changes + + - acinclude/configure: some minor format changes; fix indentations + + - configure: fix logic around libswresample + + - configure: move libstb-hal block down + + - acinclude: use AS_HELP_STRING() for --with-boxmodel; ... + i don't know any other way to get linefeeds in right-hand text + + - configure: invert --disable-lua false logic to --enable-lua true + + - configure: invert --disable-upnp false logic to --enable-upnp true + + - acinclude: unify descriptions in TUXBOX_APPS_DIRECTORY_ONE() + + - configure: unify and simplify some AC_ARG_ENABLE() calls + + - acinclude/configure: show defaults + +2017-12-10 Jacek Jendrzej + + femanager.h increase max adapters to 4 + +2017-12-08 svenhoefer + + - acinclude: replace custom formatting in TUXBOX_APPS_DIRECTORY_ONE with AS_HELP_STRING() + + - configure: cleanup from commented code + + - acinclude/configure: unify usage of AS_HELP_STRING(); minor format changes + + - acinclude: small resort to get the plugin-dir variables consecutively + + - acinclude: remove some double code + +2017-12-07 TangoCash + + fix cable nit + + This should fix possible unintended multiple scans. + +2017-12-06 Frankenstone + + osd_setup.cpp: fix colormenu shadow + + alpha was bounded to menue head alpha + +2017-12-06 svenhoefer + + - zapit/scannit: fix typo in last commit + + 'last commit' = 7b75b1d9dbc856d4547168ef35084e45304b5e6f + +2017-12-06 TangoCash + + fix scannit + + update scan infos + + show PLI/PLC/PLM while scanning + + add PLI/PLC/PLM to manual transponder selection + + workaround for T2 resolution display + + add DVB-S2X support + + fix DVB-T2 transponders + +2017-12-06 Frankenstone + + fix frontend Uni2 / JESS (thx DboxOldie) + +2017-12-06 Thilo Graf + + localize: try to fix different path to iso tab + +2017-12-05 Thilo Graf + + yWeb Help: remove invalid help links + +2017-12-04 Thilo Graf + + widget/hintbox.cpp: add explicit init of var picon + Had some issues while compile with gcc 7.x. + Exact data type was expected. + + cc_item_picture.h: remove virtual declaration from setPicture() + Is not really required. + Avoids possible compile/linker errors like "...no reference..." for some + coming changes. + +2017-12-04 svenhoefer + + - neutrino.h: remove obsolete external genre_sub_classes variables + +2017-12-03 Jacek Jendrzej + + fix radiotext title background (merge fix) + + enable yt for generic + + typo + + fix resource leak + +2017-12-02 svenhoefer + + - infoviewer_bb: use OFFSET defines; ... + height of ca-bar now depends on height of ca-icons + cleanup from commented code + +2017-12-01 svenhoefer + + Revert "- media-menu: disable currently broken audioplayer for ARM_HARDWARE" + This reverts commit 3d91cd9e13ed76cfc3a67fc21b503a8deb407606 because it's fixed in 334ce41 + +2017-12-01 max_10 + + - ffmpegdec: fix audio playback for ARM_HARDWARE + +2017-12-01 svenhoefer + + - infoviewer: avoid display of radiotext icon in virtual zap mode + + - infoviewer: cleanup from some unused code + Conflicts: + src/gui/infoviewer.cpp + + - infoviewer_bb: fix offset for first status-icon + + - infoviewer_bb: take footer height from CComponentsFooter ... + to get this footer in sync with the footers of other gui elements + + - usermenu: cleanup from ITEM_RASS + + - infoviewer: rework radiotext element; ... + use OFFSET defines, larger font, fix header width + + - radiotext: cleanup from tons of unused code; rass is dead + + - icons: cleanup from unused icons + Conflicts: + data/icons/buttons/orphaned/0-green.png + data/icons/buttons/orphaned/0-red.png + data/icons/buttons/orphaned/1-green.png + data/icons/buttons/orphaned/1-red.png + data/icons/buttons/orphaned/2-green.png + data/icons/buttons/orphaned/2-red.png + data/icons/buttons/orphaned/3-green.png + data/icons/buttons/orphaned/3-red.png + data/icons/buttons/orphaned/4-green.png + data/icons/buttons/orphaned/4-red.png + data/icons/buttons/orphaned/5-green.png + data/icons/buttons/orphaned/5-red.png + data/icons/buttons/orphaned/6-green.png + data/icons/buttons/orphaned/6-red.png + data/icons/buttons/orphaned/7-green.png + data/icons/buttons/orphaned/7-red.png + data/icons/buttons/orphaned/8-green.png + data/icons/buttons/orphaned/8-red.png + data/icons/buttons/orphaned/9-green.png + data/icons/buttons/orphaned/9-red.png + data/icons/buttons/orphaned/longpress.png + data/icons/hints/hint_rass.png + data/icons/hints/hint_spark.png + data/icons/various/rass.png + + - icons.h: cleanup from unused defines + + - remove unused src/driver/stacktrace.h; use src/system/stacktrace.h if needed + Conflicts: + src/driver/stacktrace.h + + - neutrino: try to fix timer_wakeup handling; ... + The return to deepstandby after timer-wakeups was broken. + + - locale: minor changes on new tunersetup locales + +2017-12-01 Jacek Jendrzej + + disable setVolume in standby mode + +2017-11-28 svenhoefer + + - zapit/frontend: fix compiler warning + +2017-11-28 TangoCash + + frontend: fix fall through + + add DVB-T2 support, enable 5V supply + +2017-11-28 Jacek Jendrzej + + prepare for T2 patch + +2017-11-27 TangoCash + + fix AAC record and playback + +2017-11-27 svenhoefer + + - zapit: remove some ifdef's; prepare for upcoming patches + + - neutrino: don't write timerinfo's when exiting to reboot + + - neutrino: re-disable screensaver for mode_webradio on ARM_HARDWARE + when screensaver is stopped the playback is stopped too + + - screensaver: move more repeatedly used code to screensaver's code + + - movieplayer: use members from screensaver's code + Conflicts: + src/gui/movieplayer.cpp + + - neutrino: move screensaver members to screensaver's code + + - neutrino: enable screensaver for mode_webradio + + - shutdown_helper: better explanation of what the tool does; ... + small code re-formatting + +2017-11-25 svenhoefer + + - cablex.xml: add OstTelCom; thx to elstablo + http://www.neutrino-images.de/board/viewtopic.php?f=28&t=2125#p12037 + +2017-11-24 Jacek Jendrzej + + fix radiotext for armbox + +2017-11-23 Thilo Graf + + Revert "shutdown_helper: add calling '/etc/init.d/rcK'" + This reverts commit 6709ae0feb9544a1cc4f45a982f9f7bd0f131ec8. + +2017-11-23 Jacek Jendrzej + + fix webtv script path + +2017-11-23 Thilo Graf + + CComponentsTimer: try to fix timing on non cst hardware + On hd51 and pc hardware was observed full visual timeout progress in message boxes. + Timeoout was displayed always without visible progress. + This should fix this. + +2017-11-22 svenhoefer + + - neutrino: deactivate compatibility code in ExitRun(); ... + our start script is aligned to new exit code 2 + see https://bitbucket.org/neutrino-images/ni-buildsystem/commits/cd1328c41cb642c141b58d001dce06a96eff0a1c + +2017-11-22 svenhoefer + + - neutrino: add exit codes to handle some actions in neutrino's start script + EXIT_REBOOT is inactive yet; see comment in ExitRun() + + Conflicts: + src/neutrino.cpp + +2017-11-22 svenhoefer + + - neutrino: always write /tmp/.timer ... + otherwise the vfd stays blank in deepstandby, if leds are configured off + and no timer is set. HD2's vfd urgently needs the fp.brightness value + which is not written to frontpanel in this case. + + - neutrino: unify console-output for different conditions in ExitRun() + + - neutrino: fix file-check in ExitRun() ... was a c/p error + +2017-11-22 J. Krieg + + shutdown_helper: add calling '/etc/init.d/rcK' + ...to prevent possible file system corruption prior shutting down + +2017-11-22 Striper + + - rename uncooloff workaround to something less idiotic + +2017-11-22 svenhoefer + + - neutrino: more small cleanups in ExitRun() + Conflicts: + src/neutrino.cpp + + - neutrino: cleanup ExitRun() function from unused code + Conflicts: + src/neutrino.cpp + + - controlapi: add mode_webradio to GetModeCGI() + + - neutrino: clearify mode handling in saveEpg() function + Conflicts: + src/driver/scanepg.cpp + src/neutrino.cpp + + - neutrino: unify modes handling; ... + remove double enum from CNeutrinoApp and move mostly used enum from NeutrinoMessages to new NeutrinoModes + +2017-11-22 FlatTV + + capmt.cpp: Fix stop decoding + don't stop decoding if record stops, this break overlapped record on cst + +2017-11-20 Jacek Jendrzej + + Merge branch 'master' of https://github.com/tuxbox-neutrino/gui-neutrino + +2017-11-19 svenhoefer + + - simple_display: show scrambled icon on scrambled channels + + - simple_display: show mute icon in muted mode + +2017-11-19 Thilo Graf + + src/gui/components/cc_frm_window.cpp: fix too small left bottom corner + radius is allready calculatetd in base class src/gui/components/cc_frm.cpp + in member CComponentsForm::paintCCItems() + + NOTE: + It seems the radius calculation inside framebuffer don't working correct + for corners on the right site on top and bottom. + Seen on hd51 hardware on osd-boxes with shadow + (e.g. infobar) or Boxes with frames e.g. on error message windows, buttons. + There are pixel errors like minimal holes on osd or displaced pixels. + On CST hardware evreything is ok. + +2017-11-19 Thilo Graf + + CTestMenu: add gui restart item for faster access + + CImageInfo: expand fallback to get readable version string + Evaluation of one char could be not enough to get a right result. + +2017-11-17 svenhoefer + + - neutrino: fix tv/radio switch for coolstream; ... + the TV/Radio key returns RC_tv. So we can't use RC_radio code here. + +2017-11-17 Jacek Jendrzej + + add dependency to libswscale for armbox + + add dependency to libswscale for armbox + +2017-11-16 svenhoefer + + - neutrino: don't load webradio xml on HD1 hardware; ... + audiostreams doesn't work + + - simple_display: fix compile for GENERIC_HARDWARE + +2017-11-16 TangoCash + + armbox: read frontend real names + +2017-11-16 svenhoefer + + - vfd-setup: allow to set scroll_repeats if possible + + - neutrino: display's setScrollMode() needs to be called on every start + + - simple_display: dont show symbols in shutdown mode too + + - vfd: re-add by mistake removed setting "off" for statusbar + + - timerlist: don't cast saved_displaymode + + - movieplayer: try to fix display of servicename; ... + name can be changed while playing movies + + - simple_display: simplify some proc_put calls + + - proc_tools: add helper member to put values w/o length; ... + align included headers to c++ + + - simple_display: switch back to simplified proc_put calls + + - proc_tools: c => cpp; add new helper member to write bool values + + - simple_display: align f9b55ca to new proc_put calls + + hd51: dont show symbols in standby + + - simple_display: allow to set scroll mode + + - simple_display: use proc_tools + Conflicts: + src/driver/simple_display.cpp + + - neutrino: avoid some ifdef's; prioritize proc filesystem + + - system: add seife's proc_tools + +2017-11-16 Thilo Graf + + capmt.cpp: try to fix ci handling + Based up: + https://bitbucket.org/neutrino-images/ni-neutrino-hd/commits/f3775d18142afe4341dcb3e52627cf5bd912d4a4 + https://bitbucket.org/neutrino-images/ni-neutrino-hd/commits/600aa573688114b6d2bb3cbf95a3df2294e40998 + by FlatTV, Striper + +2017-11-16 svenhoefer + + - vfd-setup: hide statusline option from models w/o a statusline in vfd + +2017-11-16 Thilo Graf + + coolstream/hardware_caps.h: fix broken cs build + 'display_has_statusline' was missed with commit: + f6093052466d9da01db74315a07bf82c249838ca + +2017-11-16 svenhoefer + + - hardware_caps: add display_has_statusline member + + - vfd-setup: more readability; just cosmetics + + - vfd-setup: don't show separatorline when backlight menu isn't shown + + - simple_display: avoid compiler warning + + - simple_display: fix compile for non-ARM_HARDWARE + Conflicts: + src/driver/simple_display.cpp + + - simple_display: add possibility to show text when changing mode + + - simple_display: add missing MODE_MENU_UTF8 check in setMode() + + - simple_display: rename display() to ShowText() ... as in vfd.cpp + Conflicts: + src/driver/simple_display.cpp + + - simple_display: cleanup from unused code inside ifdef mess + + - timerlist: fix saved_dispmode + + - cables.xml: use german umlauts for german nets; ... + Note: encoding is iso-8859-1 + + - update: fix display of installed version; ... + curiously it was only broken on ARM_HARDWARE + + - infoviewer: fix radiotext icon for webradio + + - neutrino: fix console output to signalize timer wakeups + +2017-11-16 Striper + + - capmt.cpp: cleanup + Conflicts: + src/zapit/src/capmt.cpp + +2017-11-16 svenhoefer + + - infoviewer_bb: fix wrong mode-logic for radiotext icon + +2017-11-16 Striper + + - shorten string + +2017-11-16 svenhoefer + + - movieplayer: fix screenshot function + + - screenshot: cleanup from many many unused code; ... + This commit reverts screenshot code to a stand before hd51 support. Screenshots for ARM_HARDWARE will be re-implemented in another way. + + - cleanup from unsupported DUCKBOX_HARDWARE + + - streaminfo2: cleanup from unsupported hardware ifdefs + + - vfd: cleanup from unsupported hardware ifdefs; vfd.cpp/h is only used by COOL_HARDWARE + Conflicts: + src/driver/vfd.cpp + + - movieplayer: cleanup from unsupported hardware ifdefs + + - re-add working streaminfo for coolstream hardware; ... + TODO fix streaminfo2 for coolstream; was broken since last commits + +2017-11-16 TangoCash + + - infoviewer: fix FIXME comment in 9b340752244980a59d57d3d318f70339a7f8d2e1 + +2017-11-16 svenhoefer + + - movieplayer: don't stop playback with RC_home; it's confusing + Conflicts: + src/gui/movieplayer.cpp + + - neutrino: don't add web-channels to sat-bouquet + + - streaminfo: fix compile for coolstream; add dummies to libcs-headers + + - streaminfo: some more position fixes; ... + use COL_MENUCONTENTINACTIVE_TEXT for inactive apids and caids + + - streaminfo: add channelname for webtv/radio too; simplify code + + - streaminfo: re-add osd resolution + + - locale: minor changes in streaminfo locales + + - streaminfo: use OFFSET defines; some position fixes + +2017-11-16 Thilo Graf + + - streaminfo: minor re-formatations and whitespace cleanups + # Conflicts: + # src/gui/streaminfo2.cpp + +2017-11-16 svenhoefer + + - streaminfo: show channellogo in mode-webradio too + + - streaminfo: port from TangoCash + Conflicts: + src/gui/streaminfo2.cpp + + - streaminfo: fix resolution for webradio; ... + add channellogo to movieplayer-info too; not nice but informative + + - streaminfo: some mode_webradio fixes + + - neutrino: some more mode_radio/mode_webradio fixes #2 + + - neutrino: some more mode_radio/mode_webradio fixes + + - neutrino: respect user's infoviewer timeout settings for different modes + + - infoviewer: try to get meta data from stream when epg is empty + + - infoviewer_bb: fix display of icons in radio/webradio mode + + - movieplayer: add some console spam to check modes + + - infoviewer: try to fix showLivestreamInfo() for audiostreams + +2017-11-16 Striper + + - yweb: optimize png images for size + Conflicts: + data/y-web/images/blank.png + data/y-web/images/cancel.png + data/y-web/images/colored_bar.png + data/y-web/images/server_add.png + data/y-web/images/server_delete.png + data/y-web/images/server_edit.png + data/y-web/images/server_link.png + + - yweb: install only box specific remote control pictures + +2017-11-16 svenhoefer + + - media-menu: disable currently broken audioplayer for ARM_HARDWARE + + - fill webradio_usr.xml with some of my favorite streams + + - zapit: save last channel for webradio too + + - infoviewer: fix timeout for new mode_webradio + + - try to fix tv <-> radio switch + + - zapit: don't save webradio-channels as last tv channel + + - movieplayer: fix for '- movieplayer: fix new mode' + + - movieplayer: rename isWebTV => isWebChannel + + - rename LIST_MODE_WEBTV => LIST_MODE_WEB + + - scanepg: rename webtv => webchan + + - rename IS_WEBTV => IS_WEBCHAN + Conflicts: + src/zapit/src/capmt.cpp + + - movieplayer: fix new mode + + - fix mode in SetChannelMode() + + - fix -Wlogical-op errors + + - add webradio; first steps + Conflicts: + data/Makefile.am + data/scripts/backup.sh + src/neutrino.cpp + src/zapit/include/zapit/zapit.h + +2017-11-16 svenhoefer + + - tuxtxt: change some default values + + This should be bounded to current loacle settings. + +2017-11-16 svenhoefer + + - tuxtxt: fix compiler warnings; simplify ifdef's + + - tuxtxt: align to mp + + fix generic keyboard + Conflicts: + src/driver/rcinput.cpp + +2017-11-16 Striper + + - fix compile for coolstream hardware (works on HD2) + Conflicts: + src/driver/screenshot.cpp + +2017-11-16 svenhoefer + + - acinclude: fix indentation + +2017-11-16 Thilo Graf + + CServiceManager: add member GetCurrentChannel() + Shortcut for CZapit::getInstance()->GetCurrentChannel() inside + CServiceManager + + widget/menue_target.h: add possible required includes + If this file is included as single without menue.h build could be break, + beecause of missing includes for some types. This should fix this. + In many source files still menue.h is included, so this is not noticeable. + +2017-11-13 TangoCash + + hd51: fix wakeup from standby + +2017-11-13 Jacek Jendrzej + + fix audio description after play movie + +2017-11-07 Jacek Jendrzej + + src/gui/movieplayer.cpp fix break record after play on cst (after hd51 merge) + + src/zapit/src/capmt.cpp dont stop decoding if record stops, this break overlapped record on cst + +2017-11-06 Jacek Jendrzej + + src/gui/movieplayer.cpp fix audioselect in not filpeplayer mode (after merge) + +2017-11-05 GetAway + + menue.cpp: add reverse search to find selectable item + +2017-11-05 Thilo Graf + + CImageInfo: fix version string format + String was broken. Only artefacts were to see. + + BTW: With current yocto build .version contains + wrong version format. This seems to be not suitable for + handling with flash images in context with versions checks. + +2017-11-05 Jacek Jendrzej + + disable file player mode for cst + +2017-11-04 Thilo Graf + + simple_display.cpp: partial revert "fix generic build" + This reverts commit c7c52324a39c3b65e21b35d9983f26e95efa6537. + + hd51 build was broken with -Werror=unused-variable + +2017-11-03 Jacek Jendrzej + + silence -Wparentheses-equality warning + + fix generic build + + remove pinentered script , revert 9dbdfcf5c7e813c67f44b3255881fd0fe344ad4d + + fix blank screen on start (after merge) + + remove unused + + src/gui/movieplayer.cpp reEnable YT + + src/gui/movieplayer.cpp fix page up/down jump and stop play after merge + 2017-11-02 Thilo Graf update version to 3.6.1 diff --git a/configure.ac b/configure.ac index a6a47e0d9..4b9a1533e 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT(Tuxbox-Neutrino,3.6.1) +AC_INIT(Tuxbox-Neutrino,3.7.0) AM_INIT_AUTOMAKE([1.0.1 nostdinc]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES]) From 516ad45bfdd845daa34b3e91a3e04394a34bcb57 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 22 Dec 2017 15:23:53 +0100 Subject: [PATCH 100/107] CImageInfo: fix path to .version file --- src/gui/imageinfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/imageinfo.cpp b/src/gui/imageinfo.cpp index c52fffd80..9e2f31084 100644 --- a/src/gui/imageinfo.cpp +++ b/src/gui/imageinfo.cpp @@ -49,7 +49,7 @@ #include #include -#define VERSION_FILE TARGET_PREFIX "/.version" +#define VERSION_FILE "/.version" using namespace std; From 51fc78c7e7517c9f014e3b54e0a63aeb8f476921 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 23 Dec 2017 14:30:48 +0100 Subject: [PATCH 101/107] CComponentsWindow: add method to set background image in window classes - setBodyBGImage() exists as member of base class CCDraw and had no visual effect in this class, because visibility of window container is disabled. This additional member overloads the original methode and is using functionality from window body object. Example for buildinfo added. TODO: - background behavior of embedded objects must be global adapted if a background image is used --- src/gui/buildinfo.cpp | 3 ++- src/gui/components/cc_frm_window.cpp | 7 ++++++- src/gui/components/cc_frm_window.h | 8 +++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/gui/buildinfo.cpp b/src/gui/buildinfo.cpp index e7e98785b..a10ce8388 100644 --- a/src/gui/buildinfo.cpp +++ b/src/gui/buildinfo.cpp @@ -3,7 +3,7 @@ Copyright (C) 2001 by Steffen Hehn 'McClean' Copyright (C) 2013, M. Liebmann 'micha-bbg' - Copyright (C) 2013-2014, Thilo Graf 'dbt' + Copyright (C) 2013-2017, Thilo Graf 'dbt' License: GPL @@ -40,6 +40,7 @@ using namespace std; CBuildInfo::CBuildInfo(bool show) : CComponentsWindow(0, 0, CCW_PERCENT 85, CCW_PERCENT 85, LOCALE_BUILDINFO_MENU, NEUTRINO_ICON_INFO) { initVarBuildInfo(); + setBodyBGImage(DATADIR "/neutrino/icons/start.jpg"); if (show) exec(NULL, ""); else diff --git a/src/gui/components/cc_frm_window.cpp b/src/gui/components/cc_frm_window.cpp index f23245147..8e39ec97b 100644 --- a/src/gui/components/cc_frm_window.cpp +++ b/src/gui/components/cc_frm_window.cpp @@ -3,7 +3,7 @@ Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. - Copyright (C) 2012-2016 Thilo Graf 'dbt' + Copyright (C) 2012-2017 Thilo Graf 'dbt' Copyright (C) 2012, Michael Liebmann 'micha-bbg' License: GPL @@ -444,3 +444,8 @@ void CComponentsWindow::paint(bool do_save_bg) //paint form contents paintForm(do_save_bg); } + +bool CComponentsWindow::setBodyBGImage(const std::string& image_path) +{ + return getBodyObject()->setBodyBGImage(image_path); +} diff --git a/src/gui/components/cc_frm_window.h b/src/gui/components/cc_frm_window.h index 6dfe67df8..3e2658db5 100644 --- a/src/gui/components/cc_frm_window.h +++ b/src/gui/components/cc_frm_window.h @@ -3,7 +3,7 @@ Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. - Copyright (C) 2012-2016, Thilo Graf 'dbt' + Copyright (C) 2012-2017, Thilo Graf 'dbt' License: GPL @@ -435,6 +435,12 @@ class CComponentsWindow : public CComponentsForm, CCHeaderTypes * @note use addExitKey() if new exec key is required */ virtual void removeExitKeys(){getBodyObject()->removeExitKeys();} + + /** + * Sets an image for window background. + * @note The assigned image is assigned into body object! Main container, header and footer will be not touched. + */ + bool setBodyBGImage(const std::string& image_path); }; class CComponentsWindowMax : public CComponentsWindow From 2ce57350bab5e942d7040ae41f56d67c93ed513a Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 23 Dec 2017 15:54:04 +0100 Subject: [PATCH 102/107] CNetworkSetup: cleanup and unify debug output --- src/gui/network_setup.cpp | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/src/gui/network_setup.cpp b/src/gui/network_setup.cpp index 28fa4cd8a..2da85e62f 100644 --- a/src/gui/network_setup.cpp +++ b/src/gui/network_setup.cpp @@ -87,7 +87,7 @@ CNetworkSetup* CNetworkSetup::getInstance() if(!me) { me = new CNetworkSetup(); - dprintf(DEBUG_DEBUG, "CNetworkSetup Instance created\n"); + dprintf(DEBUG_NORMAL, "[CNetworkSetup]\t[%s - %d], Instance created\n", __func__, __LINE__); } return me; } @@ -108,21 +108,11 @@ int CNetworkSetup::exec(CMenuTarget* parent, const std::string &actionKey) } else if(actionKey=="networktest") { - printf("[network setup] doing network test...\n"); -#if 0 - testNetworkSettings( networkConfig->address.c_str(), - networkConfig->netmask.c_str(), - networkConfig->broadcast.c_str(), - networkConfig->gateway.c_str(), - networkConfig->nameserver.c_str(), - networkConfig->inet_static); -#endif testNetworkSettings(); return res; } else if(actionKey=="networkshow") { - dprintf(DEBUG_INFO, "show current network settings...\n"); showCurrentNetworkSettings(); return res; } @@ -144,7 +134,7 @@ int CNetworkSetup::exec(CMenuTarget* parent, const std::string &actionKey) return res; } - printf("[neutrino] init network setup...\n"); + dprintf(DEBUG_NORMAL, "[CNetworkSetup]\t[%s - %d], init network setup...\n", __func__, __LINE__); res = showNetworkSetup(); return res; @@ -453,9 +443,7 @@ bool CNetworkSetup::checkIntSettings() }; for (uint i = 0; i < (sizeof(n_isettings) / sizeof(n_isettings[0])); i++) if (n_isettings[i].old_network_setting != n_isettings[i].network_setting) { -#ifdef DEBUG - printf("CNetworkSetup::checkIntSettings: %d %d -> %d\n", i, n_isettings[i].old_network_setting, n_isettings[i].network_setting); -#endif + dprintf(DEBUG_NORMAL, "[CNetworkSetup]\t[%s - %d], %d %d -> %d\n", __func__, __LINE__, i, n_isettings[i].old_network_setting, n_isettings[i].network_setting); return true; } @@ -483,9 +471,7 @@ bool CNetworkSetup::checkStringSettings() }; for (uint i = 0; i < (sizeof(n_ssettings) / sizeof(n_ssettings[0])); i++) if (n_ssettings[i].old_network_setting != n_ssettings[i].network_setting) { -#ifdef DEBUG - printf("CNetworkSetup::checkStringSettings: %d: %s -> %s\n", i, n_ssettings[i].old_network_setting.c_str(), n_ssettings[i].network_setting.c_str()); -#endif + dprintf(DEBUG_NORMAL, "[CNetworkSetup]\t[%s - %d], %d: %s -> %s\n", __func__, __LINE__, i, n_ssettings[i].old_network_setting.c_str(), n_ssettings[i].network_setting.c_str()); return true; } if(CNetworkConfig::getInstance()->wireless) { @@ -547,7 +533,7 @@ bool CNetworkSetup::checkForIP() { if (n_settings[i].network_settings.empty()) //no definied setting { - printf("[network setup] empty address %s\n", g_Locale->getText(n_settings[i].addr_name)); + dprintf(DEBUG_NORMAL, "\033[33m\[CNetworkSetup]\t[%s - %d], empty address %s\033[0m\n", __func__, __LINE__, g_Locale->getText(n_settings[i].addr_name)); char msg[64]; snprintf(msg, 64, g_Locale->getText(LOCALE_NETWORKMENU_ERROR_NO_ADDRESS), g_Locale->getText(n_settings[i].addr_name)); ShowMsg(LOCALE_MAINSETTINGS_NETWORK, msg, CMsgBox::mbrOk, CMsgBox::mbOk, NEUTRINO_ICON_ERROR, width); @@ -562,7 +548,7 @@ bool CNetworkSetup::checkForIP() //saves settings without apply, reboot is required void CNetworkSetup::saveNetworkSettings() { - printf("[network setup] saving current network settings...\n"); + dprintf(DEBUG_NORMAL, "[CNetworkSetup]\t[%s - %d], saving current network settings...\n", __func__, __LINE__); prepareSettings(); networkConfig->commitConfig(); @@ -571,7 +557,7 @@ void CNetworkSetup::saveNetworkSettings() //saves settings and apply void CNetworkSetup::applyNetworkSettings() { - printf("[network setup] apply network settings...\n"); + dprintf(DEBUG_NORMAL, "[CNetworkSetup]\t[%s - %d], apply network settings...\n", __func__, __LINE__); if (!checkForIP()) return; @@ -656,7 +642,7 @@ bool CNetworkSetup::changeNotify(const neutrino_locale_t locale, void * /*Data*/ } else if(locale == LOCALE_NETWORKMENU_SELECT_IF) { networkConfig->readConfig(g_settings.ifname); readNetworkSettings(); - printf("CNetworkSetup::changeNotify: using %s, static %d\n", g_settings.ifname.c_str(), CNetworkConfig::getInstance()->inet_static); + dprintf(DEBUG_NORMAL, "[CNetworkSetup]\t[%s - %d], using %s, static %d\n", __func__, __LINE__, g_settings.ifname.c_str(), CNetworkConfig::getInstance()->inet_static); changeNotify(LOCALE_NETWORKMENU_DHCP, &CNetworkConfig::getInstance()->inet_static); @@ -670,6 +656,7 @@ bool CNetworkSetup::changeNotify(const neutrino_locale_t locale, void * /*Data*/ void CNetworkSetup::showCurrentNetworkSettings() { + dprintf(DEBUG_NORMAL, "[CNetworkSetup]\t[%s - %d], show current network settings...\n", __func__, __LINE__); std::string ip, mask, broadcast, router, nameserver, text; netGetIP(g_settings.ifname, ip, mask, broadcast); if (ip[0] == 0) { @@ -709,6 +696,7 @@ const char * CNetworkSetup::mypinghost(std::string &host) void CNetworkSetup::testNetworkSettings() { + dprintf(DEBUG_NORMAL, "[CNetworkSetup]\t[%s - %d], doing network test...\n", __func__, __LINE__); std::string our_ip, our_mask, our_broadcast, our_gateway, our_nameserver; std::string text, testsite, offset = " "; @@ -830,7 +818,7 @@ int CNetworkSetup::showWlanList() res = wlist.exec(NULL, ""); delete selector; - printf("CNetworkSetup::showWlanList: selected: %d\n", select); + dprintf(DEBUG_NORMAL, "[CNetworkSetup]\t[%s - %d], selected: %d\n", __func__, __LINE__, select); if (select >= 0) { network_ssid = networks[select].ssid; } From a48d9dc626851b49b74977dfd6721331bb9677f5 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 23 Dec 2017 15:58:00 +0100 Subject: [PATCH 103/107] .version: fix path to .version in some relevant files --- src/gui/network_setup.cpp | 2 +- src/gui/update.cpp | 4 ++-- src/nhttpd/tuxboxapi/controlapi.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gui/network_setup.cpp b/src/gui/network_setup.cpp index 2da85e62f..162afa922 100644 --- a/src/gui/network_setup.cpp +++ b/src/gui/network_setup.cpp @@ -710,7 +710,7 @@ void CNetworkSetup::testNetworkSettings() //get www-domain testsite from /.version CConfigFile config('\t'); - config.loadConfig(TARGET_PREFIX "/.version"); + config.loadConfig("/.version"); testsite = config.getString("homepage",defaultsite); testsite.replace( 0, testsite.find("www",0), "" ); diff --git a/src/gui/update.cpp b/src/gui/update.cpp index 9647dfd84..e15572cee 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -146,7 +146,7 @@ bool CFlashUpdate::checkOnlineVersion() std::vector update_t_list; CConfigFile _configfile('\t'); - const char * versionString = (_configfile.loadConfig(TARGET_PREFIX "/.version")) ? (_configfile.getString( "version", "????????????????").c_str()) : "????????????????"; + const char * versionString = (_configfile.loadConfig( "/.version")) ? (_configfile.getString( "version", "????????????????").c_str()) : "????????????????"; #ifdef DEBUG printf("[update] file %s\n", g_settings.softupdate_url_file.c_str()); #endif @@ -203,7 +203,7 @@ bool CFlashUpdate::selectHttpImage(void) CConfigFile _configfile('\t'); std::string versionString = "????????????????"; - if (_configfile.loadConfig(TARGET_PREFIX "/.version")) + if (_configfile.loadConfig("/.version")) versionString = _configfile.getString("version", "????????????????"); CFlashVersionInfo curInfo(versionString.c_str()); diff --git a/src/nhttpd/tuxboxapi/controlapi.cpp b/src/nhttpd/tuxboxapi/controlapi.cpp index b8f3cc973..419654e38 100644 --- a/src/nhttpd/tuxboxapi/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/controlapi.cpp @@ -822,7 +822,7 @@ void CControlAPI::InfoCGI(CyhookHandler *hh) if (hh->ParamList["1"] == "streaminfo") // print streaminfo SendStreamInfo(hh); else if (hh->ParamList["1"] == "version") // send version file - hh->SendFile(TARGET_PREFIX "/.version"); + hh->SendFile("/.version"); else if (hh->ParamList["1"] == "httpdversion") // print httpd version typ (just for compatibility) hh->Write("3"); else if (hh->ParamList["1"] == "nhttpd_version")// print nhttpd version @@ -2052,7 +2052,7 @@ void CControlAPI::EpgCGI(CyhookHandler *hh) //----------------------------------------------------------------------------- void CControlAPI::VersionCGI(CyhookHandler *hh) { - hh->SendFile(TARGET_PREFIX "/.version"); + hh->SendFile("/.version"); } //----------------------------------------------------------------------------- void CControlAPI::ReloadNeutrinoSetupCGI(CyhookHandler *hh) From 01350745c7cb6e2b937b4cef2a69fbf9cd29bc06 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 23 Dec 2017 16:19:46 +0100 Subject: [PATCH 104/107] COPKGManager: fix path search for ../opkg/info Since changed TARGET_PREFIX variable, path was wrong and causing possible long timeout while opening the manager window. --- src/gui/opkg_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/opkg_manager.cpp b/src/gui/opkg_manager.cpp index 14a8c433d..d614407e7 100644 --- a/src/gui/opkg_manager.cpp +++ b/src/gui/opkg_manager.cpp @@ -655,12 +655,12 @@ bool COPKGManager::hasOpkgSupport() string COPKGManager::getInfoDir() { /* /opt/opkg/... is path in patched opkg, /var/lib/opkg/... is original path */ - string dirs[] = {TARGET_PREFIX"/opt/opkg/info", TARGET_PREFIX"/var/lib/opkg/info"}; + string dirs[] = {TARGET_PREFIX"/opt/opkg/info", TARGET_PREFIX"/var/lib/opkg/info", "/var/lib/opkg/info", "/opt/opkg/info"}; for (size_t i = 0; i < sizeof(dirs) / sizeof(dirs[0]); i++) { if (access(dirs[i].c_str(), R_OK) == 0) return dirs[i]; + dprintf(DEBUG_NORMAL, "[COPKGManager] [%s - %d] InfoDir [%s] not found\n", __func__, __LINE__, dirs[i].c_str()); } - dprintf(DEBUG_NORMAL, "[COPKGManager] [%s - %d] InfoDir not found\n", __func__, __LINE__); return ""; } From 335afa79383cc2a2a0bc2be378993db1dcc2089a Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 23 Dec 2017 16:26:55 +0100 Subject: [PATCH 105/107] update to version 3.7.1 bugfixes --- ChangeLog | 38 +++++++++++++++++++++++++++++++++----- configure.ac | 2 +- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index e2c98db61..9553e6ea7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,31 @@ +2017-12-23 Thilo Graf + + update to version 3.7.1 + bugfixes + + COPKGManager: fix path search for ../opkg/info + Since changed TARGET_PREFIX variable, path was wrong and causing + possible long timeout while opening the manager window. + + .version: fix path to .version in some relevant files + + CNetworkSetup: cleanup and unify debug output + +2017-12-23 Thilo Graf + + CComponentsWindow: add method to set background image in window classes + - setBodyBGImage() exists as member of base class CCDraw and had + no visual effect in this class, because visibility of window container is disabled. + This additional member overloads the original methode and is using functionality from + window body object. Example for buildinfo added. + + TODO: + - background behavior of embedded objects must be global adapted if a background image is used + +2017-12-22 Thilo Graf + + CImageInfo: fix path to .version file + 2017-12-21 Thilo Graf update version to 3.7.0 @@ -15,7 +43,7 @@ Fileplay: add separat fileplay for audio and video -2017-12-19 svenhoefer +2017-12-21 svenhoefer - user-menu: add audio fileplay item Conflicts: @@ -35,10 +63,6 @@ src/driver/rcinput.cpp src/driver/rcinput.h -2017-12-18 GetAway - - audiomute.cpp: fix clear screen after audiomute - 2017-12-18 svenhoefer - acinclude: configure for generic hardware by default @@ -62,6 +86,10 @@ Icons: add missing hint icons and fix some files with format errors +2017-12-18 GetAway + + audiomute.cpp: fix clear screen after audiomute + 2017-12-17 Thilo Graf icons: fix assignment of settings, network and mainmenu icons diff --git a/configure.ac b/configure.ac index 4b9a1533e..f43bc563e 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT(Tuxbox-Neutrino,3.7.0) +AC_INIT(Tuxbox-Neutrino,3.7.1) AM_INIT_AUTOMAKE([1.0.1 nostdinc]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES]) From 2eb1bb1cf5f46378e440add9a9e12e3928db91e5 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 23 Dec 2017 17:56:56 +0100 Subject: [PATCH 106/107] fix play stop on cst after hd51 merge --- src/gui/movieplayer.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index b32270b89..cbc51dde2 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -1664,9 +1664,7 @@ void CMoviePlayerGui::PlayFileLoop(void) #ifdef DEBUG printf("CMoviePlayerGui::%s: spd %d pos %d/%d (%d, %d%%)\n", __func__, speed, position, duration, duration-position, file_prozent); #endif - } else #if HAVE_COOL_HARDWARE - { /* in case ffmpeg report incorrect values */ if(file_prozent > 89 && (playstate == CMoviePlayerGui::PLAY) && (speed == 1)){ if(position_tmp != position){ @@ -1693,8 +1691,11 @@ void CMoviePlayerGui::PlayFileLoop(void) } else eof = 0; +#endif + } -#else +#if ! HAVE_COOL_HARDWARE + else { if (filelist_it == filelist.end() - 1 || filelist_it == filelist.end()) g_RCInput->postMsg((neutrino_msg_t) g_settings.mpkey_stop, 0); From b67e21b5ceffbe7c1e93790a753f2e831c2d79c9 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 23 Dec 2017 18:21:55 +0100 Subject: [PATCH 107/107] try to fix next file play on AX --- src/gui/movieplayer.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index cbc51dde2..cf77278fd 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -1697,10 +1697,8 @@ void CMoviePlayerGui::PlayFileLoop(void) #if ! HAVE_COOL_HARDWARE else { - if (filelist_it == filelist.end() - 1 || filelist_it == filelist.end()) - g_RCInput->postMsg((neutrino_msg_t) g_settings.mpkey_stop, 0); - else - g_RCInput->postMsg((neutrino_msg_t) CRCInput::RC_right, 0); + at_eof = true; + break; } #endif handleMovieBrowser(0, position);