diff --git a/cross-configure.cool b/cross-configure.cool
index b35b48763..60daab140 100755
--- a/cross-configure.cool
+++ b/cross-configure.cool
@@ -27,5 +27,5 @@ export FREETYPE_CONFIG=$PREFIX/bin/freetype-config
export CURL_CONFIG=$PREFIX/bin/curl-config
./autogen.sh
-./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --without-driver --with-target=cdk --with-targetprefix="" "$*"
+./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --enable-flac --with-target=cdk --with-targetprefix="" "$*"
diff --git a/cross-configure.cool.debug b/cross-configure.cool.debug
index 6ce9ebed1..10f42ba3b 100755
--- a/cross-configure.cool.debug
+++ b/cross-configure.cool.debug
@@ -1,6 +1,6 @@
#!/bin/sh
-PREFIX=/opt/newcross/arm-cx2450x-linux-gnueabi/arm-cx2450x-linux-gnueabi/sys-root/usr
+PREFIX=/opt/arm/arm-cx2450x-linux-gnueabi/arm-cx2450x-linux-gnueabi/sys-root/usr
CCPATH=
HOST=arm-cx2450x-linux-gnueabi
@@ -27,5 +27,5 @@ export FREETYPE_CONFIG=$PREFIX/bin/freetype-config
export CURL_CONFIG=$PREFIX/bin/curl-config
./autogen.sh
-./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --without-driver --with-target=cdk --with-targetprefix="" "$*"
+./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --enable-flac --with-target=cdk --with-targetprefix="" "$*"
diff --git a/data/cables.xml b/data/cables.xml
index 3ef2d5188..9bfecff6e 100644
--- a/data/cables.xml
+++ b/data/cables.xml
@@ -35,6 +35,7 @@
+
@@ -259,6 +260,12 @@
+
+
+
+
+
+
@@ -1336,5 +1343,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/icons/0.png b/data/icons/0.png
index aa4949c7e..8490ecb6e 100644
Binary files a/data/icons/0.png and b/data/icons/0.png differ
diff --git a/data/icons/1.png b/data/icons/1.png
index 65c367603..47e031617 100644
Binary files a/data/icons/1.png and b/data/icons/1.png differ
diff --git a/data/icons/16_9.png b/data/icons/16_9.png
index 88a69d13f..024bfc455 100644
Binary files a/data/icons/16_9.png and b/data/icons/16_9.png differ
diff --git a/data/icons/16_9_gray.png b/data/icons/16_9_gray.png
index 4798861bf..b7a9bc16c 100644
Binary files a/data/icons/16_9_gray.png and b/data/icons/16_9_gray.png differ
diff --git a/data/icons/2.png b/data/icons/2.png
index 604c347be..c6cc719fd 100644
Binary files a/data/icons/2.png and b/data/icons/2.png differ
diff --git a/data/icons/3.png b/data/icons/3.png
index 72ba927f2..822081187 100644
Binary files a/data/icons/3.png and b/data/icons/3.png differ
diff --git a/data/icons/4.png b/data/icons/4.png
index 1ba6041a5..a51841f3b 100644
Binary files a/data/icons/4.png and b/data/icons/4.png differ
diff --git a/data/icons/5.png b/data/icons/5.png
index 10e39c214..8bdf034e1 100644
Binary files a/data/icons/5.png and b/data/icons/5.png differ
diff --git a/data/icons/6.png b/data/icons/6.png
index d9e571973..3acb8fe3a 100644
Binary files a/data/icons/6.png and b/data/icons/6.png differ
diff --git a/data/icons/7.png b/data/icons/7.png
index 4cac8b0b9..1f0c4c834 100644
Binary files a/data/icons/7.png and b/data/icons/7.png differ
diff --git a/data/icons/8.png b/data/icons/8.png
index a1a5336dd..733a71ccd 100644
Binary files a/data/icons/8.png and b/data/icons/8.png differ
diff --git a/data/icons/9.png b/data/icons/9.png
index 50a5f5c9b..aa720fb5c 100644
Binary files a/data/icons/9.png and b/data/icons/9.png differ
diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am
index 5cdd35240..66dc9a37d 100644
--- a/data/icons/Makefile.am
+++ b/data/icons/Makefile.am
@@ -65,6 +65,48 @@ install_DATA = \
help.png \
help_small.png \
hidden.png \
+ hint_aplay.png \
+ hint_audio.png \
+ hint_back.png \
+ hint_bedit.png \
+ hint_ci.png \
+ hint_dboxinfo.png \
+ hint_delete.png \
+ hint_extended.png \
+ hint_fileplay.png \
+ hint_games.png \
+ hint_hdd.png \
+ hint_imageinfo.png \
+ hint_inetradio.png \
+ hint_info.png \
+ hint_keys.png \
+ hint_language.png \
+ hint_manage.png \
+ hint_media.png \
+ hint_movie.png \
+ hint_network.png \
+ hint_osd.png \
+ hint_personalize.png \
+ hint_picview.png \
+ hint_protection.png \
+ hint_radiomode.png \
+ hint_reboot.png \
+ hint_recording.png \
+ hint_reload.png \
+ hint_save.png \
+ hint_scan.png \
+ hint_scripts.png \
+ hint_service.png \
+ hint_settings.png \
+ hint_shutdown.png \
+ hint_sleeptimer.png \
+ hint_streaminfo.png \
+ hint_swupdate.png \
+ hint_timers.png \
+ hint_tvmode.png \
+ hint_tvradio_switch.png \
+ hint_vfd.png \
+ hint_video.png \
home.png \
hungarian.png \
icon_green.png \
diff --git a/data/icons/bayrisch.png b/data/icons/bayrisch.png
index e3c1b08ac..f51b90332 100644
Binary files a/data/icons/bayrisch.png and b/data/icons/bayrisch.png differ
diff --git a/data/icons/biss_green.png b/data/icons/biss_green.png
index 1bfcacbad..c2a638b11 100644
Binary files a/data/icons/biss_green.png and b/data/icons/biss_green.png differ
diff --git a/data/icons/biss_white.png b/data/icons/biss_white.png
index 1da778c21..5aa76092e 100644
Binary files a/data/icons/biss_white.png and b/data/icons/biss_white.png differ
diff --git a/data/icons/biss_yellow.png b/data/icons/biss_yellow.png
index 492697dda..5da432e9d 100644
Binary files a/data/icons/biss_yellow.png and b/data/icons/biss_yellow.png differ
diff --git a/data/icons/blau.png b/data/icons/blau.png
index 23a2c17fc..247d5d542 100644
Binary files a/data/icons/blau.png and b/data/icons/blau.png differ
diff --git a/data/icons/bosanski.png b/data/icons/bosanski.png
index 65da04a03..a2566a8f3 100644
Binary files a/data/icons/bosanski.png and b/data/icons/bosanski.png differ
diff --git a/data/icons/btn_record_active.png b/data/icons/btn_record_active.png
index d0702a94a..68abcabfe 100644
Binary files a/data/icons/btn_record_active.png and b/data/icons/btn_record_active.png differ
diff --git a/data/icons/btn_record_inactive.png b/data/icons/btn_record_inactive.png
index 1c89e9eaa..bcb79cb8f 100644
Binary files a/data/icons/btn_record_inactive.png and b/data/icons/btn_record_inactive.png differ
diff --git a/data/icons/btn_stop.png b/data/icons/btn_stop.png
index 86a874de9..fa8ceeb6a 100644
Binary files a/data/icons/btn_stop.png and b/data/icons/btn_stop.png differ
diff --git a/data/icons/ca2.png b/data/icons/ca2.png
index d253c6e0d..eb6b3ab86 100644
Binary files a/data/icons/ca2.png and b/data/icons/ca2.png differ
diff --git a/data/icons/ca2_gray.png b/data/icons/ca2_gray.png
index d4c1a5f85..32ee51233 100644
Binary files a/data/icons/ca2_gray.png and b/data/icons/ca2_gray.png differ
diff --git a/data/icons/ch-baslerdeutsch.png b/data/icons/ch-baslerdeutsch.png
index 43b6af0b0..72cd3ab24 100644
Binary files a/data/icons/ch-baslerdeutsch.png and b/data/icons/ch-baslerdeutsch.png differ
diff --git a/data/icons/ch-berndeutsch.png b/data/icons/ch-berndeutsch.png
index 28062c3f3..20a6de8c7 100644
Binary files a/data/icons/ch-berndeutsch.png and b/data/icons/ch-berndeutsch.png differ
diff --git a/data/icons/conax_green.png b/data/icons/conax_green.png
index 9734b837f..174d39f76 100644
Binary files a/data/icons/conax_green.png and b/data/icons/conax_green.png differ
diff --git a/data/icons/conax_white.png b/data/icons/conax_white.png
index 020126d10..cb0d2f5b5 100644
Binary files a/data/icons/conax_white.png and b/data/icons/conax_white.png differ
diff --git a/data/icons/conax_yellow.png b/data/icons/conax_yellow.png
index 3a3c3c655..96c438bde 100644
Binary files a/data/icons/conax_yellow.png and b/data/icons/conax_yellow.png differ
diff --git a/data/icons/cw_green.png b/data/icons/cw_green.png
index 1d00a9e89..fa51f0b54 100644
Binary files a/data/icons/cw_green.png and b/data/icons/cw_green.png differ
diff --git a/data/icons/cw_white.png b/data/icons/cw_white.png
index 1b2305fb0..8fdaf67ec 100644
Binary files a/data/icons/cw_white.png and b/data/icons/cw_white.png differ
diff --git a/data/icons/cw_yellow.png b/data/icons/cw_yellow.png
index 290aba8ef..b994a058c 100644
Binary files a/data/icons/cw_yellow.png and b/data/icons/cw_yellow.png differ
diff --git a/data/icons/d_green.png b/data/icons/d_green.png
index e3f13b22e..65a22d430 100644
Binary files a/data/icons/d_green.png and b/data/icons/d_green.png differ
diff --git a/data/icons/d_white.png b/data/icons/d_white.png
index e24c4a270..c08707692 100644
Binary files a/data/icons/d_white.png and b/data/icons/d_white.png differ
diff --git a/data/icons/d_yellow.png b/data/icons/d_yellow.png
index e5bcc4f24..a2ff6a70e 100644
Binary files a/data/icons/d_yellow.png and b/data/icons/d_yellow.png differ
diff --git a/data/icons/dd.png b/data/icons/dd.png
index c7e9dfc39..fdbe8a184 100644
Binary files a/data/icons/dd.png and b/data/icons/dd.png differ
diff --git a/data/icons/dd_avail.png b/data/icons/dd_avail.png
index 5be78870f..ccef9ab69 100644
Binary files a/data/icons/dd_avail.png and b/data/icons/dd_avail.png differ
diff --git a/data/icons/dd_gray.png b/data/icons/dd_gray.png
index bf84d0999..57453ccc5 100644
Binary files a/data/icons/dd_gray.png and b/data/icons/dd_gray.png differ
diff --git a/data/icons/ddfill.png b/data/icons/ddfill.png
index 03fff6c4a..88e3fc272 100644
Binary files a/data/icons/ddfill.png and b/data/icons/ddfill.png differ
diff --git a/data/icons/down.png b/data/icons/down.png
index e718e29ee..db4ce2538 100644
Binary files a/data/icons/down.png and b/data/icons/down.png differ
diff --git a/data/icons/dutch.png b/data/icons/dutch.png
index 7dba570c5..4b317aaab 100644
Binary files a/data/icons/dutch.png and b/data/icons/dutch.png differ
diff --git a/data/icons/ellinika.png b/data/icons/ellinika.png
index b35e40669..9ab7b0c72 100644
Binary files a/data/icons/ellinika.png and b/data/icons/ellinika.png differ
diff --git a/data/icons/english.png b/data/icons/english.png
index 109a10816..c0d599e88 100644
Binary files a/data/icons/english.png and b/data/icons/english.png differ
diff --git a/data/icons/features.png b/data/icons/features.png
index aa4e7f961..a9f3056ed 100644
Binary files a/data/icons/features.png and b/data/icons/features.png differ
diff --git a/data/icons/francais.png b/data/icons/francais.png
index b7529f3ae..d918b6524 100644
Binary files a/data/icons/francais.png and b/data/icons/francais.png differ
diff --git a/data/icons/french.png b/data/icons/french.png
index b7529f3ae..d918b6524 100644
Binary files a/data/icons/french.png and b/data/icons/french.png differ
diff --git a/data/icons/gelb.png b/data/icons/gelb.png
index bdb580c2b..60d18c031 100644
Binary files a/data/icons/gelb.png and b/data/icons/gelb.png differ
diff --git a/data/icons/gruen.png b/data/icons/gruen.png
index 29747163d..70806cdd0 100644
Binary files a/data/icons/gruen.png and b/data/icons/gruen.png differ
diff --git a/data/icons/help_small.png b/data/icons/help_small.png
index 59be1d994..5610f6941 100644
Binary files a/data/icons/help_small.png and b/data/icons/help_small.png differ
diff --git a/data/icons/hint_aplay.png b/data/icons/hint_aplay.png
new file mode 100644
index 000000000..f49692a12
Binary files /dev/null and b/data/icons/hint_aplay.png differ
diff --git a/data/icons/hint_audio.png b/data/icons/hint_audio.png
new file mode 100644
index 000000000..011e3f033
Binary files /dev/null and b/data/icons/hint_audio.png differ
diff --git a/data/icons/hint_back.png b/data/icons/hint_back.png
new file mode 100644
index 000000000..42fecf16f
Binary files /dev/null and b/data/icons/hint_back.png differ
diff --git a/data/icons/hint_bedit.png b/data/icons/hint_bedit.png
new file mode 100644
index 000000000..43c1eab7a
Binary files /dev/null and b/data/icons/hint_bedit.png differ
diff --git a/data/icons/hint_ci.png b/data/icons/hint_ci.png
new file mode 100644
index 000000000..28512a0ce
Binary files /dev/null and b/data/icons/hint_ci.png differ
diff --git a/data/icons/hint_dboxinfo.png b/data/icons/hint_dboxinfo.png
new file mode 100644
index 000000000..ca657788a
Binary files /dev/null and b/data/icons/hint_dboxinfo.png differ
diff --git a/data/icons/hint_delete.png b/data/icons/hint_delete.png
new file mode 100644
index 000000000..aee392425
Binary files /dev/null and b/data/icons/hint_delete.png differ
diff --git a/data/icons/hint_extended.png b/data/icons/hint_extended.png
new file mode 100644
index 000000000..fc3e685ac
Binary files /dev/null and b/data/icons/hint_extended.png differ
diff --git a/data/icons/hint_fileplay.png b/data/icons/hint_fileplay.png
new file mode 100644
index 000000000..3e5714bda
Binary files /dev/null and b/data/icons/hint_fileplay.png differ
diff --git a/data/icons/hint_games.png b/data/icons/hint_games.png
new file mode 100644
index 000000000..21964b579
Binary files /dev/null and b/data/icons/hint_games.png differ
diff --git a/data/icons/hint_hdd.png b/data/icons/hint_hdd.png
new file mode 100644
index 000000000..de51810b2
Binary files /dev/null and b/data/icons/hint_hdd.png differ
diff --git a/data/icons/hint_imageinfo.png b/data/icons/hint_imageinfo.png
new file mode 100644
index 000000000..1c0e1ada2
Binary files /dev/null and b/data/icons/hint_imageinfo.png differ
diff --git a/data/icons/hint_inetradio.png b/data/icons/hint_inetradio.png
new file mode 100644
index 000000000..8d1d8561e
Binary files /dev/null and b/data/icons/hint_inetradio.png differ
diff --git a/data/icons/hint_info.png b/data/icons/hint_info.png
new file mode 100644
index 000000000..3e1777aab
Binary files /dev/null and b/data/icons/hint_info.png differ
diff --git a/data/icons/hint_keys.png b/data/icons/hint_keys.png
new file mode 100644
index 000000000..fd7b14fc8
Binary files /dev/null and b/data/icons/hint_keys.png differ
diff --git a/data/icons/hint_language.png b/data/icons/hint_language.png
new file mode 100644
index 000000000..1585e8237
Binary files /dev/null and b/data/icons/hint_language.png differ
diff --git a/data/icons/hint_manage.png b/data/icons/hint_manage.png
new file mode 100644
index 000000000..f40a4d3c5
Binary files /dev/null and b/data/icons/hint_manage.png differ
diff --git a/data/icons/hint_media.png b/data/icons/hint_media.png
new file mode 100644
index 000000000..8216861a7
Binary files /dev/null and b/data/icons/hint_media.png differ
diff --git a/data/icons/hint_movie.png b/data/icons/hint_movie.png
new file mode 100644
index 000000000..7c075a0b5
Binary files /dev/null and b/data/icons/hint_movie.png differ
diff --git a/data/icons/hint_network.png b/data/icons/hint_network.png
new file mode 100644
index 000000000..e45cbceb2
Binary files /dev/null and b/data/icons/hint_network.png differ
diff --git a/data/icons/hint_osd.png b/data/icons/hint_osd.png
new file mode 100644
index 000000000..cc22a0ebc
Binary files /dev/null and b/data/icons/hint_osd.png differ
diff --git a/data/icons/hint_personalize.png b/data/icons/hint_personalize.png
new file mode 100644
index 000000000..10a6da125
Binary files /dev/null and b/data/icons/hint_personalize.png differ
diff --git a/data/icons/hint_picview.png b/data/icons/hint_picview.png
new file mode 100644
index 000000000..c397432e7
Binary files /dev/null and b/data/icons/hint_picview.png differ
diff --git a/data/icons/hint_protection.png b/data/icons/hint_protection.png
new file mode 100644
index 000000000..45b14fe1f
Binary files /dev/null and b/data/icons/hint_protection.png differ
diff --git a/data/icons/hint_radiomode.png b/data/icons/hint_radiomode.png
new file mode 100644
index 000000000..e69d52330
Binary files /dev/null and b/data/icons/hint_radiomode.png differ
diff --git a/data/icons/hint_reboot.png b/data/icons/hint_reboot.png
new file mode 100644
index 000000000..530d6b2ed
Binary files /dev/null and b/data/icons/hint_reboot.png differ
diff --git a/data/icons/hint_recording.png b/data/icons/hint_recording.png
new file mode 100644
index 000000000..06caf3dda
Binary files /dev/null and b/data/icons/hint_recording.png differ
diff --git a/data/icons/hint_reload.png b/data/icons/hint_reload.png
new file mode 100644
index 000000000..28c4be4b7
Binary files /dev/null and b/data/icons/hint_reload.png differ
diff --git a/data/icons/hint_save.png b/data/icons/hint_save.png
new file mode 100644
index 000000000..a87f1bd3d
Binary files /dev/null and b/data/icons/hint_save.png differ
diff --git a/data/icons/hint_scan.png b/data/icons/hint_scan.png
new file mode 100644
index 000000000..36f158538
Binary files /dev/null and b/data/icons/hint_scan.png differ
diff --git a/data/icons/hint_scripts.png b/data/icons/hint_scripts.png
new file mode 100644
index 000000000..73f9d07ff
Binary files /dev/null and b/data/icons/hint_scripts.png differ
diff --git a/data/icons/hint_service.png b/data/icons/hint_service.png
new file mode 100644
index 000000000..019e0c622
Binary files /dev/null and b/data/icons/hint_service.png differ
diff --git a/data/icons/hint_settings.png b/data/icons/hint_settings.png
new file mode 100644
index 000000000..08c127fd0
Binary files /dev/null and b/data/icons/hint_settings.png differ
diff --git a/data/icons/hint_shutdown.png b/data/icons/hint_shutdown.png
new file mode 100644
index 000000000..85beb4d9a
Binary files /dev/null and b/data/icons/hint_shutdown.png differ
diff --git a/data/icons/hint_sleeptimer.png b/data/icons/hint_sleeptimer.png
new file mode 100644
index 000000000..fa8827d9b
Binary files /dev/null and b/data/icons/hint_sleeptimer.png differ
diff --git a/data/icons/hint_streaminfo.png b/data/icons/hint_streaminfo.png
new file mode 100644
index 000000000..7176488ed
Binary files /dev/null and b/data/icons/hint_streaminfo.png differ
diff --git a/data/icons/hint_swupdate.png b/data/icons/hint_swupdate.png
new file mode 100644
index 000000000..0a44a44ec
Binary files /dev/null and b/data/icons/hint_swupdate.png differ
diff --git a/data/icons/hint_timers.png b/data/icons/hint_timers.png
new file mode 100644
index 000000000..83263547b
Binary files /dev/null and b/data/icons/hint_timers.png differ
diff --git a/data/icons/hint_tvmode.png b/data/icons/hint_tvmode.png
new file mode 100644
index 000000000..1af243c4e
Binary files /dev/null and b/data/icons/hint_tvmode.png differ
diff --git a/data/icons/hint_tvradio_switch.png b/data/icons/hint_tvradio_switch.png
new file mode 100644
index 000000000..df84f62e2
Binary files /dev/null and b/data/icons/hint_tvradio_switch.png differ
diff --git a/data/icons/hint_vfd.png b/data/icons/hint_vfd.png
new file mode 100644
index 000000000..36d251fe7
Binary files /dev/null and b/data/icons/hint_vfd.png differ
diff --git a/data/icons/hint_video.png b/data/icons/hint_video.png
new file mode 100644
index 000000000..2bf44c01b
Binary files /dev/null and b/data/icons/hint_video.png differ
diff --git a/data/icons/hungarian.png b/data/icons/hungarian.png
index b41feb509..683bc5a5f 100644
Binary files a/data/icons/hungarian.png and b/data/icons/hungarian.png differ
diff --git a/data/icons/icon_blue.png b/data/icons/icon_blue.png
index 472362c51..4c84e0bb3 100644
Binary files a/data/icons/icon_blue.png and b/data/icons/icon_blue.png differ
diff --git a/data/icons/icon_green.png b/data/icons/icon_green.png
index b1f073f65..5a0048fc7 100644
Binary files a/data/icons/icon_green.png and b/data/icons/icon_green.png differ
diff --git a/data/icons/icon_movieplayer.png b/data/icons/icon_movieplayer.png
index fa955d6b7..d116ff154 100644
Binary files a/data/icons/icon_movieplayer.png and b/data/icons/icon_movieplayer.png differ
diff --git a/data/icons/icon_red.png b/data/icons/icon_red.png
index 99319698e..5b473d464 100644
Binary files a/data/icons/icon_red.png and b/data/icons/icon_red.png differ
diff --git a/data/icons/icon_yellow.png b/data/icons/icon_yellow.png
index 237796a4b..7dee1f3b0 100644
Binary files a/data/icons/icon_yellow.png and b/data/icons/icon_yellow.png differ
diff --git a/data/icons/info.png b/data/icons/info.png
index 01acdecd8..712126aa2 100644
Binary files a/data/icons/info.png and b/data/icons/info.png differ
diff --git a/data/icons/info_small.png b/data/icons/info_small.png
index 91058600d..e7f76c991 100644
Binary files a/data/icons/info_small.png and b/data/icons/info_small.png differ
diff --git a/data/icons/ird_green.png b/data/icons/ird_green.png
index 7290baf97..27840a614 100644
Binary files a/data/icons/ird_green.png and b/data/icons/ird_green.png differ
diff --git a/data/icons/ird_white.png b/data/icons/ird_white.png
index 9b299caa6..ff5e521ae 100644
Binary files a/data/icons/ird_white.png and b/data/icons/ird_white.png differ
diff --git a/data/icons/ird_yellow.png b/data/icons/ird_yellow.png
index 1b21a5078..cc81a215a 100644
Binary files a/data/icons/ird_yellow.png and b/data/icons/ird_yellow.png differ
diff --git a/data/icons/italiano.png b/data/icons/italiano.png
index 965fca98f..e442d581e 100644
Binary files a/data/icons/italiano.png and b/data/icons/italiano.png differ
diff --git a/data/icons/language.png b/data/icons/language.png
index 41b0247b9..bbef95490 100644
Binary files a/data/icons/language.png and b/data/icons/language.png differ
diff --git a/data/icons/left.png b/data/icons/left.png
index 521c8be4e..504a1519b 100644
Binary files a/data/icons/left.png and b/data/icons/left.png differ
diff --git a/data/icons/local.png b/data/icons/local.png
index 76bb86970..19027c10e 100644
Binary files a/data/icons/local.png and b/data/icons/local.png differ
diff --git a/data/icons/lock.png b/data/icons/lock.png
index 868786dfd..318dd599d 100644
Binary files a/data/icons/lock.png and b/data/icons/lock.png differ
diff --git a/data/icons/lock_passive.png b/data/icons/lock_passive.png
index 4ec3bdc5f..7622dd82e 100644
Binary files a/data/icons/lock_passive.png and b/data/icons/lock_passive.png differ
diff --git a/data/icons/mounted.png b/data/icons/mounted.png
index 2274336f8..7be710bc9 100644
Binary files a/data/icons/mounted.png and b/data/icons/mounted.png differ
diff --git a/data/icons/mp3-0.jpg b/data/icons/mp3-0.jpg
index 73364958a..0bb50cb38 100644
Binary files a/data/icons/mp3-0.jpg and b/data/icons/mp3-0.jpg differ
diff --git a/data/icons/mp3-1.jpg b/data/icons/mp3-1.jpg
index e4826fde1..6c0294f90 100644
Binary files a/data/icons/mp3-1.jpg and b/data/icons/mp3-1.jpg differ
diff --git a/data/icons/mp3-2.jpg b/data/icons/mp3-2.jpg
index 079fb16df..ab1594883 100644
Binary files a/data/icons/mp3-2.jpg and b/data/icons/mp3-2.jpg differ
diff --git a/data/icons/mp3-3.jpg b/data/icons/mp3-3.jpg
index 420aa2324..eed32fede 100644
Binary files a/data/icons/mp3-3.jpg and b/data/icons/mp3-3.jpg differ
diff --git a/data/icons/mp3-4.jpg b/data/icons/mp3-4.jpg
index 5de37cf74..86ad3a372 100644
Binary files a/data/icons/mp3-4.jpg and b/data/icons/mp3-4.jpg differ
diff --git a/data/icons/mp3-5.jpg b/data/icons/mp3-5.jpg
index 1abefd2c2..3fa627a06 100644
Binary files a/data/icons/mp3-5.jpg and b/data/icons/mp3-5.jpg differ
diff --git a/data/icons/mp3-6.jpg b/data/icons/mp3-6.jpg
index 711ed9539..150aa866d 100644
Binary files a/data/icons/mp3-6.jpg and b/data/icons/mp3-6.jpg differ
diff --git a/data/icons/mp3-7.jpg b/data/icons/mp3-7.jpg
index 396af3556..c2bd4b5ed 100644
Binary files a/data/icons/mp3-7.jpg and b/data/icons/mp3-7.jpg differ
diff --git a/data/icons/mp3.jpg b/data/icons/mp3.jpg
index cb7979027..e7457c980 100644
Binary files a/data/icons/mp3.jpg and b/data/icons/mp3.jpg differ
diff --git a/data/icons/mute_zap_gray.png b/data/icons/mute_zap_gray.png
index 01325a527..9ba42bdcb 100644
Binary files a/data/icons/mute_zap_gray.png and b/data/icons/mute_zap_gray.png differ
diff --git a/data/icons/mute_zap_green.png b/data/icons/mute_zap_green.png
index df4575829..746ff165f 100644
Binary files a/data/icons/mute_zap_green.png and b/data/icons/mute_zap_green.png differ
diff --git a/data/icons/nagra_green.png b/data/icons/nagra_green.png
index 69b368374..7682759cb 100644
Binary files a/data/icons/nagra_green.png and b/data/icons/nagra_green.png differ
diff --git a/data/icons/nagra_white.png b/data/icons/nagra_white.png
index 1e7ffb135..917896a75 100644
Binary files a/data/icons/nagra_white.png and b/data/icons/nagra_white.png differ
diff --git a/data/icons/nagra_yellow.png b/data/icons/nagra_yellow.png
index 42500ec74..4fc908a32 100644
Binary files a/data/icons/nagra_yellow.png and b/data/icons/nagra_yellow.png differ
diff --git a/data/icons/nederlands.png b/data/icons/nederlands.png
index 109da2313..248996c3e 100644
Binary files a/data/icons/nederlands.png and b/data/icons/nederlands.png differ
diff --git a/data/icons/norsk.png b/data/icons/norsk.png
index a04427019..cfb143e7b 100644
Binary files a/data/icons/norsk.png and b/data/icons/norsk.png differ
diff --git a/data/icons/not_mounted.png b/data/icons/not_mounted.png
index abb294e0f..b394ba62b 100644
Binary files a/data/icons/not_mounted.png and b/data/icons/not_mounted.png differ
diff --git a/data/icons/notyet.png b/data/icons/notyet.png
index 314e33e28..c22f319c3 100644
Binary files a/data/icons/notyet.png and b/data/icons/notyet.png differ
diff --git a/data/icons/numericpad.png b/data/icons/numericpad.png
index 94b61c2b1..101b57842 100644
Binary files a/data/icons/numericpad.png and b/data/icons/numericpad.png differ
diff --git a/data/icons/personalize.png b/data/icons/personalize.png
index b067dbc06..4f9333ccc 100644
Binary files a/data/icons/personalize.png and b/data/icons/personalize.png differ
diff --git a/data/icons/polski.png b/data/icons/polski.png
index 2afcc3a2d..6e728b8c5 100644
Binary files a/data/icons/polski.png and b/data/icons/polski.png differ
diff --git a/data/icons/portugues.png b/data/icons/portugues.png
index 36b621e82..02065e92a 100644
Binary files a/data/icons/portugues.png and b/data/icons/portugues.png differ
diff --git a/data/icons/power.png b/data/icons/power.png
index 9520a99d5..2f7da6ae8 100644
Binary files a/data/icons/power.png and b/data/icons/power.png differ
diff --git a/data/icons/powervu_green.png b/data/icons/powervu_green.png
index 3fcfb7693..9380eea95 100644
Binary files a/data/icons/powervu_green.png and b/data/icons/powervu_green.png differ
diff --git a/data/icons/powervu_white.png b/data/icons/powervu_white.png
index 1d7eced5f..07c4c8d5a 100644
Binary files a/data/icons/powervu_white.png and b/data/icons/powervu_white.png differ
diff --git a/data/icons/powervu_yellow.png b/data/icons/powervu_yellow.png
index bda2b3f01..6e95a8d9c 100644
Binary files a/data/icons/powervu_yellow.png and b/data/icons/powervu_yellow.png differ
diff --git a/data/icons/radio.jpg b/data/icons/radio.jpg
index 0113c51ea..4a9072c53 100644
Binary files a/data/icons/radio.jpg and b/data/icons/radio.jpg differ
diff --git a/data/icons/radiomode.jpg b/data/icons/radiomode.jpg
index e09002e45..7dff6838e 100644
Binary files a/data/icons/radiomode.jpg and b/data/icons/radiomode.jpg differ
diff --git a/data/icons/radiotextget.png b/data/icons/radiotextget.png
index dae4678c8..7948c469d 100644
Binary files a/data/icons/radiotextget.png and b/data/icons/radiotextget.png differ
diff --git a/data/icons/radiotextoff.png b/data/icons/radiotextoff.png
index 22ceffa4e..e59953da0 100644
Binary files a/data/icons/radiotextoff.png and b/data/icons/radiotextoff.png differ
diff --git a/data/icons/radiotextwait.png b/data/icons/radiotextwait.png
index 6f05d463b..5bf8d6076 100644
Binary files a/data/icons/radiotextwait.png and b/data/icons/radiotextwait.png differ
diff --git a/data/icons/rec_event_marker.png b/data/icons/rec_event_marker.png
index 73eee96f8..b2d10d404 100644
Binary files a/data/icons/rec_event_marker.png and b/data/icons/rec_event_marker.png differ
diff --git a/data/icons/res_000.png b/data/icons/res_000.png
index e291a796c..0c69fd74a 100644
Binary files a/data/icons/res_000.png and b/data/icons/res_000.png differ
diff --git a/data/icons/res_1080.png b/data/icons/res_1080.png
index 08ff896c8..072c55929 100644
Binary files a/data/icons/res_1080.png and b/data/icons/res_1080.png differ
diff --git a/data/icons/res_1280.png b/data/icons/res_1280.png
index 3361714af..c75519a8d 100644
Binary files a/data/icons/res_1280.png and b/data/icons/res_1280.png differ
diff --git a/data/icons/res_1440.png b/data/icons/res_1440.png
index 1aca51873..cbddf2ea0 100644
Binary files a/data/icons/res_1440.png and b/data/icons/res_1440.png differ
diff --git a/data/icons/res_1920.png b/data/icons/res_1920.png
index d7dcf931a..34c4f819a 100644
Binary files a/data/icons/res_1920.png and b/data/icons/res_1920.png differ
diff --git a/data/icons/res_288.png b/data/icons/res_288.png
index aed89243a..48adf4762 100644
Binary files a/data/icons/res_288.png and b/data/icons/res_288.png differ
diff --git a/data/icons/res_352.png b/data/icons/res_352.png
index 8268baa2f..e4950b81e 100644
Binary files a/data/icons/res_352.png and b/data/icons/res_352.png differ
diff --git a/data/icons/res_382.png b/data/icons/res_382.png
index af33cb39e..4e546e7ca 100644
Binary files a/data/icons/res_382.png and b/data/icons/res_382.png differ
diff --git a/data/icons/res_480.png b/data/icons/res_480.png
index d256eb04b..7cb2c1bbc 100644
Binary files a/data/icons/res_480.png and b/data/icons/res_480.png differ
diff --git a/data/icons/res_528.png b/data/icons/res_528.png
index ef9575b3b..2efc99547 100644
Binary files a/data/icons/res_528.png and b/data/icons/res_528.png differ
diff --git a/data/icons/res_544.png b/data/icons/res_544.png
index 8159aac74..75c5338c0 100644
Binary files a/data/icons/res_544.png and b/data/icons/res_544.png differ
diff --git a/data/icons/res_576.png b/data/icons/res_576.png
index 5201da738..4e68aa9fd 100644
Binary files a/data/icons/res_576.png and b/data/icons/res_576.png differ
diff --git a/data/icons/res_704.png b/data/icons/res_704.png
index f13b1a52f..8d0069e86 100644
Binary files a/data/icons/res_704.png and b/data/icons/res_704.png differ
diff --git a/data/icons/res_720.png b/data/icons/res_720.png
index 329716fb9..e806d1d74 100644
Binary files a/data/icons/res_720.png and b/data/icons/res_720.png differ
diff --git a/data/icons/right.png b/data/icons/right.png
index 354fb8f1a..8b06d6bb1 100644
Binary files a/data/icons/right.png and b/data/icons/right.png differ
diff --git a/data/icons/romania.png b/data/icons/romania.png
index a079ca74b..99f0db0e6 100644
Binary files a/data/icons/romania.png and b/data/icons/romania.png differ
diff --git a/data/icons/rot.png b/data/icons/rot.png
index a835f4586..6b5acc916 100644
Binary files a/data/icons/rot.png and b/data/icons/rot.png differ
diff --git a/data/icons/russkij.png b/data/icons/russkij.png
index fffac38b7..caacac067 100644
Binary files a/data/icons/russkij.png and b/data/icons/russkij.png differ
diff --git a/data/icons/scan.jpg b/data/icons/scan.jpg
index c0309d561..e0c8faa95 100644
Binary files a/data/icons/scan.jpg and b/data/icons/scan.jpg differ
diff --git a/data/icons/seca_green.png b/data/icons/seca_green.png
index ae253b633..b71a9254b 100644
Binary files a/data/icons/seca_green.png and b/data/icons/seca_green.png differ
diff --git a/data/icons/seca_white.png b/data/icons/seca_white.png
index 416b65ce9..2ba599d03 100644
Binary files a/data/icons/seca_white.png and b/data/icons/seca_white.png differ
diff --git a/data/icons/seca_yellow.png b/data/icons/seca_yellow.png
index de6a2fc46..365111aa9 100644
Binary files a/data/icons/seca_yellow.png and b/data/icons/seca_yellow.png differ
diff --git a/data/icons/softupdate.png b/data/icons/softupdate.png
index e469f3494..83e0ed36e 100644
Binary files a/data/icons/softupdate.png and b/data/icons/softupdate.png differ
diff --git a/data/icons/subt.png b/data/icons/subt.png
index 33b0b0f2d..cf2cec1ab 100644
Binary files a/data/icons/subt.png and b/data/icons/subt.png differ
diff --git a/data/icons/subt_gray.png b/data/icons/subt_gray.png
index 581a52c08..71edc56c3 100644
Binary files a/data/icons/subt_gray.png and b/data/icons/subt_gray.png differ
diff --git a/data/icons/suomi.png b/data/icons/suomi.png
index 1a48e4dc3..98f064eb7 100644
Binary files a/data/icons/suomi.png and b/data/icons/suomi.png differ
diff --git a/data/icons/svenska.png b/data/icons/svenska.png
index b7c5f77ad..2711ed979 100644
Binary files a/data/icons/svenska.png and b/data/icons/svenska.png differ
diff --git a/data/icons/tuner_1.png b/data/icons/tuner_1.png
index 41cc06b5f..27f599886 100644
Binary files a/data/icons/tuner_1.png and b/data/icons/tuner_1.png differ
diff --git a/data/icons/tuner_2.png b/data/icons/tuner_2.png
index 7749a9993..af38d4ad8 100644
Binary files a/data/icons/tuner_2.png and b/data/icons/tuner_2.png differ
diff --git a/data/icons/up.png b/data/icons/up.png
index 7f92806ff..d18f6fa30 100644
Binary files a/data/icons/up.png and b/data/icons/up.png differ
diff --git a/data/icons/upnp.png b/data/icons/upnp.png
index 94ee9d5bd..872694601 100644
Binary files a/data/icons/upnp.png and b/data/icons/upnp.png differ
diff --git a/data/icons/via_green.png b/data/icons/via_green.png
index 5a3117f65..96423c79b 100644
Binary files a/data/icons/via_green.png and b/data/icons/via_green.png differ
diff --git a/data/icons/via_white.png b/data/icons/via_white.png
index ed2529236..c0b0a7d2b 100644
Binary files a/data/icons/via_white.png and b/data/icons/via_white.png differ
diff --git a/data/icons/via_yellow.png b/data/icons/via_yellow.png
index 72674b085..7234c6ee6 100644
Binary files a/data/icons/via_yellow.png and b/data/icons/via_yellow.png differ
diff --git a/data/icons/volume.png b/data/icons/volume.png
index c03406665..985a013ea 100644
Binary files a/data/icons/volume.png and b/data/icons/volume.png differ
diff --git a/data/icons/volumebody.png b/data/icons/volumebody.png
index c921998b3..3ba8dd13e 100644
Binary files a/data/icons/volumebody.png and b/data/icons/volumebody.png differ
diff --git a/data/icons/volumeslider2.png b/data/icons/volumeslider2.png
index 4e88bd0e9..051915adb 100644
Binary files a/data/icons/volumeslider2.png and b/data/icons/volumeslider2.png differ
diff --git a/data/icons/volumeslider2alpha.png b/data/icons/volumeslider2alpha.png
index 09db880eb..5916c9084 100644
Binary files a/data/icons/volumeslider2alpha.png and b/data/icons/volumeslider2alpha.png differ
diff --git a/data/icons/volumeslider2blue.png b/data/icons/volumeslider2blue.png
index 624922582..a8ac4394a 100644
Binary files a/data/icons/volumeslider2blue.png and b/data/icons/volumeslider2blue.png differ
diff --git a/data/icons/volumeslider2green.png b/data/icons/volumeslider2green.png
index 45cc36f84..5c53fc879 100644
Binary files a/data/icons/volumeslider2green.png and b/data/icons/volumeslider2green.png differ
diff --git a/data/icons/volumeslider2red.png b/data/icons/volumeslider2red.png
index 7055d87be..3a929c202 100644
Binary files a/data/icons/volumeslider2red.png and b/data/icons/volumeslider2red.png differ
diff --git a/data/icons/vtxt.png b/data/icons/vtxt.png
index 23c84645c..30902f56a 100644
Binary files a/data/icons/vtxt.png and b/data/icons/vtxt.png differ
diff --git a/data/icons/vtxt_gray.png b/data/icons/vtxt_gray.png
index 128c14c24..11e12e1e6 100644
Binary files a/data/icons/vtxt_gray.png and b/data/icons/vtxt_gray.png differ
diff --git a/data/icons/x_green.png b/data/icons/x_green.png
index babb51ee0..6eff02b8c 100644
Binary files a/data/icons/x_green.png and b/data/icons/x_green.png differ
diff --git a/data/icons/x_white.png b/data/icons/x_white.png
index 827901bfb..ab3bbdd74 100644
Binary files a/data/icons/x_white.png and b/data/icons/x_white.png differ
diff --git a/data/icons/x_yellow.png b/data/icons/x_yellow.png
index 5ef02b578..39843e345 100644
Binary files a/data/icons/x_yellow.png and b/data/icons/x_yellow.png differ
diff --git a/data/lcd/icons/lcd2.png b/data/lcd/icons/lcd2.png
index 27c8a4ee7..47baf5153 100644
Binary files a/data/lcd/icons/lcd2.png and b/data/lcd/icons/lcd2.png differ
diff --git a/data/lcd/icons/power.png b/data/lcd/icons/power.png
index a3667e75c..7f331916a 100644
Binary files a/data/lcd/icons/power.png and b/data/lcd/icons/power.png differ
diff --git a/data/locale/Makefile.am b/data/locale/Makefile.am
index dde025d60..50d9e1356 100644
--- a/data/locale/Makefile.am
+++ b/data/locale/Makefile.am
@@ -21,28 +21,35 @@ install_DATA = \
if MAINTAINER_MODE
-locals: locals.h locals_intern.h
+locals: sort-locals locals.h locals_intern.h install-locals
-ordercheck: deutsch.locale
- cut -d' ' -f1 deutsch.locale | LC_ALL=C sort | uniq > /tmp/log
- cut -d' ' -f1 deutsch.locale | uniq | diff - /tmp/log || \
+sort-locals: $(top_srcdir)/data/locale/deutsch.locale $(top_srcdir)/data/locale/english.locale
+ cat $(top_srcdir)/data/locale/deutsch.locale | LC_ALL=C sort | uniq > deutsch.locale
+ cat $(top_srcdir)/data/locale/english.locale | LC_ALL=C sort | uniq > english.locale
+ cp -f deutsch.locale english.locale $(top_srcdir)/data/locale
+
+ordercheck: $(top_srcdir)/data/locale/deutsch.locale
+ cut -d' ' -f1 $(top_srcdir)/data/locale/deutsch.locale | LC_ALL=C sort | uniq > /tmp/log
+ cut -d' ' -f1 $(top_srcdir)/data/locale/deutsch.locale | uniq | diff - /tmp/log || \
(echo "ERROR: deutsch.locale not ordered or contains empty lines" && false)
-locals.h: ordercheck deutsch.locale
- cut -d' ' -f1 deutsch.locale | LC_ALL=C sort | uniq | tr [:lower:] [:upper:] | tr \. \_ | tr \- \_ | tr -d \? | ./create.locals.h
+locals.h: ordercheck $(top_srcdir)/data/locale/deutsch.locale
+ cut -d' ' -f1 $(top_srcdir)/data/locale/deutsch.locale | LC_ALL=C sort | uniq | tr [:lower:] [:upper:] | tr \. \_ | tr \- \_ | tr -d \? | $(top_srcdir)/data/locale/create.locals.h
-locals_intern.h: ordercheck deutsch.locale
- cut -d' ' -f1 deutsch.locale | LC_ALL=C sort | uniq | ./create.locals_intern.h
+locals_intern.h: ordercheck $(top_srcdir)/data/locale/deutsch.locale
+ cut -d' ' -f1 $(top_srcdir)/data/locale/deutsch.locale | LC_ALL=C sort | uniq | $(top_srcdir)/data/locale/create.locals_intern.h
check: locals.h locals_intern.h
- diff locals.h ../../src/system
- diff locals_intern.h ../../src/system
+ diff locals.h $(top_srcdir)/src/system
+ diff locals_intern.h $(top_srcdir)/src/system
install-locals: locals.h locals_intern.h
- cp locals.h locals_intern.h ../../src/system
- @echo "Consider committing .../neutrino/src/system/[locals.h,locals_intern.h]"
+ cp locals.h locals_intern.h $(top_srcdir)/src/system
+ @echo "Consider committing src/system/[locals.h,locals_intern.h]"
+ cp -f deutsch.locale english.locale $(top_srcdir)/data/locale
+ @echo "Consider committing data/locale/[deutsch.locale,english.locale]"
locals-clean:
- rm -f locals.h locals_intern.h
+ rm -f locals.h locals_intern.h deutsch.locale english.locale
endif
diff --git a/data/locale/_readme.txt b/data/locale/_readme.txt
index 97044e9d4..cd4366866 100644
--- a/data/locale/_readme.txt
+++ b/data/locale/_readme.txt
@@ -28,36 +28,35 @@ How do I add a new locale string?
---------------------------------
1.)
First of all, add the new string to deutsch.locale while preserving
-the ordering. Do not add any empty lines. Use `make ordercheck' to for
-verification.
+the ordering. Do not add any empty lines.
2.)
-Enter the directory apps/tuxbox/neutrino/data/locale.
+Enter the directory build_tmp/neutrino-hd/data/locale.
3.)
-Create new versions of the files apps/tuxbox/neutrino/src/system/locals.h
-and apps/tuxbox/neutrino/src/system/locals_intern.h
-using the command `make locals.h locals_intern.h'.
+Use for sorting (deutsch.locale,english.locale) 'make sort-locals', use 'make ordercheck' to for
+verification.
4.)
-Check the modifications with `make check', or with
-diff locals.h ../../src/system/locals.h
-diff locals_intern.h ../../src/system/locals_intern.h
+Create new versions of the files src/system/locals.h and src/system/locals_intern.h
+using the command 'make locals.h locals_intern.h'.
5.)
-Copy the replacement file to their destination with `make install-locals',
-or with
-cp -p locals.h ../../src/system/locals.h
-cp -p locals_intern.h ../../src/system/locals_intern.h
+Check the modifications with 'make check'
6.)
+Copy the replacement file to their destination with 'make install-locals'
+
+7.)
+Or use for item 3-6 'make locals'
+
+8.)
To the extent possible, update other locale file. For this, the
Perl-script create-locals-update.pl may be useful.
-7.)
-If committing the changes to CVS, commit both the involved
-locale-files, apps/tuxbox/neutrino/src/system/locals.h, and
-as apps/tuxbox/neutrino/src/system/locals_intern.h.
+9.)
+If committing the changes to Git, commit both the involved
+locale-files, src/system/locals.h, and src/system/locals_intern.h.
Useful tools:
-------------
diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale
index ecf5dde3f..d3ab0e772 100644
--- a/data/locale/deutsch.locale
+++ b/data/locale/deutsch.locale
@@ -113,7 +113,7 @@ audiomenu.avsync A/V sync
audiomenu.avsync_am Audio master
audiomenu.clockrec
audiomenu.dolbydigital DD-Unterkanal automatisch
-audiomenu.hdmi_dd DolbyDigital über HDMI
+audiomenu.hdmi_dd Dolby Digital über HDMI
audiomenu.hdmi_dd_auto automatisch
audiomenu.hdmi_dd_force erzwingen
audiomenu.monoleft mono links
@@ -123,8 +123,9 @@ audiomenu.pref_lang_head Tonwahl
audiomenu.pref_languages Bevorzugte Sprachen
audiomenu.pref_subs Sprache
audiomenu.pref_subs_head Untertitelwahl
-audiomenu.spdif_dd DolbyDigital über S/PDIF
+audiomenu.spdif_dd Dolby Digital über S/PDIF
audiomenu.stereo stereo
+audiomenu.volume_adjust Lautstärke ändern, in %
audiomenu.volume_step Lautstärke Schrittweite
audioplayer.add Hinzufügen
audioplayer.add_ic Icecast
@@ -259,7 +260,7 @@ colormenusetup.menucontent Fensterinhalt
colormenusetup.menucontent_inactive Fensterinhalt deaktiviert
colormenusetup.menucontent_selected Fensterinhalt selektiert
colormenusetup.menuhead Titelleiste
-colorstatusbar.text Statusbalken
+colorstatusbar.text Infobar
colorthememenu.head Theme auswählen
colorthememenu.head2 Themes laden
colorthememenu.name Themename
@@ -291,6 +292,7 @@ date.Sun So
date.Thu Do
date.Tue Di
date.Wed Mi
+epg.saving Speichere EPG
epgextended.actors Darsteller
epgextended.director Regie
epgextended.guests Gäste
@@ -299,6 +301,7 @@ epgextended.presenter Moderator
epgextended.year_of_production Produktionsjahr
epglist.noevents Keine EPG-Information verfügbar.
epgviewer.More_Screenings Weitere Termine auf diesem Kanal
+epgviewer.More_Screenings_short Weitere Termine
epgviewer.nodetailed Keine ausführlichen Informationen verfügbar
epgviewer.notfound Keine Programminformationen (EPG) gefunden
eventfinder.head EPG-Suche
@@ -391,6 +394,7 @@ extra.tp_pol_r R
extra.tp_rate Symbolrate
extra.update_dir Lokales Update-Verzeichnis
extra.use_gotoxx Benutze gotoXX
+extra.volume_digits Lautstärkeanzeige Ziffern
extra.volume_pos Lautstärkeanzeige
extra.west Westen
extra.zap_cycle Zap nur in Bouquet
@@ -434,7 +438,8 @@ filesystem.is.utf8.option.utf8 UTF-8
flashupdate.actionreadflash lese Flash
flashupdate.cantopenfile kann Datei nicht öffnen
flashupdate.cantopenmtd kann das MTD-Device nicht öffnen
-flashupdate.checkupdate Nach Updates suchen
+flashupdate.checkupdate_internet Online nach Updates suchen
+flashupdate.checkupdate_local Lokales Update
flashupdate.currentversion_sep Installierte Version
flashupdate.currentversiondate Datum
flashupdate.currentversiontime Uhrzeit
@@ -521,6 +526,7 @@ fontsize.infobar_info Info
fontsize.infobar_number Nummer
fontsize.infobar_small Klein
fontsize.menu Menütext
+fontsize.menu_hint Menü-Hilfe
fontsize.menu_info Menüinfo
fontsize.menu_title Menütitel
hdd_10min 10 min.
@@ -605,7 +611,7 @@ keybindingmenu.poweroff Standby EIN/AUS
keybindingmenu.quickzap Schnellumschaltung
keybindingmenu.remotecontrol_hardware Hardware
keybindingmenu.remotecontrol_hardware_coolstream Coolstream
-keybindingmenu.remotecontrol_hardware_dbox d-box Nokia (alt)
+keybindingmenu.remotecontrol_hardware_dbox DBox Nokia (alt)
keybindingmenu.remotecontrol_hardware_msg_part1 Die Fernbedienung wurde von '
keybindingmenu.remotecontrol_hardware_msg_part2 ' auf '
keybindingmenu.remotecontrol_hardware_msg_part3 ' geändert.\nIst dies korrekt?\nBitte die Auswahl innerhalb 15 Sekunden mit der neuen Fernbedienung\nbestätigen. Ansonsten wird die Auswahl zurückgesetzt.
@@ -687,6 +693,377 @@ mainsettings.timezone Zeitzone
mainsettings.video Video
menu.back Zurück
menu.cancel Abbrechen
+menu.hint_a_pic Konfigurieren Sie den Audioplayer und Bildbetrachter
+menu.hint_aplay Audioplayer
+menu.hint_audio Audio-Ausgang, Dolby Digital\nund SRS True Volume Optionen
+menu.hint_audio_analog_mode Hier wird festgelegt, ob auf dem analogen Ausgang ein Stereo-,\nMono-Links- oder Mono-Rechts-Signal ausgegeben werden soll
+menu.hint_audio_avsync Diese Funktion synchronisiert Bild und Ton
+menu.hint_audio_dd Ist diese Option auf ein, wird automatisch auf Dolby Digital Ton\numgeschaltet, sobald dieser bei einem Sender verfügbar ist
+menu.hint_audio_hdmi_dd Bei aktiver Option wird über den HDMI-Ausgang\nDolby Digital Ton ausgegeben
+menu.hint_audio_spdif_dd Bei aktiver Option wird über den optischen Ausgang\n(S/PDIF) Dolby Digital Ton ausgegeben
+menu.hint_audio_srs Hier wird SRS TruVolume an oder abgeschaltet\nbei inhaltlichen Änderungen
+menu.hint_audio_srs_algo Mögliche Betriebsarten, einfach oder normal
+menu.hint_audio_srs_nmgr Schaltet diese Option an oder aus
+menu.hint_audio_srs_volume Hier kann die Referenzlautstärke festgelegt werden
+menu.hint_audio_volstep Beim Betätigen der Lautstärketasten wird die Lautstärke\nimmer schrittweise nach diesen Wert geändert
+menu.hint_audioplayer_defdir Hier wählen Sie das Startverzeichnis für den Audioplayer
+menu.hint_audioplayer_follow Das Selektieren eines aktuellen Titel in der Playliste zulassen
+menu.hint_audioplayer_highprio Erhöhen Sie die Priorität der Wiedergabe
+menu.hint_audioplayer_order Ändern der Playlist-Sortierreihenfolge
+menu.hint_audioplayer_playlist Aktiviert die Anzeige der Titel in der Playliste
+menu.hint_audioplayer_repeat Aktiviert die Wiederholung der Playliste,\nwenn das Ende der Liste erreicht ist
+menu.hint_audioplayer_sc_metadata Aktiviert das Anzeigen der Audio-Metadaten
+menu.hint_audioplayer_screensaver Aktiviert den Bildschirmschoner in Minuten
+menu.hint_audioplayer_title Aktivieren Sie die Titelsuche (SMS-Stil) in der Playliste
+menu.hint_auto_lang Hier können Sie wählen, ob automatisch Ihre bevorzugte Tonspur gewählt wird,\nwenn vorhanden
+menu.hint_auto_subs Automatische Anzeige der Untertitel in Ihrer bevorzugten Sprache
+menu.hint_back Zurück zum vorherigen Menü,\ndrücken der Menütaste schließt alle Menüs
+menu.hint_backup Sichern von Konfigurationen und Kanallisten
+menu.hint_bedit Bearbeiten der Favoriten und der Bouquets
+menu.hint_bigwindows EPG Informationen werden immer im großen Fenster angezeigt,\ndies erreichen Sie auch mit der 'Info' Taste
+menu.hint_cache_txt Startet das Zwischenspeichern des Teletext nach\nKanalwechsel
+menu.hint_cec_mode CEC-Modus
+menu.hint_cec_standby CEC-Standby
+menu.hint_cec_view_on CEC view ON
+menu.hint_channellist_colored Definiert ob die aktuelle oder nächste Sendung in einer anderen Farbe dargestellt werden soll
+menu.hint_channellist_epg_align Hier kann man festlegen, wie der Text für das EPG in der Liste\nrechts vom Programmnamen ausgerichtet wird
+menu.hint_channellist_extended Bei aktivierter Funktion wird vor dem Sendernamen ein Balken eingeblendet,\nder den Sendungsfortschritt anzeigt
+menu.hint_channellist_fonts Ändern Sie in der Kanalliste die Schriftgrößen
+menu.hint_channellist_foot Definiert welche Informationen im unteren Sendungsfenster angezeigt werden sollen
+menu.hint_channellist_setup Hier können Sie Anzeigeoptionen für die Kanalliste auswählen
+menu.hint_ci Conditional-Access-Menü zum Einrichten\nIhres CI-Moduls oder der eingebetteten Conax-Karte
+menu.hint_colors Konfigurieren Sie die Menü-Farben
+menu.hint_content_back Ändern Sie die Hintergrundfarbe für den Fensterinhalt
+menu.hint_content_textcolor Ändern Sie die Textfarbe für den Fensterinhalt
+menu.hint_contrast_fonts Wählen Sie mehr Schriftkontrast (absetzen vom Hintergrund)
+menu.hint_dboxinfo Informationen über CPU und Arbeitsspeicher der Box
+menu.hint_delete_channels Löschen aller Kanäle
+menu.hint_epg_cache Maximum in Tagen zukünftiger EPG-Daten
+menu.hint_epg_dir Speicherverzeichnis auf der Festplatte oder einen USB-Stick\nzum speichern von EPG-Daten
+menu.hint_epg_extendedcache Maximum in Stunden, die die EPG-Daten zwischengespeichert\nwerden bzw. der Event-Beschreibungen
+menu.hint_epg_fonts Ändern Sie für die EPG-Details die Schriftgrößen
+menu.hint_epg_max_events Maximum an Events im Zwischenspeicher. Nach Erreichen der\nGrenze werden EPG-Daten für zukünftige gelöscht
+menu.hint_epg_old_events EPG im Speicher behalten in Stunden,\nauch wenn es veraltet ist
+menu.hint_epg_save Speichert die EPG-Daten auf einer Harddisk oder USB-Stick\nund läd es nach einen Neustart
+menu.hint_event_textcolor Ändern Sie die Event-Farbe für farbige Event-Optionen in Kanalliste und Infobar
+menu.hint_eventlist_fonts Ändern Sie in der Event-Liste die Schriftgrößen
+menu.hint_extended Energiespar-, EPG-Speicher- / Lade-Optionen,\nHDMI-CEC, Startkanal, Zap-Optionen
+menu.hint_factory Zurücksetzen der Box auf Werkseinstellungen\nBox wird nach einem Reset neu gestartet
+menu.hint_fade Bei aktivierter Funktion werden die Menüfenster\n'weich' ein- bzw. ausgeblendet
+menu.hint_fan_speed Steuerung der Lüftergeschwindigkeit für die CPU
+menu.hint_filebrowser_denydirectoryleave Verhindert das Verlassen des Startverzeichnisses
+menu.hint_filebrowser_showrights Anzeige der Dateirechte der Dateien im Filebrowser
+menu.hint_fileplay Spielen Sie verschiedene Video-Dateien
+menu.hint_filesystem_is_utf8 Kodierung für Unicode-Zeichen im Filebrowser
+menu.hint_font_gui Wählen Sie die Schriftart aus Schriftart-Dateien, um diese für die Menüs zu verwenden
+menu.hint_font_scaling Legen Sie global die vertikale und horizontale Skalierung der Menüschrift fest
+menu.hint_font_ttx Wählen Sie Schriftart aus Schriftart-Dateien, um diese für den Teletext zu verwenden
+menu.hint_fonts Konfigurieren Sie die Menü-Schriftart und Schriftgrößen
+menu.hint_gamelist_fonts Ändern Sie für die Spiele- und Script-Liste die Schriftgrößen
+menu.hint_games Zeige Liste der installierten Spiele
+menu.hint_hdd Formatierung und Prüfung der Festplatte
+menu.hint_hdd_apply Die veränderten Einstellungen zum Sleep- und Akustik-Modus werden übernommen
+menu.hint_hdd_check Überprüft das Dateisystem und führt gegebenfalls eine Reparatur durch (fsck)
+menu.hint_hdd_format Erstellt eine HDD-Partition und formatiert diese
+menu.hint_hdd_noise Hier können Parameter für Automatic Acoustic Management gesetzt werden,\nnicht alle Laufwerke unterstützen diese Funktion
+menu.hint_hdd_sleep Dieser Wert definiert nach wie viel Minuten die Festplatte bei Inaktivität in den Sleep-Modus geschaltet wird
+menu.hint_hdd_tools Hier können Sie die gefundenen Festplatten formatieren bzw. das Dateisystem überprüfen
+menu.hint_head_back Ändern Sie die Titel-Hintergrundfarbe
+menu.hint_head_textcolor Ändern Sie die Titel-Textfarbe
+menu.hint_imageinfo Informationen über die installierte Software
+menu.hint_inact_timer Ausschalten der Box nach Inaktivität in Minuten,\ndie Box geht automatisch in den Deep-Standby
+menu.hint_inactive_back Ändern Sie die Hintergrundfarbe für deaktivierte Fensterinhalte
+menu.hint_inactive_textcolor Ändern Sie die Textfarbe für deaktivierte Fensterinhalte
+menu.hint_inet_radio Internetradio
+menu.hint_info Informationen über Image, CPU und Arbeitsspeicher,\nStream-Information
+menu.hint_infobar_back Ändern Sie die Hintergrundfarbe für die Infobar
+menu.hint_infobar_casys ein: zeigt alle Aktiven farbig, Mini: einzelnes Symbol ob gespeert, Diskret: alle Aktiven CA-Systeme
+menu.hint_infobar_colored_event Verwenden Sie unterschiedliche Farben für die aktuelle oder nächste Sendung in der Infobar
+menu.hint_infobar_dd Zeigt ein Dolby Digital Icon bei Verfügbarkeit
+menu.hint_infobar_filesys Zeigen den vom Flash- und einer HDD verwendeten Speicherplatz
+menu.hint_infobar_fonts Ändern Sie in der Infobar die Schriftgrößen
+menu.hint_infobar_logo Logo- und Signal-Optionen
+menu.hint_infobar_logo_dir Hier wählen Sie das Verzeichnis für die Senderlogos
+menu.hint_infobar_on_epg Zeigt einen Hinweis bei EPG-Änderungen
+menu.hint_infobar_radiotext Zeigt Radiotext in einen Fenster, wenn verfügbar
+menu.hint_infobar_res Zeige die gesendete Auflösung in Symbolen
+menu.hint_infobar_sat Zeigt die aktuellen Satelliten- oder Kabel-Provider
+menu.hint_infobar_setup Hier können Sie die Anzeigeoptionen für die Infobar auswählen
+menu.hint_infobar_textcolor Ändern Sie die Textfarbe für die Infobar
+menu.hint_infobar_tuner Zeigt den aktiven Tuner als Nummernicon
+menu.hint_keep_numbers Mit der Aktivierung werden den Sendern feste/dauerhafte\nKanalnummern zugewiesen
+menu.hint_key_addrecord Weisen Sie eine Taste für das starten und makieren von Aufnahmen im EPG zu
+menu.hint_key_addremind Weisen Sie eine Taste für das Umschalten im EPG über den Timer zu
+menu.hint_key_audio ein: 'Audio' Taste startet das Audioplayer-Menü\naus: 'Audio' Taste startet die Auswahl der Tonspuren
+menu.hint_key_binding In diesem Menü können Einstellungen für die Tasten der Fernbedienung angepasst werden
+menu.hint_key_bouquetdown Weisen Sie eine Taste für das zurückblättern in den Bouquet zu
+menu.hint_key_bouquetup Weisen Sie eine Taste für das vorblättern in den Bouquet zu
+menu.hint_key_cancel Weisen Sie eine Taste für das schließen der Menüe zu
+menu.hint_key_channel_sms Wenn es aktiviert ist, können Sie die Nummern-Tasten in der Kanalliste nutzen,\num im SMS-Style zu suchen
+menu.hint_key_channeldown Weisen Sie eine Taste für das runterschalten in der Kanalliste zu
+menu.hint_key_channellist Konfigurieren Sie die Tastenbelegung für die Kanalliste
+menu.hint_key_channelup Weisen Sie eine Taste für das hochschalten in der Kanalliste zu
+menu.hint_key_hardware Hier wird definiert welchen Fernbedienungstyp Sie verwenden möchten,\ndie Bestätigung erfolgt mit der Ausgewählten
+menu.hint_key_history Hier können Sie eine Taste für das Anzeigen der letzten Programme,\ndie Sie schauten definieren (History-Liste)
+menu.hint_key_lastchannel Hier können Sie eine Taste definieren, der in den letzten Kanal zurückschaltet aus der History-Liste
+menu.hint_key_left_exit Weisen Sie der 'links' Taste für das wechseln in den Menüe zu
+menu.hint_key_list_end Weisen Sie eine Taste für den Wechsel zum 'Listenende' zu
+menu.hint_key_list_start Weisen Sie eine Taste für den Wechsel zum 'Listenanfang' zu
+menu.hint_key_load Laden Sie definierte Tastenbelegungen aus einer Datei
+menu.hint_key_modechange Wählen Sie eine Taste für den wechseln in den TV/Radio Modus und für den Standby
+menu.hint_key_movieplayer Konfigurieren Sie die Tastenbelegung für den Movieplayer
+menu.hint_key_mpaudio Weisen Sie eine Taste zu um die Tonspuren in ihren Aufnahmen zu wechseln
+menu.hint_key_mpbookmark Weisen Sie eine Taste um 'Merker' in ihren Aufnahmen für den Neustart zu setzen
+menu.hint_key_mpforward Weisen Sie eine Taste zum vorspulen in ihren Aufnahmen zu
+menu.hint_key_mppause Weisen Sie eine Taste zum pausieren der Wiedergabe zu
+menu.hint_key_mpplay Weisen Sie eine Taste zu, um die Wiedergabe zu starten
+menu.hint_key_mpplugin Weisen Sie eine Taste zu um ein Plugin zu starten,\nwenn ihre Wiedergabe läuft
+menu.hint_key_mprewind Weisen Sie eine Taste zum zurückspulen in ihren Aufnahmen zu
+menu.hint_key_mpstop Weisen Sie eine Taste zum beenden der Wiedergabe zu
+menu.hint_key_mptime Weisen Sie eine Taste für die Zeitanzeige in ihren Aufnahmen zu,\nSpielzeit und verbleibene Zeit
+menu.hint_key_mptimeshift Weisen Sie eine Taste für das starten von Timeshift zu
+menu.hint_key_pagedown Weisen Sie eine Taste für 'Seite weiter' zu
+menu.hint_key_pageup Weisen Sie eine Taste für 'Seite zurück' zu
+menu.hint_key_poweroff Wählen Sie eine Taste für den Standby\nund für das Verhalten für Standby und Deep-Standby
+menu.hint_key_quickzap Konfigurieren Sie die Tastenbelegung für die Schnellumschaltung
+menu.hint_key_repeatblock Die Verzögerung nach Tastendruck,\nauf den die Box reagieren soll
+menu.hint_key_repeatblockgeneric Die Verzögerung zwischen Tastewiederholungen,\nauf die die Box reagieren soll
+menu.hint_key_right Wählen Sie die Funktion für die 'links/rechts' Tasten aus im TV/Radio Modus
+menu.hint_key_save Speichern Sie Tastenbelegungen als Datei in einer Config
+menu.hint_key_screenshot Weisen Sie eine Taste zu, um Menü- und/oder TV-Screenshots zu speichern
+menu.hint_key_sort Weisen Sie eine Taste für das sortieren in der Kanalliste zu
+menu.hint_key_subchanneldown Weisen Sie eine Taste für das zurückschalten in den Unterkanälen zu
+menu.hint_key_subchannelup Weisen Sie eine Taste für das weiterschalten in den Unterkanälen zu
+menu.hint_key_transponder Weisen Sie eine Taste für das Anzeigen der Transponder in der Kanalliste zu
+menu.hint_key_tvradiomode Wählen Sie eine Taste für das umschalten zwischen TV <> Radio Modus
+menu.hint_key_unlock Weisen Sie eine Taste zum entriegeln zu,\nbetätigen Sie die 'rote' Taste und diese für 5 Sekunden
+menu.hint_keys Fernbedienungs-Wiederholrate\nund Tastenbelegungen bearbeiten
+menu.hint_lang_pref Wählen Sie ihre bevorzugten Audio-Sprachen, EPG\nund Untertitel-Sprachen
+menu.hint_language OSD Sprache, Zeitzone\nbevorzugte Audio und Untertitel Sprachen
+menu.hint_last_radio In dieser Menüzeile kann der gewünschte\nStart-Radio-Sender eingestellt werden
+menu.hint_last_tv In dieser Menüzeile kann der gewünschte\nStart-TV-Sender eingestellt werden
+menu.hint_last_use Speichert den aktuellen Kanal beim Herunterfahren der Box
+menu.hint_leds_blink Die Power-LEDs blinken, wenn sich der Receiver\nim Deep-Standby befindet und ein Timer aktiv ist
+menu.hint_leds_deepstandby Definiert den Status der Power-LEDs im Deep-Standby
+menu.hint_leds_record Definiert ob die Power-LEDs blinken,\nwenn eine Aufnahme aktiv ist
+menu.hint_leds_standby Definiert den Status der Power-LEDs im Standby
+menu.hint_leds_tv Definiert den Status der Power-LEDs im TV-Betrieb
+menu.hint_load Laden der Neutrino-HD-Einstellungen aus einer Datei
+menu.hint_make_hdlist Bei aktiver Option wird ein Bouquet namens 'HD' erzeugt\nin dem alle HD Sender zusammengefasst sind
+menu.hint_make_newlist Nach einer Kanalsuche wird ein Bouquet namens\n'neue Kanäle' erzeugt
+menu.hint_make_removedlist Nach einer Kanalsuche wird ein Bouquet namens\n'gelöschte Kanäle' erzeugt
+menu.hint_manage_settings Sichern, Wiederherstellen, zurück auf\nStandardwerte, Auslieferungszustand herstellen
+menu.hint_mb Ihre Aufnahmen
+menu.hint_media Abspielen von Filmen, Audiodateien\nbetrachten Sie Bilder
+menu.hint_menu_fonts Ändern Sie im Menü die Schriftgrößen
+menu.hint_menu_hints Zeigt Ihnen Hinweise zu den Menüpunkten an,\nbei Deaktivierung erreichen Sie es jederzeit auch mit der Taste 'Hilfe'
+menu.hint_menu_pos Hier können Sie die Anzeigeposition der OSD-Menüs festlegen
+menu.hint_misc_cec HDMI-CEC Optionen
+menu.hint_misc_channellist Erweiterte Einstellungen für die Kanallisten\nZappingeinstellungen
+menu.hint_misc_energy Energie- und Softstandby-Optionen, verzögertes Ausschalten\nsetzen bzw. ändern des Inaktivitätstimers
+menu.hint_misc_epg EPG Sicherrungs- und Ladenoptionen, EPG-Einstellungen\nSicherungsverzeichnis für EPG-Daten
+menu.hint_misc_filebrowser Dateisystem, Dateirechte anzeigen im Dateibrowser\nStartverzeichnisoptionen
+menu.hint_misc_general Standby-, Teletext-, Rotor-Einstellungen\nPluginverzeichnis auf der HDD
+menu.hint_misc_zapit Behandlung der Start-TV/Start-Radio Kanäle
+menu.hint_movie Wiedergabe von Filmen
+menu.hint_net_broadcast Hier können Sie die Broadcast-Adresse ändern,\nwenn Sie unsicher sind, verwenden Sie zuletzt .255
+menu.hint_net_dhcp Verwenden Sie einen DHCP-Server für die automatische\nKonfiguration können Sie es hier einstellen
+menu.hint_net_djmount Mountet UPnP-Geräte als Dateisystem\nunter /media/00upnp
+menu.hint_net_ftpd Aktivieren Sie die Dateiübertragung über FTP
+menu.hint_net_gateway Hier können Sie die Gateway-Adresse des Routers eingeben
+menu.hint_net_hostname Hier kann man den Hostnamen der Box ändern
+menu.hint_net_if Wählen Sie die Schnittstelle zur Konfiguration
+menu.hint_net_ipaddress Hier können Sie die IP-Adresse für die Box eingeben
+menu.hint_net_mount Hier werden Netzwerkfreigaben bearbeitet\nNFS und CIFS werden supported
+menu.hint_net_nameserver Hier können Sie die IP-Adresse des Routers\nbzw. eines DNS-Server eingeben
+menu.hint_net_netmask Hier können Sie eine Netzwerkmaske eingeben\nStandart ist 255.255.255.0
+menu.hint_net_nfs_mount Hier können Sie die Netzwerkfreigaben und Mounts bearbeiten
+menu.hint_net_nfs_umount Hier können Sie gemountete Verzeichnis wieder aushängen
+menu.hint_net_ntp Hier kann man den Zeitserver ändern,\ndies dient der Zeitsynchronisation
+menu.hint_net_ntpenable Aktiviert die Zeitsynchronisierung über das NTP-Protokoll\nwenn NTP-Sync nicht erfolgreich, verwenden Sie DVB
+menu.hint_net_ntprefresh Hier können Sie den Interval zur Zeitsynchronisation einstellen
+menu.hint_net_ntpserver Hier können Sie den NTP-Server eingeben
+menu.hint_net_pass Hier können Sie das Passwort eingeben (WPA-PSK)
+menu.hint_net_proxy Wenn Sie Proxy für den Zugriff auf das Internet benutzen\nkonfigurieren Sie es hier für den Online-Software-Update
+menu.hint_net_proxypass Hier können Sie den Proxy-Passwort eingeben,\nwenn es erforderlich ist
+menu.hint_net_proxyserver Hier können Sie den Proxyserver-Namen eingeben
+menu.hint_net_proxyuser Hier können Sie den Proxy-Benutzernamen eingeben,\nwenn es erforderlich ist
+menu.hint_net_services Konfigurieren Sie Netzwerkservices:\nTelnet, FTP, UPnP
+menu.hint_net_setupnow Hier werden die aktuellen Einstellungen zugewiesen\nbzw. geänderte übernommen
+menu.hint_net_setuponstartup Startet das Netzwerk automatisch beim Booten
+menu.hint_net_show Zeigen Ihnen die aktuellen Netzwerkeinstellungen
+menu.hint_net_ssid Hier können Sie die Wireless-Netzwerk-SSID eingeben\nmit der Sie eine Verbindung herstellen möchten
+menu.hint_net_telnet Aktivieren Sie den Telnet-Login auf Ihrer Box,\nNutzer: root Passwort: coolstream
+menu.hint_net_test Testet die Netzwerkverbindung:\nPing auf Gateway, Name-Server und externe IP-Adressen
+menu.hint_net_ushare Freigabe verbundener HDD über UPnP
+menu.hint_network IP-Adresse, Gateway, DNS-, Time-Sync\nNetzwerk-Freigaben und Dienste
+menu.hint_new_zap_mode Aktiviert Quickzap in der Kanalliste. Nach Betätigen der Mute-\nTaste wird mit den Hoch/Runter Tasten der Sender umgeschaltet
+menu.hint_osd Farben, Schriftarten, Anzeigegröße\nGUI Ansichtsoptionen
+menu.hint_osd_language Wählen Sie ihre OSD Sprache
+menu.hint_osd_preset Hier können Sie zwischen Röhren-TV (CRT) oder Flachbildschirm (LCD) vorwählen
+menu.hint_parentallock_changepin Hier wird der 4 stellige PIN Code eingegeben,\nder dann ggf. abgefragt wird
+menu.hint_parentallock_lockage Hier wird festgelegt, bei welcher Altersklasse\ndie PIN Abfrage kommt
+menu.hint_parentallock_prompt Hier wird definiert, wann eine PIN Eingabe erfolgen soll
+menu.hint_personalize aktivieren, deaktivieren, schützen von Menüpunkten\nkonfigurieren der Farb-Tasten in den Benutzermenüs
+menu.hint_pictureviewer_defdir Hier wählen Sie das Startverzeichnis für den Bildbetrachter
+menu.hint_pictureviewer_scaling Hier kann die Bildauflösung eingestellt werden
+menu.hint_pictureviewer_slide_time Hier kann der Slideshow-Intervall geändert werden,\nStandardmässig ist ein Intervall von 10 Sekunden eingstellt
+menu.hint_picview Bilder anzeigen
+menu.hint_plugins_hdd_dir Auswahl des Verzeichnisses zum laden von Plugins\n auf der HDD
+menu.hint_power_leds Konfiguriert das Verhalten der LEDs an der Power-Taste
+menu.hint_pref_lang Wählen Sie ihre bevorzugte Audio- und EPG-Sprache,\ndie Einstellung 'none' deaktiviert diese Option
+menu.hint_pref_subs Wählen Sie ihre bevorzugte Untertitel-Sprache,\ndie Einstellung 'none' deaktiviert diese Option
+menu.hint_progressbar_color Bei aktivierter Option werden alle Fortschrittsbalken in Farbe\nund nicht im klassischen Weiß angezeigt
+menu.hint_protection Schützen Sie Inhalte per PIN-Code\nStandard-PIN ist 0000
+menu.hint_radiomode Schaltet zum Radio-Modus
+menu.hint_reboot Startet die Box neu.\nOhne Bestätigung
+menu.hint_record_apid_ac3 Schließt bei einer Aufnahme die durch den Sender definierte 'Dolby Digital Tonspur'\nin die Aufnahme ein, sofern diese vorhanden ist
+menu.hint_record_apid_alt Sind weitere Tonspuren verfügbar, dann können diese hiermit bei einer\nAufnahme entsprechend ein- bzw. ausgeschlossen werden
+menu.hint_record_apid_std Schließt bei einer Aufnahme die durch den Sender definierte 'Standard Tonspur'\nin die Aufnahme ein, bzw. schließt diese aus
+menu.hint_record_apids Konfigurieren Sie die Tonspuren für die Aufnahme
+menu.hint_record_apply Hiermit werden die Aufnahmeoptionen übernommen
+menu.hint_record_chandir Diese Option speichert Aufnahmen mit dem Namen des Kanals\nin ein eigenes Verzeichnis
+menu.hint_record_dir Hier wählen Sie das Aufnahmeverzeichnis
+menu.hint_record_end Hier können Sie wählen zwischen max. Aufnahmezeit\noder anhand der EPG-Daten
+menu.hint_record_tdir Wählen Sie eine Verzeichnis für Ihre Timeshift-Aufnahmen\nim temporären Timeshiftmodus
+menu.hint_record_time Hier wird die maximale Zeit in Stunden eingetragen außer\nSie stoppen die Aufnahme vorzeitig
+menu.hint_record_timeafter Hier kann die Endzeit für den Aufnahmetimer eingestellt werden,\nein Wert von 2, beendet die Aufnahme 2 Minuten nach dem Sendungsende
+menu.hint_record_timebefore Hier kann die Startzeit für den Aufnahmetimer eingestellt werden,\nein Wert von 2, startet die Aufnahme 2 Minuten vor dem Sendungsbeginn
+menu.hint_record_timer Konfigurieren Sie Timeroptionen für Aufnahmen
+menu.hint_record_timeshift Konfigurieren Sie ihre Timeshift-Optionen
+menu.hint_record_timeshift_auto Hier können Sie die Zeit einstellen nachdem Timeshift aktiv ist\nund Sie umschalten, in Sekunden
+menu.hint_record_timeshift_delete Hier können Sie wählen ob nach beenden von Timeshift\ndie Aufnahmen gelöscht werden
+menu.hint_record_timeshift_pause Wenn die Funktion aktiviert ist, lässt sich Timeshift\ndurch die Pause-Taste auf der Fernbedienung aktivieren
+menu.hint_record_timeshift_temp Ist dies Option deaktiviert wird Timeshift direkt als Aufnahme gestartet
+menu.hint_record_zap Bei aktiver Option wird bereits mit der Ankündigung\nder Aufnahme auf den aufzunehmenden Sender umgeschaltet
+menu.hint_record_zap_pre_time Hier kann für den Umschalttimer ein Vorlaufzeit in Minuten eingestellt werden
+menu.hint_recording Aufnahme- und Timeshift-Optionen\nTimer Optionen, Audio-PIDs Optionen
+menu.hint_reload_channels Kanallisten neu laden\nKanallisten aktualisieren
+menu.hint_reload_plugins Plugins neu laden\nPlugin-Liste aktualisieren
+menu.hint_reset Zurücksetzen von Neutrino-HD-Einstellungen auf Standardwerte\nTuner Einstellungen und Kanäle bleiben erhalten
+menu.hint_restore Wiederherstellen von vorher erstellten Sicherungen
+menu.hint_rotor_swap Tauschen der Rotordrehrichtung Ost/West\nim Motorsetup
+menu.hint_rounded_corners Aktiviert die Darstellung abgerundeter Ecken für die OSD-Menüs
+menu.hint_save_settings Speichern Sie alle Einstellungen im Image
+menu.hint_saveas Speichern der Neutrino-HD-Einstellungen in eine Datei
+menu.hint_scan_auto Auto-Scan ausgewählter Anbieter
+menu.hint_scan_autoall Scannen Sie ihre ausgewählten Anbieter auf einmal
+menu.hint_scan_autoall_select Nur in ausgewählten Satelliten scannen
+menu.hint_scan_bouquet erneuern: hinzufügen zu den Bouquets, löschen: entfernt alte Bouquets, nicht ändern: Neue werden in 'Andere' angefügt
+menu.hint_scan_cable Wählen Sie ihr Kabelnetz zum scannen
+menu.hint_scan_cable_simple Kabel-Scan mit optionaler Anbieter- und Kanal-Nummerierung
+menu.hint_scan_commited Wählen Sie ihre Einstellungen für diesen Satelliten
+menu.hint_scan_diseqc Wählen Sie DiSEqC-Schalter-Eingangssignal für diesen Satelliten
+menu.hint_scan_diseqcrepeat Diseqc Wiederholungen für kaskadierte Schaltungen,\nnutzen Sie die links/rechs Tasten
+menu.hint_scan_diseqctype Wählen Sie ihr DiSEqC-Protokoll\nmit 'Erweitert' können Sie ihre Anlage einbinden
+menu.hint_scan_fast Schnell-Scan eines ausgewählten Anbieters\nWARNUNG: DiSEqC-Config wird überschrieben
+menu.hint_scan_fastprov Wählen Sie einen Anbieter (Provider) zum scannen
+menu.hint_scan_fasttype Wählen Sie das Sendeformat
+menu.hint_scan_fec Wählen Sie eine Transponder-FEC
+menu.hint_scan_femode Wählen Sie den Verbindungstyp für den zweiten Tuner
+menu.hint_scan_fesetup Konfigurieren des oder der Tuner
+menu.hint_scan_fetimeout Zeit bis zum warten des Signal, in 1/10 Sekunden,\nbenutzen Sie die links/rechts Tasten
+menu.hint_scan_freq Geben Sie eine Transponder-Frequenz ein
+menu.hint_scan_fta Lassen Sie nur frei empfangbare (nicht-verschlüsselte) Programme suchen
+menu.hint_scan_ladirection Wählen Sie ihre Breitengrad-Ausrichtung
+menu.hint_scan_latitude Geben Sie ihren Breitengrad ein
+menu.hint_scan_lnbconfig Konfigurieren Sie LNB-Parameter für diesen Satelliten
+menu.hint_scan_lodirection Wählen Sie ihre Längengrad-Ausrichtung
+menu.hint_scan_lofh High-Banb LNB-Frequenz
+menu.hint_scan_lofl Low-Band LNB-Frequenz
+menu.hint_scan_lofs LNB-Band-Umschalter Frequenz
+menu.hint_scan_logical Verwenden Sie die Kanal-Nummerierung des Anbieters
+menu.hint_scan_logical_hd Wenn der Kanal in SD und in HD verfügbar ist,\nwird HD nach oben in der Liste gesetzt
+menu.hint_scan_longitude Geben Sie ihren Längengrad ein
+menu.hint_scan_manual Manueller Transponder-Scan mit ausgewählten Parametern
+menu.hint_scan_mod Wählen Sie eine Transponder-Modulation
+menu.hint_scan_motor_18v Benutze 18V für Motorbewegung
+menu.hint_scan_motor_speed Rotor-Bewegungsgeschwindigkeit in 1/10 Grad pro Sekunde
+menu.hint_scan_motorpos Wählen Sie eine gespeicherten Positions-Nummer für diesen Satelliten
+menu.hint_scan_nid Hier können Sie ihre Kabelnetzwerk-Id in dezimal eingeben
+menu.hint_scan_nit Hier kann man Transponder über gesendete NIT-Daten (Network Information Table) hinzufügen lassen
+menu.hint_scan_pids Scant und speichert auch nur Audio / Video / PMT PIDs
+menu.hint_scan_pol Wählen Sie eine Transponder-Polarisation
+menu.hint_scan_rate Geben Sie eine Transponder-Symbolrate ein
+menu.hint_scan_reset_numbers Zurücksetzen der existierender Kanalnummern und Umnummerierung nach einen Scan
+menu.hint_scan_satadd Wählen Sie ihre verfügbaren Satelliten hier aus, für Ihren Anschluß
+menu.hint_scan_satellite Wählen Sie die Satelliten zum scannen
+menu.hint_scan_satenable Aktivieren Sie diesen Satelliten für ihre Anlage zum scannen
+menu.hint_scan_satfind Sat-Finder: fahren Sie manuell Ihre Rotor-Positionen durch
+menu.hint_scan_satfind_start Startet den Satellitenfinder für die Signalstärke
+menu.hint_scan_satscan Scant den ausgewählten Satelliten
+menu.hint_scan_satselect Ausgewählter Satellit
+menu.hint_scan_satsetup Hier können Sie ihre gewählten Satelitten sehen und das LNB konfigurieren
+menu.hint_scan_savesettings Speichert die Tuner-Config und Scan-Einstellungen,\ndiese bleiben dann erhalten für einen neuen Service-Scan
+menu.hint_scan_scantype Wählen Sie, welche Kanal-Typen Sie scannen möchten
+menu.hint_scan_setup_fe Konfigurieren Sie ihre ausgewählten Tuner
+menu.hint_scan_start Startet die Kanalsuche mit den angegebenen Parametern.\nMit der 'EXIT' Taste kann man abbrechen
+menu.hint_scan_test Testen Sie das Signal für diesen Transponder
+menu.hint_scan_tpselect Wählen Sie einen einzelnen Transponder zum scannen
+menu.hint_scan_uncommited Wählen Sie nicht festgeschriebene Angaben für diesen Satelliten
+menu.hint_scan_usals_repeat Hier können Sie die USALS-Wiederholungen eingeben für den Rotor
+menu.hint_scan_usalsall Setzen oder entfernen Sie USALS-Merker für alle Satelliten
+menu.hint_scan_useusals Verwenden Sie USALS für diesen Satelitten
+menu.hint_scrambled_message Bei aktivierter Option erscheint eine Meldung,\nwenn ein verschlüsselter Sender nicht entschlüsselt werden kann
+menu.hint_screen_setup Konfigurieren Sie den Bildschirmbereich für die Menüanzeige
+menu.hint_screenshot_count Hier können Sie wählen, wie viele Screenshots (1-5) erstellt werden sollen
+menu.hint_screenshot_cover ein: Bei der Wiedergabe von Aufnahmen ein Video-Screenshot erstellen\nfür die Vorschau im Moviebrowser
+menu.hint_screenshot_dir Hier wählen Sie das Verzeichnis zum speichern der Screenshots
+menu.hint_screenshot_format Wählen Sie das Dateiformat zum speichern der Screenshots
+menu.hint_screenshot_res Screenshot Größe: aktuelle TV-Auflösung oder OSD-Größe (1280x720)
+menu.hint_screenshot_scale Für Video + OSD Screenshots, Skalierung auf Video-Größe
+menu.hint_screenshot_setup Hier können Sie die Optionen zum erstellen von Screenshots einrichten
+menu.hint_screenshot_video Diese Funktion übernimmt das Live-Bild in den Screenshot als Hintergrund
+menu.hint_scripts Skripts ausführen
+menu.hint_selected_back Ändern Sie die Hintergrundfarbe für selektierte Fensterinhalte
+menu.hint_selected_text Ändern Sie die Textfarbe für selektierte Fensterinhalte
+menu.hint_service Kanalsuche, Senderscan,\nBouquet-Verwaltung, Software-Aktualisierung
+menu.hint_service_scan Tuner-Einstellungen, Service-Scan
+menu.hint_settings Konfigurieren von Neutrino-HD.\nNetzwerk, Video, Audio, OSD und mehr
+menu.hint_show_mute_icon Definiert ob beim Lautstärkewert 0 das Mute-Icon eingeblendet werden soll
+menu.hint_shutdown Setzen Sie Ihre Box in den Standby-Modus\noder schalten Sie die Box komplett aus
+menu.hint_shutdown_count Die Zeit zum Deep-Standby,\nwenn die Box im Soft-Standby-Mode ist
+menu.hint_shutdown_rcdelay Aktiviert den Deep-Standby, wenn der Powerknopf\nlänger als 1 Sekunde betätigt wird
+menu.hint_shutdown_real Aktivieren des Soft-Standby-Modus, wenn diese Option\ndeaktiviert ist, geht die Box in den Deep-Standby
+menu.hint_sleeptimer Zeitschaltuhr auf Ihrer Box aktivieren.\nDie Box geht dann in den Standby-Modus
+menu.hint_soft_restart Neustarten von Neutrino-HD ohne zu Rebooten
+menu.hint_softupdate_check Im Internet oder lokal nach verfügbaren Updates suchen
+menu.hint_softupdate_expert Einzelne Partitionen aus dem Flash lesen / in den Flash schreiben
+menu.hint_softupdate_expert_read Einzelne Partitionen (U-Boot, Splash, Kernel, SystemFS) aus dem Flash lesen
+menu.hint_softupdate_expert_write Einzelne Partitionen (Splash, Kernel, SystemFS) in den Flash schreiben
+menu.hint_softupdate_settings Den Updatemodus, das lokale Verzeichnis und die Konfigurationsdatei festlegen
+menu.hint_start_tostandby Aktiviert den Standby-Modus nach dem starten der Box
+menu.hint_streaminfo Aktuelle Sender-Informationen: PIDs, SNR-Verhältnis\nBitrate grafisch
+menu.hint_subchannel_pos Hier können Sie die Anzeigeposition der Untertitel auswählen
+menu.hint_sw_update Neutrino-HD auf Software-Update überprüfen\nImage sichern und wiederherstellen
+menu.hint_theme Wählen Sie vordefiniertes Farbschema, Speichern oder Laden Sie Theme aus Filen
+menu.hint_timeouts Gibt an, nach welcher Zeit in Sekunden die Menüs oder\nInfofenster sich automatisch schließen (0 deaktiviert)
+menu.hint_timers Hinzufügen / Entfernen / Bearbeiten geplanter\nAufnahme, Meldungen etc.
+menu.hint_timezone Wählen Sie ihre Zeitzone aus
+menu.hint_tvmode Schaltet zum TV-Modus
+menu.hint_tvradio_switch Schaltet zwischen TV- und Radio-Modus um
+menu.hint_vfd Frontpanel Power-LEDs und VFD Optionen
+menu.hint_vfd_brightness Definiert die Helligkeit im TV-Betrieb
+menu.hint_vfd_brightness_setup Konfiguriert die Displayhelligkeit des Frontpanels für verschiedene Modi
+menu.hint_vfd_brightnessdeepstandby Definiert die Helligkeit, wenn sich der Receiver im Deep-Standby befindet
+menu.hint_vfd_brightnessdim Definiert den Wert für das dimmen des Display nach Ablauf der eingestellten Zeit
+menu.hint_vfd_brightnessstandby Definiert die Helligkeit, wenn sich der Receiver im Standby befindet
+menu.hint_vfd_defaults Setzt die Standardeinstellungen für die Helligkeitswerte
+menu.hint_vfd_dimtime Hier kann in Sekunden eingegeben werden,\nwann sich das Display automatisch auf den gewünschten Wert dimmt
+menu.hint_vfd_infoline Wählen Sie, was in der Infozeile angezeigt werden soll
+menu.hint_vfd_statusline Wählen Sie, was in der Statuszeile angezeigt werden soll
+menu.hint_video Video-Ausgang, Auflösung, Format,\nSeitenverhältnise, Modus-Schalter Optionen
+menu.hint_video_43mode Anzeigemodus für 4:3-Inhalte auf 16:9 TVs
+menu.hint_video_analog_mode Wählen Sie den Analogausgang Modus\nfür den SCART und CINCH Anschluss
+menu.hint_video_cinch_mode Wählen Sie den Analogausgang Modus\nfür den Composite Video Ausgang
+menu.hint_video_dbdr Verwendeter MPEG2 Filter
+menu.hint_video_format Diese Option aktiviert das 'Bildschirmformat'\nauf das Format Ihres Fernsehgerätes
+menu.hint_video_mode Definiert in welchen Videoformat das Bild über den\nHDMI-Ausgang ausgegeben wird
+menu.hint_video_modes Definiert welche Videosysteme mit der VF-Taste\nder Fernbedienung ausgewählt werden können
+menu.hint_video_scart_mode Wählen Sie den Analogausgang Modus\nfür den SCART Ausgang
+menu.hint_volume_digits Zifferndarstellung der Lautstärkeanzeige ein/ausschalten
+menu.hint_volume_pos Hier können Sie die Anzeigeposition der Lautstärkeanzeige auswählen
+menu.hint_zap_cycle Dadurch wird nur innerhalb des aktiven Bouquets gezappt
menu.next Weiter (Menü zum Beenden)
messagebox.back Zurück
messagebox.cancel Abbruch
@@ -784,6 +1161,7 @@ motorcontrol.store Speichere Motorposition (a)
motorcontrol.timed_mode Zeitgesteuerter Schrittweitenmodus
motorcontrol.user_menu Benutzermenü
motorcontrol.west_limit Setze westliches (soft) Limit
+moviebrowser.book_add Lesezeichen setzen
moviebrowser.book_clear_all Lösche alle
moviebrowser.book_head Markierungen
moviebrowser.book_lastmoviestop letzter Wiedergabestopp:
@@ -945,17 +1323,18 @@ networkmenu.ntpenable Zeit per INet synchronisieren
networkmenu.ntprefresh NTP/DVB-Aktualisierung
networkmenu.ntprefresh_hint1 NTP/DVB-Time-Sync [min]
networkmenu.ntprefresh_hint2 braucht Reboot oder EPG-Reset
-networkmenu.ntpserver NTP-URL (Zeitserver)
-networkmenu.ntpserver_hint1 NTP-URL Beispiel: ntp1.ptb.de
+networkmenu.ntpserver NTP-Server
+networkmenu.ntpserver_hint1 NTP-Server Beispiel: ntp1.ptb.de
networkmenu.ntpserver_hint2 braucht Reboot oder EPG-Reset
networkmenu.ntptitle Zeitsynchronisation
-networkmenu.password Passwort
+networkmenu.password Passwort (PSK)
networkmenu.reset_settings_now Sollen die vorherigen Einstellungen \nwieder hergestellt werden?
networkmenu.select_if Schnittstelle
+networkmenu.services Netzwerkservice
networkmenu.setupnow Einstellungen jetzt zuweisen
networkmenu.setuponstartup Beim Start Netzwerk setzen
networkmenu.show Aktive Einstellungen zeigen
-networkmenu.ssid Netzwerkname
+networkmenu.ssid Netzwerkname (SSID)
networkmenu.test Netzwerk testen
neutrino_starting Neutrino wird gestartet...
nfs.alreadymounted Verzeichnis bereits gemountet.
@@ -1042,7 +1421,7 @@ personalize.pinprotect ja
personalize.pinstatus mit PIN
personalize.plugins Plugins
personalize.usermenu_preferred_buttons Bevorzugte Tasten zuweisen
-personalize.usermenu_show_cancel Zeige Schalter "Abbrechen"
+personalize.usermenu_show_cancel Zeige Schalter "Abbrechen"
personalize.visible sichtbar
pictureviewer.defdir Start-Verz.
pictureviewer.head Bildbetrachter
@@ -1090,9 +1469,9 @@ rclock.lockmsg Die Fernbedienung wird gesperrt.\n Um die Sperre aufzuheben, bitt
rclock.menueadd FB sperren
rclock.title Fernbedienung sperren
rclock.unlockmsg Fernbedienung reaktiviert...
-recording.is_running Aufzeichung auf diesem Kanal läuft bereits!
-recording.start Starte Aufzeichnung, bitte warten...!
-recording.stop Beende Aufzeichnung, bitte warten...!
+recording.is_running Folgende Aufnahme läuft bereits! Neue Aufnahme starten?
+recording.start Starte Aufnahme, bitte warten...!
+recording.stop Beende Aufnahme, bitte warten...!
recordingmenu.apids Tonspuren
recordingmenu.apids_ac3 AC3 Tonspuren aufnehmen
recordingmenu.apids_alt Alternative Tonspuren aufn.
@@ -1113,7 +1492,7 @@ recordingmenu.record_is_not_running Keine laufende Aufnahme verfügbar!
recordingmenu.record_is_running Aufnahme läuft!
recordingmenu.save_in_channeldir Speichere im Kanalverzeichnis
recordingmenu.server Server
-recordingmenu.server_mac Mac Adresse
+recordingmenu.server_mac MAC-Adresse
recordingmenu.setupnow Einstellungen jetzt übernehmen
recordingmenu.timeshift Timeshift
recordingmenu.tsdir Timeshift Aufnahmeverzeichnis
@@ -1128,6 +1507,7 @@ reset_confirm Sind Sie sich sicher?
reset_settings Einstellungen auf Standardwerte
satsetup.auto_scan Automatisch einen gewählten %s
satsetup.auto_scan_all Automatisch alle Satelliten
+satsetup.cable Kabel-Scan
satsetup.cable_nid Netzwerk ID
satsetup.comm_input Committed Input
satsetup.diseqc DiSEqC
@@ -1155,10 +1535,11 @@ satsetup.fe_mode_alone independent
satsetup.fe_mode_loop loop
satsetup.fe_mode_single single
satsetup.fe_mode_twin twin
-satsetup.fe_setup Setup tuner
+satsetup.fe_setup Setup Tuner
satsetup.lofh LNB High Offset
satsetup.lofl LNB Low Offset
satsetup.lofs LNB Switch Offset
+satsetup.logical_hd HD-Kanäle bevorzugen
satsetup.logical_numbers Nutze logische Nummern
satsetup.manual_scan Manueller Frequenzscan
satsetup.minidiseqc Mini-DiSEqC
@@ -1238,6 +1619,7 @@ servicemenu.update Software-Aktualisierung
settings.backup Image-Einstellungen: Sichern
settings.backup_failed Sicherung fehlgeschlagen!
settings.help Hilfe
+settings.menu_hints Menühinweise anzeigen
settings.menu_pos Menüposition
settings.missingoptionsconffile Die Neutrino Einstellungen wurden erweitert.\nDie neuen Werte werden auf Standard gesetzt.
settings.noconffile Die Neutrino Einstellungen wurden nicht\ngefunden. Es werden Standardwerte benutzt.
@@ -1270,6 +1652,8 @@ streaminfo.resolution Auflösung
streaminfo.signal Empfangssignal
streaming.busy Ein oder mehrere Aufnahmeprozesse sind aktiv.\nSollte die Aufnahme eigentlich beendet sein,\nschafft ein Neustart von Neutrino Abhilfe.
streaming.dir_not_writable Das Aufnahmeverzeichnis ist nicht beschreibbar.\nAufnahmen sind daher nicht möglich.
+streaming.overflow Aufnahme-Puffer Überlauf! Bitte ggf. einige Aufnahmen beenden.
+streaming.slow System oder Datenträger zu langsam! Bitte ggf. einige Aufnahmen beenden.
streaming.write_error Die Aufnahme wurde leider abgebrochen,\nda ein Fehler beim Schreiben der Daten auftrat.
stringinput.caps Groß-/Kleinbuchstaben
stringinput.clear Alles löschen
@@ -1423,8 +1807,10 @@ videomenu.videoformat_149 14:9
videomenu.videoformat_169 16:9
videomenu.videoformat_43 4:3
videomenu.videomode Videosystem
+wizard.initial_settings Grundeinstellungen gefunden
+wizard.install_settings Kanalliste für Astra 19.2°E installieren?
wizard.welcome_head Willkommen zur Ersteinrichtung Ihres Receivers!
-wizard.welcome_text Wir gratulieren Ihnen zum Kauf Ihrer Coolstream. In den nun folgenden\nSchritten begleiten wir Sie durch die Erstinstallation des Gerätes.\nWir wünschen Ihnen viel Freude mit dem wohl einzigartigsten Receiver!\nBeachten Sie: Ihre Coolstream Set-Top-Box lässt sich bequem per Webinterface\nsteuern, um zum Beispiel die Timer-Verwaltung zu nutzen oder Live-TV im Web-Browser zu schauen.\nZugriff erhalten Sie mit dem Benutzernamen: root und dem Passwort: coolstream\nAchten Sie darauf, dass Ihre Gerät nicht von aussen zugänglich ist, da sonst ein Zugriff über das Internet nicht ausgeschlossen werden kann!\nNächster Schritt?
+wizard.welcome_text Wir gratulieren Ihnen zum Kauf Ihrer Coolstream. In den nun folgenden\nSchritten begleiten wir Sie durch die Erstinstallation des Gerätes.\nWir wünschen Ihnen viel Freude mit dem wohl einzigartigsten Receiver!\nBeachten Sie: Ihre Coolstream Set-Top-Box lässt sich bequem per Webinterface\nsteuern, um zum Beispiel die Timer-Verwaltung zu nutzen oder Live-TV im Web-Browser zu schauen.\nZugriff erhalten Sie mit dem Benutzernamen: root und dem Passwort: coolstream\nAchten Sie darauf, dass Ihre Gerät nicht von aussen zugänglich ist,\nda sonst ein Zugriff über das Internet nicht ausgeschlossen werden kann!\nNächster Schritt?
word.from ab
zapit.scantype Service-Auswahl
zapit.scantype.all Alle Services
diff --git a/data/locale/english.locale b/data/locale/english.locale
index 226e52712..901a98019 100644
--- a/data/locale/english.locale
+++ b/data/locale/english.locale
@@ -125,6 +125,7 @@ audiomenu.pref_subs Prefered subtitle language
audiomenu.pref_subs_head Subtitle language preferences
audiomenu.spdif_dd Encoded DD on SPDIF
audiomenu.stereo stereo
+audiomenu.volume_adjust Volume adjustment, in %
audiomenu.volume_step Volume step
audioplayer.add Add
audioplayer.add_ic Icecast
@@ -291,6 +292,7 @@ date.Sun Sun
date.Thu Thu
date.Tue Tue
date.Wed Wed
+epg.saving Saving EPG
epgextended.actors Actors
epgextended.director Director
epgextended.guests Guests
@@ -299,6 +301,7 @@ epgextended.presenter Presenter
epgextended.year_of_production Year of Production
epglist.noevents EPG is not available...
epgviewer.More_Screenings More Screenings on this Channel
+epgviewer.More_Screenings_short More Screenings
epgviewer.nodetailed No detailed informations available
epgviewer.notfound no epg found
eventfinder.head Search in EPG
@@ -391,6 +394,7 @@ extra.tp_pol_r R
extra.tp_rate Symbol rate
extra.update_dir Local update directory
extra.use_gotoxx Use gotoXX
+extra.volume_digits Volumebar digits
extra.volume_pos Volumebar
extra.west West
extra.zap_cycle Zap cycle
@@ -434,7 +438,8 @@ filesystem.is.utf8.option.utf8 UTF-8
flashupdate.actionreadflash reading
flashupdate.cantopenfile can't open file
flashupdate.cantopenmtd can't open mtd-device
-flashupdate.checkupdate Check for updates
+flashupdate.checkupdate_internet Check for online updates
+flashupdate.checkupdate_local Local update
flashupdate.currentversion_sep Current version
flashupdate.currentversiondate Date
flashupdate.currentversiontime Time
@@ -521,6 +526,7 @@ fontsize.infobar_info info
fontsize.infobar_number Number
fontsize.infobar_small Small
fontsize.menu Menutext
+fontsize.menu_hint Menu hints
fontsize.menu_info Menu Info
fontsize.menu_title Menu Title
hdd_10min 10 min.
@@ -576,7 +582,7 @@ infoviewer.subchan_infobar Full infobar
infoviewer.subservice Subservices
infoviewer.waittime Waiting for time...
ipsetup.hint_1 Use 0..9, or use Up/Down,
-ipsetup.hint_2 OK saves, LAME! aborts
+ipsetup.hint_2 OK saves, Exit aborts
keybindingmenu.RC Tune Remote-Control
keybindingmenu.addrecord add record timer
keybindingmenu.addremind add zapto timer
@@ -642,7 +648,7 @@ lcdmenu.statusline.both volume / playtime
lcdmenu.statusline.playtime playtime
lcdmenu.statusline.volume volume
ledcontroler.blink Blink in deep standby, if timer set
-ledcontroler.menu Power Button LED�s
+ledcontroler.menu Power Button LEDs
ledcontroler.mode.deepstandby Deep Standby
ledcontroler.mode.record Blinke in Record
ledcontroler.mode.standby Standby
@@ -687,6 +693,377 @@ mainsettings.timezone Timezone
mainsettings.video Video
menu.back Back
menu.cancel Cancel
+menu.hint_a_pic Configure audio player and picture viewer
+menu.hint_aplay Audio player
+menu.hint_audio Audio output, DD\nSRS True volume options
+menu.hint_audio_analog_mode Select audio channel to use\nstereo, mono-left, mono-right
+menu.hint_audio_avsync A/V sync
+menu.hint_audio_dd Auto-switch to DolbyDigital audio pid,\nif available
+menu.hint_audio_hdmi_dd DolbyDigital over HDMI: off - decoded\nauto if supported by device, force
+menu.hint_audio_spdif_dd DolbyDigital over optical output
+menu.hint_audio_srs SRS TruVolume control volume jumps\nat content changes
+menu.hint_audio_srs_algo Amount of control, light or normal
+menu.hint_audio_srs_nmgr Noise manager
+menu.hint_audio_srs_volume Reference level to maintain
+menu.hint_audio_volstep Volume +/- keys increase/decrease step
+menu.hint_audioplayer_defdir Default audioplayer directory
+menu.hint_audioplayer_follow Move playlist selected pointer\nto current playing song
+menu.hint_audioplayer_highprio Increase playback priority
+menu.hint_audioplayer_order Change playlist sort order
+menu.hint_audioplayer_playlist Show playlist items
+menu.hint_audioplayer_repeat Enable playlist repeat when end of list reached
+menu.hint_audioplayer_sc_metadata Enable streaming audio metadata parsing
+menu.hint_audioplayer_screensaver Set screensaver timeout, in minutes
+menu.hint_audioplayer_title Enable SMS-style title search in playlist
+menu.hint_auto_lang Auto-switch audio to preferred language
+menu.hint_auto_subs Auto-start subtitles for preferred language
+menu.hint_back Return to previous menu\nPress menu key to close all menus
+menu.hint_backup Backup configs and channels to selected dir
+menu.hint_bedit Edit favorites and bouquets
+menu.hint_bigwindows Always show big epg detail window\nelse 'info' button switch big font + window size
+menu.hint_cache_txt Start teletext caching after channel switch
+menu.hint_cec_mode CEC mode
+menu.hint_cec_standby CEC standby
+menu.hint_cec_view_on CEC view ON
+menu.hint_channellist_colored Use different color for current or next event
+menu.hint_channellist_epg_align EPG event align
+menu.hint_channellist_extended Show current event progress bar
+menu.hint_channellist_fonts Change channel list font sizes
+menu.hint_channellist_foot Show additional information\nin bottom box
+menu.hint_channellist_setup Configure channe list GUI options
+menu.hint_ci Conditional access menu\nto setup your CI CAM or embeded Conax card
+menu.hint_colors Configure GUI colors
+menu.hint_content_back Change GUI window background color
+menu.hint_content_textcolor Change GUI window text color
+menu.hint_contrast_fonts Make fonts contrast (do not blend with background)
+menu.hint_dboxinfo Information about box cpu and storage
+menu.hint_delete_channels Remove all channels
+menu.hint_epg_cache Maximum days to cache for future events
+menu.hint_epg_dir Select directory on harddisk or usb flash\nto save EPG.
+menu.hint_epg_extendedcache Maximum hours to cache extended\nevents descriptions
+menu.hint_epg_fonts Change EPG details window font sizes
+menu.hint_epg_max_events Maximum events to cache. After reaching limit\nEPG cache will remove future events
+menu.hint_epg_old_events Hours after event end time to consider\nevent old and remove it from cache
+menu.hint_epg_save Save cached EPG to harddisk or usb flash\nand load it after boot
+menu.hint_event_textcolor Change event color for colored-event options\nin channel list and infobar
+menu.hint_eventlist_fonts Change event list font sizes
+menu.hint_extended Power saving, EPG save/load options\nHDMI-CEC, Start channel, zap options
+menu.hint_factory Reset box to factory state\nBox will reboot after reset
+menu.hint_fade Fade GUI windows
+menu.hint_fan_speed Control fan speed
+menu.hint_filebrowser_denydirectoryleave Deny filebrowser to leave initial directory
+menu.hint_filebrowser_showrights Show file permissions in file browser
+menu.hint_fileplay Play various video files
+menu.hint_filesystem_is_utf8 Filebrowser filesystem encoding
+menu.hint_font_gui Select font file to use for GUI
+menu.hint_font_scaling Set global vertical and horizontal\nGUI font scaling
+menu.hint_font_ttx Select font file to use for teletext
+menu.hint_fonts Configure GUI fonts and font sizes
+menu.hint_gamelist_fonts Change games and scripts list font sizes
+menu.hint_games Show list of installed games
+menu.hint_hdd Format / check hard disk drive
+menu.hint_hdd_apply Apply sleep/noise parameters
+menu.hint_hdd_check Check filesystem (fsck)
+menu.hint_hdd_format Create HDD partition and format it
+menu.hint_hdd_noise Set Automatic Acoustic Management\nnot all drives support this
+menu.hint_hdd_sleep Select time to stop hdd on inactivity
+menu.hint_hdd_tools Initialize HDD, check filesystem
+menu.hint_head_back Change GUI title background color
+menu.hint_head_textcolor Change GUI window title text color
+menu.hint_imageinfo Information about installed software
+menu.hint_inact_timer Shutdown box after inactivity
+menu.hint_inactive_back Change inactive item background color
+menu.hint_inactive_textcolor Change inactive item text color
+menu.hint_inet_radio Internet radio
+menu.hint_info Information about image, box cpu and storage,\nstream information
+menu.hint_infobar_back Change infobar background color
+menu.hint_infobar_casys On: display all with colored active, mini: single\nlocked icon, descreet: all active ca-sys
+menu.hint_infobar_colored_event Use different color for current or next event
+menu.hint_infobar_dd Show DD icon
+menu.hint_infobar_filesys Show flash and HDD used space levels
+menu.hint_infobar_fonts Change infobar font sizes
+menu.hint_infobar_logo Logo / signal options
+menu.hint_infobar_logo_dir Select directory to search for channels logo
+menu.hint_infobar_on_epg Show infobar on current EPG event change
+menu.hint_infobar_radiotext Show radiotext window
+menu.hint_infobar_res Show channel resolution icons
+menu.hint_infobar_sat Show current satellite or cable provider
+menu.hint_infobar_setup Configure infobar options
+menu.hint_infobar_textcolor Change infobar text color
+menu.hint_infobar_tuner Show active tuner number icon
+menu.hint_keep_numbers Keep channel numbers over next scans\nand bouquets editing
+menu.hint_key_addrecord Assign button to add record timer\nfrom event list
+menu.hint_key_addremind Assign button to add zap timer\nfrom event list
+menu.hint_key_audio On: 'audio' button start show audio-play menu\nOff: 'audio' button show Audio selection
+menu.hint_key_binding Re-define keys used for common operations
+menu.hint_key_bouquetdown Assign button to switch channel list\nto previous bouquet
+menu.hint_key_bouquetup Assign button to switch channel list\nto next bouquet
+menu.hint_key_cancel Assign button to close GUI window
+menu.hint_key_channel_sms If enabled, numeric buttons in channel list\nused to search channel in SMS style
+menu.hint_key_channeldown Assign button for fast switch to previous\nchannel in channel list
+menu.hint_key_channellist Configure keybingdings for channel list
+menu.hint_key_channelup Assign button for fast switch to next\nchannel in channel list
+menu.hint_key_hardware Change remote control type
+menu.hint_key_history Assign button to show channel\nchannel switch history
+menu.hint_key_lastchannel Assign button for fast zap to\nprevious channel in history
+menu.hint_key_left_exit Allow return to previous menu with 'left' key
+menu.hint_key_list_end Assign button to go do list end
+menu.hint_key_list_start Assign button to go to list start
+menu.hint_key_load Load keybindings from file
+menu.hint_key_modechange Change TV/Radio mode and standby keys
+menu.hint_key_movieplayer Configure keybingdings for movie player
+menu.hint_key_mpaudio Assign button to show audio selection\nin record/file playback mode
+menu.hint_key_mpbookmark Assign button to create bookmark\nwhile playing record
+menu.hint_key_mpforward Assign button to fast forward record playback
+menu.hint_key_mppause Assign button to pause record/file playback
+menu.hint_key_mpplay Assign button to resume record/file playback
+menu.hint_key_mpplugin Assign button to start selected plugin\nwhile playing record/file
+menu.hint_key_mprewind Assign button to rewind record playback
+menu.hint_key_mpstop Assign button to stop record/file playback
+menu.hint_key_mptime Assign button to show play time\nleft time
+menu.hint_key_mptimeshift Assign button to start timeshift
+menu.hint_key_pagedown Assign button to show next items page
+menu.hint_key_pageup Assign button to show previous items page
+menu.hint_key_poweroff Assign button to switch power state\n (standby/deepstandby <-> running)
+menu.hint_key_quickzap Configure keybingdings for quick\nchannel switch
+menu.hint_key_repeatblock Delay after button press and before\nfirst key repeat
+menu.hint_key_repeatblockgeneric Delay between key repeats\nwhile button pressed
+menu.hint_key_right Select 'right' function in live TV/Radio mode
+menu.hint_key_save Save keybindings to file
+menu.hint_key_screenshot Assign button to save GUI and/or TV screenshot
+menu.hint_key_sort Assign button to change channel list sort order
+menu.hint_key_subchanneldown Assign button for fast switch\n to previous subchannel
+menu.hint_key_subchannelup Assign button for fast switch\n to next subchannel
+menu.hint_key_transponder Assign button to show channel list\nfor current transponder
+menu.hint_key_tvradiomode Assign button to switch TV <> Radio mode
+menu.hint_key_unlock Assign button to unlock box if locked\nTo unlock press 'red', then in next 5 seconds this key
+menu.hint_keys Remote control repeat rate\nEdit key bindings
+menu.hint_lang_pref Configure preferred audio, EPG\nand subtitle languages
+menu.hint_language OSD language, timezone\nPreffered audio and subtitles languages
+menu.hint_last_radio Start box on selected channel\nif last mode is Radio
+menu.hint_last_tv Start box on selected channel\nif last mode is TV
+menu.hint_last_use Start box on last used channel
+menu.hint_leds_blink Blink LEDS in deep-standby
+menu.hint_leds_deepstandby LEDs state in deeps-standby mode
+menu.hint_leds_record LEDs state when box recording
+menu.hint_leds_standby LEDs state in soft-standby mode
+menu.hint_leds_tv Working LEDs state
+menu.hint_load Load Neutrino-HD GUI settings from file
+menu.hint_make_hdlist Auto-create HD channel list based on\nchannel type and name
+menu.hint_make_newlist Create list of recently added channels
+menu.hint_make_removedlist Create list of recently removed channels
+menu.hint_manage_settings Backup, restore, revert to defaults\nFactory box reset
+menu.hint_mb Your recordings
+menu.hint_media Play movies, audio files\nWatch pictures
+menu.hint_menu_fonts Change menu font sizes
+menu.hint_menu_hints Show this hints. Also you can switch\nit any time using 'help' button
+menu.hint_menu_pos Select menu position
+menu.hint_misc_cec HDMI-CEC Options
+menu.hint_misc_channellist HD/New/Removed channel lists\nZap cycle
+menu.hint_misc_energy Enable soft-standby, delayed shutdown\ninactivity timers
+menu.hint_misc_epg Save/load EPG options, EPG cache options\nEPG save directory
+menu.hint_misc_filebrowser Filesystem encoding, file rights\ndeny directory leave
+menu.hint_misc_general Start to standby, cache teletext, swp rotor\nplugin hdd dir
+menu.hint_misc_zapit Initial TV/Radio channels
+menu.hint_movie Play movies
+menu.hint_net_broadcast Enter broadcast address\nif unsure, use IP address with last .255
+menu.hint_net_dhcp Use DHCP server to auto-configure
+menu.hint_net_djmount Mount UPnP devices as filesystem\nunder /media/00upnp
+menu.hint_net_ftpd Enable file transfer using FTP
+menu.hint_net_gateway Enter gateway/router IP address
+menu.hint_net_hostname Change your box hostname
+menu.hint_net_if Select interface to config
+menu.hint_net_ipaddress Enter your box IP address
+menu.hint_net_mount Configure, mount and un-mount network shares\nNFS and CIFS supported
+menu.hint_net_nameserver Enter name server (DNS) IP address
+menu.hint_net_netmask Enter network mask\nif unsure, use 255.255.255.0
+menu.hint_net_nfs_mount Configure and mount network shares
+menu.hint_net_nfs_umount Un-mount mounted shares
+menu.hint_net_ntp Configure time sync
+menu.hint_net_ntpenable Enable time sync using NTP protocol\nIf NTP sync not successfull, DVB will be used
+menu.hint_net_ntprefresh Time sync interval
+menu.hint_net_ntpserver Enter NTP server name
+menu.hint_net_pass Enter passkey (WPA-PSK)
+menu.hint_net_proxy If you use proxy to access internet\nconfigure it here for online software update
+menu.hint_net_proxypass Proxy user password\nif authorization required
+menu.hint_net_proxyserver Proxy server name
+menu.hint_net_proxyuser Proxy user name\nif authorization required
+menu.hint_net_services Configure network services:\nTelnet, ftp, uPnp
+menu.hint_net_setupnow Apply current settings
+menu.hint_net_setuponstartup Start network at boot time
+menu.hint_net_show Show current network settings
+menu.hint_net_ssid Enter SSID of wireless network\nyou want to connect to
+menu.hint_net_telnet Enable telnet login to your box
+menu.hint_net_test Test network connection: ping gateway,\n name server and external IP
+menu.hint_net_ushare Share connected HDD over uPnp
+menu.hint_network IP address, gateway, DNS, Time sync\nNetwork shares and services
+menu.hint_new_zap_mode Allow channel switch while browsing\n(toggle mode with 'mute' in channel list)
+menu.hint_osd Colors, fonts, screen size\nGUI look and feel options
+menu.hint_osd_language Select OSD language
+menu.hint_osd_preset Pre-configured screen margins for CRT and LCD TV
+menu.hint_parentallock_changepin Change PIN code
+menu.hint_parentallock_lockage Select age allowed to watch
+menu.hint_parentallock_prompt Configure when Neutrino-HD will ask you\nfor PIN code
+menu.hint_personalize Enable, disable or Protect menu items\nConfigure color-buttons user menus
+menu.hint_pictureviewer_defdir Default picture viewer directory
+menu.hint_pictureviewer_scaling Picture scaling algorithm
+menu.hint_pictureviewer_slide_time Slideshow interval, in seconds
+menu.hint_picview View pictures
+menu.hint_plugins_hdd_dir Select directory to load\nplugins from
+menu.hint_power_leds Configure power-button LEDs behavior
+menu.hint_pref_lang Select preferred audio and EPG language\nselect 'none' to disable
+menu.hint_pref_subs Select preferred subtitle language\nselect 'none' to disable
+menu.hint_progressbar_color Show colored progress bars
+menu.hint_protection Protect content by PIN code\nDefault PIN 0000
+menu.hint_radiomode Switch box to radio mode
+menu.hint_reboot Reboot box\nNo confirmation
+menu.hint_record_apid_ac3 Record AC3 audio pids
+menu.hint_record_apid_alt Record alternative non-AC3 audio pids
+menu.hint_record_apid_std Record first audio pid
+menu.hint_record_apids Configure audio pids to record
+menu.hint_record_apply Apply record options
+menu.hint_record_chandir Create directory with name of channel\nto store recording
+menu.hint_record_dir Select directory to store recordings
+menu.hint_record_end Stop direct record after max. time\nor after current event end time
+menu.hint_record_tdir Select directory to save timeshift recordings\nin temporary timeshift mode
+menu.hint_record_time Record time before stop when\nusing direct record with record button
+menu.hint_record_timeafter Stop record after event end\nin minutes
+menu.hint_record_timebefore Start record before event start\nin minutes
+menu.hint_record_timer Configure record by timer options
+menu.hint_record_timeshift Configure timeshift options
+menu.hint_record_timeshift_auto Auto start timeshift after channel switch, in seconds
+menu.hint_record_timeshift_delete Delete timeshift files after timeshift stop
+menu.hint_record_timeshift_pause Start timeshift playback in paused mode
+menu.hint_record_timeshift_temp If off, timeshift started as\nany direct record
+menu.hint_record_zap Switch to channel to be recorded\nat record announce
+menu.hint_record_zap_pre_time For ZapTo timers, switch channel\nbefore event start, in minutes
+menu.hint_recording Recording and timeshift options\nTimers safety, audio pids options
+menu.hint_reload_channels Reload channels from flash
+menu.hint_reload_plugins Reload plugins from flash
+menu.hint_reset Reset Neutrino-HD GUI settings to defaults\nTuner config and channels not affected
+menu.hint_restore Restore files from selected backup
+menu.hint_rotor_swap Swap rotor east/west directions\nin motor control
+menu.hint_rounded_corners Draw round or rectangular windows corners
+menu.hint_save_settings Save all settings to flash
+menu.hint_saveas Save Neutrino-HD GUI settings to file
+menu.hint_scan_auto Auto-scan selected provider
+menu.hint_scan_autoall Scan several selected providers at once
+menu.hint_scan_autoall_select Add selected satellites to scan
+menu.hint_scan_bouquet Update: add to current bouquets, erase:\nremove old bouquets, leave: dont add or change
+menu.hint_scan_cable Select cable network to scan
+menu.hint_scan_cable_simple Cable scan with optional\nprovider channel numbering
+menu.hint_scan_commited Select commited input for\nthis satellite
+menu.hint_scan_diseqc Select diseqc switch input for\nthis satellite
+menu.hint_scan_diseqcrepeat Diseqc repeat for cascaded switches
+menu.hint_scan_diseqctype Select your diseqc switch protocol\nwith 'advanced' you can use uncommited switches
+menu.hint_scan_fast CanalDigitaal/TéléSAT/TV Vlaanderen provider scan\nWARNING: diseqc config will be overwritten
+menu.hint_scan_fastprov Select provider to scan
+menu.hint_scan_fasttype Select fast scan type
+menu.hint_scan_fec Select transponder FEC
+menu.hint_scan_femode Select second tuner connection type
+menu.hint_scan_fesetup Configure tuner(s)
+menu.hint_scan_fetimeout Time to wait for signal, in 1/10 of second
+menu.hint_scan_freq Enter transponder frequency
+menu.hint_scan_fta Add only free-to-air (not-scrambled) channels
+menu.hint_scan_ladirection Select latitude direction
+menu.hint_scan_latitude Enter your latitude
+menu.hint_scan_lnbconfig Configure LNB parameters for this satellite
+menu.hint_scan_lodirection Select longtitude direction
+menu.hint_scan_lofh High banb LNB frequency
+menu.hint_scan_lofl Low band LNB frequency
+menu.hint_scan_lofs Band switch LNB frequency
+menu.hint_scan_logical Use provider's channel numbering
+menu.hint_scan_logical_hd If both SD and HD channel versions present\nput HD to the top of list
+menu.hint_scan_longitude Enter your longtitude
+menu.hint_scan_manual Manual transponder scan using\nselected parameters
+menu.hint_scan_mod Select transponder modulation
+menu.hint_scan_motor_18v Use 18V when moving rotor
+menu.hint_scan_motor_speed Rotor moving speed in 1/10 degree\nper second
+menu.hint_scan_motorpos Select stored position number for\nthis satellite
+menu.hint_scan_nid Enter decimal network ID
+menu.hint_scan_nit Add transpoders from network information
+menu.hint_scan_pids Scan and save audio/video/PMT PIDs
+menu.hint_scan_pol Select transponder polarization
+menu.hint_scan_rate Enter transponder symbol rate
+menu.hint_scan_reset_numbers Reset exising channel numbers\nand re-number channels after scan
+menu.hint_scan_satadd Add satellites for this frontend
+menu.hint_scan_satellite Select satellite to scan
+menu.hint_scan_satenable Enable satellite for this frontend
+menu.hint_scan_satfind Satellite finder: manually drive your rotor\nto setup stored positions
+menu.hint_scan_satfind_start Start Satellite finder
+menu.hint_scan_satscan Scan selected satellite
+menu.hint_scan_satselect Select satellite
+menu.hint_scan_satsetup Configure satellites options
+menu.hint_scan_savesettings Save tuner config and scan settings\nAlso saved, if you start service scan
+menu.hint_scan_scantype Select, which channel types to scan
+menu.hint_scan_setup_fe Configure selected frontend options
+menu.hint_scan_start Start scan. You can use 'exit' button to stop
+menu.hint_scan_test Test signal for this transponder
+menu.hint_scan_tpselect Select transponder to scan
+menu.hint_scan_uncommited Select uncommited input for\nthis satellite
+menu.hint_scan_usals_repeat Repeat usals move rotor commands\nif you expirience unstable rotor move
+menu.hint_scan_usalsall Set/unset usals flag for all satellites
+menu.hint_scan_useusals Use USALS for\nthis satellite
+menu.hint_scrambled_message Show scrambled message, when channel cannot be decoded
+menu.hint_screen_setup Configure screen margins
+menu.hint_screenshot_count When no GUI on screen, you can save 1-5\nscreenshot serie
+menu.hint_screenshot_cover ON: When playing record, overwrite single\nscreenshot to show inside MovieBrowser
+menu.hint_screenshot_dir Select directory to save screenshots
+menu.hint_screenshot_format File format to save screenshot
+menu.hint_screenshot_res Screenshot size: current channel's video size\nor OSD size (1280x720)
+menu.hint_screenshot_scale For video+OSD screenshots, scale to video size
+menu.hint_screenshot_setup Configure screenshots options
+menu.hint_screenshot_video Include live video in screenshot
+menu.hint_scripts Run scripts
+menu.hint_selected_back Change selected item background color
+menu.hint_selected_text Change selected item text color
+menu.hint_service Tuner setup, service scan,\nbouquet editor, software upgrade
+menu.hint_service_scan Tuner setup, service scan
+menu.hint_settings Configure Neutrino-HD\nNetwork, audio, video, OSD and more
+menu.hint_show_mute_icon Show mute icon, when volume set to 0
+menu.hint_shutdown Put your box in deep standby mode\nNo confirmation
+menu.hint_shutdown_count Time to put box in deep-standby\nfrom soft-standby mode
+menu.hint_shutdown_rcdelay Enable deep-standby, if power button\npressed more than 1 second
+menu.hint_shutdown_real Enable soft-standby mode\nIf disabled, power button put box to deep-standby
+menu.hint_sleeptimer Set timer to put your box\nin sleep mode
+menu.hint_soft_restart Restart Neutrino-HD without reboot
+menu.hint_softupdate_check In the Internet or local check for available updates
+menu.hint_softupdate_expert Separate partitions from the flash read / write to the flash
+menu.hint_softupdate_expert_read Separate partitions (U-Boot, Splash, Kernel, SystemFS) from the flash read
+menu.hint_softupdate_expert_write Separate partitions (Splash, Kernel, SystemFS) write to the flash
+menu.hint_softupdate_settings Update mode, the local directory and the configuration file to set
+menu.hint_start_tostandby Enter standby mode after boot
+menu.hint_streaminfo Current channel info: pids, signal and noise ratio\nBitrate graphs
+menu.hint_subchannel_pos Select subchannels menu position
+menu.hint_sw_update Update software
+menu.hint_theme Select pre-defined color theme\nSave or load theme from files
+menu.hint_timeouts Configure time to hide GUI windows\nin seconds
+menu.hint_timers Add/Remove/Edit scheduled\nrecording, reminders etc.
+menu.hint_timezone Select your timezone
+menu.hint_tvmode Switch box to TV mode
+menu.hint_tvradio_switch Switches between TV and Radio mode
+menu.hint_vfd Frontpanel LEDS, VFD options
+menu.hint_vfd_brightness Working brightness
+menu.hint_vfd_brightness_setup Configure frontpanel display brightness\nfor different modes
+menu.hint_vfd_brightnessdeepstandby Brightness in deep-standby mode
+menu.hint_vfd_brightnessdim Auto-dim brightness
+menu.hint_vfd_brightnessstandby Brightness in soft-standby mode
+menu.hint_vfd_defaults Restore default brightness values
+menu.hint_vfd_dimtime Auto-dim time, in seconds
+menu.hint_vfd_infoline Choose what to display in main VFD line
+menu.hint_vfd_statusline Choose what to display in short\nVFD status line
+menu.hint_video Video output, resolution, format\nAspect ratio, fast mode switch options
+menu.hint_video_43mode Display mode for 4:3 content\non 16:9 TV
+menu.hint_video_analog_mode Select analog output mode\nfor SCART and CINCH connectors
+menu.hint_video_cinch_mode Select analog output mode for\ncomposite video out
+menu.hint_video_dbdr MPEG2 enhancement filters
+menu.hint_video_format TV aspect ratio
+menu.hint_video_mode HDMI output video mode
+menu.hint_video_modes VF key will cycle between enabled modes
+menu.hint_video_scart_mode Select analog output mode for SCART connectors
+menu.hint_volume_digits Numeric display of the volumebar on/off
+menu.hint_volume_pos Select volume indicator position
+menu.hint_zap_cycle When swithing channels, stay in current bouquet
menu.next Next (press Menu to quit)
messagebox.back Back
messagebox.cancel Cancel
@@ -726,12 +1103,12 @@ miscsettings.infobar_casystem_mini mini
miscsettings.infobar_casystem_mode discreet
miscsettings.infobar_colored_events Program colored
miscsettings.infobar_disp_0 without Logo
-miscsettings.infobar_disp_1 Logo 1
-miscsettings.infobar_disp_2 Logo 2
-miscsettings.infobar_disp_3 Logo 3
-miscsettings.infobar_disp_4 Logo 4
-miscsettings.infobar_disp_5 Logo 5
-miscsettings.infobar_disp_6 Logo 6
+miscsettings.infobar_disp_1 Logo in number box
+miscsettings.infobar_disp_2 Logo+channel number
+miscsettings.infobar_disp_3 Logo+channel name+signal
+miscsettings.infobar_disp_4 Logo+channel name/number
+miscsettings.infobar_disp_5 Logo+signal
+miscsettings.infobar_disp_6 Logo+channel number+signal
miscsettings.infobar_disp_log Logo
miscsettings.infobar_logo_hdd_dir Logo dir
miscsettings.infobar_sat_display Satellite display on infobar
@@ -784,6 +1161,7 @@ motorcontrol.store Store Motor Position (a)
motorcontrol.timed_mode Timed Step Mode
motorcontrol.user_menu User menu
motorcontrol.west_limit Set West (soft) Limit
+moviebrowser.book_add Add bookmark
moviebrowser.book_clear_all Clear all
moviebrowser.book_head Bookmarks
moviebrowser.book_lastmoviestop Last play stop:
@@ -949,14 +1327,14 @@ networkmenu.ntpserver NTP-Server
networkmenu.ntpserver_hint1 NTP-Server example: ntp1.ptb.de
networkmenu.ntpserver_hint2 need reboot or epg-reset
networkmenu.ntptitle Time-Syncronisation
-networkmenu.password Key
+networkmenu.password Pre-Shared Key (PSK)
networkmenu.reset_settings_now Do you want restore the previous settings?
networkmenu.select_if Interface
networkmenu.services Network services
networkmenu.setupnow Apply network settings now
networkmenu.setuponstartup Setup network on startup
networkmenu.show Show active Network settings
-networkmenu.ssid Network name
+networkmenu.ssid Network name (SSID)
networkmenu.test Test network now
neutrino_starting Neutrino starting...
nfs.alreadymounted directory already mounted
@@ -1091,7 +1469,7 @@ rclock.lockmsg Your box remote control will be locked.\n To unlock it, press
-
+
-
+
-
-
+
+
-
+
@@ -1425,7 +1425,7 @@
-
+
@@ -1433,13 +1433,13 @@
-
+
-
+
@@ -1452,8 +1452,8 @@
-
-
+
+
@@ -1465,7 +1465,7 @@
-
+
@@ -1557,8 +1557,10 @@
+
+
@@ -1569,16 +1571,23 @@
+
+
+
+
+
+
-
+
+
@@ -1591,7 +1600,7 @@
-
+
@@ -1620,7 +1629,7 @@
-
+
diff --git a/data/scripts/backup.sh b/data/scripts/backup.sh
index d9998007e..2ab6bcf7e 100755
--- a/data/scripts/backup.sh
+++ b/data/scripts/backup.sh
@@ -24,4 +24,4 @@ TOBACKUP=$(echo $RES)
echo Backup to $1/settings_$DATE.tar
-tar -cf $1/settings_$DATE.tar $TOBACKUP
+tar -cf $1/settings_$DATE.tar $TOBACKUP 2>&1 >/dev/null
diff --git a/lib/libcoolstream/record_cs.h b/lib/libcoolstream/record_cs.h
index 51b28bfe6..4ef6f3df0 100644
--- a/lib/libcoolstream/record_cs.h
+++ b/lib/libcoolstream/record_cs.h
@@ -5,6 +5,7 @@
/* */
/* (C) 2008 CoolStream International */
/* */
+/* $Id:: $ */
/*******************************************************************************/
#ifndef __RECORD_CS_H_
#define __RECORD_CS_H_
@@ -13,13 +14,15 @@
class cRecordData;
+#define REC_STATUS_OK 0
+#define REC_STATUS_SLOW 1
+#define REC_STATUS_OVERFLOW 2
+
class cRecord {
private:
cRecordData * rd;
bool enabled;
- int num_apids;
int unit;
- int nRecordFD;
public:
cRecord(int num = 0);
@@ -27,11 +30,11 @@ public:
bool Open();
void Close(void);
- bool Start(int fd, unsigned short vpid, unsigned short * apids, int numapids);
+ bool Start(int fd, unsigned short vpid, unsigned short * apids, int numapids, uint64_t chid);
bool Stop(void);
bool AddPid(unsigned short pid);
- /* not tested */
- bool ChangePids(unsigned short vpid, unsigned short * apids, int numapids);
+ int GetStatus();
+ void ResetStatus();
};
#endif // __RECORD_CS_H_
diff --git a/lib/libdvbsub/dvbsub.cpp b/lib/libdvbsub/dvbsub.cpp
index 2bf1ccbee..66eeb386d 100644
--- a/lib/libdvbsub/dvbsub.cpp
+++ b/lib/libdvbsub/dvbsub.cpp
@@ -16,7 +16,6 @@
#include "Debug.hpp"
#include "PacketQueue.hpp"
-#include "semaphore.h"
#include "helpers.hpp"
#include "dvbsubtitle.h"
diff --git a/lib/libdvbsub/dvbsubtitle.cpp b/lib/libdvbsub/dvbsubtitle.cpp
index e86971ac0..c0ee5f75c 100644
--- a/lib/libdvbsub/dvbsubtitle.cpp
+++ b/lib/libdvbsub/dvbsubtitle.cpp
@@ -22,7 +22,7 @@ extern "C" {
#include
#include
}
-#include "driver/framebuffer.h"
+#include
#include "Debug.hpp"
// Set these to 'true' for debug output:
diff --git a/lib/libnet/libnet.c b/lib/libnet/libnet.c
index 9eb1cb679..87a0ef294 100644
--- a/lib/libnet/libnet.c
+++ b/lib/libnet/libnet.c
@@ -9,6 +9,8 @@
#include
#include
+#if 0
+//never used
static void scanip( char *str, unsigned char *to )
{
int val;
@@ -80,7 +82,7 @@ abbruch:
return rc;
}
-
+#endif
void netGetIP( char *dev, char *ip, char *mask, char *brdcast )
{
int fd;
@@ -114,7 +116,8 @@ void netGetIP( char *dev, char *ip, char *mask, char *brdcast )
close(fd);
return;
}
-
+#if 0
+//never used
void netSetDefaultRoute( char *gw )
{
struct rtentry re;
@@ -149,7 +152,7 @@ void netSetDefaultRoute( char *gw )
close(fd);
return;
}
-
+#endif
void netGetDefaultRoute( char *ip )
{
FILE *fp;
@@ -175,11 +178,12 @@ void netGetDefaultRoute( char *ip )
fclose(fp);
}
-static char dombuf[256];
static char hostbuf[256];
-static char domis=0;
static char hostis=0;
-
+#if 0
+static char dombuf[256];
+static char domis=0;
+//never used
char *netGetDomainname( void )
{
if (!domis)
@@ -194,7 +198,7 @@ void netSetDomainname( char *dom )
domis=1;
setdomainname(dombuf,strlen(dombuf)+1);
}
-
+#endif
char *netGetHostname( void )
{
if (!hostis)
diff --git a/lib/libtuxtxt/tuxtxt.cpp b/lib/libtuxtxt/tuxtxt.cpp
index bfc54c9ed..5ab9e8440 100644
--- a/lib/libtuxtxt/tuxtxt.cpp
+++ b/lib/libtuxtxt/tuxtxt.cpp
@@ -17,9 +17,10 @@
#include "teletext.h"
#include "tuxtxt.h"
-#include "driver/framebuffer.h"
+#include
#include
#include
+#include
/* same as in rcinput.h... */
#define KEY_TTTV KEY_FN_1
@@ -104,7 +105,7 @@ void gethotlist()
hotlistchanged = 0;
maxhotlist = -1;
- sprintf(line, CONFIGDIR "/tuxtxt/hotlist%d.conf", tuxtxt_cache.vtxtpid);
+ sprintf(line, TUXTXTDIR "/hotlist%d.conf", tuxtxt_cache.vtxtpid);
#if TUXTXT_DEBUG
printf("TuxTxt paintBackground();
}
-
+#if 0
+//never used
void ClearB(int color)
{
FillRect(0, 0, var_screeninfo.xres, var_screeninfo.yres, color); /* framebuffer */
FillRect(0, var_screeninfo.yres, var_screeninfo.xres, var_screeninfo.yres, color); /* backbuffer */
CFrameBuffer::getInstance()->blit();
}
-
+#endif
int GetCurFontWidth()
{
int mx = (displaywidth)%(40-nofirst); // # of unused pixels
@@ -1956,6 +1958,10 @@ int Init(int source)
/* init lcd */
UpdateLCD();
+ /* create TUXTXTDIR if necessary */
+ if (!access(TUXTXTDIR, F_OK) == 0)
+ mkdir(TUXTXTDIR, 0755);
+
/* config defaults */
screenmode = 0;
screen_mode1 = 0;
diff --git a/lib/libtuxtxt/tuxtxt.h b/lib/libtuxtxt/tuxtxt.h
index 218232de2..f29a44e69 100644
--- a/lib/libtuxtxt/tuxtxt.h
+++ b/lib/libtuxtxt/tuxtxt.h
@@ -34,10 +34,6 @@
#include
-#ifndef NEW_CST_KERNEL
-//#include
-#endif
-
#include
#include
@@ -70,7 +66,8 @@ extern int tuxtxt_get_zipsize(int p, int sp);
#endif
-#define TUXTXTCONF CONFIGDIR "/tuxtxt/tuxtxt2.conf"
+#define TUXTXTDIR CONFIGDIR "/tuxtxt"
+#define TUXTXTCONF TUXTXTDIR "/tuxtxt2.conf"
/* fonts */
#define TUXTXTTTF FONTDIR "/tuxtxt.ttf"
diff --git a/lib/sectionsdclient/sectionsdMsg.h b/lib/sectionsdclient/sectionsdMsg.h
index 527b45cce..4595a80ca 100644
--- a/lib/sectionsdclient/sectionsdMsg.h
+++ b/lib/sectionsdclient/sectionsdMsg.h
@@ -54,28 +54,12 @@ struct sectionsd
enum commands
{
dumpStatusinformation, // commandDumpStatusInformation
- allEventsChannelIDSearch, // commandAllEventsChannelIDSearch
pauseScanning, // commandPauseScanning // for the grabbers ;)
getIsScanningActive, // commandGetIsScanningActive
- actualEPGchannelID, // commandActualEPGchannelID
- actualEventListTVshortIDs, // commandEventListTVids
- actualEventListRadioShortIDs, // commandEventListRadioIDs
- currentNextInformationID, // commandCurrentNextInfoChannelID
- epgEPGid, // commandEPGepgID
- epgEPGidShort, // commandEPGepgIDshort
- ComponentTagsUniqueKey, // commandComponentTagsUniqueKey
- allEventsChannelID_, // commandAllEventsChannelID
- timesNVODservice, // commandTimesNVODservice
getIsTimeSet, // commandGetIsTimeSet
serviceChanged, // commandserviceChanged
- LinkageDescriptorsUniqueKey, // commandLinkageDescriptorsUniqueKey
CMD_registerEvents, // commandRegisterEventClient
CMD_unregisterEvents, // commandUnRegisterEventClient
-#ifdef ENABLE_PPT
- setPrivatePid, // commandSetPrivatePid
-#else
- dummy11_setPrivatePid,
-#endif
freeMemory, // commandFreeMemory
readSIfromXML, // commandReadSIfromXML
writeSI2XML, // commandWriteSI2XML
@@ -85,11 +69,13 @@ struct sectionsd
numberOfCommands // <- no actual command, end of command marker
};
+#if 0
struct commandGetEPGid
{
uint64_t eventid;
time_t starttime;
} __attribute__ ((packed)) ;
+#endif
struct commandSetServiceChanged
{
diff --git a/lib/sectionsdclient/sectionsdclient.cpp b/lib/sectionsdclient/sectionsdclient.cpp
index 97eadb83d..4c6e16c0c 100644
--- a/lib/sectionsdclient/sectionsdclient.cpp
+++ b/lib/sectionsdclient/sectionsdclient.cpp
@@ -56,7 +56,6 @@ int CSectionsdClient::readResponse(char* data,unsigned int size)
return responseHeader.dataLength;
}
-
bool CSectionsdClient::send(const unsigned char command, const char* data, const unsigned int size)
{
sectionsd::msgRequestHeader msgHead;
@@ -161,7 +160,61 @@ void CSectionsdClient::setServiceChanged(const t_channel_id channel_id, const bo
close_connection();
}
+void CSectionsdClient::freeMemory()
+{
+ send(sectionsd::freeMemory);
+ readResponse();
+ close_connection();
+}
+
+void CSectionsdClient::readSIfromXML(const char * epgxmlname)
+{
+ send(sectionsd::readSIfromXML, (char*) epgxmlname, strlen(epgxmlname));
+
+ readResponse();
+ close_connection();
+}
+
+void CSectionsdClient::writeSI2XML(const char * epgxmlname)
+{
+ send(sectionsd::writeSI2XML, (char*) epgxmlname, strlen(epgxmlname));
+
+ readResponse();
+ close_connection();
+}
+
+void CSectionsdClient::setConfig(const epg_config config)
+{
+ sectionsd::commandSetConfig *msg;
+ char* pData = new char[sizeof(sectionsd::commandSetConfig) + config.network_ntpserver.length() + 1 + config.epg_dir.length() + 1];
+ msg = (sectionsd::commandSetConfig *)pData;
+
+ msg->scanMode = config.scanMode;
+ msg->epg_cache = config.epg_cache;
+ msg->epg_old_events = config.epg_old_events;
+ msg->epg_max_events = config.epg_max_events;
+ msg->network_ntprefresh = config.network_ntprefresh;
+ msg->network_ntpenable = config.network_ntpenable;
+ msg->epg_extendedcache = config.epg_extendedcache;
+// config.network_ntpserver:
+ strcpy(&pData[sizeof(sectionsd::commandSetConfig)], config.network_ntpserver.c_str());
+// config.epg_dir:
+ strcpy(&pData[sizeof(sectionsd::commandSetConfig) + config.network_ntpserver.length() + 1], config.epg_dir.c_str());
+
+ send(sectionsd::setConfig, (char*)pData, sizeof(sectionsd::commandSetConfig) + config.network_ntpserver.length() + 1 + config.epg_dir.length() + 1);
+ readResponse();
+ close_connection();
+ delete[] pData;
+}
+
+void CSectionsdClient::dumpStatus()
+{
+ send(sectionsd::dumpStatusinformation);
+ close_connection();
+}
+
+#if 0
bool CSectionsdClient::getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::ComponentTagList& tags)
{
if (send(sectionsd::ComponentTagsUniqueKey, (char*)&uniqueKey, sizeof(uniqueKey)))
@@ -277,7 +330,6 @@ bool CSectionsdClient::getNVODTimesServiceKey(const t_channel_id channel_id, CSe
}
}
-
bool CSectionsdClient::getCurrentNextServiceKey(const t_channel_id channel_id, CSectionsdClient::responseGetCurrentNextInfoChannelID& current_next)
{
if (send(sectionsd::currentNextInformationID, (char*)&channel_id, sizeof(channel_id)))
@@ -321,8 +373,6 @@ bool CSectionsdClient::getCurrentNextServiceKey(const t_channel_id channel_id, C
}
}
-
-
CChannelEventList CSectionsdClient::getChannelEvents(const bool tv_mode, t_channel_id *p_requested_channels, int size_requested_channels)
{
CChannelEventList eList;
@@ -479,6 +529,8 @@ CChannelEventList CSectionsdClient::getEventsServiceKey(const t_channel_id chann
close_connection();
return eList;
}
+
+//never used
void showhexdumpa (char *label, unsigned char * from, int len)
{
int i, j, k;
@@ -613,7 +665,6 @@ bool CSectionsdClient::getActualEPGServiceKey(const t_channel_id channel_id, CEP
return false;
}
-
bool CSectionsdClient::getEPGid(const event_id_t eventid, const time_t starttime, CEPGData * epgdata)
{
sectionsd::commandGetEPGid msg;
@@ -669,7 +720,6 @@ bool CSectionsdClient::getEPGid(const event_id_t eventid, const time_t starttime
return false;
}
-
bool CSectionsdClient::getEPGidShort(const event_id_t eventid, CShortEPGData * epgdata)
{
if (send(sectionsd::epgEPGidShort, (char*)&eventid, sizeof(eventid)))
@@ -717,57 +767,5 @@ void CSectionsdClient::setPrivatePid(const unsigned short pid)
close_connection();
}
#endif
+#endif
-void CSectionsdClient::freeMemory()
-{
- send(sectionsd::freeMemory);
-
- readResponse();
- close_connection();
-}
-
-void CSectionsdClient::readSIfromXML(const char * epgxmlname)
-{
- send(sectionsd::readSIfromXML, (char*) epgxmlname, strlen(epgxmlname));
-
- readResponse();
- close_connection();
-}
-
-void CSectionsdClient::writeSI2XML(const char * epgxmlname)
-{
- send(sectionsd::writeSI2XML, (char*) epgxmlname, strlen(epgxmlname));
-
- readResponse();
- close_connection();
-}
-
-void CSectionsdClient::setConfig(const epg_config config)
-{
- sectionsd::commandSetConfig *msg;
- char* pData = new char[sizeof(sectionsd::commandSetConfig) + config.network_ntpserver.length() + 1 + config.epg_dir.length() + 1];
- msg = (sectionsd::commandSetConfig *)pData;
-
- msg->scanMode = config.scanMode;
- msg->epg_cache = config.epg_cache;
- msg->epg_old_events = config.epg_old_events;
- msg->epg_max_events = config.epg_max_events;
- msg->network_ntprefresh = config.network_ntprefresh;
- msg->network_ntpenable = config.network_ntpenable;
- msg->epg_extendedcache = config.epg_extendedcache;
-// config.network_ntpserver:
- strcpy(&pData[sizeof(sectionsd::commandSetConfig)], config.network_ntpserver.c_str());
-// config.epg_dir:
- strcpy(&pData[sizeof(sectionsd::commandSetConfig) + config.network_ntpserver.length() + 1], config.epg_dir.c_str());
-
- send(sectionsd::setConfig, (char*)pData, sizeof(sectionsd::commandSetConfig) + config.network_ntpserver.length() + 1 + config.epg_dir.length() + 1);
- readResponse();
- close_connection();
- delete[] pData;
-}
-
-void CSectionsdClient::dumpStatus()
-{
- send(sectionsd::dumpStatusinformation);
- close_connection();
-}
diff --git a/lib/sectionsdclient/sectionsdclient.h b/lib/sectionsdclient/sectionsdclient.h
index d42e99237..3d2d0d438 100644
--- a/lib/sectionsdclient/sectionsdclient.h
+++ b/lib/sectionsdclient/sectionsdclient.h
@@ -36,13 +36,6 @@ class CShortEPGData
std::string title;
std::string info1;
std::string info2;
-
- CShortEPGData()
- {
- title = "";
- info1 = "";
- info2 = "";
- };
};
class CEPGData;
@@ -69,9 +62,10 @@ class CSectionsdClient : private CBasicClient
int readResponse(char* data = NULL, unsigned int size = 0);
bool send(const unsigned char command, const char* data = NULL, const unsigned int size = 0);
- char * parseExtendedEvents(char * dp, CEPGData * epgdata);
+ //char * parseExtendedEvents(char * dp, CEPGData * epgdata);
public:
+ virtual ~CSectionsdClient() {};
enum SIlanguageMode_t {
ALL,
FIRST_FIRST,
@@ -85,8 +79,10 @@ class CSectionsdClient : private CBasicClient
{
EVT_TIMESET,
EVT_GOT_CN_EPG,
+#if 0
EVT_SERVICES_UPDATE,
EVT_BOUQUETS_UPDATE,
+#endif
EVT_WRITE_SI_FINISHED
};
@@ -125,6 +121,10 @@ class CSectionsdClient : private CBasicClient
{
time_t startzeit;
unsigned dauer;
+ sectionsdTime() {
+ startzeit = 0;
+ dauer = 0;
+ }
} __attribute__ ((packed)) ;
struct responseGetNVODTimes
@@ -164,35 +164,25 @@ class CSectionsdClient : private CBasicClient
std::string epg_dir;
} epg_config;
+#if 0
bool getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::ComponentTagList& tags);
-
bool getLinkageDescriptorsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::LinkageDescriptorList& descriptors);
-
bool getNVODTimesServiceKey(const t_channel_id channel_id, CSectionsdClient::NVODTimesList& nvod_list);
-
bool getCurrentNextServiceKey(const t_channel_id channel_id, CSectionsdClient::responseGetCurrentNextInfoChannelID& current_next);
+ CChannelEventList getChannelEvents(const bool tv_mode = true, t_channel_id* = NULL, int size = 0);
+ CChannelEventList getEventsServiceKey(const t_channel_id channel_id);
+ bool getEventsServiceKeySearchAdd(CChannelEventList& evtlist,const t_channel_id channel_id,char m_search_typ,std::string& m_search_text);
+ bool getEPGid(const event_id_t eventid, const time_t starttime, CEPGData * epgdata);
+ bool getActualEPGServiceKey(const t_channel_id channel_id, CEPGData * epgdata);
+ bool getEPGidShort(const event_id_t eventid, CShortEPGData * epgdata);
+ void setPrivatePid(const unsigned short pid);
+#endif
bool getIsTimeSet();
-
void setPauseScanning(const bool doPause);
-
- bool getIsScanningActive();
-
void setServiceChanged(const t_channel_id channel_id, const bool requestEvent);
- CChannelEventList getChannelEvents(const bool tv_mode = true, t_channel_id* = NULL, int size = 0);
-
- CChannelEventList getEventsServiceKey(const t_channel_id channel_id);
-
- bool getEventsServiceKeySearchAdd(CChannelEventList& evtlist,const t_channel_id channel_id,char m_search_typ,std::string& m_search_text);
-
- bool getEPGid(const event_id_t eventid, const time_t starttime, CEPGData * epgdata);
-
- bool getActualEPGServiceKey(const t_channel_id channel_id, CEPGData * epgdata);
-
- bool getEPGidShort(const event_id_t eventid, CShortEPGData * epgdata);
-
- void setPrivatePid(const unsigned short pid);
+ bool getIsScanningActive();
void freeMemory();
@@ -234,15 +224,9 @@ class CEPGData
CEPGData()
{
eventID = 0;
- title = "";
- info1 = "";
- info2 = "";
fsk = 0;
table_id = 0xff;
- contentClassification = "";
- userClassification = "";
};
-
};
#endif
diff --git a/lib/timerdclient/timerdclient.h b/lib/timerdclient/timerdclient.h
index 6b763c7c5..f9e66625b 100644
--- a/lib/timerdclient/timerdclient.h
+++ b/lib/timerdclient/timerdclient.h
@@ -41,6 +41,7 @@ class CTimerdClient:private CBasicClient
virtual const char * getSocketName() const;
public:
+ virtual ~CTimerdClient() {};
enum events
{
EVT_SHUTDOWN = 1,
diff --git a/lib/xmltree/xmlparse.cpp b/lib/xmltree/xmlparse.cpp
index d0a531824..f2c2c5fd2 100644
--- a/lib/xmltree/xmlparse.cpp
+++ b/lib/xmltree/xmlparse.cpp
@@ -43,7 +43,7 @@ ChangeLog:
#include
#include
-#include "xmldef.h"
+#include "xmltok/xmldef.h"
#ifdef XML_UNICODE
#define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX
diff --git a/lib/xmltree/xmlrole.c b/lib/xmltree/xmlrole.c
index 27d5c41ce..23b3a62c4 100644
--- a/lib/xmltree/xmlrole.c
+++ b/lib/xmltree/xmlrole.c
@@ -18,7 +18,7 @@ James Clark. All Rights Reserved.
Contributor(s):
*/
-#include "xmldef.h"
+#include "xmltok/xmldef.h"
#include "xmlrole.h"
/* Doesn't check:
diff --git a/lib/xmltree/xmltok.c b/lib/xmltree/xmltok.c
index 4634a0356..989ea638b 100644
--- a/lib/xmltree/xmltok.c
+++ b/lib/xmltree/xmltok.c
@@ -18,9 +18,9 @@ James Clark. All Rights Reserved.
Contributor(s):
*/
-#include "xmldef.h"
+#include "xmltok/xmldef.h"
#include "xmltok.h"
-#include "nametab.h"
+#include "xmltok/nametab.h"
#define VTABLE1 \
{ PREFIX(prologTok), PREFIX(contentTok), PREFIX(cdataSectionTok) }, \
@@ -265,7 +265,7 @@ static const struct normal_encoding utf8_encoding = {
{ VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
{
#include "asciitab.h"
-#include "utf8tab.h"
+#include "xmltok/utf8tab.h"
},
NORMAL_VTABLE(utf8_)
};
@@ -274,7 +274,7 @@ static const struct normal_encoding internal_utf8_encoding = {
{ VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
{
#include "iasctab.h"
-#include "utf8tab.h"
+#include "xmltok/utf8tab.h"
},
NORMAL_VTABLE(utf8_)
};
@@ -319,7 +319,7 @@ static const struct normal_encoding latin1_encoding = {
{ VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 },
{
#include "asciitab.h"
-#include "latin1tab.h"
+#include "xmltok/latin1tab.h"
},
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
@@ -490,7 +490,7 @@ static const struct normal_encoding little2_encoding = {
},
{
#include "asciitab.h"
-#include "latin1tab.h"
+#include "xmltok/latin1tab.h"
},
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
@@ -501,7 +501,7 @@ static const struct normal_encoding internal_little2_encoding = {
{ VTABLE, 2, 0, 1 },
{
#include "iasctab.h"
-#include "latin1tab.h"
+#include "xmltok/latin1tab.h"
},
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
@@ -559,7 +559,7 @@ static const struct normal_encoding big2_encoding = {
},
{
#include "asciitab.h"
-#include "latin1tab.h"
+#include "xmltok/latin1tab.h"
},
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
diff --git a/src/daemonc/remotecontrol.cpp b/src/daemonc/remotecontrol.cpp
index 17dbb8928..d5626740e 100644
--- a/src/daemonc/remotecontrol.cpp
+++ b/src/daemonc/remotecontrol.cpp
@@ -43,13 +43,14 @@
#include
#include
-#include "libdvbsub/dvbsub.h"
-#include "libtuxtxt/teletext.h"
+#include
+#include
#include
#include
#include
#include
+#include
#define ZAP_GUARD_TIME 2000 // ms
@@ -57,11 +58,6 @@ extern CBouquetManager *g_bouquetManager;
extern uint32_t scrambled_timer;
-bool sectionsd_getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::ComponentTagList& tags);
-bool sectionsd_getLinkageDescriptorsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::LinkageDescriptorList& descriptors);
-bool sectionsd_getNVODTimesServiceKey(const t_channel_id uniqueServiceKey, CSectionsdClient::NVODTimesList& nvod_list);
-void sectionsd_setPrivatePid(unsigned short pid);
-
CSubService::CSubService(const t_original_network_id anoriginal_network_id, const t_service_id aservice_id, const t_transport_stream_id atransport_stream_id, const std::string &asubservice_name)
{
service.original_network_id = anoriginal_network_id;
@@ -279,8 +275,6 @@ int CRemoteControl::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data
{
CVFD::getInstance()->showServicename(current_channel_name); // UTF-8
g_Zapit->getPIDS( current_PIDs );
- //g_Sectionsd->setPrivatePid( current_PIDs.PIDs.privatepid );
- sectionsd_setPrivatePid( current_PIDs.PIDs.privatepid );
//tuxtxt
#if 1
tuxtxt_stop();
@@ -355,8 +349,7 @@ void CRemoteControl::getSubChannels()
if ( subChannels.empty() )
{
CSectionsdClient::LinkageDescriptorList linkedServices;
- //if ( g_Sectionsd->getLinkageDescriptorsUniqueKey( current_EPGid, linkedServices ) )
- if ( sectionsd_getLinkageDescriptorsUniqueKey( current_EPGid, linkedServices ) )
+ if (CEitManager::getInstance()->getLinkageDescriptorsUniqueKey( current_EPGid, linkedServices))
{
if ( linkedServices.size()> 1 )
{
@@ -389,8 +382,7 @@ void CRemoteControl::getNVODs()
if ( subChannels.empty() )
{
CSectionsdClient::NVODTimesList NVODs;
- //if ( g_Sectionsd->getNVODTimesServiceKey( current_channel_id & 0xFFFFFFFFFFFFULL, NVODs ) )
- if ( sectionsd_getNVODTimesServiceKey( current_channel_id & 0xFFFFFFFFFFFFULL, NVODs ) )
+ if (CEitManager::getInstance()->getNVODTimesServiceKey( current_channel_id, NVODs))
{
are_subchannels = false;
//printf("CRemoteControl::getNVODs NVODs.size %d\n", NVODs.size());
@@ -506,13 +498,13 @@ void CRemoteControl::processAPIDnames()
if ( current_PIDs.APIDs[count].is_ac3 )
{
if(!strstr(current_PIDs.APIDs[count].desc, " (AC3)"))
- strncat(current_PIDs.APIDs[count].desc, " (AC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc));
+ strncat(current_PIDs.APIDs[count].desc, " (AC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc)-1);
has_ac3 = true;
if(g_settings.audio_DolbyDigital && (ac3_found < 0))
ac3_found = count;
}
else if (current_PIDs.APIDs[count].is_aac && !strstr(current_PIDs.APIDs[count].desc, " (AAC)"))
- strncat(current_PIDs.APIDs[count].desc, " (AAC)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc));
+ strncat(current_PIDs.APIDs[count].desc, " (AAC)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[count].desc)-1);
}
if ( has_unresolved_ctags )
@@ -520,8 +512,7 @@ void CRemoteControl::processAPIDnames()
if ( current_EPGid != 0 )
{
CSectionsdClient::ComponentTagList tags;
- //if ( g_Sectionsd->getComponentTagsUniqueKey( current_EPGid, tags ) )
- if ( sectionsd_getComponentTagsUniqueKey( current_EPGid, tags ) )
+ if (CEitManager::getInstance()->getComponentTagsUniqueKey(current_EPGid, tags))
{
has_unresolved_ctags = false;
@@ -534,11 +525,11 @@ void CRemoteControl::processAPIDnames()
// workaround for buggy ZDF ctags / or buggy sectionsd/drivers , who knows...
if(!tags[i].component.empty())
{
- strncpy(current_PIDs.APIDs[j].desc, tags[i].component.c_str(), DESC_MAX_LEN);
+ strncpy(current_PIDs.APIDs[j].desc, tags[i].component.c_str(), DESC_MAX_LEN-1);
if (current_PIDs.APIDs[j].is_ac3 && !strstr(current_PIDs.APIDs[j].desc, " (AC3)"))
- strncat(current_PIDs.APIDs[j].desc, " (AC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc));
+ strncat(current_PIDs.APIDs[j].desc, " (AC3)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc)-1);
else if (current_PIDs.APIDs[j].is_aac && !strstr(current_PIDs.APIDs[j].desc, " (AAC)"))
- strncat(current_PIDs.APIDs[j].desc, " (AAC)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc));
+ strncat(current_PIDs.APIDs[j].desc, " (AAC)", DESC_MAX_LEN - strlen(current_PIDs.APIDs[j].desc)-1);
}
current_PIDs.APIDs[j].component_tag = -1;
break;
diff --git a/src/driver/Makefile.am b/src/driver/Makefile.am
index 7e8c40075..65db01cc5 100644
--- a/src/driver/Makefile.am
+++ b/src/driver/Makefile.am
@@ -18,23 +18,24 @@ noinst_LIBRARIES = libneutrino_driver.a libneutrino_driver_netfile.a
libneutrino_driver_a_SOURCES = \
abstime.c \
- fontrenderer.cpp \
+ audiofile.cpp \
+ audiometadata.cpp \
+ audioplay.cpp \
+ fader.cpp \
fb_window.cpp \
+ file.cpp \
+ fontrenderer.cpp \
+ genpsi.c \
+ radiotext.cpp \
+ radiotools.cpp \
rcinput.cpp \
record.cpp \
- audioplay.cpp \
- screen_max.cpp \
- file.cpp \
- audiometadata.cpp \
- audiofile.cpp \
- shutdown_count.cpp \
- genpsi.c \
- streamts.cpp \
- radiotools.cpp \
- radiotext.cpp \
- fader.cpp \
ringbuffer.c \
+ screen_max.cpp \
+ shutdown_count.cpp \
+ streamts.cpp \
volume.cpp
+# screenshot.cpp
if BOXTYPE_GENERIC
libneutrino_driver_a_SOURCES += \
diff --git a/src/driver/audiodec/Makefile.am b/src/driver/audiodec/Makefile.am
index 4250e31c8..d2208b51b 100644
--- a/src/driver/audiodec/Makefile.am
+++ b/src/driver/audiodec/Makefile.am
@@ -31,10 +31,10 @@ endif
libneutrino_driver_audiodec_a_SOURCES = \
basedec.cpp \
cdrdec.cpp \
+ crc.c \
+ $(FLACdec) \
mp3dec.cpp \
oggdec.cpp \
- wavdec.cpp \
- $(FLACdec) \
tag.c \
- crc.c
+ wavdec.cpp
# vis.cpp
diff --git a/src/driver/audiodec/flacdec.cpp b/src/driver/audiodec/flacdec.cpp
index f988940f8..1ed0fd0d0 100644
--- a/src/driver/audiodec/flacdec.cpp
+++ b/src/driver/audiodec/flacdec.cpp
@@ -81,12 +81,13 @@ FLAC__StreamDecoderSeekStatus flac_seek(const FLAC__StreamDecoder *, FLAC__uint6
else
return FLAC__STREAM_DECODER_SEEK_STATUS_OK;
}
-
+#if 0
+//never used
int flac_close(void *)
{
return 0;
}
-
+#endif
FLAC__StreamDecoderTellStatus flac_tell(const FLAC__StreamDecoder *, FLAC__uint64 *absolute_byte_offset, void *client_data)
{
CFlacDec * flacdec = (CFlacDec *)client_data;
diff --git a/src/driver/audiodec/int_fft.c b/src/driver/audiodec/int_fft.c
index 5f8a7f62d..d44aa66fe 100644
--- a/src/driver/audiodec/int_fft.c
+++ b/src/driver/audiodec/int_fft.c
@@ -84,6 +84,8 @@ fixed fix_mpy(fixed a, fixed b);
size of data = 2**m
set inverse to 0=dft, 1=idft
*/
+#if 0
+//never used
int fix_fft(fixed fr[], fixed fi[], int m, int inverse)
{
int mr,nn,i,j,l,k,istep, n, scale, shift;
@@ -180,7 +182,7 @@ fix_mpy(wi,fr[j]);
return scale;
}
-
+#endif
/* window() - apply a Hanning window */
void window(fixed fr[], int n)
@@ -203,6 +205,8 @@ void window(fixed fr[], int n)
was obtained from an inverse FFT, 0 otherwise.
loud[] is the loudness, in dB wrt 32767; will be +10 to -N_LOUD.
*/
+#if 0
+//never used
void fix_loud(fixed loud[], fixed fr[], fixed fi[], int n, int scale_shift)
{
int i, max;
@@ -218,7 +222,7 @@ void fix_loud(fixed loud[], fixed fr[], fixed fi[], int n, int scale_shift)
loud[i] = max;
}
}
-
+#endif
/* db_from_ampl() - find loudness (in dB) from
the complex amplitude.
*/
@@ -258,6 +262,8 @@ fixed fix_mpy(fixed a, fixed b)
/*
iscale() - scale an integer value by (numer/denom)
*/
+#if 0
+//never used
int iscale(int value, int numer, int denom)
{
#ifdef DOS
@@ -338,7 +344,7 @@ overflow:
#endif
}
-
+#endif
#if N_WAVE != 1024
ERROR: N_WAVE != 1024
diff --git a/src/driver/audioplay.cpp b/src/driver/audioplay.cpp
index 3358043df..3ea3fd4d4 100644
--- a/src/driver/audioplay.cpp
+++ b/src/driver/audioplay.cpp
@@ -34,7 +34,7 @@
#ifdef HAVE_CONFIG_H
#include
#endif
-#include "global.h"
+#include
#include
#include
#include
diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp
index 711803c4a..d5c35f56f 100644
--- a/src/driver/framebuffer.cpp
+++ b/src/driver/framebuffer.cpp
@@ -39,7 +39,7 @@
#include
-#include
+//#include
#ifdef USE_OPENGL
#include
@@ -612,10 +612,12 @@ int CFrameBuffer::setMode(unsigned int /*nxRes*/, unsigned int /*nyRes*/, unsign
#endif
return 0;
}
-
+#if 0
+//never used
void CFrameBuffer::setTransparency( int /*tr*/ )
{
}
+#endif
#if !HAVE_TRIPLEDRAGON
void CFrameBuffer::setBlendMode(uint8_t mode)
@@ -671,13 +673,15 @@ void CFrameBuffer::setBlendLevel(int level)
}
#endif
+#if 0
+//never used
void CFrameBuffer::setAlphaFade(int in, int num, int tr)
{
for (int i=0; iShowPicture((iconBasePath + filename).c_str());
}
-
+#endif
bool CFrameBuffer::Lock()
{
if(locked)
diff --git a/src/driver/netfile.cpp b/src/driver/netfile.cpp
index 71d61d2f2..3a235e3fa 100644
--- a/src/driver/netfile.cpp
+++ b/src/driver/netfile.cpp
@@ -101,12 +101,10 @@
#endif
#include "netfile.h"
-#include "global.h"
+#include
#include
#include
#include
-#include
-#include
#include
/*
TODO:
@@ -1059,6 +1057,7 @@ FILE *f_open(const char *filename, const char *acctype)
for(int i=0; ((ptr != NULL) && (i<25)); ptr = strstr(ptr, "http://") )
{
strncpy(servers[i], ptr, 1023);
+ servers[i][1023] = '\0';
ptr2 = strchr(servers[i], '\n');
if(ptr2) *ptr2 = 0;
// change ptr so that next strstr searches in buf and not in servers[i]
@@ -1101,7 +1100,7 @@ FILE *f_open(const char *filename, const char *acctype)
/* magic, if there is any */
for (int i = 0; i < known_magic_count; i++)
{
- if (((*(uint32_t *)&(magic[0])) & *(uint32_t *)&(known_magic[i].mask[0])) == *(uint32_t *)&(known_magic[i].mode[0]))
+ if (((*(unsigned char *)&(magic[0])) & *(unsigned char *)&(known_magic[i].mask[0])) == *(unsigned char *)&(known_magic[i].mode[0]))
{
f_type(fd, known_magic[i].type);
goto magic_found;
@@ -1300,6 +1299,7 @@ const char *f_type(FILE *stream, const char *type)
{
stream_type[i].stream = stream;
strncpy(stream_type[i].type, type, 64);
+ stream_type[i].type[64] = '\0';
dprintf(stderr, "added entry (%s) for %p\n", type, stream);
}
return type;
@@ -1720,7 +1720,8 @@ void ShoutCAST_ParseMetaData(char *md, CSTATE *state)
if(!ptr)
{
ptr = strchr(md, '=');
- strncpy(state->title, ptr + 2, 4096);
+ strncpy(state->title, ptr + 2, 4095);
+ state->title[4095] = '\0';
ptr = strchr(state->title, ';');
if(ptr)
*(ptr - 1) = 0;
@@ -1736,7 +1737,8 @@ void ShoutCAST_ParseMetaData(char *md, CSTATE *state)
ptr = strstr(md, "StreamTitle=");
ptr = strchr(ptr, '\'');
- strncpy(state->artist, ptr + 1, 4096);
+ strncpy(state->artist, ptr + 1, 4095);
+ state->artist[4095] = '\0';
ptr = strstr(state->artist, " - ");
if(!ptr)
ptr = strstr(state->artist, ", ");
diff --git a/src/driver/pictureviewer/Makefile.am b/src/driver/pictureviewer/Makefile.am
index 1e7310784..0d55aafc3 100644
--- a/src/driver/pictureviewer/Makefile.am
+++ b/src/driver/pictureviewer/Makefile.am
@@ -23,5 +23,8 @@ endif
noinst_LIBRARIES = libneutrino_pictureviewer.a
libneutrino_pictureviewer_a_SOURCES = \
- pictureviewer.cpp png.cpp bmp.cpp \
- jpeg.cpp gif.cpp crw.cpp
+ crw.cpp \
+ gif.cpp \
+ jpeg.cpp \
+ pictureviewer.cpp \
+ png.cpp bmp.cpp
diff --git a/src/driver/pictureviewer/fb_display.cpp b/src/driver/pictureviewer/fb_display.cpp
index 469b07815..95b2a9b0e 100644
--- a/src/driver/pictureviewer/fb_display.cpp
+++ b/src/driver/pictureviewer/fb_display.cpp
@@ -18,7 +18,7 @@
#include
#include "fb_display.h"
#include "pictureviewer.h"
-#include "driver/framebuffer.h"
+#include
static unsigned char *lfb = 0;
diff --git a/src/driver/pictureviewer/pictureviewer.cpp b/src/driver/pictureviewer/pictureviewer.cpp
index d6983b472..6660e2069 100644
--- a/src/driver/pictureviewer/pictureviewer.cpp
+++ b/src/driver/pictureviewer/pictureviewer.cpp
@@ -3,7 +3,6 @@
#include
#include "pictureviewer.h"
#include "pv_config.h"
-#include "driver/framebuffer.h"
#include
#include
diff --git a/src/driver/pictureviewer/pictureviewer.h b/src/driver/pictureviewer/pictureviewer.h
index 094a11217..011fa8bee 100644
--- a/src/driver/pictureviewer/pictureviewer.h
+++ b/src/driver/pictureviewer/pictureviewer.h
@@ -30,7 +30,7 @@
#include
#include /* printf */
#include /* gettimeofday */
-#include "driver/framebuffer.h"
+#include
class CPictureViewer
{
struct cformathandler
diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp
index bbc86c756..1e7e8b595 100644
--- a/src/driver/rcinput.cpp
+++ b/src/driver/rcinput.cpp
@@ -300,7 +300,8 @@ void CRCInput::restartInput()
open();
input_stopped = false;
}
-
+#if 0
+//never used
int CRCInput::messageLoop( bool anyKeyCancels, int timeout )
{
neutrino_msg_t msg;
@@ -351,6 +352,7 @@ int CRCInput::messageLoop( bool anyKeyCancels, int timeout )
}
return res;
}
+#endif
int CRCInput::addTimer(uint64_t Interval, bool oneshot, bool correct_time )
{
@@ -1599,7 +1601,8 @@ void CRCInput::close_click()
void CRCInput::open_click()
{
}
-
+#if 0
+//never used
void CRCInput::reset_dsp(int /*rate*/)
{
}
@@ -1607,7 +1610,7 @@ void CRCInput::reset_dsp(int /*rate*/)
void CRCInput::set_dsp()
{
}
-
+#endif
void CRCInput::play_click()
{
}
diff --git a/src/driver/record.cpp b/src/driver/record.cpp
index bcde1f378..fa0836111 100644
--- a/src/driver/record.cpp
+++ b/src/driver/record.cpp
@@ -5,12 +5,11 @@
Copyright (C) 2011 CoolStream International Ltd
Copyright (C) 2011 Stefan Seyfried
- License: GPL
+ License: GPLv2
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
+ the Free Software Foundation;
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -41,22 +40,23 @@
#include
#include
#include
+#include
#include
#include
#include
#include
#include
#include
-#include
-#include
+#include
+
#include
-#include
#include
#include
#include
#include
#include
+#include
/* TODO:
* nextRecording / pending recordings - needs testing
@@ -65,12 +65,6 @@
*/
extern CRemoteControl * g_RemoteControl; /* neutrino.cpp */
-t_channel_id rec_channel_id;
-
-bool sectionsd_getActualEPGServiceKey(const t_channel_id uniqueServiceKey, CEPGData * epgdata);
-bool sectionsd_getEPGidShort(event_id_t epgID, CShortEPGData * epgdata);
-bool sectionsd_getEPGid(const event_id_t epgID, const time_t startzeit, CEPGData * epgdata);
-bool sectionsd_getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::ComponentTagList& tags);
extern "C" {
#include
@@ -135,7 +129,14 @@ void CRecordInstance::WaitRecMsg(time_t StartTime, time_t WaitTime)
usleep(100000);
}
-record_error_msg_t CRecordInstance::Start(CZapitChannel * channel /*, APIDList &apid_list*/)
+int CRecordInstance::GetStatus()
+{
+ if (record)
+ return record->GetStatus();
+ return 0;
+}
+
+record_error_msg_t CRecordInstance::Start(CZapitChannel * channel)
{
int fd;
std::string tsfile;
@@ -143,7 +144,7 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel /*, APIDList &
time_t msg_start_time = time(0);
CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_RECORDING_START));
hintBox.paint();
-
+
tsfile = std::string(filename) + ".ts";
printf("%s: file %s vpid %x apid %x\n", __FUNCTION__, tsfile.c_str(), allpids.PIDs.vpid, apids[0]);
@@ -176,11 +177,11 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel /*, APIDList &
record->Open();
- if(!record->Start(fd, (unsigned short ) allpids.PIDs.vpid, (unsigned short *) apids, numpids)) {
- /* Stop do close fd */
+ if(!record->Start(fd, (unsigned short ) allpids.PIDs.vpid, (unsigned short *) apids, numpids, channel_id)) {
record->Stop();
delete record;
record = NULL;
+ close(fd);
unlink(tsfile.c_str());
hintBox.hide();
return RECORD_FAILURE;
@@ -194,11 +195,6 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel /*, APIDList &
CCamManager::getInstance()->Start(channel->getChannelID(), CCamManager::RECORD);
- int len;
- unsigned char * pmt = channel->getRawPmt(len);
- cCA * ca = cCA::GetInstance();
- ca->SendPMT(channel->getRecordDemux() /*DEMUX_SOURCE_2*/, pmt, len);
-
//CVFD::getInstance()->ShowIcon(VFD_ICON_CAM1, true);
WaitRecMsg(msg_start_time, 2);
hintBox.hide();
@@ -220,12 +216,13 @@ bool CRecordInstance::Stop(bool remove_event)
time_t end_time = time(0);
recMovieInfo->length = (int) round((double) (end_time - start_time) / (double) 60);
-
+
CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, rec_stop_msg.c_str());
hintBox.paint();
printf("%s: channel %llx recording_id %d\n", __FUNCTION__, channel_id, recording_id);
SaveXml();
+ /* Stop do close fd - if started */
record->Stop();
if(!autoshift)
@@ -234,8 +231,8 @@ bool CRecordInstance::Stop(bool remove_event)
CCamManager::getInstance()->Stop(channel_id, CCamManager::RECORD);
if((autoshift && g_settings.auto_delete) /* || autoshift_delete*/) {
- snprintf(buf,sizeof(buf), "nice -n 20 rm -f %s.ts &", filename);
- system(buf);
+ snprintf(buf,sizeof(buf), "\"%s.ts\"", filename);
+ my_system("nice", "-n20", "rm", "-f", buf);
snprintf(buf,sizeof(buf), "%s.xml", filename);
//autoshift_delete = false;
unlink(buf);
@@ -296,7 +293,7 @@ bool CRecordInstance::Update()
EPG_AUDIO_PIDS audio_pids;
audio_pids.epgAudioPid = allpids.APIDs[i].pid;
- audio_pids.epgAudioPidName = g_RemoteControl->current_PIDs.APIDs[i].desc;
+ audio_pids.epgAudioPidName = allpids.APIDs[i].desc;
audio_pids.atype = allpids.APIDs[i].is_ac3 ? 1 : allpids.APIDs[i].is_aac ? 5 : 0;
audio_pids.selected = 0;
recMovieInfo->audioPids.push_back(audio_pids);
@@ -329,7 +326,7 @@ void CRecordInstance::GetPids(CZapitChannel * channel)
for (uint32_t i = 0; i < channel->getAudioChannelCount(); i++) {
CZapitClient::responseGetAPIDs response;
response.pid = channel->getAudioPid(i);
- strncpy(response.desc, channel->getAudioChannel(i)->description.c_str(), DESC_MAX_LEN);
+ strncpy(response.desc, channel->getAudioChannel(i)->description.c_str(), DESC_MAX_LEN - 1);
response.is_ac3 = response.is_aac = 0;
if (channel->getAudioChannel(i)->audioChannelType == CZapitAudioChannel::AC3) {
response.is_ac3 = 1;
@@ -352,26 +349,26 @@ void CRecordInstance::ProcessAPIDnames()
has_unresolved_ctags= true;
if ( strlen( allpids.APIDs[count].desc ) == 3 )
- strncpy( allpids.APIDs[count].desc, getISO639Description( allpids.APIDs[count].desc ),DESC_MAX_LEN );
+ strncpy( allpids.APIDs[count].desc, getISO639Description( allpids.APIDs[count].desc ),DESC_MAX_LEN -1 );
if ( allpids.APIDs[count].is_ac3 && !strstr(allpids.APIDs[count].desc, " (AC3)"))
- strncat(allpids.APIDs[count].desc, " (AC3)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc));
+ strncat(allpids.APIDs[count].desc, " (AC3)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc) -1);
else if (allpids.APIDs[count].is_aac && !strstr(allpids.APIDs[count].desc, " (AAC)"))
- strncat(allpids.APIDs[count].desc, " (AAC)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc));
+ strncat(allpids.APIDs[count].desc, " (AAC)", DESC_MAX_LEN - strlen(allpids.APIDs[count].desc) -1);
}
if(has_unresolved_ctags && (epgid != 0)) {
CSectionsdClient::ComponentTagList tags;
- if(sectionsd_getComponentTagsUniqueKey(epgid, tags)) {
+ if(CEitManager::getInstance()->getComponentTagsUniqueKey(epgid, tags)) {
for(unsigned int i=0; i< tags.size(); i++) {
for(unsigned int j=0; j< allpids.APIDs.size(); j++) {
if(allpids.APIDs[j].component_tag == tags[i].componentTag) {
if(!tags[i].component.empty()) {
- strncpy(allpids.APIDs[j].desc, tags[i].component.c_str(), DESC_MAX_LEN);
+ strncpy(allpids.APIDs[j].desc, tags[i].component.c_str(), DESC_MAX_LEN -1);
if (allpids.APIDs[j].is_ac3 && !strstr(allpids.APIDs[j].desc, " (AC3)"))
- strncat(allpids.APIDs[j].desc, " (AC3)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc));
+ strncat(allpids.APIDs[j].desc, " (AC3)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc)-1);
else if (allpids.APIDs[j].is_aac && !strstr(allpids.APIDs[j].desc, " (AAC)"))
- strncat(allpids.APIDs[j].desc, " (AAC)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc));
+ strncat(allpids.APIDs[j].desc, " (AAC)", DESC_MAX_LEN - strlen(allpids.APIDs[j].desc)-1);
}
allpids.APIDs[j].component_tag = -1;
break;
@@ -410,9 +407,7 @@ record_error_msg_t CRecordInstance::Record()
{
int pre=0, post=0;
CEPGData epgData;
- epgData.epg_times.startzeit = 0;
- epgData.epg_times.dauer = 0;
- if (sectionsd_getActualEPGServiceKey(channel_id&0xFFFFFFFFFFFFULL, &epgData )) {
+ if (CEitManager::getInstance()->getActualEPGServiceKey(channel_id, &epgData )) {
g_Timerd->getRecordingSafety(pre, post);
if (epgData.epg_times.startzeit > 0)
record_end = epgData.epg_times.startzeit + epgData.epg_times.dauer + post;
@@ -517,7 +512,7 @@ void CRecordInstance::FillMovieInfo(CZapitChannel * channel, APIDList & apid_lis
tmpstring = "not available";
if (epgid != 0) {
CEPGData epgdata;
- if (sectionsd_getEPGid(epgid, epg_time, &epgdata)) {
+ if (CEitManager::getInstance()->getEPGid(epgid, epg_time, &epgdata)) {
tmpstring = epgdata.title;
info1 = epgdata.info1;
info2 = epgdata.info2;
@@ -548,7 +543,7 @@ void CRecordInstance::FillMovieInfo(CZapitChannel * channel, APIDList & apid_lis
for(it = apid_list.begin(); it != apid_list.end(); ++it) {
if(allpids.APIDs[i].pid == it->apid) {
audio_pids.epgAudioPid = allpids.APIDs[i].pid;
- audio_pids.epgAudioPidName = g_RemoteControl->current_PIDs.APIDs[i].desc;
+ audio_pids.epgAudioPidName = allpids.APIDs[i].desc;
audio_pids.atype = allpids.APIDs[i].is_ac3 ? 1 : allpids.APIDs[i].is_aac ? 5 : 0;
audio_pids.selected = (audio_pids.epgAudioPid == channel->getAudioPid()) ? 1 : 0;
recMovieInfo->audioPids.push_back(audio_pids);
@@ -559,7 +554,7 @@ void CRecordInstance::FillMovieInfo(CZapitChannel * channel, APIDList & apid_lis
if(recMovieInfo->audioPids.empty() && !allpids.APIDs.empty()) {
int i = 0;
audio_pids.epgAudioPid = allpids.APIDs[i].pid;
- audio_pids.epgAudioPidName = g_RemoteControl->current_PIDs.APIDs[i].desc;
+ audio_pids.epgAudioPidName = allpids.APIDs[i].desc;
audio_pids.atype = allpids.APIDs[i].is_ac3 ? 1 : allpids.APIDs[i].is_aac ? 5 : 0;
audio_pids.selected = 1;
recMovieInfo->audioPids.push_back(audio_pids);
@@ -580,6 +575,8 @@ record_error_msg_t CRecordInstance::MakeFileName(CZapitChannel * channel)
return RECORD_INVALID_DIRECTORY;
/* fallback to g_settings.network_nfs_recordingdir */
Directory = std::string(g_settings.network_nfs_recordingdir);
+ }else{
+ return RECORD_INVALID_DIRECTORY;
}
}
@@ -607,23 +604,23 @@ record_error_msg_t CRecordInstance::MakeFileName(CZapitChannel * channel)
if (errno == ENOENT) {
res = safe_mkdir(filename);
if (res == 0)
- strncat(filename,"/",FILENAMEBUFFERSIZE - strlen(filename));
+ strncat(filename,"/",FILENAMEBUFFERSIZE - strlen(filename) -1);
else
perror("[vcrcontrol] mkdir");
- } else
+ } else
perror("[vcrcontrol] stat");
} else
// directory exists
- strncat(filename,"/",FILENAMEBUFFERSIZE - strlen(filename));
+ strncat(filename,"/",FILENAMEBUFFERSIZE - strlen(filename)-1);
} else
- strncat(filename, "_",FILENAMEBUFFERSIZE - strlen(filename));
+ strncat(filename, "_",FILENAMEBUFFERSIZE - strlen(filename)-1);
}
pos = strlen(filename);
if (g_settings.recording_epg_for_filename) {
if(epgid != 0) {
CShortEPGData epgdata;
- if(sectionsd_getEPGidShort(epgid, &epgdata)) {
+ if(CEitManager::getInstance()->getEPGidShort(epgid, &epgdata)) {
if (!(epgdata.title.empty())) {
strcpy(&(filename[pos]), epgdata.title.c_str());
ZapitTools::replace_char(&filename[pos]);
@@ -640,7 +637,7 @@ record_error_msg_t CRecordInstance::MakeFileName(CZapitChannel * channel)
pos += strftime(&(filename[pos]), sizeof(filename) - pos - 1, "%Y%m%d_%H%M%S", localtime(&t));
if(autoshift)
- strncat(filename, "_temp",FILENAMEBUFFERSIZE - strlen(filename));
+ strncat(filename, "_temp",FILENAMEBUFFERSIZE - strlen(filename)-1);
return RECORD_OK;
}
@@ -653,7 +650,10 @@ void CRecordInstance::GetRecordString(std::string &str)
str = "Unknown channel : " + GetEpgTitle();
return;
}
- str = channel->getName() + ": " + GetEpgTitle();
+ char stime[15];
+ int err = GetStatus();
+ strftime(stime, sizeof(stime), "%H:%M:%S ", localtime(&start_time));
+ str = stime + channel->getName() + ": " + GetEpgTitle() + ((err & REC_STATUS_OVERFLOW) ? " [!]" : "");
}
//-------------------------------------------------------------------------
@@ -665,11 +665,14 @@ CRecordManager::CRecordManager()
StreamVTxtPid = false;
StreamPmtPid = false;
StopSectionsd = false;
- recordingstatus = 0;
+ //recordingstatus = 0;
recmap.clear();
nextmap.clear();
autoshift = false;
shift_timer = 0;
+ check_timer = 0;
+ error_display = true;
+ warn_display = true;
}
CRecordManager::~CRecordManager()
@@ -700,36 +703,66 @@ CRecordManager * CRecordManager::getInstance()
CRecordInstance * CRecordManager::FindInstance(t_channel_id channel_id)
{
- recmap_iterator_t it = recmap.find(channel_id);
- if(it != recmap.end())
- return it->second;
+ for (recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) {
+ if (it->second->GetChannelId() == channel_id)
+ return it->second;
+ }
return NULL;
}
-MI_MOVIE_INFO * CRecordManager::GetMovieInfo(t_channel_id channel_id)
+CRecordInstance * CRecordManager::FindInstanceID(int recid)
+{
+ for (recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) {
+ if (it->second->GetRecordingId() == recid)
+ return it->second;
+ }
+ return NULL;
+}
+
+CRecordInstance * CRecordManager::FindTimeshift()
+{
+ for (recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) {
+ if (it->second->Timeshift())
+ return it->second;
+ }
+ return NULL;
+}
+
+MI_MOVIE_INFO * CRecordManager::GetMovieInfo(t_channel_id channel_id, bool timeshift)
{
//FIXME copy MI_MOVIE_INFO ?
MI_MOVIE_INFO * mi = NULL;
mutex.lock();
- CRecordInstance * inst = FindInstance(channel_id);
- if(inst)
+ CRecordInstance * inst = NULL;
+ if (timeshift)
+ inst = FindTimeshift();
+ if (inst == NULL)
+ inst = FindInstance(channel_id);
+ if (inst)
mi = inst->GetMovieInfo();
mutex.unlock();
return mi;
}
-const std::string CRecordManager::GetFileName(t_channel_id channel_id)
+const std::string CRecordManager::GetFileName(t_channel_id channel_id, bool timeshift)
{
std::string filename;
- CRecordInstance * inst = FindInstance(channel_id);
+ CRecordInstance * inst = NULL;
+ if (timeshift)
+ inst = FindTimeshift();
+ if (inst == NULL)
+ inst = FindInstance(channel_id);
+
if(inst)
filename = inst->GetFileName();
return filename;
}
+/* return record mode mask, for channel_id not 0, or global */
int CRecordManager::GetRecordMode(const t_channel_id channel_id)
{
+#if 0
if (RecordingStatus(channel_id) || IsTimeshift(channel_id))
{
if (RecordingStatus(channel_id) && !IsTimeshift(channel_id))
@@ -743,13 +776,34 @@ int CRecordManager::GetRecordMode(const t_channel_id channel_id)
return RECMODE_REC_TSHIFT;
else
return RECMODE_OFF;
- }else
+ } else
{
if (IsTimeshift(channel_id))
return RECMODE_TSHIFT;
}
}
return RECMODE_OFF;
+#endif
+ int recmode = RECMODE_OFF;
+ mutex.lock();
+ if (channel_id == 0) {
+ /* we can have only one timeshift instance, if there are more - some is record */
+ if ((!autoshift && !recmap.empty()) || recmap.size() > 1)
+ recmode |= RECMODE_REC;
+ if (autoshift)
+ recmode |= RECMODE_TSHIFT;
+ } else {
+ for (recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) {
+ if (it->second->GetChannelId() == channel_id) {
+ if (it->second->Timeshift())
+ recmode |= RECMODE_TSHIFT;
+ else
+ recmode |= RECMODE_REC;
+ }
+ }
+ }
+ mutex.unlock();
+ return recmode;
}
bool CRecordManager::Record(const t_channel_id channel_id, const char * dir, bool timeshift)
@@ -759,7 +813,7 @@ bool CRecordManager::Record(const t_channel_id channel_id, const char * dir, boo
eventinfo.eventID = 0;
eventinfo.channel_id = channel_id;
- if (sectionsd_getActualEPGServiceKey(channel_id&0xFFFFFFFFFFFFULL, &epgData )) {
+ if (CEitManager::getInstance()->getActualEPGServiceKey(channel_id, &epgData )) {
eventinfo.epgID = epgData.eventID;
eventinfo.epg_starttime = epgData.epg_times.startzeit;
strncpy(eventinfo.epgTitle, epgData.title.c_str(), EPG_TITLE_MAXLEN-1);
@@ -772,7 +826,7 @@ bool CRecordManager::Record(const t_channel_id channel_id, const char * dir, boo
}
eventinfo.apids = TIMERD_APIDS_CONF;
eventinfo.recordingDir[0] = 0;
-
+
return Record(&eventinfo, dir, timeshift);
}
@@ -787,8 +841,10 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons
printf("%s channel_id %llx epg: %llx, apidmode 0x%X\n", __FUNCTION__,
eventinfo->channel_id, eventinfo->epgID, eventinfo->apids);
+#if 0
if(!CheckRecording(eventinfo))
return false;
+#endif
#if 1 // FIXME test
StopSectionsd = false;
@@ -798,25 +854,21 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons
RunStartScript();
mutex.lock();
- recmap_iterator_t it = recmap.find(eventinfo->channel_id);
- if(it != recmap.end()) {
- //inst = it->second;
+#if 0
+ inst = FindInstance(eventinfo->channel_id);
+ if(inst) {
if(direct_record) {
error_msg = RECORD_BUSY;
} else {
- //nextmap.push_back((CTimerd::RecordingInfo *)eventinfo);
CTimerd::RecordingInfo * evt = new CTimerd::RecordingInfo(*eventinfo);
printf("%s add %llx : %s to pending\n", __FUNCTION__, evt->channel_id, evt->epgTitle);
nextmap.push_back((CTimerd::RecordingInfo *)evt);
}
- } else if(recmap.size() < RECORD_MAX_COUNT) {
-#if 1//FIXME test
- CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(eventinfo->channel_id);
- CFrontend * frontend = CFEManager::getInstance()->allocateFE(channel);
- int mode = channel->getServiceType() != ST_DIGITAL_RADIO_SOUND_SERVICE ?
- NeutrinoMessages::mode_tv : NeutrinoMessages::mode_radio;
+ } else
#endif
- if(frontend && CutBackNeutrino(eventinfo->channel_id, mode)) {
+ if(recmap.size() < RECORD_MAX_COUNT) {
+ CFrontend * frontend = NULL;
+ if(CutBackNeutrino(eventinfo->channel_id, frontend)) {
std::string newdir;
if(dir && strlen(dir))
newdir = std::string(dir);
@@ -825,21 +877,20 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons
else
newdir = Directory;
- if (inst == NULL)
- inst = new CRecordInstance(eventinfo, newdir, timeshift, StreamVTxtPid, StreamPmtPid);
+ inst = new CRecordInstance(eventinfo, newdir, timeshift, StreamVTxtPid, StreamPmtPid);
inst->frontend = frontend;
error_msg = inst->Record();
if(error_msg == RECORD_OK) {
- recmap.insert(std::pair(eventinfo->channel_id, inst));
+ recmap.insert(recmap_pair_t(inst->GetRecordingId(), inst));
if(timeshift)
autoshift = true;
+#if 0
// mimic old behavior for start/stop menu option chooser, still actual ?
t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID();
- if(eventinfo->channel_id == live_channel_id) {
+ if(eventinfo->channel_id == live_channel_id)
recordingstatus = 1;
- rec_channel_id = live_channel_id;//FIXME
- }
+#endif
} else {
delete inst;
}
@@ -854,22 +905,31 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons
mutex.unlock();
if (error_msg == RECORD_OK) {
+ if (check_timer == 0)
+ check_timer = g_RCInput->addTimer(5*1000*1000, false);
+
+ /* set flag to show record error if any */
+ error_display = true;
+ warn_display = true;
return true;
}
- else /*if(!timeshift)*/ {
- RunStopScript();
- RestoreNeutrino();
- printf("[recordmanager] %s: error code: %d\n", __FUNCTION__, error_msg);
+ printf("[recordmanager] %s: error code: %d\n", __FUNCTION__, error_msg);
+ /* RestoreNeutrino must be called always if record start failed */
+ RunStopScript();
+ RestoreNeutrino();
+
+ /* FIXME show timeshift start error or not ? */
+ //if(!timeshift)
+ {
//FIXME: Use better error message
DisplayErrorMessage(g_Locale->getText(
error_msg == RECORD_BUSY ? LOCALE_STREAMING_BUSY :
error_msg == RECORD_INVALID_DIRECTORY ? LOCALE_STREAMING_DIR_NOT_WRITABLE :
LOCALE_STREAMING_WRITE_ERROR )); // UTF-8
- return false;
}
-
- return true;
+
+ return false;
}
bool CRecordManager::StartAutoRecord()
@@ -880,10 +940,8 @@ bool CRecordManager::StartAutoRecord()
return Record(live_channel_id, TimeshiftDirectory.c_str(), true);
}
-bool CRecordManager::StopAutoRecord()
+bool CRecordManager::StopAutoRecord(bool lock)
{
- bool found = false;
-
printf("%s: autoshift %d\n", __FUNCTION__, autoshift);
g_RCInput->killTimer (shift_timer);
@@ -891,29 +949,30 @@ bool CRecordManager::StopAutoRecord()
if(!autoshift)
return false;
- mutex.lock();
- t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID();
- CRecordInstance * inst = FindInstance(live_channel_id);
- if(inst && inst->Timeshift())
- found = true;
- mutex.unlock();
+ if (lock)
+ mutex.lock();
- if(found) {
- Stop(live_channel_id);
- autoshift = false;
- }
+ CRecordInstance * inst = FindTimeshift();
+ if (inst)
+ StopInstance(inst);
- return found;
+ if (lock)
+ mutex.unlock();
+
+ return (inst != NULL);
}
+#if 0
bool CRecordManager::CheckRecording(const CTimerd::RecordingInfo * const eventinfo)
{
t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID();
- if((eventinfo->channel_id == live_channel_id) || !SAME_TRANSPONDER(eventinfo->channel_id, live_channel_id))
+ /* FIXME check if frontend used for timeshift the same and will zap ?? */
+ if(/*(eventinfo->channel_id == live_channel_id) ||*/ !SAME_TRANSPONDER(eventinfo->channel_id, live_channel_id))
StopAutoRecord();
return true;
}
+#endif
void CRecordManager::StartNextRecording()
{
@@ -921,8 +980,9 @@ void CRecordManager::StartNextRecording()
printf("%s: pending count %d\n", __FUNCTION__, nextmap.size());
for(nextmap_iterator_t it = nextmap.begin(); it != nextmap.end(); it++) {
- bool tested = true;
eventinfo = *it;
+#if 0
+ bool tested = true;
if( !recmap.empty() ) {
CRecordInstance * inst = FindInstance(eventinfo->channel_id);
/* same channel recording and not auto - skip */
@@ -934,21 +994,28 @@ void CRecordManager::StartNextRecording()
else {
/* there are some recordings, test any (first) for now */
recmap_iterator_t fit = recmap.begin();
- t_channel_id channel_id = fit->first;
+ t_channel_id channel_id = fit->second->GetChannelId();
tested = (SAME_TRANSPONDER(channel_id, eventinfo->channel_id));
}
}
- if(tested) {
+ if(tested)
+#endif
+ CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(eventinfo->channel_id);
+ if (channel && CFEManager::getInstance()->canTune(channel))
+ {
//MountDirectory(eventinfo->recordingDir);//FIXME in old neutrino startNextRecording commented
bool ret = Record(eventinfo);
if(ret) {
- it = nextmap.erase(it);
delete[] (unsigned char *) eventinfo;
+ it = nextmap.erase(it++);
+ if (it == nextmap.end())
+ break;
}
}
}
}
+/* return true, if there are any recording running for this channel id, or global if id is 0 */
bool CRecordManager::RecordingStatus(const t_channel_id channel_id)
{
bool ret = false;
@@ -973,17 +1040,18 @@ bool CRecordManager::TimeshiftOnly()
return (autoshift && (count == 1));
}
+/* FIXME no check for multi-tuner */
bool CRecordManager::SameTransponder(const t_channel_id channel_id)
{
bool same = true;
mutex.lock();
int count = recmap.size();
if(count) {
- if(autoshift && count == 1)
+ if(autoshift && count == 1)
same = true;
else {
recmap_iterator_t fit = recmap.begin();
- t_channel_id id = fit->first;
+ t_channel_id id = fit->second->GetChannelId();
same = (SAME_TRANSPONDER(channel_id, id));
}
}
@@ -991,52 +1059,55 @@ bool CRecordManager::SameTransponder(const t_channel_id channel_id)
return same;
}
+void CRecordManager::StopInstance(CRecordInstance * inst, bool remove_event)
+{
+ /* first erase - then stop, because Stop() reset recording_id to 0 */
+ recmap.erase(inst->GetRecordingId());
+ inst->Stop(remove_event);
+
+ if(inst->Timeshift())
+ autoshift = false;
+
+#if 0
+ t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID();
+ if(inst->GetChannelId() == live_channel_id)
+ recordingstatus = 0;
+#endif
+ delete inst;
+}
bool CRecordManager::Stop(const t_channel_id channel_id)
{
printf("%s: %llx\n", __FUNCTION__, channel_id);
mutex.lock();
+
+ /* FIXME stop all ? show list ? */
CRecordInstance * inst = FindInstance(channel_id);
- if(inst != NULL) {
- inst->Stop();
- recmap.erase(channel_id);
- if(inst->Timeshift())
- autoshift = false;
- delete inst;
- t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID();
- if(channel_id == live_channel_id) {
- recordingstatus = 0;
- rec_channel_id = 0;//FIXME
- }
- } else
+ if(inst != NULL)
+ StopInstance(inst);
+ else
printf("%s: channel %llx not recording\n", __FUNCTION__, channel_id);
+
mutex.unlock();
StopPostProcess();
-
+
return (inst != NULL);
}
bool CRecordManager::Stop(const CTimerd::RecordingStopInfo * recinfo)
{
bool ret = false;
-
+
printf("%s: eventID %d channel_id %llx\n", __FUNCTION__, recinfo->eventID, recinfo->channel_id);
mutex.lock();
- CRecordInstance * inst = FindInstance(recinfo->channel_id);
+ CRecordInstance * inst = FindInstanceID(recinfo->eventID);
if(inst != NULL && recinfo->eventID == inst->GetRecordingId()) {
- inst->Stop(false);
- recmap.erase(recinfo->channel_id);
- if(inst->Timeshift())
- autoshift = false;
- delete inst;
+ StopInstance(inst, false);
ret = true;
- t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID();
- if(recinfo->channel_id == live_channel_id)
- recordingstatus = 0;
} else {
for(nextmap_iterator_t it = nextmap.begin(); it != nextmap.end(); it++) {
if((*it)->eventID == recinfo->eventID) {
@@ -1055,7 +1126,7 @@ bool CRecordManager::Stop(const CTimerd::RecordingStopInfo * recinfo)
mutex.unlock();
StopPostProcess();
-
+
return ret;
}
@@ -1064,6 +1135,8 @@ void CRecordManager::StopPostProcess()
RestoreNeutrino();
StartNextRecording();
RunStopScript();
+ if(!RecordingStatus())
+ g_RCInput->killTimer(check_timer);
}
bool CRecordManager::Update(const t_channel_id channel_id)
@@ -1096,10 +1169,32 @@ int CRecordManager::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data
StartAutoRecord();
return messages_return::handled;
}
+ else if(data == check_timer) {
+ if(CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_standby) {
+ mutex.lock();
+ int have_err = 0;
+ for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++)
+ have_err |= it->second->GetStatus();
+ mutex.unlock();
+ //printf("%s: check status: show err %d warn %d have_err %d\n", __FUNCTION__, error_display, warn_display, have_err); //FIXME
+ if (have_err) {
+ if ((have_err & REC_STATUS_OVERFLOW) && error_display) {
+ error_display = false;
+ warn_display = false;
+ DisplayErrorMessage(g_Locale->getText(LOCALE_STREAMING_OVERFLOW));
+ } else if (warn_display) {
+ warn_display = false;
+ DisplayErrorMessage(g_Locale->getText(LOCALE_STREAMING_SLOW));
+ }
+ }
+ return messages_return::handled;
+ }
+ }
}
return messages_return::unhandled;
}
+#if 0
bool CRecordManager::IsTimeshift(t_channel_id channel_id)
{
bool ret = false;
@@ -1112,12 +1207,11 @@ bool CRecordManager::IsTimeshift(t_channel_id channel_id)
ret = true;
else
ret = false;
- }else
+ } else
{
for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++)
{
- inst = it->second;
- if(inst && inst->tshift_mode)
+ if(it->second->tshift_mode)
{
mutex.unlock();
return true;
@@ -1130,44 +1224,56 @@ bool CRecordManager::IsTimeshift(t_channel_id channel_id)
void CRecordManager::SetTimeshiftMode(CRecordInstance * inst, int mode)
{
- CRecordInstance * tmp_inst;
mutex.lock();
+ /* reset all instances mode ? */
for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++)
- {
- tmp_inst = it->second;
- if (tmp_inst)
- tmp_inst->tshift_mode = TSHIFT_MODE_OFF;
- }
+ it->second->tshift_mode = TSHIFT_MODE_OFF;
+
mutex.unlock();
if (inst)
inst->tshift_mode = mode;
}
+#endif
void CRecordManager::StartTimeshift()
{
if(g_RemoteControl->is_video_started)
{
- std::string tmode;
+ std::string tmode = "ptimeshift"; // already recording, pause
bool res = true;
t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID();
+#if 0
if(RecordingStatus(live_channel_id))
{
tmode = "ptimeshift"; // already recording, pause
if(GetRecordMode(live_channel_id) == RECMODE_TSHIFT)
SetTimeshiftMode(FindInstance(live_channel_id), TSHIFT_MODE_PAUSE);
- }else
+ } else
{
if(g_settings.temp_timeshift)
{
res = StartAutoRecord();
SetTimeshiftMode(FindInstance(live_channel_id), TSHIFT_MODE_TEMPORAER);
- }else
+ } else
{
res = Record(live_channel_id);
SetTimeshiftMode(FindInstance(live_channel_id), TSHIFT_MODE_PERMANET);
}
tmode = "timeshift"; // record just started
}
+#endif
+ /* start temporary timeshift if enabled and not running, but dont start second record */
+ if (g_settings.temp_timeshift) {
+ if (!FindTimeshift()) {
+ res = StartAutoRecord();
+ tmode = "timeshift"; // record just started
+ }
+ }
+ else if (!RecordingStatus(live_channel_id)) {
+ res = Record(live_channel_id);
+ tmode = "timeshift"; // record just started
+ }
+
if(res)
{
CMoviePlayerGui::getInstance().exec(NULL, tmode);
@@ -1187,76 +1293,24 @@ int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey )
char rec_msg[256];
char rec_msg1[256];
int records = recmap.size();
-
+
snprintf(rec_msg1, sizeof(rec_msg1)-1, "%s", g_Locale->getText(LOCALE_RECORDINGMENU_MULTIMENU_ASK_STOP_ALL));
snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records);
if(ShowMsgUTF(LOCALE_SHUTDOWN_RECODING_QUERY, rec_msg,
CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes)
{
snprintf(rec_msg1, sizeof(rec_msg1)-1, "%s", g_Locale->getText(LOCALE_RECORDINGMENU_MULTIMENU_INFO_STOP_ALL));
-// focus: i think no sense for 2 loops, because this code run in the same thread as neutrino,
-// so neutrino dont have a chance to handle RECORD_STOP before this function returns
-#if 0
- int i = 0;
- int recording_ids[RECORD_MAX_COUNT];
- t_channel_id channel_ids[RECORD_MAX_COUNT];
- t_channel_id channel_id;
- recmap_iterator_t it;
- mutex.lock();
- for(it = recmap.begin(); it != recmap.end(); it++)
- {
- recording_ids[i] = 0;
- channel_id = it->first;
- CRecordInstance * inst = it->second;
-
- snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records-i, records);
- inst-> SetStopMessage(rec_msg);
-
- if(inst)
- {
- channel_ids[i] = channel_id;
- recording_ids[i] = inst->GetRecordingId();
- printf("CRecordManager::exec(ExitAll line %d) found channel %llx recording_id %d\n", __LINE__, channel_ids[i], recording_ids[i]);
- i++;
- }
- if (i >= RECORD_MAX_COUNT)
- break;
- }
- mutex.unlock();
- if (i > 0 && i < RECORD_MAX_COUNT)
- {
- for(int i2 = 0; i2 < i; i2++)
- {
- mutex.lock();
- CRecordInstance * inst = FindInstance(channel_ids[i2]);
-
- snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records-i2, records);
- inst-> SetStopMessage(rec_msg);
-
- if(inst == NULL || recording_ids[i2] != inst->GetRecordingId())
- {
- printf("CRecordManager::exec(ExitAll line %d) channel %llx event id %d not found\n", __LINE__, channel_ids[i2], recording_ids[i2]);
- }else
- {
- usleep(500000);
- printf("CRecordManager::exec(ExitAll line %d) stop channel %llx recording_id %d\n", __LINE__, channel_ids[i2], recording_ids[i2]);
- g_Timerd->stopTimerEvent(recording_ids[i2]);
- }
- mutex.unlock();
- }
- }
-#endif
int i = 0;
mutex.lock();
for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++)
{
- t_channel_id channel_id = it->first;
CRecordInstance * inst = it->second;
-
+ t_channel_id channel_id = inst->GetChannelId();
+
snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records-i, records);
inst->SetStopMessage(rec_msg);
-
+
printf("CRecordManager::exec(ExitAll line %d) found channel %llx recording_id %d\n", __LINE__, channel_id, inst->GetRecordingId());
g_Timerd->stopTimerEvent(inst->GetRecordingId());
i++;
@@ -1264,34 +1318,42 @@ int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey )
mutex.unlock();
}
return menu_return::RETURN_EXIT_ALL;
- }else if(actionKey == "Record")
+ } else if(actionKey == "Record")
{
printf("[neutrino] direct record\n");
t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID();
-
- if(!CRecordManager::getInstance()->RecordingStatus(live_channel_id))
- {
+
+ bool tostart = true;
+ CRecordInstance * inst = FindInstance(live_channel_id);
+ if (inst) {
+ std::string title;
+ inst->GetRecordString(title);
+ tostart = (ShowMsgUTF(LOCALE_RECORDING_IS_RUNNING, title.c_str(),
+ CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes);
+ }
+ if (tostart) {
CRecordManager::getInstance()->Record(live_channel_id);
-
+
if(!g_InfoViewer->is_visible) // show Infoviewer
CNeutrinoApp::getInstance()->showInfo();
-
- return menu_return::RETURN_EXIT_ALL;
+
+ return menu_return::RETURN_EXIT_ALL;
}
+#if 0
else
DisplayInfoMessage(g_Locale->getText(LOCALE_RECORDING_IS_RUNNING));
- }else if(actionKey == "Timeshift")
+#endif
+ } else if(actionKey == "Timeshift")
{
StartTimeshift();
return menu_return::RETURN_EXIT_ALL;
- }else if(actionKey == "Stop_record")
+ } else if(actionKey == "Stop_record")
{
if(!CRecordManager::getInstance()->RecordingStatus()) {
ShowHintUTF(LOCALE_MAINMENU_RECORDING_STOP, g_Locale->getText(LOCALE_RECORDINGMENU_RECORD_IS_NOT_RUNNING), 450, 2);
return menu_return::RETURN_EXIT_ALL;
- }
+ }
}
-
ShowMenu();
return menu_return::RETURN_REPAINT;
@@ -1313,38 +1375,40 @@ bool CRecordManager::ShowMenu(void)
// Record / Timeshift
t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID();
- bool status_ts = IsTimeshift(live_channel_id);
- bool status_rec = RecordingStatus(live_channel_id) && !status_ts;
-
+
+ int rec_mode = GetRecordMode(live_channel_id);
+ bool status_ts = rec_mode & RECMODE_TSHIFT;
+ //bool status_rec = rec_mode & RECMODE_REC;
+
//record item
- iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_REC_AKT, (!status_rec && !status_ts), NULL,
+ iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_REC_AKT, true /*!status_rec*/, NULL,
this, "Record", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED);
//if no recordings are running, set the focus to the record menu item
menu.addItem(iteml, rec_count == 0 ? true: false);
-
+
//timeshift item
- iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_TIMESHIFT, !status_ts, NULL,
+ iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_TIMESHIFT, !status_ts, NULL,
this, "Timeshift", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW);
menu.addItem(iteml, false);
-
- if(rec_count > 0)
+
+ if(rec_count > 0)
{
menu.addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_MAINMENU_RECORDING_STOP));
mutex.lock();
-
+
int i = 0 , shortcut = 1;
for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) {
- t_channel_id channel_id = it->first;
CRecordInstance * inst = it->second;
- channel_ids[i] = channel_id;
+ channel_ids[i] = inst->GetChannelId();
recording_ids[i] = inst->GetRecordingId();
-
+
std::string title;
inst->GetRecordString(title);
-
+
const char* mode_icon = NULL;
- if (inst->tshift_mode)
+ //if (inst->tshift_mode)
+ if (inst->Timeshift())
mode_icon = NEUTRINO_ICON_AUTO_SHIFT;
sprintf(cnt, "%d", i);
@@ -1354,10 +1418,10 @@ bool CRecordManager::ShowMenu(void)
if (rec_count == 1){
rc_key = CRCInput::RC_stop;
btn_icon = NEUTRINO_ICON_BUTTON_STOP;
- }
+ }
item = new CMenuForwarderNonLocalized(title.c_str(), true, NULL, selector, cnt, rc_key, NULL, mode_icon);
item->setItemButton(btn_icon, true);
-
+
//if only one recording is running, set the focus to this menu item
menu.addItem(item, rec_count == 1 ? true: false);
i++;
@@ -1367,10 +1431,10 @@ bool CRecordManager::ShowMenu(void)
if(i > 1) //menu item "stopp all records"
{
menu.addItem(GenericMenuSeparatorLine);
- iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_STOP_ALL, true, NULL,
+ iteml = new CMenuForwarder(LOCALE_RECORDINGMENU_MULTIMENU_STOP_ALL, true, NULL,
this, "StopAll", CRCInput::RC_stop);
iteml->setItemButton(NEUTRINO_ICON_BUTTON_STOP, true);
-
+
//if more than one recording is running, set the focus to menu item 'stopp all records'
menu.addItem(iteml, rec_count > 1 ? true: false);
}
@@ -1383,28 +1447,32 @@ bool CRecordManager::ShowMenu(void)
if (select >= 0 && select < RECORD_MAX_COUNT) {
/* in theory, timer event can expire while we in menu ? lock and check again */
mutex.lock();
- CRecordInstance * inst = FindInstance(channel_ids[select]);
+ CRecordInstance * inst = FindInstanceID(recording_ids[select]);
if(inst == NULL || recording_ids[select] != inst->GetRecordingId()) {
printf("%s: channel %llx event id %d not found\n", __FUNCTION__, channel_ids[select], recording_ids[select]);
mutex.unlock();
return false;
}
mutex.unlock();
- //return Stop(channel_ids[select]);
- return AskToStop(channel_ids[select]);
+ return AskToStop(channel_ids[select], recording_ids[select]);
}
return false;
}
-bool CRecordManager::AskToStop(const t_channel_id channel_id)
+bool CRecordManager::AskToStop(const t_channel_id channel_id, const int recid)
{
- int recording_id = 0;
+ //int recording_id = 0;
std::string title;
+ CRecordInstance * inst;
mutex.lock();
- CRecordInstance * inst = FindInstance(channel_id);
+ if (recid)
+ inst = FindInstanceID(recid);
+ else
+ inst = FindInstance(channel_id);
+
if(inst) {
- recording_id = inst->GetRecordingId();
+ //recording_id = inst->GetRecordingId();
inst->GetRecordString(title);
}
mutex.unlock();
@@ -1413,7 +1481,17 @@ bool CRecordManager::AskToStop(const t_channel_id channel_id)
if(ShowMsgUTF(LOCALE_SHUTDOWN_RECODING_QUERY, title.c_str(),
CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) {
+#if 0
g_Timerd->stopTimerEvent(recording_id);
+#endif
+ mutex.lock();
+ if (recid)
+ inst = FindInstanceID(recid);
+ else
+ inst = FindInstance(channel_id);
+ if (inst)
+ StopInstance(inst);
+ mutex.unlock();
return true;
}
return false;
@@ -1426,7 +1504,7 @@ bool CRecordManager::RunStartScript(void)
return false;
puts("[neutrino.cpp] executing " NEUTRINO_RECORDING_START_SCRIPT ".");
- if (safe_system(NEUTRINO_RECORDING_START_SCRIPT) != 0) {
+ if (my_system(NEUTRINO_RECORDING_START_SCRIPT) != 0) {
perror(NEUTRINO_RECORDING_START_SCRIPT " failed");
return false;
}
@@ -1440,7 +1518,7 @@ bool CRecordManager::RunStopScript(void)
return false;
puts("[neutrino.cpp] executing " NEUTRINO_RECORDING_ENDED_SCRIPT ".");
- if (safe_system(NEUTRINO_RECORDING_ENDED_SCRIPT) != 0) {
+ if (my_system(NEUTRINO_RECORDING_ENDED_SCRIPT) != 0) {
perror(NEUTRINO_RECORDING_ENDED_SCRIPT " failed");
return false;
}
@@ -1458,63 +1536,54 @@ bool CRecordManager::RunStopScript(void)
* if zap ok
* set record mode
*/
-bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, const int mode)
+bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * &frontend)
{
bool ret = true;
+ CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(channel_id);
+ if (!channel)
+ return false;
+
+ int mode = channel->getServiceType() != ST_DIGITAL_RADIO_SOUND_SERVICE ?
+ NeutrinoMessages::mode_tv : NeutrinoMessages::mode_radio;
+
printf("%s channel_id %llx mode %d\n", __FUNCTION__, channel_id, mode);
last_mode = CNeutrinoApp::getInstance()->getMode();
-
- if(last_mode == NeutrinoMessages::mode_standby && recmap.empty())
+ if(last_mode == NeutrinoMessages::mode_standby && recmap.empty()) {
g_Zapit->setStandby(false); // this zap to live_channel_id
+ /* wait for zapit wakeup */
+ g_Zapit->getMode();
+ }
t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID();
-#if 0
- if(live_channel_id != channel_id) {
- if(SAME_TRANSPONDER(live_channel_id, channel_id)) {
- printf("%s zapTo_record channel_id %llx\n", __FUNCTION__, channel_id);
- ret = g_Zapit->zapTo_record(channel_id) > 0;
- } else if(!recmap.empty()) {
- ret = false;
- } else {
- if (mode != last_mode && (last_mode != NeutrinoMessages::mode_standby || mode != CNeutrinoApp::getInstance()->getLastMode())) {
- CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , mode | NeutrinoMessages::norezap );
- // When we were on standby, then we need not wake up for streaming
- if(last_mode == NeutrinoMessages::mode_standby)
- CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , NeutrinoMessages::mode_standby);
- }
- ret = g_Zapit->zapTo_serviceID(channel_id) > 0;
- printf("%s zapTo_serviceID channel_id %llx result %d\n", __FUNCTION__, channel_id, ret);
-
- if(!ret)
- CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , last_mode);
- else if(last_mode == NeutrinoMessages::mode_standby)
- g_Zapit->stopPlayBack();
- }
- if(!ret)
- printf("%s: failed to change channel\n", __FUNCTION__);
- }
-#endif
bool mode_changed = false;
+ CFrontend *live_fe = CZapit::getInstance()->GetLiveFrontend();
+ frontend = live_fe;
if(live_channel_id != channel_id) {
- bool found = false;
- if(SAME_TRANSPONDER(live_channel_id, channel_id)) {
- found = true;
- } else {
- for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) {
- if(SAME_TRANSPONDER(it->first, channel_id)) {
- found = true;
- break;
- }
- }
+ /* first try to get frontend for record with locked live */
+ bool unlock = true;
+ CFEManager::getInstance()->lockFrontend(live_fe);
+ frontend = CFEManager::getInstance()->allocateFE(channel);
+ if (frontend == NULL) {
+ /* no frontend, try again with unlocked live */
+ unlock = false;
+ CFEManager::getInstance()->unlockFrontend(live_fe);
+ frontend = CFEManager::getInstance()->allocateFE(channel);
}
+ if (frontend == NULL)
+ return false;
+
+ /* if allocateFE was successful, full zapTo_serviceID
+ * needed, if record frontend same as live, and its on different TP */
+ bool found = (live_fe != frontend) || SAME_TRANSPONDER(live_channel_id, channel_id);
if(found) {
ret = g_Zapit->zapTo_record(channel_id) > 0;
printf("%s found same tp, zapTo_record channel_id %llx result %d\n", __FUNCTION__, channel_id, ret);
}
else {
printf("%s mode %d last_mode %d getLastMode %d\n", __FUNCTION__, mode, last_mode, CNeutrinoApp::getInstance()->getLastMode());
+ StopAutoRecord(false);
if (mode != last_mode && (last_mode != NeutrinoMessages::mode_standby || mode != CNeutrinoApp::getInstance()->getLastMode())) {
CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , mode | NeutrinoMessages::norezap );
mode_changed = true;
@@ -1523,6 +1592,8 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, const int mo
ret = g_Zapit->zapTo_serviceID(channel_id) > 0;
printf("%s zapTo_serviceID channel_id %llx result %d\n", __FUNCTION__, channel_id, ret);
}
+ if (unlock)
+ CFEManager::getInstance()->unlockFrontend(live_fe);
}
if(ret) {
if(StopSectionsd) {
@@ -1553,21 +1624,25 @@ void CRecordManager::RestoreNeutrino(void)
/* after this zapit send EVT_RECORDMODE_DEACTIVATED, so neutrino getting NeutrinoMessages::EVT_RECORDMODE */
g_Zapit->setRecordMode( false );
-#if 0
- /* if current mode not standby and current mode not mode saved at record start
- * and mode saved not standby - switch to saved mode.
- * Sounds wrong, because user can switch between radio and tv while record in progress ? */
-
- if(CNeutrinoApp::getInstance()->getMode() != last_mode &&
- CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_standby &&
- last_mode != NeutrinoMessages::mode_standby)
- if(!autoshift)
- g_RCInput->postMsg( NeutrinoMessages::CHANGEMODE , last_mode);
-#endif
if((CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_standby) && StopSectionsd)
g_Sectionsd->setPauseScanning(false);
}
+bool CRecordManager::IsFileRecord(std::string file)
+{
+ mutex.lock();
+ for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) {
+ CRecordInstance * inst = it->second;
+ if ((((std::string)inst->GetFileName()) + ".ts") == file) {
+ mutex.unlock();
+ return true;
+ }
+ }
+ mutex.unlock();
+ return false;
+}
+
+#if 0
/* should return true, if recordingstatus changed in this function ? */
bool CRecordManager::doGuiRecord()
{
@@ -1617,7 +1692,8 @@ bool CRecordManager::changeNotify(const neutrino_locale_t OptionName, void * /*d
}
return ret;
}
-
+#endif
+#if 0
/* this is saved copy of neutrino code which seems was not used for some time */
bool CRecordManager::ChooseRecDir(std::string &dir)
{
@@ -1641,7 +1717,7 @@ bool CRecordManager::ChooseRecDir(std::string &dir)
dir = g_settings.network_nfs_local_dir[userDecision];
doRecord = MountDirectory(dir.c_str());
}
- } else
+ } else
printf("%s: no network devices available\n", __FUNCTION__);
}
return doRecord;
@@ -1682,20 +1758,7 @@ bool CRecordManager::MountDirectory(const char *recordingDir)
return ret;
}
-
-bool CRecordManager::IsFileRecord(std::string file)
-{
- mutex.lock();
- for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) {
- CRecordInstance * inst = it->second;
- if ((((std::string)inst->GetFileName()) + ".ts") == file) {
- mutex.unlock();
- return true;
- }
- }
- mutex.unlock();
- return false;
-}
+#endif
#if 0 // not used, saved in case we needed it
extern bool autoshift_delete;
diff --git a/src/driver/record.h b/src/driver/record.h
index 777889f8f..f55f15bb8 100644
--- a/src/driver/record.h
+++ b/src/driver/record.h
@@ -4,12 +4,11 @@
Copyright (C) 2001 Steffen Hehn 'McClean'
Copyright (C) 2011 CoolStream International Ltd
- License: GPL
+ License: GPLv2
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ the Free Software Foundation;
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -76,7 +75,7 @@ class CRecordInstance
{
private:
typedef struct {
- unsigned short apid;
+ uint32_t apid;
unsigned int index;//FIXME not used ?
bool ac3;
} APIDDesc;
@@ -110,7 +109,7 @@ class CRecordInstance
void FillMovieInfo(CZapitChannel * channel, APIDList & apid_lis);
record_error_msg_t MakeFileName(CZapitChannel * channel);
bool SaveXml();
- record_error_msg_t Start(CZapitChannel * channel /*, APIDList &apid_list*/);
+ record_error_msg_t Start(CZapitChannel * channel);
void WaitRecMsg(time_t StartTime, time_t WaitTime);
public:
CRecordInstance(const CTimerd::RecordingInfo * const eventinfo, std::string &dir, bool timeshift = false, bool stream_vtxt_pid = false, bool stream_pmt_pid = false);
@@ -122,6 +121,7 @@ class CRecordInstance
void SetRecordingId(int id) { recording_id = id; };
int GetRecordingId(void) { return recording_id; };
+ t_channel_id GetChannelId(void) { return channel_id; };
std::string GetEpgTitle(void) { return epgTitle; };
MI_MOVIE_INFO * GetMovieInfo(void) { return recMovieInfo; };
void GetRecordString(std::string& str);
@@ -129,17 +129,19 @@ class CRecordInstance
bool Timeshift() { return autoshift; };
int tshift_mode;
void SetStopMessage(const char* text) {rec_stop_msg = text;} ;
+ int GetStatus();
CFrontend * frontend;
};
-typedef std::map recmap_t;
+typedef std::pair recmap_pair_t;
+typedef std::map recmap_t;
typedef recmap_t::iterator recmap_iterator_t;
typedef std::list nextmap_t;
typedef nextmap_t::iterator nextmap_iterator_t;
-class CRecordManager : public CMenuTarget, public CChangeObserver
+class CRecordManager : public CMenuTarget /*, public CChangeObserver*/
{
private:
static CRecordManager * manager;
@@ -154,17 +156,23 @@ class CRecordManager : public CMenuTarget, public CChangeObserver
int last_mode;
bool autoshift;
uint32_t shift_timer;
+ uint32_t check_timer;
+ bool error_display;
+ bool warn_display;
OpenThreads::Mutex mutex;
static OpenThreads::Mutex sm;
- bool CutBackNeutrino(const t_channel_id channel_id, const int mode);
+ bool CutBackNeutrino(const t_channel_id channel_id, CFrontend * &frontend);
void RestoreNeutrino(void);
bool CheckRecording(const CTimerd::RecordingInfo * const eventinfo);
void StartNextRecording();
void StopPostProcess();
+ void StopInstance(CRecordInstance * inst, bool remove_event = true);
CRecordInstance * FindInstance(t_channel_id);
- void SetTimeshiftMode(CRecordInstance * inst=NULL, int mode=TSHIFT_MODE_OFF);
+ CRecordInstance * FindInstanceID(int recid);
+ CRecordInstance * FindTimeshift();
+ //void SetTimeshiftMode(CRecordInstance * inst=NULL, int mode=TSHIFT_MODE_OFF);
public:
enum record_modes_t
@@ -186,13 +194,13 @@ class CRecordManager : public CMenuTarget, public CChangeObserver
bool Stop(const CTimerd::RecordingStopInfo * recinfo);
bool Update(const t_channel_id channel_id);
bool ShowMenu(void);
- bool AskToStop(const t_channel_id channel_id);
+ bool AskToStop(const t_channel_id channel_id, const int recid = 0);
int exec(CMenuTarget* parent, const std::string & actionKey);
bool StartAutoRecord();
- bool StopAutoRecord();
+ bool StopAutoRecord(bool lock = true);
- MI_MOVIE_INFO * GetMovieInfo(const t_channel_id channel_id);
- const std::string GetFileName(const t_channel_id channel_id);
+ MI_MOVIE_INFO * GetMovieInfo(const t_channel_id channel_id, bool timeshift = true);
+ const std::string GetFileName(const t_channel_id channel_id, bool timeshift = true);
bool RunStartScript(void);
bool RunStopScript(void);
@@ -210,17 +218,19 @@ class CRecordManager : public CMenuTarget, public CChangeObserver
bool Timeshift() { return (autoshift || shift_timer); };
bool SameTransponder(const t_channel_id channel_id);
int handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data);
- // old code
- bool ChooseRecDir(std::string &dir);
- bool MountDirectory(const char *recordingDir);
// mimic old behavior for start/stop menu option chooser, still actual ?
- int recordingstatus;
- bool doGuiRecord();
- bool changeNotify(const neutrino_locale_t OptionName, void * /*data*/);
int GetRecordCount() { return recmap.size(); };
- bool IsTimeshift(t_channel_id channel_id=0);
void StartTimeshift();
int GetRecordMode(const t_channel_id channel_id=0);
bool IsFileRecord(std::string file);
+ // old code
+#if 0
+ bool IsTimeshift(t_channel_id channel_id=0);
+ bool MountDirectory(const char *recordingDir);
+ bool ChooseRecDir(std::string &dir);
+ int recordingstatus;
+ bool doGuiRecord();
+ bool changeNotify(const neutrino_locale_t OptionName, void * /*data*/);
+#endif
};
#endif
diff --git a/src/driver/screen_max.cpp b/src/driver/screen_max.cpp
index 404fbb50a..601d46206 100644
--- a/src/driver/screen_max.cpp
+++ b/src/driver/screen_max.cpp
@@ -12,8 +12,8 @@
-#include "global.h"
-#include "driver/screen_max.h"
+#include
+#include
// -- this is a simple odd class provided for 'static' usage
diff --git a/src/driver/screenshot.cpp b/src/driver/screenshot.cpp
index 6ae11889f..95a146daf 100644
--- a/src/driver/screenshot.cpp
+++ b/src/driver/screenshot.cpp
@@ -40,6 +40,7 @@
#include
#include
#include
+#include
#include
#include
@@ -126,6 +127,8 @@ void CScreenShot::run()
}
/* save file in sync mode, return true if save ok, or false */
+#if 0
+//never used
bool CScreenShot::StartSync()
{
bool ret = false;
@@ -136,7 +139,7 @@ bool CScreenShot::StartSync()
printf("CScreenShot::StartSync: %s finished: %d\n", filename.c_str(), ret);
return ret;
}
-
+#endif
/* save file in selected format, free data received from video decoder */
bool CScreenShot::SaveFile()
{
@@ -343,8 +346,6 @@ bool CScreenShot::SaveBmp()
return true;
}
-bool sectionsd_getActualEPGServiceKey(const t_channel_id uniqueServiceKey, CEPGData * epgdata);
-bool sectionsd_getEPGidShort(event_id_t epgID, CShortEPGData * epgdata);
/*
* create filename member from channel name and its current EPG data,
@@ -368,9 +369,9 @@ void CScreenShot::MakeFileName(const t_channel_id channel_id)
}
pos = strlen(fname);
- if(sectionsd_getActualEPGServiceKey(channel_id&0xFFFFFFFFFFFFULL, &epgData)) {
+ if(CEitManager::getInstance()->getActualEPGServiceKey(channel_id, &epgData)) {
CShortEPGData epgdata;
- if(sectionsd_getEPGidShort(epgData.eventID, &epgdata)) {
+ if(CEitManager::getInstance()->getEPGidShort(epgData.eventID, &epgdata)) {
if (!(epgdata.title.empty())) {
strcpy(&(fname[pos]), epgdata.title.c_str());
ZapitTools::replace_char(&fname[pos]);
diff --git a/src/driver/streamts.cpp b/src/driver/streamts.cpp
index 876c19aa2..34c8e4328 100644
--- a/src/driver/streamts.cpp
+++ b/src/driver/streamts.cpp
@@ -358,7 +358,8 @@ void * streamts_live_thread(void *data)
close(fd);
return 0;
}
-
+#if 0
+//never used
void streamts_file_thread(void *data)
{
int dvrfd;
@@ -459,3 +460,4 @@ void streamts_file_thread(void *data)
return;
}
+#endif
diff --git a/src/driver/vfd.cpp b/src/driver/vfd.cpp
index f39896ecb..161a71320 100644
--- a/src/driver/vfd.cpp
+++ b/src/driver/vfd.cpp
@@ -68,6 +68,7 @@ CVFD::CVFD()
text[0] = 0;
clearClock = 0;
mode = MODE_TVRADIO;
+ switch_name_time_cnt = 0;
}
CVFD::~CVFD()
@@ -88,7 +89,7 @@ CVFD* CVFD::getInstance()
void CVFD::count_down() {
if (timeout_cnt > 0) {
timeout_cnt--;
- if (timeout_cnt == 0) {
+ if (timeout_cnt == 0 ) {
if (g_settings.lcd_setting_dim_brightness > -1) {
// save lcd brightness, setBrightness() changes global setting
int b = g_settings.lcd_setting[SNeutrinoSettings::LCD_BRIGHTNESS];
@@ -99,6 +100,14 @@ void CVFD::count_down() {
}
}
}
+ if (g_settings.lcd_info_line && switch_name_time_cnt > 0) {
+ switch_name_time_cnt--;
+ if (switch_name_time_cnt == 0) {
+ if (g_settings.lcd_setting_dim_brightness > -1) {
+ CVFD::getInstance()->showTime(true);
+ }
+ }
+ }
}
void CVFD::wake_up() {
@@ -110,6 +119,9 @@ void CVFD::wake_up() {
}
else
setPower(1);
+ if(g_settings.lcd_info_line){
+ switch_name_time_cnt = g_settings.timing[SNeutrinoSettings::TIMING_INFOBAR] + 10;
+ }
}
void* CVFD::TimeThread(void *)
@@ -288,7 +300,7 @@ void CVFD::showTime(bool force)
ftime(&tm);
t = localtime(&tm.time);
- if(force || ((hour != t->tm_hour) || (minute != t->tm_min))) {
+ if(force || ( switch_name_time_cnt == 0 && ((hour != t->tm_hour) || (minute != t->tm_min))) ) {
hour = t->tm_hour;
minute = t->tm_min;
strftime(timestr, 20, "%H:%M", t);
@@ -495,7 +507,7 @@ void CVFD::setMode(const MODES m, const char * const title)
showServicename(servicename);
showclock = true;
if(g_settings.lcd_info_line)
- showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */
+ switch_name_time_cnt = g_settings.timing[SNeutrinoSettings::TIMING_INFOBAR] + 10;
break;
case MODE_AUDIO:
{
diff --git a/src/driver/vfd.h b/src/driver/vfd.h
index 2fb7b6ad8..59e74363b 100644
--- a/src/driver/vfd.h
+++ b/src/driver/vfd.h
@@ -86,6 +86,7 @@ class CVFD
int last_toggle_state_power;
bool clearClock;
unsigned int timeout_cnt;
+ unsigned int switch_name_time_cnt;
int fd;
int brightness;
char text[256];
diff --git a/src/driver/volume.cpp b/src/driver/volume.cpp
index b66fe1b2f..89b420553 100644
--- a/src/driver/volume.cpp
+++ b/src/driver/volume.cpp
@@ -13,7 +13,7 @@
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
+ version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -38,51 +38,50 @@
#include
#include
#include
-#include
#include
+#include
#if HAVE_COOL_HARDWARE
#include
#endif
-CFrameBuffer * frameBuffer;
extern CRemoteControl * g_RemoteControl;
extern cAudio * audioDecoder;
-static CProgressBar *g_volscale = NULL;
CVolume::CVolume()
{
frameBuffer = CFrameBuffer::getInstance();
+ volscale = NULL;
#if 0
g_Zapit = new CZapitClient;
g_RCInput = new CRCInput;
v_RemoteControl = new CRemoteControl;
#endif
VolumeFont = SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO;
- paintDigits = true; // For future On/Off digits
paintShadow = false; // For future On/Off switch shadow
MuteIconFrame = false; // For future On/Off switch IconFrame
ShadowOffset = 4;
mute_ay = 0;
- m_mode = CNeutrinoApp::getInstance()->getMode();
+ m_mode = CNeutrinoApp::getInstance()->getMode();
+ channel_id = 0;
+ apid = 0;
Init();
}
CVolume::~CVolume()
{
- if (g_volscale)
- delete g_volscale;
- g_volscale = NULL;
+ delete volscale;
}
void CVolume::Init()
{
+ paintDigits = g_settings.volume_digits;
mute_ay_old = mute_ay;
int faktor_h = 18; // scale * 10
int clock_height= 0;
int clock_width = 0;
- int x_corr = 0;
+
pB = 2; // progress border
spacer = 8;
@@ -108,10 +107,9 @@ void CVolume::Init()
progress_h = std::max(icon_h, digit_h) - 2*pB;
vbar_w += digit_w;
}
-
- if (g_volscale)
- delete g_volscale;
- g_volscale = new CProgressBar(true, progress_w, progress_h, 50, 100, 80, true);
+ if (volscale)
+ delete volscale;
+ volscale = new CProgressBar(true, progress_w, progress_h, 50, 100, 80, true);
// mute icon
mute_icon_dx = 0;
@@ -145,7 +143,8 @@ void CVolume::Init()
//printf("\n##### [volume.cpp Zeile %d] mute_ax %d, mute_dx %d\n \n", __LINE__, mute_ax, mute_dx);
switch (g_settings.volume_pos)
{
- case 0:// upper right
+ case 0:{// upper right
+ int x_corr = 0;
if (( neutrino->getMode() != CNeutrinoApp::mode_scart ) && ( neutrino->getMode() != CNeutrinoApp::mode_audio) && ( neutrino->getMode() != CNeutrinoApp::mode_pic)) {
if ((neutrino->isMuted()) && (!g_settings.mode_clock))
x_corr = mute_dx + spacer;
@@ -154,6 +153,7 @@ void CVolume::Init()
}
x = sw - vbar_w - x_corr;
break;
+ }
case 1:// upper left
break;
case 2:// bottom left
@@ -219,7 +219,8 @@ void CVolume::AudioMute(int newValue, bool isEvent)
void CVolume::setvol(int vol)
{
- audioDecoder->setVolume(vol, vol);
+ //audioDecoder->setVolume(vol, vol);
+ CZapit::getInstance()->SetVolume(vol);
}
void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowait)
@@ -248,15 +249,15 @@ void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowa
// volumebar shadow
if (paintShadow)
- frameBuffer->paintBoxRel(x+ShadowOffset , y+ShadowOffset , (paintDigits) ? vbar_w - vbar_h : vbar_w, vbar_h, colShadow, ROUNDED, CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT);
+ frameBuffer->paintBoxRel(x+ShadowOffset , y+ShadowOffset , (paintDigits) ? vbar_w - vbar_h : vbar_w + 1, vbar_h, colShadow, ROUNDED, (paintDigits) ? CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT : CORNER_ALL);
// volumebar
- frameBuffer->paintBoxRel(x , y , (paintDigits) ? vbar_w - vbar_h : vbar_w, vbar_h, colBar, ROUNDED, CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT);
+ frameBuffer->paintBoxRel(x , y , (paintDigits) ? vbar_w - vbar_h : vbar_w + 1, vbar_h, colBar, ROUNDED, (paintDigits) ? CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT : CORNER_ALL);
// frame for progress
frameBuffer->paintBoxRel(progress_x-pB, progress_y-pB, progress_w+pB*1, progress_h+pB*2, colFrame);
// volume icon
frameBuffer->paintIcon(NEUTRINO_ICON_VOLUME, icon_x, icon_y, 0, colBar);
- g_volscale->reset();
+ volscale->reset();
refreshVolumebar(vol);
frameBuffer->blit();
}
@@ -368,7 +369,7 @@ void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowa
void CVolume::refreshVolumebar(int current_volume)
{
// progressbar
- g_volscale->paintProgressBar2(progress_x, progress_y, current_volume);
+ volscale->paintProgressBar2(progress_x, progress_y, current_volume);
if (paintDigits) {
// shadow for erase digits
if (paintShadow)
@@ -381,3 +382,21 @@ void CVolume::refreshVolumebar(int current_volume)
g_Font[VolumeFont]->RenderString(digit_x, digit_y, digit_w, buff, colContent);
}
}
+
+bool CVolume::changeNotify(const neutrino_locale_t OptionName, void * data)
+{
+ bool ret = false;
+ if (ARE_LOCALES_EQUAL(OptionName, NONEXISTANT_LOCALE)) {
+ int percent = *(int *) data;
+ int vol = CZapit::getInstance()->GetVolume();
+ /* keep resulting volume = (vol * percent)/100 not more than 115 */
+ if (vol * percent > 11500)
+ percent = 11500 / vol;
+
+ printf("CVolume::changeNotify: percent %d\n", percent);
+ CZapit::getInstance()->SetPidVolume(channel_id, apid, percent);
+ CZapit::getInstance()->SetVolumePercent(percent);
+ *(int *) data = percent;
+ }
+ return ret;
+}
diff --git a/src/driver/volume.h b/src/driver/volume.h
index 797d9ccb1..1acb333b1 100644
--- a/src/driver/volume.h
+++ b/src/driver/volume.h
@@ -28,11 +28,15 @@
#ifndef __CVOLUME__
#define __CVOLUME__
+#include
+
#define ROUNDED g_settings.rounded_corners ? vbar_h/2 : 0
-class CVolume
+class CVolume : public CChangeObserver
{
private:
+ CFrameBuffer * frameBuffer;
+ CProgressBar *volscale;
void refreshVolumebar(int current_volume);
int x, y, sy, sw, sh;
@@ -47,12 +51,15 @@ class CVolume
int rounded;
int m_mode;
bool paintShadow, paintDigits, MuteIconFrame;
+ /* volume adjustment variables */
+ t_channel_id channel_id;
+ int apid;
public:
CVolume();
~CVolume();
static CVolume* getInstance();
-
+
int spacer, mute_dx;
void Init();
void AudioMute(int newValue, bool isEvent= false);
@@ -60,7 +67,10 @@ class CVolume
void setVolume(const neutrino_msg_t key, const bool bDoPaint = true, bool nowait = false);
int getStartPosTop(){ return sy; }
int getEndPosRight(){ return sw; }
+
+ void SetCurrentPid(int pid) { apid = pid; }
+ void SetCurrentChannel(t_channel_id id) { channel_id = id; }
+ bool changeNotify(const neutrino_locale_t OptionName, void *);
};
-
#endif // __CVOLUME__
diff --git a/src/eitd/Makefile.am b/src/eitd/Makefile.am
index 8b2afccc5..069f70709 100644
--- a/src/eitd/Makefile.am
+++ b/src/eitd/Makefile.am
@@ -24,5 +24,13 @@ endif
AM_CPPFLAGS = -fno-rtti -fno-exceptions
noinst_LIBRARIES = libsectionsd.a
-libsectionsd_a_SOURCES = sectionsd.cpp debug.cpp dmx.cpp xmlutil.cpp \
- SIsections.cpp SIevents.cpp SIutils.cpp SIlanguage.cpp edvbstring.cpp
+libsectionsd_a_SOURCES = \
+ debug.cpp \
+ dmx.cpp \
+ edvbstring.cpp \
+ sectionsd.cpp \
+ SIevents.cpp \
+ SIlanguage.cpp \
+ SIsections.cpp \
+ SIutils.cpp \
+ xmlutil.cpp
diff --git a/src/eitd/SIevents.cpp b/src/eitd/SIevents.cpp
index 3e89ed875..78e60f5b6 100644
--- a/src/eitd/SIevents.cpp
+++ b/src/eitd/SIevents.cpp
@@ -561,7 +561,8 @@ void SIevent::dump(void) const
for_each(ratings.begin(), ratings.end(), printSIparentalRating());
for_each(linkage_descs.begin(), linkage_descs.end(), printSIlinkage());
}
-
+#if 0
+//never used
void SIevent::dumpSmall(void) const
{
for (std::map::const_iterator it = langName.begin() ;
@@ -578,3 +579,4 @@ void SIevent::dumpSmall(void) const
for_each(ratings.begin(), ratings.end(), printSIparentalRating());
for_each(linkage_descs.begin(), linkage_descs.end(), printSIlinkage());
}
+#endif
diff --git a/src/eitd/eitd.h b/src/eitd/eitd.h
index 364d2f6c4..31858afe2 100644
--- a/src/eitd/eitd.h
+++ b/src/eitd/eitd.h
@@ -251,6 +251,7 @@ class CCNThread : public CEventsThread
void cleanup();
/* CN-specific */
+ OpenThreads::Mutex update_mutex;
bool updating;
cDemux * eitDmx;
diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp
index 70c8a19eb..412c860cd 100644
--- a/src/eitd/sectionsd.cpp
+++ b/src/eitd/sectionsd.cpp
@@ -60,7 +60,6 @@
#define DEBUG_SECTION_THREADS
#define DEBUG_CN_THREAD
-static bool sectionsd_ready = false;
/*static*/ bool reader_ready = true;
static unsigned int max_events;
static bool notify_complete = false;
@@ -142,7 +141,7 @@ static CFreeSatThread threadFSEIT;
CSdtThread threadSDT;
#endif
-int sectionsd_stop = 0;
+static int sectionsd_stop = 0;
static bool slow_addevent = true;
@@ -150,12 +149,12 @@ inline void readLockServices(void)
{
pthread_rwlock_rdlock(&servicesLock);
}
-
+#ifdef ENABLE_SDT
inline void writeLockServices(void)
{
pthread_rwlock_wrlock(&servicesLock);
}
-
+#endif
inline void unlockServices(void)
{
pthread_rwlock_unlock(&servicesLock);
@@ -1164,7 +1163,7 @@ static void commandReadSIfromXML(int connfd, char *data, const unsigned dataLeng
static void commandWriteSI2XML(int connfd, char *data, const unsigned dataLength)
{
sendEmptyResponse(connfd, NULL, 0);
- if ((!reader_ready) || (dataLength > 100)){
+ if (mySIeventsOrderUniqueKey.empty() || (!reader_ready) || (dataLength > 100)){
eventServer->sendEvent(CSectionsdClient::EVT_WRITE_SI_FINISHED, CEventServer::INITID_SECTIONSD);
return;
}
@@ -1184,24 +1183,12 @@ struct s_cmd_table
static s_cmd_table connectionCommands[sectionsd::numberOfCommands] = {
{ commandDumpStatusInformation, "commandDumpStatusInformation" },
- { sendEmptyResponse, "commandAllEventsChannelIDSearch" },
{ commandPauseScanning, "commandPauseScanning" },
{ commandGetIsScanningActive, "commandGetIsScanningActive" },
- { sendEmptyResponse, "commandActualEPGchannelID" },
- { sendEmptyResponse, "commandEventListTVids" },
- { sendEmptyResponse, "commandEventListRadioIDs" },
- { sendEmptyResponse, "commandCurrentNextInfoChannelID" },
- { sendEmptyResponse, "commandEPGepgID" },
- { sendEmptyResponse, "commandEPGepgIDshort" },
- { sendEmptyResponse, "commandComponentTagsUniqueKey" },
- { sendEmptyResponse, "commandAllEventsChannelID" },
- { sendEmptyResponse, "commandTimesNVODservice" },
{ commandGetIsTimeSet, "commandGetIsTimeSet" },
{ commandserviceChanged, "commandserviceChanged" },
- { sendEmptyResponse, "commandLinkageDescriptorsUniqueKey" },
{ commandRegisterEventClient, "commandRegisterEventClient" },
{ commandUnRegisterEventClient, "commandUnRegisterEventClient" },
- { sendEmptyResponse, "commandSetPrivatePid" },
{ commandFreeMemory, "commandFreeMemory" },
{ commandReadSIfromXML, "commandReadSIfromXML" },
{ commandWriteSI2XML, "commandWriteSI2XML" },
@@ -1672,8 +1659,6 @@ void CCNThread::beforeWait()
if (updating || eit_version == 0xff)
return;
- updating = true;
-
unsigned char filter[DMX_FILTER_SIZE];
unsigned char mask[DMX_FILTER_SIZE];
unsigned char mode[DMX_FILTER_SIZE];
@@ -1693,17 +1678,22 @@ void CCNThread::beforeWait()
mask[3] = (0x1F << 1) | 0x01;
mode[3] = 0x1F << 1;
+ update_mutex.lock();
eitDmx->Open(DMX_PSI_CHANNEL);
eitDmx->sectionFilter(0x12, filter, mask, 4, 0 /*timeout*/, mode);
+ updating = true;
+ update_mutex.unlock();
}
void CCNThread::afterWait()
{
xprintf("%s: stop eit update filter (%s)\n", name.c_str(), updating ? "active" : "not active");
+ update_mutex.lock();
if (updating) {
updating = false;
eitDmx->Close();
}
+ update_mutex.unlock();
}
void CCNThread::beforeSleep()
@@ -1743,11 +1733,16 @@ void CCNThread::processSection()
/* CN specific functions */
bool CCNThread::checkUpdate()
{
- if (!updating)
- return false;
-
unsigned char buf[MAX_SECTION_LENGTH];
+
+ update_mutex.lock();
+ if (!updating) {
+ update_mutex.unlock();
+ return false;
+ }
+
int ret = eitDmx->Read(buf, MAX_SECTION_LENGTH, 10);
+ update_mutex.unlock();
if (ret > 0) {
LongSection section(buf);
@@ -2099,8 +2094,6 @@ printf("SIevent size: %d\n", sizeof(SIevent));
if (sections_debug)
dump_sched_info("main");
- sectionsd_ready = true;
-
while (running && sectionsd_server.run(sectionsd_parse_command, sectionsd::ACTVERSION, true)) {
sched_yield();
if (threadCN.checkUpdate()) {
@@ -2162,65 +2155,71 @@ printf("SIevent size: %d\n", sizeof(SIevent));
}
/* was: commandAllEventsChannelID sendAllEvents */
-void sectionsd_getEventsServiceKey(t_channel_id serviceUniqueKey, CChannelEventList &eList, char search = 0, std::string search_text = "")
+void CEitManager::getEventsServiceKey(t_channel_id serviceUniqueKey, CChannelEventList &eList, char search, std::string search_text)
{
dprintf("sendAllEvents for " PRINTF_CHANNEL_ID_TYPE "\n", serviceUniqueKey);
- if ((serviceUniqueKey& 0xFFFFFFFFFFFFULL) != 0) { //0xFFFFFFFFFFFFULL for CREATE_CHANNEL_ID64
- // service Found
- readLockEvents();
- int serviceIDfound = 0;
+ if(!eList.empty() && search == 0)//skip on search mode
+ eList.clear();
- if (search_text.length())
- std::transform(search_text.begin(), search_text.end(), search_text.begin(), tolower);
- for (MySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey::iterator e = mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.begin(); e != mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.end(); ++e)
- {
- if ((*e)->get_channel_id() == (serviceUniqueKey& 0xFFFFFFFFFFFFULL)) { //0xFFFFFFFFFFFFULL for CREATE_CHANNEL_ID64
- serviceIDfound = 1;
+ t_channel_id serviceUniqueKey64 = serviceUniqueKey& 0xFFFFFFFFFFFFULL; //0xFFFFFFFFFFFFULL for CREATE_CHANNEL_ID64
+ if(serviceUniqueKey64 == 0)
+ return;
- bool copy = true;
- if(search == 0); // nothing to do here
- else if(search == 1) {
- std::string eName = (*e)->getName();
- std::transform(eName.begin(), eName.end(), eName.begin(), tolower);
- if(eName.find(search_text) == std::string::npos)
- copy = false;
- }
- else if(search == 2) {
- std::string eText = (*e)->getText();
- std::transform(eText.begin(), eText.end(), eText.begin(), tolower);
- if(eText.find(search_text) == std::string::npos)
- copy = false;
- }
- else if(search == 3) {
- std::string eExtendedText = (*e)->getExtendedText();
- std::transform(eExtendedText.begin(), eExtendedText.end(), eExtendedText.begin(), tolower);
- if(eExtendedText.find(search_text) == std::string::npos)
- copy = false;
- }
+ // service Found
+ readLockEvents();
+ int serviceIDfound = 0;
- if(copy) {
- for (SItimes::iterator t = (*e)->times.begin(); t != (*e)->times.end(); ++t)
- {
- CChannelEvent aEvent;
- aEvent.eventID = (*e)->uniqueKey();
- aEvent.startTime = t->startzeit;
- aEvent.duration = t->dauer;
- aEvent.description = (*e)->getName();
- if (((*e)->getText()).empty())
- aEvent.text = (*e)->getExtendedText().substr(0, 120);
- else
- aEvent.text = (*e)->getText();
- aEvent.channelID = serviceUniqueKey;
- eList.push_back(aEvent);
- }
- } // if = serviceID
+ if (search_text.length())
+ std::transform(search_text.begin(), search_text.end(), search_text.begin(), tolower);
+
+ for (MySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey::iterator e = mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.begin(); e != mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.end(); ++e)
+ {
+ if ((*e)->get_channel_id() == serviceUniqueKey64) {
+ serviceIDfound = 1;
+
+ bool copy = true;
+ if(search == 0); // nothing to do here
+ else if(search == 1) {
+ std::string eName = (*e)->getName();
+ std::transform(eName.begin(), eName.end(), eName.begin(), tolower);
+ if(eName.find(search_text) == std::string::npos)
+ copy = false;
}
- else if ( serviceIDfound )
- break; // sind nach serviceID und startzeit sortiert -> nicht weiter suchen
+ else if(search == 2) {
+ std::string eText = (*e)->getText();
+ std::transform(eText.begin(), eText.end(), eText.begin(), tolower);
+ if(eText.find(search_text) == std::string::npos)
+ copy = false;
+ }
+ else if(search == 3) {
+ std::string eExtendedText = (*e)->getExtendedText();
+ std::transform(eExtendedText.begin(), eExtendedText.end(), eExtendedText.begin(), tolower);
+ if(eExtendedText.find(search_text) == std::string::npos)
+ copy = false;
+ }
+
+ if(copy) {
+ for (SItimes::iterator t = (*e)->times.begin(); t != (*e)->times.end(); ++t)
+ {
+ CChannelEvent aEvent;
+ aEvent.eventID = (*e)->uniqueKey();
+ aEvent.startTime = t->startzeit;
+ aEvent.duration = t->dauer;
+ aEvent.description = (*e)->getName();
+ if (((*e)->getText()).empty())
+ aEvent.text = (*e)->getExtendedText().substr(0, 120);
+ else
+ aEvent.text = (*e)->getText();
+ aEvent.channelID = serviceUniqueKey;
+ eList.push_back(aEvent);
+ }
+ } // if = serviceID
}
- unlockEvents();
+ else if ( serviceIDfound )
+ break; // sind nach serviceID und startzeit sortiert -> nicht weiter suchen
}
+ unlockEvents();
}
/* send back the current and next event for the channel id passed to it
@@ -2234,7 +2233,7 @@ void sectionsd_getEventsServiceKey(t_channel_id serviceUniqueKey, CChannelEventL
* TODO: the handling of "flag" should be vastly simplified.
*/
/* was: commandCurrentNextInfoChannelID */
-void sectionsd_getCurrentNextServiceKey(t_channel_id uniqueServiceKey, CSectionsdClient::responseGetCurrentNextInfoChannelID& current_next )
+void CEitManager::getCurrentNextServiceKey(t_channel_id uniqueServiceKey, CSectionsdClient::responseGetCurrentNextInfoChannelID& current_next )
{
dprintf("[sectionsd] Request of current/next information for " PRINTF_CHANNEL_ID_TYPE "\n", uniqueServiceKey);
@@ -2244,7 +2243,7 @@ void sectionsd_getCurrentNextServiceKey(t_channel_id uniqueServiceKey, CSections
/* ugly hack: retry fetching current/next by restarting dmxCN if this is true */
//bool change = false;//TODO remove ?
- //t_channel_id * uniqueServiceKey = (t_channel_id *)data;
+ uniqueServiceKey &= 0xFFFFFFFFFFFFULL;
readLockEvents();
/* if the currently running program is requested... */
@@ -2426,7 +2425,7 @@ void sectionsd_getCurrentNextServiceKey(t_channel_id uniqueServiceKey, CSections
}
/* commandEPGepgIDshort */
-bool sectionsd_getEPGidShort(event_id_t epgID, CShortEPGData * epgdata)
+bool CEitManager::getEPGidShort(event_id_t epgID, CShortEPGData * epgdata)
{
bool ret = false;
dprintf("Request of current EPG for 0x%llx\n", epgID);
@@ -2451,7 +2450,7 @@ bool sectionsd_getEPGidShort(event_id_t epgID, CShortEPGData * epgdata)
/*was getEPGid commandEPGepgID(int connfd, char *data, const unsigned dataLength) */
/* TODO item / itemDescription */
-bool sectionsd_getEPGid(const event_id_t epgID, const time_t startzeit, CEPGData * epgdata)
+bool CEitManager::getEPGid(const event_id_t epgID, const time_t startzeit, CEPGData * epgdata)
{
bool ret = false;
dprintf("Request of actual EPG for 0x%llx 0x%lx\n", epgID, startzeit);
@@ -2495,14 +2494,15 @@ bool sectionsd_getEPGid(const event_id_t epgID, const time_t startzeit, CEPGData
return ret;
}
/* was commandActualEPGchannelID(int connfd, char *data, const unsigned dataLength) */
-bool sectionsd_getActualEPGServiceKey(const t_channel_id uniqueServiceKey, CEPGData * epgdata)
+bool CEitManager::getActualEPGServiceKey(const t_channel_id channel_id, CEPGData * epgdata)
{
bool ret = false;
SIevent evt;
SItime zeit(0, 0);
- dprintf("[commandActualEPGchannelID] Request of current EPG for " PRINTF_CHANNEL_ID_TYPE "\n", uniqueServiceKey);
+ dprintf("[commandActualEPGchannelID] Request of current EPG for " PRINTF_CHANNEL_ID_TYPE "\n", channel_id);
+ t_channel_id uniqueServiceKey = channel_id & 0xFFFFFFFFFFFFULL;
readLockEvents();
if (uniqueServiceKey == messaging_current_servicekey) {
if (myCurrentEvent) {
@@ -2558,23 +2558,20 @@ bool channel_in_requested_list(t_channel_id * clist, t_channel_id chid, int len)
{
if(len == 0) return true;
for(int i = 0; i < len; i++) {
- if(clist[i] == chid)
+ if((clist[i] & 0xFFFFFFFFFFFFULL) == chid)
return true;
}
return false;
}
/* was static void sendEventList(int connfd, const unsigned char serviceTyp1, const unsigned char serviceTyp2 = 0, int sendServiceName = 1, t_channel_id * chidlist = NULL, int clen = 0) */
-void sectionsd_getChannelEvents(CChannelEventList &eList, const bool tv_mode = true, t_channel_id *chidlist = NULL, int clen = 0)
+void CEitManager::getChannelEvents(CChannelEventList &eList, t_channel_id *chidlist, int clen)
{
- clen = clen / sizeof(t_channel_id);
-
t_channel_id uniqueNow = 0;
t_channel_id uniqueOld = 0;
bool found_already = true;
time_t azeit = time(NULL);
- if(tv_mode) {}
showProfiling("sectionsd_getChannelEvents start");
readLockEvents();
@@ -2624,7 +2621,7 @@ showProfiling("sectionsd_getChannelEvents end");
}
/*was static void commandComponentTagsUniqueKey(int connfd, char *data, const unsigned dataLength) */
-bool sectionsd_getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::ComponentTagList& tags)
+bool CEitManager::getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::ComponentTagList& tags)
{
bool ret = false;
dprintf("Request of ComponentTags for 0x%llx\n", uniqueKey);
@@ -2654,7 +2651,7 @@ bool sectionsd_getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdC
}
/* was static void commandLinkageDescriptorsUniqueKey(int connfd, char *data, const unsigned dataLength) */
-bool sectionsd_getLinkageDescriptorsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::LinkageDescriptorList& descriptors)
+bool CEitManager::getLinkageDescriptorsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::LinkageDescriptorList& descriptors)
{
bool ret = false;
dprintf("Request of LinkageDescriptors for 0x%llx\n", uniqueKey);
@@ -2685,11 +2682,12 @@ bool sectionsd_getLinkageDescriptorsUniqueKey(const event_id_t uniqueKey, CSecti
}
/* was static void commandTimesNVODservice(int connfd, char *data, const unsigned dataLength) */
-bool sectionsd_getNVODTimesServiceKey(const t_channel_id uniqueServiceKey, CSectionsdClient::NVODTimesList& nvod_list)
+bool CEitManager::getNVODTimesServiceKey(const t_channel_id channel_id, CSectionsdClient::NVODTimesList& nvod_list)
{
bool ret = false;
- dprintf("Request of NVOD times for " PRINTF_CHANNEL_ID_TYPE "\n", uniqueServiceKey);
+ dprintf("Request of NVOD times for " PRINTF_CHANNEL_ID_TYPE "\n", channel_id);
+ t_channel_id uniqueServiceKey = channel_id & 0xFFFFFFFFFFFFULL;
nvod_list.clear();
readLockServices();
@@ -2724,17 +2722,8 @@ bool sectionsd_getNVODTimesServiceKey(const t_channel_id uniqueServiceKey, CSect
return ret;
}
-void sectionsd_setPrivatePid(unsigned short /*pid*/)
-{
-}
-
-void sectionsd_set_languages(const std::vector& newLanguages)
+void CEitManager::setLanguages(const std::vector& newLanguages)
{
SIlanguage::setLanguages(newLanguages);
SIlanguage::saveLanguages();
}
-
-bool sectionsd_isReady(void)
-{
- return sectionsd_ready;
-}
diff --git a/src/eitd/sectionsd.h b/src/eitd/sectionsd.h
index b0db88026..2181502f6 100644
--- a/src/eitd/sectionsd.h
+++ b/src/eitd/sectionsd.h
@@ -32,13 +32,6 @@
#include
#include
#include
-#include "dmx.h"
-
-//#include "SIutils.hpp"
-//#include "SIservices.hpp"
-//#include "SIevents.hpp"
-//#include "SIsections.hpp"
-//#include "SIlanguage.hpp"
class CEitManager : public OpenThreads::Thread, public OpenThreads::Mutex
{
@@ -61,6 +54,17 @@ class CEitManager : public OpenThreads::Thread, public OpenThreads::Mutex
bool Start();
bool Stop();
void SetConfig(CSectionsdClient::epg_config &cfg) { config = cfg; };
+
+ void getEventsServiceKey(t_channel_id serviceUniqueKey, CChannelEventList &eList, char search = 0, std::string search_text = "");
+ void getCurrentNextServiceKey(t_channel_id uniqueServiceKey, CSectionsdClient::responseGetCurrentNextInfoChannelID& current_next );
+ bool getEPGidShort(event_id_t epgID, CShortEPGData * epgdata);
+ bool getEPGid(const event_id_t epgID, const time_t startzeit, CEPGData * epgdata);
+ bool getActualEPGServiceKey(const t_channel_id uniqueServiceKey, CEPGData * epgdata);
+ void getChannelEvents(CChannelEventList &eList, t_channel_id *chidlist = NULL, int clen = 0);
+ bool getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::ComponentTagList& tags);
+ bool getLinkageDescriptorsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::LinkageDescriptorList& descriptors);
+ bool getNVODTimesServiceKey(const t_channel_id uniqueServiceKey, CSectionsdClient::NVODTimesList& nvod_list);
+ void setLanguages(const std::vector& newLanguages);
};
#endif
diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am
index 867d0497e..58534e620 100644
--- a/src/gui/Makefile.am
+++ b/src/gui/Makefile.am
@@ -68,6 +68,7 @@ libneutrino_gui_a_SOURCES = \
moviebrowser.cpp \
movieinfo.cpp \
movieplayer.cpp \
+ network_service.cpp \
network_setup.cpp \
nfs.cpp \
osd_setup.cpp \
@@ -99,8 +100,7 @@ libneutrino_gui_a_SOURCES = \
user_menue_setup.cpp \
vfd_setup.cpp \
videosettings.cpp \
- zapit_setup.cpp \
- network_service.cpp
+ zapit_setup.cpp
libneutrino_gui2_a_SOURCES = \
cam_menu.cpp \
diff --git a/src/gui/audio_select.cpp b/src/gui/audio_select.cpp
index e75e74742..cabf99de6 100644
--- a/src/gui/audio_select.cpp
+++ b/src/gui/audio_select.cpp
@@ -40,13 +40,15 @@
#include
#include
#include
+#include
+#include
extern CRemoteControl * g_RemoteControl; /* neutrino.cpp */
extern CAudioSetupNotifier * audioSetupNotifier;
#include
-#include "libdvbsub/dvbsub.h"
-#include "libtuxtxt/teletext.h"
+#include
+#include
//
// -- AUDIO Selector Menue Handler Class
@@ -83,7 +85,7 @@ int CAudioSelectMenuHandler::exec(CMenuTarget* parent, const std::string &action
return menu_return::RETURN_EXIT;
}
- if (parent)
+ if (parent)
parent->hide();
return doMenu ();
@@ -94,7 +96,7 @@ int CAudioSelectMenuHandler::doMenu ()
CMenuWidget AudioSelector(LOCALE_AUDIOSELECTMENUE_HEAD, NEUTRINO_ICON_AUDIO, width);
CSubtitleChangeExec SubtitleChanger;
-
+
//show cancel button if configured in usermenu settings
if (g_settings.personalize[SNeutrinoSettings::P_UMENU_SHOW_CANCEL])
AudioSelector.addIntroItems(NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, CMenuWidget::BTN_TYPE_CANCEL);
@@ -103,34 +105,31 @@ int CAudioSelectMenuHandler::doMenu ()
unsigned int shortcut_num = 1;
+ uint p_count = g_RemoteControl->current_PIDs.APIDs.size();
// -- setup menue due to Audio PIDs
- if (g_RemoteControl->current_PIDs.APIDs.size() > 1)
+ for( uint i=0; i < p_count; i++ )
{
- uint p_count = g_RemoteControl->current_PIDs.APIDs.size();
- CMenuForwarderNonLocalized* fw[p_count];
-
- for( uint i=0; i < p_count; i++ )
- {
- char apid[5];
- sprintf(apid, "%d", i);
- fw[i] = new CMenuForwarderNonLocalized(g_RemoteControl->current_PIDs.APIDs[i].desc, true, NULL, this, apid, CRCInput::convertDigitToKey(i + 1));
- fw[i]->setItemButton(NEUTRINO_ICON_BUTTON_OKAY, true);
- AudioSelector.addItem(fw[i], (i == g_RemoteControl->current_PIDs.PIDs.selected_apid));
- shortcut_num = i+1;
- }
- AudioSelector.addItem(GenericMenuSeparatorLine);
+ char apid[5];
+ sprintf(apid, "%d", i);
+ CMenuForwarderNonLocalized *fw = new CMenuForwarderNonLocalized(g_RemoteControl->current_PIDs.APIDs[i].desc,
+ true, NULL, this, apid, CRCInput::convertDigitToKey(i + 1));
+ fw->setItemButton(NEUTRINO_ICON_BUTTON_OKAY, true);
+ AudioSelector.addItem(fw, (i == g_RemoteControl->current_PIDs.PIDs.selected_apid));
+ shortcut_num = i+1;
}
-
+ if (p_count)
+ AudioSelector.addItem(GenericMenuSeparatorLine);
+
// -- setup menue for to Dual Channel Stereo
CMenuOptionChooser* oj = new CMenuOptionChooser(LOCALE_AUDIOMENU_ANALOG_MODE,
- &g_settings.audio_AnalogMode,
- AUDIOMENU_ANALOGOUT_OPTIONS, AUDIOMENU_ANALOGOUT_OPTION_COUNT,
+ &g_settings.audio_AnalogMode,
+ AUDIOMENU_ANALOGOUT_OPTIONS, AUDIOMENU_ANALOGOUT_OPTION_COUNT,
true, audioSetupNotifier, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED);
AudioSelector.addItem( oj );
oj = new CMenuOptionChooser(LOCALE_AUDIOMENU_ANALOG_OUT, &g_settings.analog_out,
- OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT,
+ OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT,
true, audioSetupNotifier, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN);
AudioSelector.addItem( oj );
@@ -140,15 +139,15 @@ int CAudioSelectMenuHandler::doMenu ()
CZapitChannel * cc = channelList->getChannel(curnum);
bool sep_added = false;
- if(cc)
+ if(cc)
{
- for (int i = 0 ; i < (int)cc->getSubtitleCount() ; ++i)
+ for (int i = 0 ; i < (int)cc->getSubtitleCount() ; ++i)
{
CZapitAbsSub* s = cc->getChannelSub(i);
if (s->thisSubType == CZapitAbsSub::DVB) {
CZapitDVBSub* sd = reinterpret_cast(s);
printf("[neutrino] adding DVB subtitle %s pid %x\n", sd->ISO639_language_code.c_str(), sd->pId);
- if(!sep_added)
+ if(!sep_added)
{
sep_added = true;
AudioSelector.addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SUBTITLES_HEAD));
@@ -160,11 +159,11 @@ int CAudioSelectMenuHandler::doMenu ()
AudioSelector.addItem(new CMenuForwarderNonLocalized(item /*sd->ISO639_language_code.c_str()*/,
sd->pId != dvbsub_getpid(), NULL, &SubtitleChanger, spid, CRCInput::convertDigitToKey(++shortcut_num)));
}
- if (s->thisSubType == CZapitAbsSub::TTX)
+ if (s->thisSubType == CZapitAbsSub::TTX)
{
CZapitTTXSub* sd = reinterpret_cast(s);
printf("[neutrino] adding TTX subtitle %s pid %x mag %X page %x\n", sd->ISO639_language_code.c_str(), sd->pId, sd->teletext_magazine_number, sd->teletext_page_number);
- if(!sep_added)
+ if(!sep_added)
{
sep_added = true;
AudioSelector.addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SUBTITLES_HEAD));
@@ -172,17 +171,31 @@ int CAudioSelectMenuHandler::doMenu ()
char spid[64];
int page = ((sd->teletext_magazine_number & 0xFF) << 8) | sd->teletext_page_number;
int pid = sd->pId;
- snprintf(spid,sizeof(spid), "TTX:%d:%03X:%s", sd->pId, page, sd->ISO639_language_code.c_str());
+ snprintf(spid,sizeof(spid), "TTX:%d:%03X:%s", sd->pId, page, sd->ISO639_language_code.c_str());
char item[64];
snprintf(item,sizeof(item), "TTX: %s (pid %x page %03X)", sd->ISO639_language_code.c_str(), sd->pId, page);
AudioSelector.addItem(new CMenuForwarderNonLocalized(item /*sd->ISO639_language_code.c_str()*/,
!tuxtx_subtitle_running(&pid, &page, NULL), NULL, &SubtitleChanger, spid, CRCInput::convertDigitToKey(++shortcut_num)));
}
}
-
- if(sep_added)
+
+ if(sep_added)
AudioSelector.addItem(new CMenuForwarder(LOCALE_SUBTITLES_STOP, true, NULL, &SubtitleChanger, "off", CRCInput::RC_stop));
}
+ AudioSelector.addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_AUDIOMENU_VOLUME_ADJUST));
+
+ /* setting volume percent to zapit with channel_id/apid = 0 means current channel and pid */
+ CVolume::getInstance()->SetCurrentChannel(0);
+ CVolume::getInstance()->SetCurrentPid(0);
+ int percent[p_count];
+ for (uint i=0; i < p_count; i++) {
+ percent[i] = CZapit::getInstance()->GetPidVolume(0, g_RemoteControl->current_PIDs.APIDs[i].pid);
+ AudioSelector.addItem(new CMenuOptionNumberChooser(NONEXISTANT_LOCALE, &percent[i],
+ i == g_RemoteControl->current_PIDs.PIDs.selected_apid,
+ 0, 999, CVolume::getInstance(), 0, 0, NONEXISTANT_LOCALE,
+ g_RemoteControl->current_PIDs.APIDs[i].desc));
+ }
+
return AudioSelector.exec(NULL, "");
}
diff --git a/src/gui/audio_setup.cpp b/src/gui/audio_setup.cpp
index 4e13def93..080041cf6 100644
--- a/src/gui/audio_setup.cpp
+++ b/src/gui/audio_setup.cpp
@@ -33,7 +33,7 @@
#endif
-#include "gui/audio_setup.h"
+#include "audio_setup.h"
#include
#include
@@ -54,7 +54,7 @@ extern cAudio *audioDecoder;
CAudioSetup::CAudioSetup(bool wizard_mode)
{
is_wizard = wizard_mode;
-
+
width = w_max (40, 10);
selected = -1;
}
@@ -68,18 +68,17 @@ int CAudioSetup::exec(CMenuTarget* parent, const std::string &/*actionKey*/)
{
dprintf(DEBUG_DEBUG, "init audio setup\n");
int res = menu_return::RETURN_REPAINT;
-
+
if (parent)
{
parent->hide();
}
res = showAudioSetup();
-
+
return res;
}
-
#define AUDIOMENU_ANALOGOUT_OPTION_COUNT 3
const CMenuOptionChooser::keyval AUDIOMENU_ANALOGOUT_OPTIONS[AUDIOMENU_ANALOGOUT_OPTION_COUNT] =
{
@@ -134,23 +133,30 @@ int CAudioSetup::showAudioSetup()
//analog modes (stereo, mono l/r...)
CMenuOptionChooser * as_oj_analogmode = new CMenuOptionChooser(LOCALE_AUDIOMENU_ANALOG_MODE, &g_settings.audio_AnalogMode, AUDIOMENU_ANALOGOUT_OPTIONS, AUDIOMENU_ANALOGOUT_OPTION_COUNT, true, audioSetupNotifier);
-
+ as_oj_analogmode->setHint("", LOCALE_MENU_HINT_AUDIO_ANALOG_MODE);
+
//dd subchannel auto on/off
CMenuOptionChooser * as_oj_ddsubchn = new CMenuOptionChooser(LOCALE_AUDIOMENU_DOLBYDIGITAL, &g_settings.audio_DolbyDigital, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, audioSetupNotifier);
-
+ as_oj_ddsubchn->setHint("", LOCALE_MENU_HINT_AUDIO_DD);
+
//dd via hdmi
CMenuOptionChooser *as_oj_dd_hdmi = NULL;
- if (g_info.hw_caps->has_HDMI)
+ if (g_info.hw_caps->has_HDMI) {
as_oj_dd_hdmi = new CMenuOptionChooser(LOCALE_AUDIOMENU_HDMI_DD, &g_settings.hdmi_dd, AUDIOMENU_HDMI_DD_OPTIONS, AUDIOMENU_HDMI_DD_OPTION_COUNT, true, audioSetupNotifier);
-
+ as_oj_dd_hdmi->setHint("", LOCALE_MENU_HINT_AUDIO_HDMI_DD);
+ }
+
//dd via spdif
CMenuOptionChooser * as_oj_dd_spdif = new CMenuOptionChooser(LOCALE_AUDIOMENU_SPDIF_DD, &g_settings.spdif_dd, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, audioSetupNotifier);
-
+ as_oj_dd_spdif->setHint("", LOCALE_MENU_HINT_AUDIO_SPDIF_DD);
+
//av synch
CMenuOptionChooser * as_oj_avsync = new CMenuOptionChooser(LOCALE_AUDIOMENU_AVSYNC, &g_settings.avsync, AUDIOMENU_AVSYNC_OPTIONS, AUDIOMENU_AVSYNC_OPTION_COUNT, true, audioSetupNotifier);
-
+ as_oj_avsync->setHint("", LOCALE_MENU_HINT_AUDIO_AVSYNC);
+
//volume steps
CMenuOptionNumberChooser * as_oj_vsteps = new CMenuOptionNumberChooser(LOCALE_AUDIOMENU_VOLUME_STEP, (int *)&g_settings.current_volume_step, true, 1, 25, NULL);
+ as_oj_vsteps->setHint("", LOCALE_MENU_HINT_AUDIO_VOLSTEP);
//clock rec
// CMenuOptionChooser * as_oj_clockrec new CMenuOptionChooser(LOCALE_AUDIOMENU_CLOCKREC, &g_settings.clockrec, AUDIOMENU_CLOCKREC_OPTIONS, AUDIOMENU_CLOCKREC_OPTION_COUNT, true, audioSetupNotifier);
@@ -160,18 +166,22 @@ int CAudioSetup::showAudioSetup()
//SRS
//SRS algo
CMenuOptionChooser * as_oj_algo = new CMenuOptionChooser(LOCALE_AUDIO_SRS_ALGO, &g_settings.srs_algo, AUDIOMENU_SRS_OPTIONS, AUDIOMENU_SRS_OPTION_COUNT, g_settings.srs_enable, audioSetupNotifier);
-
+ as_oj_algo->setHint("", LOCALE_MENU_HINT_AUDIO_SRS_ALGO);
+
//SRS noise manage
CMenuOptionChooser * as_oj_noise = new CMenuOptionChooser(LOCALE_AUDIO_SRS_NMGR, &g_settings.srs_nmgr_enable, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, g_settings.srs_enable, audioSetupNotifier);
-
+ as_oj_noise->setHint("", LOCALE_MENU_HINT_AUDIO_SRS_NMGR);
+
//SRS reverence volume
CMenuOptionNumberChooser * as_oj_volrev = new CMenuOptionNumberChooser(LOCALE_AUDIO_SRS_VOLUME, &g_settings.srs_ref_volume, g_settings.srs_enable, 1, 100, audioSetupNotifier);
-
+ as_oj_volrev->setHint("", LOCALE_MENU_HINT_AUDIO_SRS_VOLUME);
+
//SRS on/off
CTruVolumeNotifier truevolSetupNotifier(as_oj_algo, as_oj_noise, as_oj_volrev);
CMenuOptionChooser * as_oj_srsonoff = new CMenuOptionChooser(LOCALE_AUDIO_SRS_IQ, &g_settings.srs_enable, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, &truevolSetupNotifier);
+ as_oj_srsonoff->setHint("", LOCALE_MENU_HINT_AUDIO_SRS);
#endif
-
+
#if 0
CStringInput * audio_PCMOffset = new CStringInput(LOCALE_AUDIOMENU_PCMOFFSET, g_settings.audio_PCMOffset, 2, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789 ", audioSetupNotifier);
CMenuForwarder *mf = new CMenuForwarder(LOCALE_AUDIOMENU_PCMOFFSET, true, g_settings.audio_PCMOffset, audio_PCMOffset );
@@ -204,7 +214,7 @@ int CAudioSetup::showAudioSetup()
#if 0
audioSettings->addItem(mf);
#endif
-
+
int res = audioSettings->exec(NULL, "");
selected = audioSettings->getSelected();
delete audioSettings;
@@ -218,12 +228,11 @@ void CAudioSetup::setWizardMode(bool mode)
is_wizard = mode;
}
-
CTruVolumeNotifier::CTruVolumeNotifier(CMenuOptionChooser* o1, CMenuOptionChooser* o2, CMenuOptionNumberChooser *n1)
{
- toDisable_oj[0]=o1;
- toDisable_oj[1]=o2;
- toDisable_nj=n1;
+ toDisable_oj[0]=o1;
+ toDisable_oj[1]=o2;
+ toDisable_nj=n1;
}
bool CTruVolumeNotifier::changeNotify(const neutrino_locale_t, void * data)
@@ -239,4 +248,3 @@ bool CTruVolumeNotifier::changeNotify(const neutrino_locale_t, void * data)
return false;
}
-
diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp
index 330e4ce62..f0fa06614 100644
--- a/src/gui/audioplayer.cpp
+++ b/src/gui/audioplayer.cpp
@@ -60,15 +60,13 @@
#include
#include
-#include
#include
#include
#include
#include
#include
-#include
-#include
+#include
#include
#include
@@ -146,6 +144,10 @@ void CAudiofileExt::operator=(const CAudiofileExt& src)
#include
#include
+#if LIBCURL_VERSION_NUM < 0x071507
+#include
+#endif
+
struct MemoryStruct {
char *memory;
size_t size;
@@ -184,6 +186,8 @@ CAudioPlayerGui::CAudioPlayerGui(bool inetmode)
m_frameBuffer = CFrameBuffer::getInstance();
m_visible = false;
m_inetmode = inetmode;
+ dline = NULL;
+ ibox = NULL;
Init();
}
@@ -233,6 +237,8 @@ CAudioPlayerGui::~CAudioPlayerGui()
m_title2Pos.clear();
// g_Zapit->setStandby (false);
g_Sectionsd->setPauseScanning (false);
+ delete dline;
+ delete ibox;
}
//------------------------------------------------------------------------
@@ -312,7 +318,7 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &actionKey)
g_Sectionsd->setPauseScanning(true);
puts("[audioplayer.cpp] executing " AUDIOPLAYER_START_SCRIPT ".");
- if (safe_system(AUDIOPLAYER_START_SCRIPT) != 0)
+ if (my_system(AUDIOPLAYER_START_SCRIPT) != 0)
perror("Datei " AUDIOPLAYER_START_SCRIPT " fehlt.Bitte erstellen, wenn gebraucht.\nFile " AUDIOPLAYER_START_SCRIPT " not found. Please create if needed.\n");
show();
@@ -324,7 +330,7 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &actionKey)
m_frameBuffer->paintBackground();
puts("[audioplayer.cpp] executing " AUDIOPLAYER_END_SCRIPT ".");
- if (safe_system(AUDIOPLAYER_END_SCRIPT) != 0)
+ if (my_system(AUDIOPLAYER_END_SCRIPT) != 0)
perror("Datei " AUDIOPLAYER_END_SCRIPT " fehlt. Bitte erstellen, wenn gebraucht.\nFile " AUDIOPLAYER_END_SCRIPT " not found. Please create if needed.\n");
g_Zapit->unlockPlayBack();
@@ -694,6 +700,9 @@ int CAudioPlayerGui::show()
//InputSelector.addItem(GenericMenuSeparator);
hide();
InputSelector.exec(NULL, "");
+
+ delete InetRadioInputChanger;
+
if (select >= 0)
old_select = select;
switch (select) {
@@ -1871,46 +1880,34 @@ void CAudioPlayerGui::clearItemID3DetailsLine ()
void CAudioPlayerGui::paintItemID3DetailsLine (int pos)
{
int xpos = m_x - ConnectLineBox_Width;
- int ypos1 = m_y + m_title_height + m_theight+ 0 + pos*m_fheight;
- int ypos2 = m_y + (m_height - m_info_height);
+ int ypos1 = m_y + m_title_height + m_theight+ 0 + pos*m_fheight + INFO_BOX_Y_OFFSET;
+ int ypos2 = m_y + (m_height - m_info_height) + INFO_BOX_Y_OFFSET;
int ypos1a = ypos1 + (m_fheight / 2) - 2;
int ypos2a = ypos2 + (m_info_height / 2) - 2;
- fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6;
- fb_pixel_t col2 = COL_MENUCONTENT_PLUS_1;
- int c_rad_small = RADIUS_SMALL;
+ // clear details line
+ if (dline != NULL)
+ dline->hide();
- // Clear
- m_frameBuffer->paintBackgroundBoxRel(xpos - 1, m_y + m_title_height, ConnectLineBox_Width + 1,
- m_height - m_title_height);
+ // clear infobox
+ if (ibox != NULL)
+ ibox->hide();
- // paint Line if detail info (and not valid list pos)
+ // paint Line if detail info (and not valid list pos) and info box
if (!m_playlist.empty() && (pos >= 0))
{
- int fh = m_info_height > RADIUS_MID*2 ? m_info_height - RADIUS_MID*2 : m_info_height;
- // 1. col thick line
- m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 4, ypos1, 4, m_fheight, col2, c_rad_small, CORNER_LEFT);
- m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 3, ypos1, 8, m_fheight, col1, c_rad_small, CORNER_LEFT); // item marker
+ //details line
+ if (dline == NULL)
+ dline = new CComponentsDetailLine(xpos, ypos1a, ypos2a, m_fheight/2+1, m_fheight);
+ dline->setYPos(ypos1a);
+ dline->paint();
- m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 4, ypos2+RADIUS_MID, 4, fh /*m_info_height*/, col1);
-
- m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 16, ypos1a, 4, ypos2a - ypos1a, col1);
-
- m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 16, ypos1a, 12, 4, col1);
- m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 16, ypos2a, 12, 4, col1);
-
- // 2. col small line
- m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 4, ypos2+RADIUS_MID, 1, fh /*m_info_height*/, col2);
-
- m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 16, ypos1a, 1, ypos2a - ypos1a + 4, col2);
-
- m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 16, ypos1a, 12, 1, col2);
- m_frameBuffer->paintBoxRel(xpos + ConnectLineBox_Width - 12, ypos2a, 8, 1, col2);
-
- // -- small Frame around infobox
- m_frameBuffer->paintBoxFrame(m_x, ypos2, m_width, m_info_height, 2, col1, RADIUS_MID);
// paint id3 infobox
- m_frameBuffer->paintBoxRel(m_x + 2, ypos2 + 2 , m_width - 4, m_info_height - 4, COL_MENUCONTENTDARK_PLUS_0, RADIUS_MID);
+ if (ibox == NULL)
+ ibox = new CComponentsInfoBox(m_x, ypos2, m_width, m_info_height, false);
+ ibox->setYPos(ypos2);
+ ibox->paint(false, true);
+
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + 10, ypos2 + 2 + 1*m_fheight, m_width- 80,
m_playlist[m_selected].MetaData.title, COL_MENUCONTENTDARK, 0, true); // UTF-8
std::string tmp;
@@ -1939,7 +1936,10 @@ void CAudioPlayerGui::paintItemID3DetailsLine (int pos)
}
else
{
- m_frameBuffer->paintBackgroundBoxRel(m_x, ypos2, m_width, m_info_height);
+ if (dline != NULL)
+ dline->hide();
+ if (ibox != NULL)
+ ibox->hide();
}
m_frameBuffer->blit();
}
diff --git a/src/gui/audioplayer.h b/src/gui/audioplayer.h
index 3fea78f12..92ff2a2bb 100644
--- a/src/gui/audioplayer.h
+++ b/src/gui/audioplayer.h
@@ -34,10 +34,11 @@
#define __audioplayergui__
-#include "driver/framebuffer.h"
-#include "driver/audiofile.h"
-#include "gui/filebrowser.h"
-#include "gui/widget/menue.h"
+#include
+#include
+#include
+#include
+#include
#include
@@ -140,6 +141,8 @@ class CAudioPlayerGui : public CMenuTarget
bool m_screensaver;
bool m_inetmode;
uint32_t stimer;
+ CComponentsDetailLine *dline;
+ CComponentsInfoBox *ibox;
SMSKeyInput m_SMSKeyInput;
diff --git a/src/gui/audioplayer_setup.cpp b/src/gui/audioplayer_setup.cpp
index b193e6237..5ebee8d9a 100644
--- a/src/gui/audioplayer_setup.cpp
+++ b/src/gui/audioplayer_setup.cpp
@@ -34,7 +34,7 @@
#endif
-#include "gui/audioplayer_setup.h"
+#include "audioplayer_setup.h"
#include
#include
@@ -44,8 +44,8 @@
#include
#include
-#include "gui/audioplayer.h"
-#include "gui/filebrowser.h"
+#include
+#include
#include
@@ -82,7 +82,7 @@ int CAudioPlayerSetup::exec(CMenuTarget* parent, const std::string &actionKey)
}
res = showAudioPlayerSetup();
-
+
return res;
}
@@ -98,26 +98,53 @@ const CMenuOptionChooser::keyval AUDIOPLAYER_DISPLAY_ORDER_OPTIONS[AUDIOPLAYER_D
/*shows the audio setup menue*/
int CAudioPlayerSetup::showAudioPlayerSetup()
{
+ CMenuOptionChooser * mc;
+ CMenuForwarder * mf;
+
CMenuWidget* audioplayerSetup = new CMenuWidget(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_AUDIOSETUP);
audioplayerSetup->addIntroItems(LOCALE_AUDIOPLAYER_NAME);
- audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_DISPLAY_ORDER, &g_settings.audioplayer_display , AUDIOPLAYER_DISPLAY_ORDER_OPTIONS, AUDIOPLAYER_DISPLAY_ORDER_OPTION_COUNT, true ));
- audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_FOLLOW , &g_settings.audioplayer_follow , MESSAGEBOX_NO_YES_OPTIONS , MESSAGEBOX_NO_YES_OPTION_COUNT , true ));
- audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_SELECT_TITLE_BY_NAME , &g_settings.audioplayer_select_title_by_name , MESSAGEBOX_NO_YES_OPTIONS , MESSAGEBOX_NO_YES_OPTION_COUNT , true ));
- audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_REPEAT_ON , &g_settings.audioplayer_repeat_on , MESSAGEBOX_NO_YES_OPTIONS , MESSAGEBOX_NO_YES_OPTION_COUNT , true ));
- audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_SHOW_PLAYLIST, &g_settings.audioplayer_show_playlist, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true ));
+ // display order
+ mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_DISPLAY_ORDER, &g_settings.audioplayer_display, AUDIOPLAYER_DISPLAY_ORDER_OPTIONS, AUDIOPLAYER_DISPLAY_ORDER_OPTION_COUNT, true);
+ mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_ORDER);
+ audioplayerSetup->addItem(mc);
+
+ mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_FOLLOW, &g_settings.audioplayer_follow, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true);
+ mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_FOLLOW);
+ audioplayerSetup->addItem(mc);
+
+ mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_SELECT_TITLE_BY_NAME, &g_settings.audioplayer_select_title_by_name, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true );
+ mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_TITLE);
+ audioplayerSetup->addItem(mc);
+
+ mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_REPEAT_ON, &g_settings.audioplayer_repeat_on, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true );
+ mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_REPEAT);
+ audioplayerSetup->addItem(mc);
+
+ mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_SHOW_PLAYLIST, &g_settings.audioplayer_show_playlist, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true);
+ mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_PLAYLIST);
+ audioplayerSetup->addItem(mc);
CStringInput audio_screensaver(LOCALE_AUDIOPLAYER_SCREENSAVER_TIMEOUT, g_settings.audioplayer_screensaver, 2, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789 ");
- audioplayerSetup->addItem(new CMenuForwarder(LOCALE_AUDIOPLAYER_SCREENSAVER_TIMEOUT, true, g_settings.audioplayer_screensaver, &audio_screensaver));
+ mf = new CMenuForwarder(LOCALE_AUDIOPLAYER_SCREENSAVER_TIMEOUT, true, g_settings.audioplayer_screensaver, &audio_screensaver);
+ mf->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_SCREENSAVER);
+ audioplayerSetup->addItem(mf);
- audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_HIGHPRIO , &g_settings.audioplayer_highprio , MESSAGEBOX_NO_YES_OPTIONS , MESSAGEBOX_NO_YES_OPTION_COUNT , true ));
+ mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_HIGHPRIO, &g_settings.audioplayer_highprio, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true );
+ mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_HIGHPRIO);
+ audioplayerSetup->addItem(mc);
#if 0
if (CVFD::getInstance()->has_lcd) //FIXME
audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_SPECTRUM , &g_settings.spectrum , MESSAGEBOX_NO_YES_OPTIONS , MESSAGEBOX_NO_YES_OPTION_COUNT , true ));
#endif
- audioplayerSetup->addItem(new CMenuForwarder(LOCALE_AUDIOPLAYER_DEFDIR, true, g_settings.network_nfs_audioplayerdir, this, "audioplayerdir"));
- audioplayerSetup->addItem(new CMenuOptionChooser(LOCALE_AUDIOPLAYER_ENABLE_SC_METADATA, &g_settings.audioplayer_enable_sc_metadata, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true ));
+ mf = new CMenuForwarder(LOCALE_AUDIOPLAYER_DEFDIR, true, g_settings.network_nfs_audioplayerdir, this, "audioplayerdir");
+ mf->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_DEFDIR);
+ audioplayerSetup->addItem(mf);
+
+ mc = new CMenuOptionChooser(LOCALE_AUDIOPLAYER_ENABLE_SC_METADATA, &g_settings.audioplayer_enable_sc_metadata, MESSAGEBOX_NO_YES_OPTIONS, MESSAGEBOX_NO_YES_OPTION_COUNT, true);
+ mc->setHint("", LOCALE_MENU_HINT_AUDIOPLAYER_SC_METADATA);
+ audioplayerSetup->addItem(mc);
int res = audioplayerSetup->exec (NULL, "");
delete audioplayerSetup;
diff --git a/src/gui/bedit/bouqueteditor_bouquets.cpp b/src/gui/bedit/bouqueteditor_bouquets.cpp
index d328774e1..8b51e269a 100644
--- a/src/gui/bedit/bouqueteditor_bouquets.cpp
+++ b/src/gui/bedit/bouqueteditor_bouquets.cpp
@@ -35,19 +35,17 @@
#include
#include
+#include "bouqueteditor_channels.h"
+#include "bouqueteditor_bouquets.h"
#include
#include
#include
#include
-#include
#include
#include
-#include
#include
-#include "bouqueteditor_channels.h"
-#include "bouqueteditor_bouquets.h"
extern CBouquetManager *g_bouquetManager;
CBEBouquetWidget::CBEBouquetWidget()
@@ -66,6 +64,11 @@ CBEBouquetWidget::CBEBouquetWidget()
liststart = 0;
state = beDefault;
blueFunction = beRename;
+ Bouquets = NULL;
+ iheight = 0;
+ ButtonHeight = 0;
+ fheight = 0;
+ theight = 0;
}
void CBEBouquetWidget::paintItem(int pos)
@@ -533,7 +536,7 @@ std::string CBEBouquetWidget::inputName(const char * const defaultName, const ne
{
char Name[30];
- strncpy(Name, defaultName, 30);
+ strncpy(Name, defaultName, sizeof(Name)-1);
CStringInputSMS * nameInput = new CStringInputSMS(caption, Name, 29, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.,:|!?/ ");
nameInput->exec(this, "");
diff --git a/src/gui/bedit/bouqueteditor_bouquets.h b/src/gui/bedit/bouqueteditor_bouquets.h
index f916eae2b..8fff41f56 100644
--- a/src/gui/bedit/bouqueteditor_bouquets.h
+++ b/src/gui/bedit/bouqueteditor_bouquets.h
@@ -51,7 +51,7 @@ public:
virtual void onBouquetsChanged() {};
};
-class CBEBouquetWidget : public CMenuWidget
+class CBEBouquetWidget : public CMenuTarget
{
private:
diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp
index 2381b217e..97479abdb 100644
--- a/src/gui/bedit/bouqueteditor_channels.cpp
+++ b/src/gui/bedit/bouqueteditor_channels.cpp
@@ -35,10 +35,7 @@
#include
#endif
-#include
-#include
#include
-
#include "bouqueteditor_channels.h"
#include
@@ -53,7 +50,6 @@
#include
#include
-#include
extern CBouquetManager *g_bouquetManager;
CBEChannelWidget::CBEChannelWidget(const std::string & Caption, unsigned int Bouquet)
@@ -87,6 +83,15 @@ CBEChannelWidget::CBEChannelWidget(const std::string & Caption, unsigned int Bou
caption = Caption;
bouquet = Bouquet;
mode = CZapitClient::MODE_TV;
+ dline = NULL;
+ ibox = NULL;
+ Channels = NULL;
+}
+
+CBEChannelWidget::~CBEChannelWidget()
+{
+ delete dline;
+ delete ibox;
}
void CBEChannelWidget::paintItem(int pos)
@@ -100,9 +105,6 @@ void CBEChannelWidget::paintItem(int pos)
color = COL_MENUCONTENTSELECTED;
bgcolor = COL_MENUCONTENTSELECTED_PLUS_0;
- // clear details
- frameBuffer->paintBoxRel(x+2, y + height + 2, width-4, info_height - 4, COL_MENUCONTENTDARK_PLUS_0, RADIUS_LARGE);
-
if(current < Channels->size()) {
paintItem2DetailsLine (pos, current);
paintDetails(current);
@@ -192,8 +194,8 @@ void CBEChannelWidget::paintDetails(int index)
else
desc = desc + " (" + satname + ")";
- g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight, width - 30, satname.c_str(), COL_MENUCONTENTDARK, 0, true);
- g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight, width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true);
+ g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight+INFO_BOX_Y_OFFSET, width - 30, satname.c_str(), COL_MENUCONTENTDARK, 0, true);
+ g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight+INFO_BOX_Y_OFFSET, width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true);
}
void CBEChannelWidget::paintItem2DetailsLine (int pos, int /*ch_index*/)
@@ -202,41 +204,33 @@ void CBEChannelWidget::paintItem2DetailsLine (int pos, int /*ch_index*/)
int xpos = x - ConnectLineBox_Width;
int ypos1 = y + theight+0 + pos*fheight;
- int ypos2 = y + height;
+ int ypos2 = y + height + INFO_BOX_Y_OFFSET;
int ypos1a = ypos1 + (fheight/2)-2;
int ypos2a = ypos2 + (info_height/2)-2;
- fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6;
- fb_pixel_t col2 = COL_MENUCONTENT_PLUS_1;
- // Clear
- frameBuffer->paintBackgroundBoxRel(xpos,y, ConnectLineBox_Width, height+info_height);
+ clearItem2DetailsLine();
// paint Line if detail info (and not valid list pos)
if (pos >= 0)
{
- int fh = fheight > 10 ? fheight - 10: 5;
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 4, fh, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 1, fh, col2);
+ if (dline == NULL)
+ dline = new CComponentsDetailLine(xpos, ypos1a, ypos2a, fheight/2+1, info_height-RADIUS_LARGE*2);
+ dline->setYPos(ypos1a);
+ dline->paint();
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 4,info_height-14, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 1,info_height-14, col2);
-
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 4,ypos2a-ypos1a, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 1,ypos2a-ypos1a+4, col2);
-
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,4, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,1, col2);
-
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos2a, 12,4, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-12, ypos2a, 8,1, col2);
-
- frameBuffer->paintBoxFrame(x, ypos2, width, info_height, 2, col1, RADIUS_LARGE);
+ //infobox
+ if (ibox == NULL)
+ ibox = new CComponentsInfoBox(x, ypos2, width, info_height, false);
+ ibox->paint(false);
}
}
-void CBEChannelWidget::clearItem2DetailsLine ()
+void CBEChannelWidget::clearItem2DetailsLine()
{
- paintItem2DetailsLine (-1, 0);
+ if (dline != NULL)
+ dline->hide();
+ if (ibox != NULL)
+ ibox->hide();
}
void CBEChannelWidget::hide()
diff --git a/src/gui/bedit/bouqueteditor_channels.h b/src/gui/bedit/bouqueteditor_channels.h
index 5b59278c2..bcc653e74 100644
--- a/src/gui/bedit/bouqueteditor_channels.h
+++ b/src/gui/bedit/bouqueteditor_channels.h
@@ -35,20 +35,21 @@
#include
#include
-
+#include
#include
#include
#include
#include
-class CBEChannelWidget : public CMenuWidget
+class CBEChannelWidget : public CMenuTarget
{
private:
-
CFrameBuffer *frameBuffer;
-
+ CComponentsDetailLine *dline;
+ CComponentsInfoBox *ibox;
+
enum state_
{
beDefault,
@@ -100,6 +101,7 @@ class CBEChannelWidget : public CMenuWidget
public:
CBEChannelWidget( const std::string & Caption, unsigned int Bouquet);
+ ~CBEChannelWidget();
//CZapitClient::BouquetChannelList Channels;
ZapitChannelList * Channels;
diff --git a/src/gui/bedit/bouqueteditor_chanselect.cpp b/src/gui/bedit/bouqueteditor_chanselect.cpp
index 1085d2523..d7af1fa9d 100644
--- a/src/gui/bedit/bouqueteditor_chanselect.cpp
+++ b/src/gui/bedit/bouqueteditor_chanselect.cpp
@@ -35,17 +35,16 @@
#include
#include
+#include "bouqueteditor_chanselect.h"
#include
#include
#include
#include
-#include
#include
#include
-#include "bouqueteditor_chanselect.h"
extern CBouquetManager *g_bouquetManager;
@@ -72,6 +71,21 @@ CBEChannelSelectWidget::CBEChannelSelectWidget(const std::string & Caption, unsi
ButtonHeight = std::max(footerHeight, icol_h+4);
liststart = 0;
+ bouquetChannels = NULL;
+ dline = NULL;
+ ibox = NULL;
+}
+
+CBEChannelSelectWidget::~CBEChannelSelectWidget()
+{
+ // clear details line
+ if (dline != NULL)
+ dline->hide();
+ delete dline;
+ // clear infobox
+ if (ibox != NULL)
+ ibox->hide();
+ delete ibox;
}
uint CBEChannelSelectWidget::getItemCount()
@@ -105,7 +119,6 @@ void CBEChannelSelectWidget::paintItem(uint32_t itemNr, int paintNr, bool pselec
color = COL_MENUCONTENTSELECTED;
bgcolor = COL_MENUCONTENTSELECTED_PLUS_0;
- frameBuffer->paintBoxRel(x+2, y + height + 2, width-4, info_height - 4, COL_MENUCONTENTDARK_PLUS_0, RADIUS_LARGE);
if(itemNr < getItemCount()) {
paintItem2DetailsLine (paintNr, itemNr);
paintDetails(itemNr);
@@ -210,8 +223,8 @@ void CBEChannelSelectWidget::paintDetails(int index)
else
desc = desc + " (" + satname + ")";
- g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight, width - 30, satname.c_str(), COL_MENUCONTENTDARK, 0, true);
- g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight, width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true);
+ g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight+INFO_BOX_Y_OFFSET, width - 30, satname.c_str(), COL_MENUCONTENTDARK, 0, true);
+ g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight+INFO_BOX_Y_OFFSET, width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true);
}
void CBEChannelSelectWidget::paintItem2DetailsLine (int pos, int /*ch_index*/)
@@ -220,34 +233,30 @@ void CBEChannelSelectWidget::paintItem2DetailsLine (int pos, int /*ch_index*/)
int xpos = x - ConnectLineBox_Width;
int ypos1 = y + theight+0 + pos*fheight;
- int ypos2 = y + height;
+ int ypos2 = y + height + INFO_BOX_Y_OFFSET;
int ypos1a = ypos1 + (fheight/2)-2;
int ypos2a = ypos2 + (info_height/2)-2;
- fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6;
- fb_pixel_t col2 = COL_MENUCONTENT_PLUS_1;
- // Clear
- frameBuffer->paintBackgroundBoxRel(xpos,y, ConnectLineBox_Width, height+info_height);
+ // clear details line
+ if (dline != NULL)
+ dline->hide();
+
+ // clear infobox
+ if (ibox != NULL)
+ ibox->hide();
// paint Line if detail info (and not valid list pos)
if (pos >= 0)
{
- int fh = fheight > 10 ? fheight - 10: 5;
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 4, fh, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 1, fh, col2);
+ if (dline == NULL)
+ dline = new CComponentsDetailLine(xpos, ypos1a, ypos2a, fheight/2+1, info_height-RADIUS_LARGE*2);
+ dline->setYPos(ypos1a);
+ dline->paint(false);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 4,info_height-14, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 1,info_height-14, col2);
-
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 4,ypos2a-ypos1a, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 1,ypos2a-ypos1a+4, col2);
-
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,4, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,1, col2);
-
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos2a, 12,4, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-12, ypos2a, 8,1, col2);
-
- frameBuffer->paintBoxFrame(x, ypos2, width, info_height, 2, col1, RADIUS_LARGE);
+ //infobox
+ if (ibox == NULL)
+ ibox = new CComponentsInfoBox(x, ypos2, width, info_height, false);
+ ibox->paint(false);
}
}
+
diff --git a/src/gui/bedit/bouqueteditor_chanselect.h b/src/gui/bedit/bouqueteditor_chanselect.h
index 89fc63fe5..963862550 100644
--- a/src/gui/bedit/bouqueteditor_chanselect.h
+++ b/src/gui/bedit/bouqueteditor_chanselect.h
@@ -34,7 +34,7 @@
#include
#include
-
+#include
#include
#include
@@ -48,6 +48,8 @@ class CBEChannelSelectWidget : public CListBox
unsigned int bouquet;
CZapitClient::channelsMode mode;
bool isChannelInBouquet( int index);
+ CComponentsDetailLine *dline;
+ CComponentsInfoBox *ibox;
uint getItemCount();
void paintItem(uint32_t itemNr, int paintNr, bool selected);
@@ -64,6 +66,7 @@ class CBEChannelSelectWidget : public CListBox
ZapitChannelList * bouquetChannels;
CBEChannelSelectWidget(const std::string & Caption, unsigned int Bouquet, CZapitClient::channelsMode Mode);
+ ~CBEChannelSelectWidget();
int exec(CMenuTarget* parent, const std::string & actionKey);
bool hasChanged();
diff --git a/src/gui/bookmarkmanager.cpp b/src/gui/bookmarkmanager.cpp
index 203a33026..d9cb3a5e7 100644
--- a/src/gui/bookmarkmanager.cpp
+++ b/src/gui/bookmarkmanager.cpp
@@ -43,7 +43,6 @@
#include
#include
-#include
#include
#include
#include
@@ -90,7 +89,8 @@ int CBookmarkManager::createBookmark (const std::string & url, const std::string
}
//------------------------------------------------------------------------
-
+#if 0
+//never used
void CBookmarkManager::removeBookmark (unsigned int index) {
std::vector::iterator p = bookmarks.begin()+index;
bookmarks.erase(p);
@@ -115,7 +115,7 @@ void CBookmarkManager::renameBookmark (unsigned int index) {
bookmarksmodified=true;
}
}
-
+#endif
#define BOOKMARKSTRINGLENGTH (10 + 1)
#define BOOKMARKSTRINGMODIFICATIONPOINT 8
const char * const BOOKMARKSTRING = "bookmark0.";
@@ -195,7 +195,8 @@ CBookmarkManager::~CBookmarkManager () {
}
//------------------------------------------------------------------------
-
+#if 0
+//never used
int CBookmarkManager::getBookmarkCount(void) const {
return bookmarks.size();
}
@@ -205,7 +206,7 @@ int CBookmarkManager::getBookmarkCount(void) const {
int CBookmarkManager::getMaxBookmarkCount(void) const {
return MAXBOOKMARKS;
}
-
+#endif
//------------------------------------------------------------------------
void CBookmarkManager::flush() {
@@ -215,7 +216,8 @@ void CBookmarkManager::flush() {
}
//------------------------------------------------------------------------
-
+#if 0
+//never used
const CBookmark * CBookmarkManager::getBookmark(CMenuTarget* parent)
{
if (parent)
@@ -244,7 +246,7 @@ const CBookmark * CBookmarkManager::getBookmark(CMenuTarget* parent)
listmaxshow=bookmarks.size();
height = theight+0+listmaxshow*fheight*2; // recalc height
}
- if (!(bookmarks.empty() && selected==bookmarks.size()))
+ if ((!bookmarks.empty() && selected==bookmarks.size()))
{
selected=bookmarks.size()-1;
liststart = (selected/listmaxshow)*listmaxshow;
@@ -361,7 +363,7 @@ const CBookmark * CBookmarkManager::getBookmark(CMenuTarget* parent)
else
return NULL;
}
-
+#endif
//------------------------------------------------------------------------
void CBookmarkManager::paintItem(int pos)
{
diff --git a/src/gui/bouquetlist.cpp b/src/gui/bouquetlist.cpp
index ebb5a459c..63d46c047 100644
--- a/src/gui/bouquetlist.cpp
+++ b/src/gui/bouquetlist.cpp
@@ -33,7 +33,6 @@
#include
#endif
-#include
#include
#include
@@ -354,7 +353,8 @@ int CBouquetList::show(bool bShowChannelList)
loop = false;
}
else if ((msg == CRCInput::RC_timeout ) ||
- (msg == (neutrino_msg_t)g_settings.key_channelList_cancel))
+ (msg == (neutrino_msg_t)g_settings.key_channelList_cancel) ||
+ (msg == CRCInput::RC_favorites) )
{
selected = oldselected;
if(fader.StartFadeOut()) {
@@ -364,21 +364,25 @@ int CBouquetList::show(bool bShowChannelList)
loop=false;
}
else if(msg == CRCInput::RC_red || msg == CRCInput::RC_favorites) {
- CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_FAV);
- hide();
- return -3;
+ if (CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_FAV) {
+ CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_FAV);
+ hide();
+ return -3;
+ }
} else if(msg == CRCInput::RC_green) {
- CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_PROV);
- hide();
- return -3;
+ if (CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_PROV) {
+ CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_PROV);
+ hide();
+ return -3;
+ }
} else if(msg == CRCInput::RC_yellow || msg == CRCInput::RC_sat) {
- if(bShowChannelList) {
+ if(bShowChannelList && CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_SAT) {
CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_SAT);
hide();
return -3;
}
} else if(msg == CRCInput::RC_blue) {
- if(bShowChannelList) {
+ if(bShowChannelList && CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_ALL) {
CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_ALL);
hide();
return -3;
diff --git a/src/gui/cam_menu.cpp b/src/gui/cam_menu.cpp
index ae836ced5..6da597a76 100644
--- a/src/gui/cam_menu.cpp
+++ b/src/gui/cam_menu.cpp
@@ -22,6 +22,7 @@
#ifdef HAVE_CONFIG_H
#include
#endif
+#include "cam_menu.h"
#include
#include
@@ -31,25 +32,21 @@
#include
#include
#include
-#include
#include
#include
#include
#include
#include
-#include
-#include "gui/widget/menue.h"
-#include "gui/widget/stringinput.h"
-#include "gui/widget/messagebox.h"
-#include "gui/widget/hintbox.h"
-#include "gui/widget/progresswindow.h"
+#include "widget/icons.h"
+#include "widget/stringinput.h"
+#include "widget/messagebox.h"
+#include "widget/progresswindow.h"
-#include "system/setting_helpers.h"
-#include "system/settings.h"
-#include "system/debug.h"
+#include
+#include
+#include
-#include
#include
#include
diff --git a/src/gui/cec_setup.cpp b/src/gui/cec_setup.cpp
index fad8a9e43..edc861b6b 100644
--- a/src/gui/cec_setup.cpp
+++ b/src/gui/cec_setup.cpp
@@ -31,7 +31,7 @@
#endif
-#include "gui/cec_setup.h"
+#include "cec_setup.h"
#include
#include
@@ -66,9 +66,9 @@ int CCECSetup::exec(CMenuTarget* parent, const std::string &/*actionKey*/)
if (parent)
parent->hide();
-
+
res = showMenu();
-
+
return res;
}
@@ -86,26 +86,29 @@ int CCECSetup::showMenu()
//menue init
CMenuWidget *cec = new CMenuWidget(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_CEC);
cec->addIntroItems(LOCALE_VIDEOMENU_HDMI_CEC);
-
+
//cec
CMenuOptionChooser *cec_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_HDMI_CEC_MODE, &g_settings.hdmi_cec_mode, VIDEOMENU_HDMI_CEC_MODE_OPTIONS, VIDEOMENU_HDMI_CEC_MODE_OPTION_COUNT, true, this);
+ cec_ch->setHint("", LOCALE_MENU_HINT_CEC_MODE);
cec1 = new CMenuOptionChooser(LOCALE_VIDEOMENU_HDMI_CEC_VIEW_ON, &g_settings.hdmi_cec_view_on, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, g_settings.hdmi_cec_mode != VIDEO_HDMI_CEC_MODE_OFF, this);
+ cec1->setHint("", LOCALE_MENU_HINT_CEC_VIEW_ON);
cec2 = new CMenuOptionChooser(LOCALE_VIDEOMENU_HDMI_CEC_STANDBY, &g_settings.hdmi_cec_standby, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, g_settings.hdmi_cec_mode != VIDEO_HDMI_CEC_MODE_OFF, this);
-
+ cec2->setHint("", LOCALE_MENU_HINT_CEC_STANDBY);
+
cec->addItem(cec_ch);
cec->addItem(GenericMenuSeparatorLine);
//-------------------------------------------------------
cec->addItem(cec1);
cec->addItem(cec2);
-
+
int res = cec->exec(NULL, "");
delete cec;
-
+
return res;
}
-void CCECSetup::setCECSettings()
-{
+void CCECSetup::setCECSettings()
+{
printf("[neutrino CEC Settings] %s init CEC settings...\n", __FUNCTION__);
videoDecoder->SetCECAutoStandby(g_settings.hdmi_cec_standby == 1);
videoDecoder->SetCECAutoView(g_settings.hdmi_cec_view_on == 1);
diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp
index 369d9fc9f..07ce2c3b4 100644
--- a/src/gui/channellist.cpp
+++ b/src/gui/channellist.cpp
@@ -25,8 +25,9 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ along with this program; if not, write to the
+ Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
@@ -49,15 +50,14 @@
#include
#include
#include
+#include
#include
#include
-#include
#include
#include
-#include
+#include
#include
-#include
#include
#include
@@ -71,6 +71,8 @@
#include
#include
+#include
+
extern CBouquetList * bouquetList; /* neutrino.cpp */
extern CRemoteControl * g_RemoteControl; /* neutrino.cpp */
extern CPictureViewer * g_PicViewer;
@@ -86,10 +88,6 @@ extern CBouquetList * RADIOallList;
extern bool autoshift;
extern CBouquetManager *g_bouquetManager;
-void sectionsd_getChannelEvents(CChannelEventList &eList, const bool tv_mode, t_channel_id *chidlist, int clen);
-void sectionsd_getEventsServiceKey(t_channel_id serviceUniqueKey, CChannelEventList &eList, char search = 0, std::string search_text = "");
-void sectionsd_getCurrentNextServiceKey(t_channel_id uniqueServiceKey, CSectionsdClient::responseGetCurrentNextInfoChannelID& current_next );
-
extern int old_b_id;
CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vlist, bool )
@@ -173,7 +171,7 @@ void CChannelList::updateEvents(unsigned int from, unsigned int to)
unsigned int count;
for (count = from; count < to; count++) {
events.clear();
- sectionsd_getEventsServiceKey(chanlist[count]->channel_id, events);
+ CEitManager::getInstance()->getEventsServiceKey(chanlist[count]->channel_id, events);
chanlist[count]->nextEvent.startTime = (long)0x7fffffff;
for ( CChannelEventList::iterator e= events.begin(); e != events.end(); ++e ) {
if ((long)e->startTime > atime &&
@@ -186,17 +184,16 @@ void CChannelList::updateEvents(unsigned int from, unsigned int to)
}
} else {
t_channel_id *p_requested_channels;
- int size_requested_channels = chanlist_size * sizeof(t_channel_id);
- p_requested_channels = new t_channel_id[size_requested_channels];
+ p_requested_channels = new t_channel_id[chanlist_size];
if (! p_requested_channels) {
fprintf(stderr,"%s:%d allocation failed!\n", __FUNCTION__, __LINE__);
return;
}
- for (uint32_t count = 0; count < chanlist_size; count++) {
- p_requested_channels[count] = chanlist[count + from]->channel_id&0xFFFFFFFFFFFFULL;
- }
+ for (uint32_t count = 0; count < chanlist_size; count++)
+ p_requested_channels[count] = chanlist[count + from]->channel_id;
+
CChannelEventList levents;
- sectionsd_getChannelEvents(levents, (CNeutrinoApp::getInstance()->getMode()) != NeutrinoMessages::mode_radio, p_requested_channels, size_requested_channels);
+ CEitManager::getInstance()->getChannelEvents(levents, p_requested_channels, chanlist_size);
for (uint32_t count=0; count < chanlist_size; count++) {
chanlist[count + from]->currentEvent = CChannelEvent();
for (CChannelEventList::iterator e = levents.begin(); e != levents.end(); ++e) {
@@ -592,6 +589,7 @@ int CChannelList::show()
loop=false;
}
else if( msg == CRCInput::RC_record) { //start direct recording from channellist
+#if 0
if(!CRecordManager::getInstance()->RecordingStatus(chanlist[selected]->channel_id))
{
printf("[neutrino channellist] start direct recording...\n");
@@ -608,10 +606,20 @@ int CChannelList::show()
}
}
+#endif
+ if(SameTP()) {
+ printf("[neutrino channellist] start direct recording...\n");
+ hide();
+ if (!CRecordManager::getInstance()->Record(chanlist[selected]->channel_id)) {
+ paintHead();
+ paint();
+ } else
+ loop=false;
+ }
}
else if( msg == CRCInput::RC_stop ) { //stopp recording
- if(CRecordManager::getInstance()->RecordingStatus())
+ if(CRecordManager::getInstance()->RecordingStatus(chanlist[selected]->channel_id))
{
if (CRecordManager::getInstance()->AskToStop(chanlist[selected]->channel_id))
{
@@ -854,10 +862,6 @@ int CChannelList::show()
res = bouquetList->exec(true);
printf("CChannelList:: bouquetList->exec res %d\n", res);
}
-#if 0
- /* FIXME call this somewhere after show */
- CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO);
-#endif
this->new_mode_active = 0;
if(NeutrinoMessages::mode_ts == CNeutrinoApp::getInstance()->getMode())
@@ -1197,6 +1201,7 @@ int CChannelList::numericZap(int key)
channelList->adjustToChannelID(orgList->getActiveChannel_ChannelID(), false);
this->frameBuffer->paintBackground();
res = channelList->exec();
+ CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO);
}
delete channelList;
return res;
@@ -1215,6 +1220,7 @@ int CChannelList::numericZap(int key)
if (channelList->getSize() != 0) {
this->frameBuffer->paintBackground();
res = channelList->exec();
+ CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO);
}
delete channelList;
}
@@ -1545,7 +1551,7 @@ void CChannelList::paintDetails(int index)
char buf[128] = {0};
char cFrom[50] = {0}; // UTF-8
CSectionsdClient::CurrentNextInfo CurrentNext;
- sectionsd_getCurrentNextServiceKey(chanlist[index]->channel_id & 0xFFFFFFFFFFFFULL, CurrentNext);
+ CEitManager::getInstance()->getCurrentNextServiceKey(chanlist[index]->channel_id, CurrentNext);
if (!CurrentNext.next_name.empty()) {
struct tm *pStartZeit = localtime (& CurrentNext.next_zeit.startzeit);
snprintf(cFrom, sizeof(cFrom), "%s %02d:%02d",g_Locale->getText(LOCALE_WORD_FROM),pStartZeit->tm_hour, pStartZeit->tm_min );
@@ -1573,39 +1579,20 @@ void CChannelList::paintItem2DetailsLine (int pos, int /*ch_index*/)
int ypos1a = ypos1 + (fheight/2)-2;
int ypos2a = ypos2 + (info_height/2)-2;
fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6;
- fb_pixel_t col2 = COL_MENUCONTENT_PLUS_1;
// Clear
- frameBuffer->paintBackgroundBoxRel(xpos,y, ConnectLineBox_Width, height+info_height);
+ frameBuffer->paintBackgroundBoxRel(xpos,y, ConnectLineBox_Width, height+info_height + 1);
// paint Line if detail info (and not valid list pos)
if (pos >= 0) { //pos >= 0 && chanlist[ch_index]->currentEvent.description != "") {
if(1) // FIXME why -> ? (!g_settings.channellist_extended)
{
- int fh = fheight > 10 ? fheight - 10: 5;
- /* item mark */
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 4, fh, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos1+5, 1, fh, col2);
+ //details line
+ CComponentsDetailLine details_line(xpos, ypos1a, ypos2a, fheight/2+1, info_height-RADIUS_LARGE*2);
+ details_line.paint();
- /* info mark */
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 4,info_height-14, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-4, ypos2+7, 1,info_height-14, col2);
-
- /* vertical connect line */
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 4,ypos2a-ypos1a, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 1,ypos2a-ypos1a+4, col2);
-
- /* horizontal item line */
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,4, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos1a, 12,1, col2);
-
- /* horizontal info line */
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-16, ypos2a, 12,4, col1);
- frameBuffer->paintBoxRel(xpos+ConnectLineBox_Width-12, ypos2a, 8,1, col2);
-
-// frameBuffer->paintBoxRel(x, ypos2, width, info_height, col1, RADIUS_LARGE);
+ //info box frame
frameBuffer->paintBoxFrame(x, ypos2, width, info_height, 2, col1, RADIUS_LARGE);
-
}
}
}
@@ -1770,6 +1757,7 @@ void CChannelList::paintItem(int pos)
if (pos == 0)
{
+ /* FIXME move to calcSize() ? */
int w_max, w_min, h;
ChannelList_Rec = 0;
int recmode_icon_max = CRecordManager::RECMODE_REC, recmode_icon_min = CRecordManager::RECMODE_TSHIFT;
@@ -1786,11 +1774,11 @@ void CChannelList::paintItem(int pos)
for (uint32_t i = 0; i < chanlist.size(); i++)
{
rec_mode = CRecordManager::getInstance()->GetRecordMode(chanlist[i]->channel_id);
- if (rec_mode == recmode_icon_max)
+ if (rec_mode & recmode_icon_max)
{
ChannelList_Rec = w_max;
break;
- } else if (rec_mode == recmode_icon_min)
+ } else if (rec_mode & recmode_icon_min)
ChannelList_Rec = w_min;
}
if (ChannelList_Rec > 0)
@@ -1802,9 +1790,9 @@ void CChannelList::paintItem(int pos)
//set recording icon
const char * rec_icon = "";
- if (rec_mode == CRecordManager::RECMODE_REC)
+ if (rec_mode & CRecordManager::RECMODE_REC)
rec_icon = NEUTRINO_ICON_REC;
- else if (rec_mode == CRecordManager::RECMODE_TSHIFT)
+ else if (rec_mode & CRecordManager::RECMODE_TSHIFT)
rec_icon = NEUTRINO_ICON_AUTO_SHIFT;
//calculating icons
@@ -1820,7 +1808,6 @@ void CChannelList::paintItem(int pos)
r_icon_x = r_icon_x - s_icon_w;
//paint recording icon
- //bool do_rec = CRecordManager::getInstance()->RecordingStatus(chanlist[curr]->channel_id);
if (rec_mode != CRecordManager::RECMODE_OFF)
frameBuffer->paintIcon(rec_icon, r_icon_x - r_icon_w, ypos, fheight);//ypos + (fheight - 16)/2);
diff --git a/src/gui/channellist.h b/src/gui/channellist.h
index 1159d6646..e3b360156 100644
--- a/src/gui/channellist.h
+++ b/src/gui/channellist.h
@@ -28,8 +28,9 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ along with this program; if not, write to the
+ Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
#include
diff --git a/src/gui/dboxinfo.cpp b/src/gui/dboxinfo.cpp
index 77f0ebb88..b5ac6df49 100644
--- a/src/gui/dboxinfo.cpp
+++ b/src/gui/dboxinfo.cpp
@@ -52,6 +52,7 @@
#include
#include
+#include
static const int FSHIFT = 16; /* nr of bits of precision */
#define FIXED_1 (1<addTimer(5*1000*1000, false);
while (doLoop)
{
@@ -104,6 +106,9 @@ int CDBoxInfoWidget::exec(CMenuTarget* parent, const std::string &)
if(fader.Fade())
doLoop = false;
}
+ else if((msg == NeutrinoMessages::EVT_TIMER) && (data == updateTimer)) {
+ paint();
+ }
else if ( ( msg == CRCInput::RC_timeout ) ||
( msg == CRCInput::RC_home ) ||
( msg == CRCInput::RC_ok ) ) {
@@ -145,6 +150,7 @@ int CDBoxInfoWidget::exec(CMenuTarget* parent, const std::string &)
hide();
fader.Stop();
+ g_RCInput->killTimer(updateTimer);
return res;
}
@@ -383,8 +389,12 @@ void CDBoxInfoWidget::paint()
uint64_t bytes_free;
if (memory_flag)
{
- bytes_total = info.totalram;
- bytes_free = info.freeram;
+ //bytes_total = info.totalram;
+ //bytes_free = info.freeram;
+ unsigned long t, f;
+ get_mem_usage(t, f);
+ bytes_total = t*1024;
+ bytes_free = f*1024;
}
else
{
diff --git a/src/gui/epgplus.cpp b/src/gui/epgplus.cpp
index 9f6230952..8f781eea0 100644
--- a/src/gui/epgplus.cpp
+++ b/src/gui/epgplus.cpp
@@ -45,6 +45,7 @@
#include
#include
#include
+#include
#include
#include
@@ -290,7 +291,6 @@ bool EpgPlus::ChannelEventEntry::isSelected (time_t selectedTime) const
return (selectedTime >= this->channelEvent.startTime) && (selectedTime < this->channelEvent.startTime + time_t (this->channelEvent.duration));
}
-bool sectionsd_getEPGidShort(event_id_t epgID, CShortEPGData * epgdata);
void EpgPlus::ChannelEventEntry::paint (bool pisSelected, bool toggleColor)
{
this->frameBuffer->paintBoxRel (this->x, this->y, this->width, this->font->getHeight()
@@ -315,7 +315,8 @@ void EpgPlus::ChannelEventEntry::paint (bool pisSelected, bool toggleColor)
CShortEPGData shortEpgData;
- this->footer->paintEventDetails (this->channelEvent.description, sectionsd_getEPGidShort(this->channelEvent.eventID, &shortEpgData) ? shortEpgData.info1 : "");
+ bool ret = CEitManager::getInstance()->getEPGidShort(this->channelEvent.eventID, &shortEpgData);
+ this->footer->paintEventDetails (this->channelEvent.description, ret ? shortEpgData.info1 : "");
this->timeLine->paintGrid();
}
@@ -522,8 +523,6 @@ EpgPlus::~EpgPlus()
this->free();
}
-void sectionsd_getEventsServiceKey(t_channel_id serviceUniqueKey, CChannelEventList &eList, char search = 0, std::string search_text = "");
-
void EpgPlus::createChannelEntries (int selectedChannelEntryIndex)
{
for (TChannelEntries::iterator It = this->displayedChannelEntries.begin();
@@ -557,9 +556,8 @@ void EpgPlus::createChannelEntries (int selectedChannelEntryIndex)
ChannelEntry *channelEntry = new ChannelEntry (channel, i, this->frameBuffer, this->footer, this->bouquetList, this->channelsTableX + 2, yPosChannelEntry, this->channelsTableWidth);
//printf("Going to get getEventsServiceKey for %llx\n", (channel->channel_id & 0xFFFFFFFFFFFFULL));
- //CChannelEventList channelEventList = g_Sectionsd->getEventsServiceKey (channel->channel->channel_id & 0xFFFFFFFFFFFFULL);
CChannelEventList channelEventList;
- sectionsd_getEventsServiceKey(channel->channel_id, channelEventList);
+ CEitManager::getInstance()->getEventsServiceKey(channel->channel_id, channelEventList);
//printf("channelEventList size %d\n", channelEventList.size());
int xPosEventEntry = this->eventsTableX;
diff --git a/src/gui/epgplus.h b/src/gui/epgplus.h
index 45adfb0ae..b03aed939 100644
--- a/src/gui/epgplus.h
+++ b/src/gui/epgplus.h
@@ -35,7 +35,6 @@
#include
#include
-#include
#include
#include "color.h"
diff --git a/src/gui/epgview.cpp b/src/gui/epgview.cpp
index bd8f33df9..2a30af005 100644
--- a/src/gui/epgview.cpp
+++ b/src/gui/epgview.cpp
@@ -55,6 +55,7 @@
#include
#include
+#include
extern CPictureViewer * g_PicViewer;
@@ -445,9 +446,6 @@ static bool sortByDateTime (const CChannelEvent& a, const CChannelEvent& b)
return a.startTime< b.startTime;
}
-//extern char recDir[255];
-void sectionsd_getEventsServiceKey(t_channel_id serviceUniqueKey, CChannelEventList &eList, char search = 0, std::string search_text = "");
-bool sectionsd_getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::ComponentTagList& tags);
int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_startzeit, bool doLoop )
{
int res = menu_return::RETURN_REPAINT;
@@ -470,9 +468,7 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start
}
bigFonts = g_settings.bigFonts;
start();
- //evtlist = g_Sectionsd->getEventsServiceKey(channel_id&0xFFFFFFFFFFFFULL);
- evtlist.clear();
- sectionsd_getEventsServiceKey(channel_id, evtlist);
+ CEitManager::getInstance()->getEventsServiceKey(channel_id, evtlist);
// Houdini added for Private Premiere EPG start sorted by start date/time 2005-08-15
sort(evtlist.begin(),evtlist.end(),sortByDateTime);
}
@@ -548,7 +544,7 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start
}
}
// Compare strings normally if not positively found to be equal before
- if (false == bHide && false == (std::string::npos == epgData.info2.find(epgData.info1))) {
+ if (false == bHide && 0 == epgData.info2.find(epgData.info1)) {
bHide = true;
}
}
@@ -591,10 +587,12 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start
// -- display more screenings on the same channel
// -- 2002-05-03 rasc
+ has_follow_screenings = false;
if (hasFollowScreenings(channel_id, epgData.title)) {
processTextToArray(""); // UTF-8
processTextToArray(std::string(g_Locale->getText(LOCALE_EPGVIEWER_MORE_SCREENINGS)) + ':'); // UTF-8
FollowScreenings(channel_id, epgData.title);
+ has_follow_screenings = true;
}
/* neat for debugging duplicate event issues etc. */
@@ -646,7 +644,7 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start
int dummy_h,dummy_w;
frameBuffer->getIconSize(NEUTRINO_ICON_16_9_GREY, &dummy_w, &dummy_h);
if (dummy_h == 16 && dummy_w == 26){ // show only standard icon size
- if ( sectionsd_getComponentTagsUniqueKey( epgData.eventID, tags ) )
+ if (CEitManager::getInstance()->getComponentTagsUniqueKey( epgData.eventID, tags))
{
for (unsigned int i=0; i< tags.size(); i++)
{
@@ -856,7 +854,24 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start
printf("timerd not available\n");
break;
}
+ case CRCInput::RC_blue:
+ {
+ if(!followlist.empty()){
+ hide();
+ CNeutrinoEventList *ee;
+ ee = new CNeutrinoEventList;
+ ee->exec(channel_id, g_Locale->getText(LOCALE_EPGVIEWER_MORE_SCREENINGS_SHORT),"","",followlist); // UTF-8
+ delete ee;
+ if (!bigFonts && g_settings.bigFonts) {
+ g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]->setSize((int)(g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]->getSize() * BIG_FONT_FAKTOR));
+ g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO2]->setSize((int)(g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO2]->getSize() * BIG_FONT_FAKTOR));
+ }
+ bigFonts = g_settings.bigFonts;
+ show(channel_id,epgData.eventID,&epgData.epg_times.startzeit,false);
+ }
+ break;
+ }
case CRCInput::RC_info:
case CRCInput::RC_help:
bigFonts = bigFonts ? false : true;
@@ -933,9 +948,6 @@ void CEpgData::hide()
showTimerEventBar (false);
}
-bool sectionsd_getEPGid(const event_id_t epgID, const time_t startzeit, CEPGData * epgdata);
-bool sectionsd_getActualEPGServiceKey(const t_channel_id uniqueServiceKey, CEPGData * epgdata);
-
void CEpgData::GetEPGData(const t_channel_id channel_id, uint64_t id, time_t* startzeit, bool clear )
{
if(clear)
@@ -945,11 +957,9 @@ void CEpgData::GetEPGData(const t_channel_id channel_id, uint64_t id, time_t* st
bool res;
if ( id!= 0 )
- //res = g_Sectionsd->getEPGid( id, *startzeit, &epgData );
- res = sectionsd_getEPGid(id, *startzeit, &epgData);
+ res = CEitManager::getInstance()->getEPGid(id, *startzeit, &epgData);
else
- //res = g_Sectionsd->getActualEPGServiceKey(channel_id&0xFFFFFFFFFFFFULL, &epgData );
- res = sectionsd_getActualEPGServiceKey(channel_id&0xFFFFFFFFFFFFULL, &epgData );
+ res = CEitManager::getInstance()->getActualEPGServiceKey(channel_id, &epgData );
if ( res )
{
@@ -1049,7 +1059,6 @@ int CEpgData::FollowScreenings (const t_channel_id /*channel_id*/, const std::st
char tmpstr[256]={0};
screening_dates = screening_nodual = "";
- // alredy read: evtlist = g_Sectionsd->getEventsServiceKey( channel_id&0xFFFFFFFFFFFFULL );
for (e = followlist.begin(); e != followlist.end(); ++e)
{
@@ -1083,7 +1092,9 @@ int CEpgData::FollowScreenings (const t_channel_id /*channel_id*/, const std::st
const struct button_label EpgButtons[] =
{
{ NEUTRINO_ICON_BUTTON_RED , LOCALE_TIMERBAR_RECORDEVENT },
- { NEUTRINO_ICON_BUTTON_YELLOW, LOCALE_TIMERBAR_CHANNELSWITCH }
+ { NEUTRINO_ICON_BUTTON_YELLOW, LOCALE_TIMERBAR_CHANNELSWITCH },
+ { NEUTRINO_ICON_BUTTON_BLUE, LOCALE_EPGVIEWER_MORE_SCREENINGS_SHORT }
+
};
void CEpgData::showTimerEventBar (bool pshow)
@@ -1112,9 +1123,9 @@ void CEpgData::showTimerEventBar (bool pshow)
/* 2 * ICON_LARGE_WIDTH for potential 16:9 and DD icons */
int aw = ox - 20 - 2 * (ICON_LARGE_WIDTH + 2);
if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF)
- ::paintButtons(x, y, 0, 2, EpgButtons, aw, h);
+ ::paintButtons(x, y, 0, has_follow_screenings ? 3:2, EpgButtons, aw, h);
else
- ::paintButtons(x, y, 0, 1, &EpgButtons[1], aw, h);
+ ::paintButtons(x, y, 0, has_follow_screenings ? 2:1, &EpgButtons[1], aw, h);
frameBuffer->blit();
#if 0
diff --git a/src/gui/epgview.h b/src/gui/epgview.h
index ddc475a86..7b051c024 100644
--- a/src/gui/epgview.h
+++ b/src/gui/epgview.h
@@ -62,6 +62,7 @@ class CEpgData
std::string epg_end;
int epg_done;
bool bigFonts;
+ bool has_follow_screenings;
time_t tmp_curent_zeit;
uint64_t prev_id;
diff --git a/src/gui/eventlist.cpp b/src/gui/eventlist.cpp
index 4b1371d86..aa268b932 100644
--- a/src/gui/eventlist.cpp
+++ b/src/gui/eventlist.cpp
@@ -25,8 +25,9 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ along with this program; if not, write to the
+ Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
@@ -47,7 +48,7 @@
#include "widget/hintbox.h"
#include "widget/buttons.h"
-#include "gui/bouquetlist.h"
+#include "bouquetlist.h"
#include
#include
@@ -56,6 +57,7 @@
#include