diff --git a/var/mongoose/cgi-bin/epg_dump.jim b/var/mongoose/cgi-bin/epg_dump.jim new file mode 100755 index 0000000..93983da --- /dev/null +++ b/var/mongoose/cgi-bin/epg_dump.jim @@ -0,0 +1,35 @@ +#!/mod/bin/jimsh + +package require cgi +source /mod/var/mongoose/lib/epg.class + +puts "Content-Type: text/html" +puts "" + +source /mod/var/mongoose/html/lib/header.jim + +cgi_input +#cgi_dump + +set service 0 +set service 4351 +catch { set service [dict get $_cgi service] } +set event 0 +catch { set event [dict get $_cgi event] } +set raw 0 +catch { set raw [dict get $_cgi raw] } + +puts "
"
+if { $raw == 0 } {
+	puts [epg exec dump -raw 1 -service $service -event $event]
+	puts "
+		Click here for extended dump"
+} else {
+	puts [epg exec dumpraw -raw 1 -service $service -event $event]
+}
+
+puts "
" + +epg cleanup +source /mod/var/mongoose/html/lib/footer.jim + diff --git a/var/mongoose/cgi-bin/epg_search.jim b/var/mongoose/cgi-bin/epg_search.jim new file mode 100755 index 0000000..843f9ac --- /dev/null +++ b/var/mongoose/cgi-bin/epg_search.jim @@ -0,0 +1,144 @@ +#!/mod/bin/jimsh + +package require cgi +source /mod/var/mongoose/lib/epg.class +source /mod/var/mongoose/lib/altrow + +puts "Content-Type: text/html" +puts "" + +source /mod/var/mongoose/html/lib/header.jim + +puts "" + +cgi_input +#cgi_dump +#set _cgi [dict create term "doctor who"] +#set env(REQUEST_URI) "test" + +set term "" +catch { set term [dict get $_cgi term] } +set cmd "search" +if {[dict exists $_cgi full]} { set cmd "searchall" } +set ct 0 +catch { set ct [dict get $_cgi ct] } + +puts " +
+Search EPG: +Search descriptions as well as titles. + +" + +set db [sqlite3.open /var/lib/humaxtv/setup.db] +set res [$db query { + select itemBlob from TBL_USERCONFIG + where itemName like 'EPG\_KEYWORD\_%%' ESCAPE '\' +}] + +proc cts {type img text} { + puts " +  $text"; +} + +puts { +
+
+ Content Type Searches: +
+
+} +cts 1 "Movie" "Film/Drama" +cts 2 "News" "News/Current affairs" +cts 3 "Show" "Show/Game show" +cts 4 "Sports" "Sport" +cts 5 "Children" "Children" +cts 10 "Leisure" "Leisure" +puts { +
+
+} +cts 6 "Music" "Music/Ballet/Dance" +cts 7 "Art" "Arts/Culture" +cts 8 "Society" "Social/Political/Economic" +cts 9 "Education" "Education/Science/Factual" +puts {
} + +if {[llength $res] > 0} { + puts { +
+ Keyword Searches: +
+
+ } + set done 0 + foreach keyword $res { + if {$done == 1} { puts " | " } else { incr done } + set kw [string range [lindex $keyword 1] 1 end] + puts "$kw + " + } + puts "
" +} + +$db close + +puts "
" + +if {$ct > 0 } { + set records [epg fetch dump -type $ct] +} elseif {$term ne ""} { + set records [epg fetch $cmd -extra $term] +} + +puts { + + + + + + + +} + +proc rsort {v1 v2} { + set v1s [$v1 get start] + set v2s [$v2 get start] + + if {$v1s == $v2s} { return 0 } + if {$v1s > $v2s } { return 1 } + return -1 +} + + +set i 0 +foreach record [lsort -command rsort $records] { + altrow + puts "" + puts "" + puts "" + puts [$record cell] + puts "" + puts "" + flush stdout +} +puts "
DateChannelProgrammeSynopsis
+ [clock format [$record get start] -format "%a %d %b %Y"]
+ [clock format [$record get start] -format "%H:%M %Z"]
[$record get channel_num] + + [$record get channel_name] + [$record get text][$record get warning]
" + +if {$term != ""} { + puts " + + " +} + +epg cleanup +source /mod/var/mongoose/html/lib/footer.jim + diff --git a/var/mongoose/cgi-bin/epg_service.jim b/var/mongoose/cgi-bin/epg_service.jim new file mode 100755 index 0000000..0cd1dc4 --- /dev/null +++ b/var/mongoose/cgi-bin/epg_service.jim @@ -0,0 +1,57 @@ +#!/mod/bin/jimsh + +package require cgi +source /mod/var/mongoose/lib/epg.class +source /mod/var/mongoose/lib/altrow + +puts "Content-Type: text/html" +puts "" + +source /mod/var/mongoose/html/lib/header.jim + +cgi_input +#cgi_dump + +set service 0 +set service 4351 +catch { set service [dict get $_cgi service] } + +set records [epg fetch dump -service $service] + +set channel_num [[lindex $records 0] get channel_num] +set channel_name [[lindex $records 0] get channel_name] + +puts "

Channel: $channel_num - $channel_name

" + +puts { + + + + + + + + +} + +set i 0 +foreach record $records { + altrow + if {[$record showing]} { + puts "" + } else { puts "" } + puts "" + puts "" + puts [$record cell] + puts "" + puts "" + puts "" + flush stdout +} +puts "
DateTimeProgrammeSynopsis
+ [clock format [$record get start] -format "%a %d %b %Y"] + [clock format [$record get start] -format "%H:%M"][$record get text][$record get warning]
" + +epg cleanup +source /mod/var/mongoose/html/lib/footer.jim + diff --git a/var/mongoose/cgi-bin/service.jim b/var/mongoose/cgi-bin/service.jim new file mode 100755 index 0000000..784cb5e --- /dev/null +++ b/var/mongoose/cgi-bin/service.jim @@ -0,0 +1,15 @@ +#!/mod/bin/jimsh + +package require cgi + +puts "Content-Type: text/html" +puts "" + +cgi_input +#cgi_dump + +catch { set service [dict get $_cgi service] } +catch { set action [dict get $_cgi action] } + +catch { puts [exec /mod/bin/service $action $service] } + diff --git a/var/mongoose/cgi-bin/status.jim b/var/mongoose/cgi-bin/status.jim new file mode 100755 index 0000000..ce17849 --- /dev/null +++ b/var/mongoose/cgi-bin/status.jim @@ -0,0 +1,47 @@ +#!/mod/bin/jimsh + +set pid [exec pgrep humaxtv] + +if {[catch {set data [exec lsof -p $pid | grep Video | fgrep .ts]} ]} { + exit +} + +set lines [split $data "\n"] +foreach line $lines { + regsub -all -- {[[:space:]]+} $line " " line + set fields [split $line " "] + set name [lindex [split $line "/"] end] + set size($name) [lindex $fields 6] + set seen($name) 0 +} + +sleep 2 + +set data [exec lsof -p $pid | grep Video | fgrep .ts] +regsub -all -- {[[:space:]]+} $line " " line +set lines [split $data "\n"] +foreach line $lines { + regsub -all -- {[[:space:]]+} $line " " line + set fields [split $line " "] + set name [lindex [split $line "/"] end] + set size2 [lindex $fields 6] + + if { $size2 > $size($name) && $seen($name) < 1 } { + set mode "Recording" + set icon "745_1_11_Video_1REC.png" + } else { + set mode "Watching" + set icon "745_1_10_Video_2Live.png" + } + + incr seen($name) + + lappend output "$mode $name" +} + +if {[llength $output]} { + puts "Content-Type: text/html" + puts "" + puts [join $output "
\n"] +} + diff --git a/var/mongoose/html/css/style.css b/var/mongoose/html/css/style.css new file mode 100644 index 0000000..9b1a122 --- /dev/null +++ b/var/mongoose/html/css/style.css @@ -0,0 +1,201 @@ +html body +{ + line-height: 1.55em; + font-family: "Lucida Grande", verdana, lucida, helvetica, sans-serif; + background-color: #f8f8f8; + margin: 1em; + padding: 0; + font-size: small; +} + +html>body +{ + font-size: small; +} + +div.container +{ + position: relative; + padding-left: 30px; + padding-right: 30px; + height: 116px; +} + +div.container .left +{ + position: absolute; + left: 0px; + top: 0px; + width: 30px; + height: 116px; +} + +div.container .right +{ + position: absolute; + right: 0px; + top: 0px; + width: 30px; + height: 116px; +} + +div.container .middle +{ + background-image: url('/images/154_1_00_WIN_MD116_2C.png'); + background-repeat: repeat-x; + height: 116px; +} + +div.footer +{ + clear: both; + padding-top: 2em; +} + +table +{ + empty-cells: show; +} + +table.borders, table.borders td, table.borders th +{ + border: 1px solid #669933; + empty-cells: show; +} + +table tr.odd +{ + background: #ccff99; + color: black; +} + +table tr.even +{ + background: #ffffcc; + color: black; +} + +table td,table th +{ + font-size: small; +} + +table th +{ + font-weight: bold; + text-align: left; +} + +pre +{ + font-family: Consolas, 'Courier New', Courier, monospace; + color: black; + background: #f9d9b0 url('/img/prebg.png') repeat-x top; + line-height: 1.24; + padding: 3px 8px; + margin: 0 5em 1em 5em; + border-color: #f9d9b0; + border-bottom: 1px solid #f9bc6d; + border-top-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + -khtml-border-top-left-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + -khtml-border-top-right-radius: 4px; + + white-space: pre-wrap; + white-space: -moz-pre-wrap !important; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + white-space: break-word; +} + +.shadowbox +{ + background: #ccc; + position: relative; + width: 60%; + top: 2px; + left: 2px; +} + +.shadowbox div +{ + background: white; + color: #005000; + border: 1px solid #7a4707; + padding: 10px; + position: relative; + top: -2px; + left: -2px; +} + +:link:focus, +:visited:focus, +:link, +:visited, +:link:active, +:visited:active +{ + text-decoration: none; + color: #1e5bbd; + background-color: transparent; +} +/* +:link:hover, +:visited:hover +{ + text-decoration: underline; + background-color: #b4d5ff; + color: #1559B3; +} +*/ + +.footnote +{ + color: #ff4000; + background: transparent; + font-size: 70%; + font-weight: bold; +} + +.blueshade +{ + background: #b9daff; + color: black; +} + +.yellowshade +{ + background: #f6ff5b; + color: black; +} + +.pinkshade +{ + background: #ffccff; + color: black; +} + +.greenshade +{ + background: #e4faa8; + color: black; +} + +.orangeshade +{ + background: #ffeeaa; + color: black; +} + +img.progress +{ + background: transparent url(/img/percentback.png) top left no-repeat; + padding: 0; + margin: 0; + background-position: 1px 0; +} + diff --git a/var/mongoose/html/db.shtml b/var/mongoose/html/db.shtml new file mode 100644 index 0000000..4fe6b71 --- /dev/null +++ b/var/mongoose/html/db.shtml @@ -0,0 +1,4 @@ + + + + diff --git a/var/mongoose/html/epg.shtml b/var/mongoose/html/epg.shtml new file mode 100644 index 0000000..51c2e4a --- /dev/null +++ b/var/mongoose/html/epg.shtml @@ -0,0 +1,9 @@ + +
+Search EPG: +Search descriptions as well as titles. + +
+ + + diff --git a/var/mongoose/html/img.html b/var/mongoose/html/img.html new file mode 100644 index 0000000..a05ea79 --- /dev/null +++ b/var/mongoose/html/img.html @@ -0,0 +1,1040 @@ + +Images + +111_1_00_Cursor_1L_Arrow.png
+111_1_00_Cursor_2R_Arrow.png
+111_1_00_Cursor_S1_1L.png
+111_1_00_Cursor_S1_2C.png
+111_1_00_Cursor_S1_2C_30.png
+111_1_00_Cursor_S1_3R.png
+111_1_00_Cursor_S1_H_1L.png
+111_1_00_Cursor_S1_H_2C.png
+111_1_00_Cursor_S1_H_2C_30.png
+111_1_00_Cursor_S1_H_3R.png
+111_2_00_Cursor_S2_1L.png
+111_2_00_Cursor_S2_2C.png
+111_2_00_Cursor_S2_2C_30.png
+111_2_00_Cursor_S2_3R.png
+111_2_00_Cursor_S2_H_1L.png
+111_2_00_Cursor_S2_H_2C.png
+111_2_00_Cursor_S2_H_2C_30.png
+111_2_00_Cursor_S2_H_3R.png
+111_3_00_Cursor_S3_1L.png
+111_3_00_Cursor_S3_2C.png
+111_3_00_Cursor_S3_2C_30.png
+111_3_00_Cursor_S3_3R.png
+111_3_00_Cursor_S3_Arrow1.png
+111_3_00_Cursor_S3_Arrow2.png
+112_1_00_Cursor_W1_1L.png
+112_1_00_Cursor_W1_2C.png
+112_1_00_Cursor_W1_2C_30.png
+112_1_00_Cursor_W1_3R.png
+112_1_00_Cursor_W1_H_1L.png
+112_1_00_Cursor_W1_H_2C.png
+112_1_00_Cursor_W1_H_2C_30.png
+112_1_00_Cursor_W1_H_3R.png
+113_1_00_Cursor_D1_1L.png
+113_1_00_Cursor_D1_2C.png
+113_1_00_Cursor_D1_2C_30.png
+113_1_00_Cursor_D1_3R.png
+113_1_00_Cursor_D1_H_1L.png
+113_1_00_Cursor_D1_H_2C.png
+113_1_00_Cursor_D1_H_2C_30.png
+113_1_00_Cursor_D1_H_3R.png
+113_2_26_Cursor_M3_1L.png
+113_2_26_Cursor_M3_2C.png
+113_2_26_Cursor_M3_2C_30.png
+113_2_26_Cursor_M3_3R.png
+113_2_26_Cursor_M3_H_1L.png
+113_2_26_Cursor_M3_H_2C.png
+113_2_26_Cursor_M3_H_2C_30.png
+113_2_26_Cursor_M3_H_3R.png
+114_1_00_Cursor_C1.png
+114_1_00_Cursor_C1_H.png
+117_1_10_Cursor_M1_1L.png
+117_1_10_Cursor_M1_2C.png
+117_1_10_Cursor_M1_2C_30.png
+117_1_10_Cursor_M1_3R.png
+117_1_10_Cursor_M1_H_1L.png
+117_1_10_Cursor_M1_H_2C.png
+117_1_10_Cursor_M1_H_2C_30.png
+117_1_10_Cursor_M1_H_3R.png
+117_2_16_Cursor_M2_1L.png
+117_2_16_Cursor_M2_2C.png
+117_2_16_Cursor_M2_2C_30.png
+117_2_16_Cursor_M2_3R.png
+117_2_16_Cursor_M2_H_1L.png
+117_2_16_Cursor_M2_H_2C.png
+117_2_16_Cursor_M2_H_2C_30.png
+117_2_16_Cursor_M2_H_3R.png
+121_1_00_BTN_S1_C.png
+121_1_00_BTN_S1_D.png
+121_1_00_BTN_S1_N.png
+122_1_00_BTN_W1_C.png
+122_1_00_BTN_W1_N.png
+122_2_00_BTN_W2_C_1L.png
+122_2_00_BTN_W2_C_2C.png
+122_2_00_BTN_W2_C_2C_30.png
+122_2_00_BTN_W2_C_3R.png
+122_2_00_BTN_W2_H_1L.png
+122_2_00_BTN_W2_H_2C.png
+122_2_00_BTN_W2_H_2C_30.png
+122_2_00_BTN_W2_H_3R.png
+122_2_00_BTN_W2_N_1L.png
+122_2_00_BTN_W2_N_2C.png
+122_2_00_BTN_W2_N_2C_30.png
+122_2_00_BTN_W2_N_3R.png
+123_1_00_BTN_D1_C.png
+123_1_00_BTN_D1_N.png
+123_2_00_BTN_D2_C.png
+123_2_00_BTN_D2_N.png
+124_1_00_BTN_P1_C_Bar.png
+124_1_00_BTN_P1_C_PIN.png
+124_1_00_BTN_P1_H_Bar.png
+124_1_00_BTN_P1_H_PIN.png
+124_1_00_BTN_P1_N_Bar.png
+124_1_00_BTN_P1_N_PIN.png
+125_1_00_BTN_K1_C.png
+125_1_00_BTN_K1_D.png
+125_1_00_BTN_K1_N.png
+125_2_00_BTN_K2_C.png
+125_2_00_BTN_K2_N.png
+125_3_00_BTN_K3_C.png
+125_3_00_BTN_K3_N.png
+125_4_00_BTN_K4_C.png
+125_4_00_BTN_K4_N.png
+125_5_00_BTN_K5_C.png
+125_5_00_BTN_K5_D.png
+125_5_00_BTN_K5_N.png
+126_1_00_BTN_C1_C.png
+126_1_00_BTN_C1_H.png
+126_1_00_BTN_C1_N.png
+131_1_00_Cell_E1.png
+131_1_00_Cell_E2_1L.png
+131_1_00_Cell_E2_2C.png
+131_1_00_Cell_E2_2C_30.png
+131_1_00_Cell_E2_3R.png
+131_1_00_Cell_E3_1L.png
+131_1_00_Cell_E3_2C.png
+131_1_00_Cell_E3_2C_30.png
+131_1_00_Cell_E3_3R.png
+131_1_00_Cell_E4_1L.png
+131_1_00_Cell_E4_2C.png
+131_1_00_Cell_E4_2C_30.png
+131_1_00_Cell_E4_3R.png
+131_1_00_Cell_E5_1L.png
+131_1_00_Cell_E5_2C.png
+131_1_00_Cell_E5_2C_30.png
+131_1_00_Cell_E5_3R.png
+131_1_00_Cell_E6_1L.png
+131_1_00_Cell_E6_2C.png
+131_1_00_Cell_E6_2C_30.png
+131_1_00_Cell_E6_3R.png
+131_1_00_Cell_E7_1L.png
+131_1_00_Cell_E7_2C.png
+131_1_00_Cell_E7_2C_30.png
+131_1_00_Cell_E7_3R.png
+131_1_00_Cell_E8_1L.png
+131_1_00_Cell_E8_2C.png
+131_1_00_Cell_E8_2C_30.png
+131_1_00_Cell_E8_3R.png
+141_0_00_WIN_Dim.png
+141_1_00_WIN_ST2_1T_PopList.png
+141_1_00_WIN_ST2_2M_PopList.png
+141_1_00_WIN_ST2_3B_PopList.png
+141_2_00_WIN_ST2_1UP_Arrow.png
+141_2_00_WIN_ST2_2DN_Arrow.png
+141_3_00_WIN_ST3_1L.png
+141_3_00_WIN_ST3_2C.png
+141_3_00_WIN_ST3_3R.png
+142_1_00_WIN_SF1_iPlate.png
+142_1_00_WIN_SF2_1L_iPlate.png
+142_1_00_WIN_SF2_2C_iPlate.png
+142_1_00_WIN_SF2_3R_iPlate.png
+142_1_00_WIN_SF3_1L.png
+142_1_00_WIN_SF3_2C.png
+142_1_00_WIN_SF3_3R.png
+142_1_00_WIN_SF4_1L.png
+142_1_00_WIN_SF4_2C.png
+142_1_00_WIN_SF4_3R.png
+142_1_00_WIN_SF5_1L.png
+142_1_00_WIN_SF5_2C.png
+142_1_00_WIN_SF5_3R.png
+143_1_10_WIN_P1_1L.png
+143_1_10_WIN_P1_2C.png
+143_1_10_WIN_P1_3R.png
+144_1_00_WIN_E1_1L_Keyboard.png
+144_1_00_WIN_E1_2C_Keyboard.png
+144_1_00_WIN_E1_3R_Keyboard.png
+144_2_00_WIN_E2_1L_Calendar.png
+144_2_00_WIN_E2_2C_Calendar.png
+144_2_00_WIN_E2_3R_Calendar.png
+145_1_13_WIN_M1_1L_Arrow.png
+145_1_13_WIN_M1_2C.png
+145_1_13_WIN_M1_3R_Arrow.png
+145_2_17_WIN_M2_Connecting.png
+151_1_00_Process01.png
+151_1_00_Process02.png
+151_1_00_Process03.png
+151_1_00_Process04.png
+151_1_00_Process05.png
+151_1_00_Process06.png
+151_1_00_Process07.png
+151_1_00_Process08.png
+151_1_00_Process09.png
+151_1_00_Process10.png
+151_1_00_Process11.png
+151_1_00_Process12.png
+151_2_00_Process01_S.png
+151_2_00_Process02_S.png
+151_2_00_Process03_S.png
+151_2_00_Process04_S.png
+152_1_00_WIN_LD_1L.png
+152_1_00_WIN_LD_2C.png
+152_1_00_WIN_LD_3R.png
+153_0_00_WIN_TD_1L_Arrow.png
+153_0_00_WIN_TD_2R_Arrow.png
+153_1_00_WIN_TD160_1L.png
+153_1_00_WIN_TD160_2C.png
+153_1_00_WIN_TD160_3R.png
+153_2_00_WIN_TD230_1L.png
+153_2_00_WIN_TD230_2C.png
+153_2_00_WIN_TD230_3R.png
+153_2_00_WIN_TD243_1L.png
+153_2_00_WIN_TD243_2C.png
+153_2_00_WIN_TD243_3R.png
+153_2_00_WIN_TD261_1L.png
+153_2_00_WIN_TD261_2C.png
+153_2_00_WIN_TD261_3R.png
+153_2_00_WIN_TD271_1L.png
+153_2_00_WIN_TD271_2C.png
+153_2_00_WIN_TD271_3R.png
+153_2_00_WIN_TD288_1L.png
+153_2_00_WIN_TD288_2C.png
+153_2_00_WIN_TD288_3R.png
+153_2_00_WIN_TD299_1L.png
+153_2_00_WIN_TD299_2C.png
+153_2_00_WIN_TD299_3R.png
+153_3_00_WIN_TD320_1L.png
+153_3_00_WIN_TD320_2C.png
+153_3_00_WIN_TD320_3R.png
+153_3_00_WIN_TD335_1L.png
+153_3_00_WIN_TD335_2C.png
+153_3_00_WIN_TD335_3R.png
+153_3_00_WIN_TD343_1L.png
+153_3_00_WIN_TD343_2C.png
+153_3_00_WIN_TD343_3R.png
+153_3_00_WIN_TD362_1L.png
+153_3_00_WIN_TD362_2C.png
+153_3_00_WIN_TD362_3R.png
+153_3_00_WIN_TD368_1L.png
+153_3_00_WIN_TD368_2C.png
+153_3_00_WIN_TD368_3R.png
+153_3_00_WIN_TD370_1L.png
+153_3_00_WIN_TD370_2C.png
+153_3_00_WIN_TD370_3R.png
+153_4_00_WIN_TD400_1L.png
+153_4_00_WIN_TD400_2C.png
+153_4_00_WIN_TD400_3R.png
+153_4_00_WIN_TD406_1L.png
+153_4_00_WIN_TD406_2C.png
+153_4_00_WIN_TD406_3R.png
+153_4_00_WIN_TD412_1L.png
+153_4_00_WIN_TD412_2C.png
+153_4_00_WIN_TD412_3R.png
+153_4_00_WIN_TD419_1L.png
+153_4_00_WIN_TD419_2C.png
+153_4_00_WIN_TD419_3R.png
+153_4_00_WIN_TD444_1L.png
+153_4_00_WIN_TD444_2C.png
+153_4_00_WIN_TD444_3R.png
+153_4_00_WIN_TD456_1L.png
+153_4_00_WIN_TD456_2C.png
+153_4_00_WIN_TD456_3R.png
+153_4_00_WIN_TD462_1L.png
+153_4_00_WIN_TD462_2C.png
+153_4_00_WIN_TD462_3R.png
+153_4_00_WIN_TD488_1L.png
+153_4_00_WIN_TD488_2C.png
+153_4_00_WIN_TD488_3R.png
+153_4_00_WIN_TD493_1L.png
+153_4_00_WIN_TD493_2C.png
+153_4_00_WIN_TD493_3R.png
+153_5_00_WIN_TD500_1L.png
+153_5_00_WIN_TD500_2C.png
+153_5_00_WIN_TD500_3R.png
+153_5_00_WIN_TD506_1L.png
+153_5_00_WIN_TD506_2C.png
+153_5_00_WIN_TD506_3R.png
+153_5_00_WIN_TD517_1L.png
+153_5_00_WIN_TD517_2C.png
+153_5_00_WIN_TD517_3R.png
+153_5_00_WIN_TD532_1L.png
+153_5_00_WIN_TD532_2C.png
+153_5_00_WIN_TD532_2C_30.png
+153_5_00_WIN_TD532_3R.png
+153_5_00_WIN_TD550_1L.png
+153_5_00_WIN_TD550_2C.png
+153_5_00_WIN_TD550_3R.png
+154_0_00_WIN_MD082_1L.png
+154_0_00_WIN_MD082_2C.png
+154_0_00_WIN_MD082_3R.png
+154_0_00_WIN_MD_Pincode.png
+154_1_00_WIN_MD116_1L.png
+154_1_00_WIN_MD116_2C.png
+154_1_00_WIN_MD116_3R.png
+154_1_00_WIN_MD150_1L.png
+154_1_00_WIN_MD150_2C.png
+154_1_00_WIN_MD150_3R.png
+154_1_00_WIN_MD184_1L.png
+154_1_00_WIN_MD184_2C.png
+154_1_00_WIN_MD184_3R.png
+154_2_00_WIN_MD218_1L.png
+154_2_00_WIN_MD218_2C.png
+154_2_00_WIN_MD218_3R.png
+154_2_00_WIN_MD252_1L.png
+154_2_00_WIN_MD252_2C.png
+154_2_00_WIN_MD252_3R.png
+154_2_00_WIN_MD272_1L.png
+154_2_00_WIN_MD272_2C.png
+154_2_00_WIN_MD272_3R.png
+154_2_00_WIN_MD286_1L.png
+154_2_00_WIN_MD286_2C.png
+154_2_00_WIN_MD286_3R.png
+154_3_00_WIN_MD320_1L.png
+154_3_00_WIN_MD320_2C.png
+154_3_00_WIN_MD320_3R.png
+154_3_00_WIN_MD354_1L.png
+154_3_00_WIN_MD354_2C.png
+154_3_00_WIN_MD354_3R.png
+154_3_00_WIN_MD388_1L.png
+154_3_00_WIN_MD388_2C.png
+154_3_00_WIN_MD388_3R.png
+154_4_00_WIN_MD400_1L.png
+154_4_00_WIN_MD400_2C.png
+154_4_00_WIN_MD400_3R.png
+154_4_00_WIN_MD464_1L.png
+154_4_00_WIN_MD464_2C.png
+154_4_00_WIN_MD464_3R.png
+155_1_00_WIN_BD239_1L.png
+155_1_00_WIN_BD239_2C.png
+155_1_00_WIN_BD239_3R_Point.png
+155_1_00_WIN_BD283_1L.png
+155_1_00_WIN_BD283_2C.png
+155_1_00_WIN_BD283_3R_Point.png
+155_1_00_WIN_BD370_1L.png
+155_1_00_WIN_BD370_1L_Point.png
+155_1_00_WIN_BD370_2C.png
+155_1_00_WIN_BD370_3R.png
+155_1_00_WIN_BD370_3R_Point.png
+156_1_00_WIN_SD.png
+156_1_00_WIN_SD_1T.png
+156_1_00_WIN_SD_2M.png
+156_1_00_WIN_SD_3B.png
+156_1_00_WIN_SD_Icon.png
+161_1_00_Line_W1.png
+162_1_00_Box_B1_1T.png
+162_1_00_Box_B1_2M.png
+162_1_00_Box_B1_2M_30.png
+162_1_00_Box_B1_3B.png
+162_1_00_Box_B2_1T.png
+162_1_00_Box_B2_2M.png
+162_1_00_Box_B2_2M_30.png
+162_1_00_Box_B2_3B.png
+162_1_00_Box_B3_1T.png
+162_1_00_Box_B3_2M.png
+162_1_00_Box_B3_2M_30.png
+162_1_00_Box_B3_3B.png
+162_1_00_Box_B4_1L.png
+162_1_00_Box_B4_2C.png
+162_1_00_Box_B4_3R.png
+162_1_00_Box_B5_1L.png
+162_1_00_Box_B5_2C.png
+162_1_00_Box_B5_2C_473.png
+162_1_00_Box_B5_3R.png
+162_1_00_Box_B6_1L.png
+162_1_00_Box_B6_2C.png
+162_1_00_Box_B6_3R.png
+162_1_00_Box_B7_Find.png
+162_1_00_Box_B8.png
+163_1_00_Box_W1.png
+163_1_00_Box_W2.png
+163_1_00_Box_W3.png
+163_1_00_Box_W4.png
+163_1_00_Box_W5_1L.png
+163_1_00_Box_W5_2C.png
+163_1_00_Box_W5_3R.png
+163_1_00_Box_W6.png
+163_1_00_Box_W8.png
+164_1_00_Input_K1_1L.png
+164_1_00_Input_K1_2C.png
+164_1_00_Input_K1_3R.png
+164_2_00_Input_C1_1L.png
+164_2_00_Input_C1_2C.png
+164_2_00_Input_C2_1L.png
+164_2_00_Input_C2_2C.png
+165_1_00_Bar_W1_BG.png
+165_1_00_Bar_W1_LV.png
+165_1_00_Bar_W2_BG.png
+165_1_00_Bar_W2_LV.png
+165_1_00_Bar_W3_BG.png
+165_1_00_Bar_W3_LV.png
+165_1_11_Bar_W4_BG_1L.png
+165_1_11_Bar_W4_BG_2CR.png
+165_1_11_Bar_W4_LV1_Watch.png
+165_1_11_Bar_W4_LV2_Record.png
+165_2_00_Bar_B1_BG.png
+165_2_00_Bar_B1_LV.png
+165_2_00_Bar_B2_BG.png
+165_2_00_Bar_B2_LV.png
+165_2_00_Bar_B3_BG.png
+165_2_00_Bar_B3_LV.png
+165_2_00_Bar_B4_BG.png
+165_2_00_Bar_B4_LV.png
+165_2_00_Bar_B5_BG.png
+165_2_00_Bar_B5_Cursor.png
+165_2_00_Bar_B5_LV.png
+165_2_00_Bar_B5_LV_Disable.png
+165_2_00_Bar_B6_BG.png
+165_2_00_Bar_B6_LV.png
+165_2_00_Bar_B7_BG.png
+165_2_00_Bar_B7_LV.png
+165_2_10_Bar_B8_BG.png
+165_2_10_Bar_B8_LV1_TSR.png
+165_2_10_Bar_B8_LV2_PB.png
+165_2_10_Bar_B8_LV3_REC.png
+165_2_10_Bar_B8_LV3_REC_Disable.png
+165_2_11_Bar_B9_BG.png
+165_2_11_Bar_B9_LV.png
+166_1_00_Scroll_B1_1T.png
+166_1_00_Scroll_B1_2M.png
+166_1_00_Scroll_B1_3B.png
+166_2_00_Scroll_W1_1T.png
+166_2_00_Scroll_W1_2M.png
+166_2_00_Scroll_W1_3B.png
+166_2_00_Scroll_W1_4BG.png
+167_1_00_Check_B1_C_1On.png
+167_1_00_Check_B1_C_2Off.png
+167_1_00_Check_B1_N_1On.png
+167_1_00_Check_B1_N_2Off.png
+167_1_00_Check_B2_Video.png
+167_1_00_Check_B3_Music.png
+167_1_00_Check_B4_Wizard.png
+167_2_00_Check_W1_C_1On.png
+167_2_00_Check_W1_C_2Off.png
+167_2_00_Check_W1_N_1On.png
+167_2_00_Check_W1_N_2Off.png
+167_2_00_Check_W2_SUB.png
+168_1_00_Radio_B1_C_1On.png
+168_1_00_Radio_B1_C_2Off.png
+168_1_00_Radio_B1_N_1On.png
+168_1_00_Radio_B1_N_2Off.png
+171_1_00_CAS.png
+171_1_00_CAS_BD.png
+171_1_00_CAS_BT.png
+171_1_00_CAS_CR.png
+171_1_00_CAS_CX.png
+171_1_00_CAS_IR.png
+171_1_00_CAS_MG.png
+171_1_00_CAS_NA.png
+171_1_00_CAS_ND.png
+171_1_00_CAS_VA.png
+172_1_00_1080i.png
+172_1_00_576i.png
+172_1_00_576p.png
+172_1_00_720p.png
+172_1_00_HD.png
+172_1_26_HD_Simulcast.png
+172_1_26_SD.png
+172_1_26_SD_Simulcast.png
+172_3_00_16_9.png
+172_3_00_4_3.png
+173_1_00_G1_Art.png
+173_1_00_G1_Children.png
+173_1_00_G1_Education.png
+173_1_00_G1_Leisure.png
+173_1_00_G1_Movie.png
+173_1_00_G1_Music.png
+173_1_00_G1_News.png
+173_1_00_G1_Show.png
+173_1_00_G1_Society.png
+173_1_00_G1_Special.png
+173_1_00_G1_Sports.png
+173_1_26_G1_Not_Supported.png
+173_1_26_G1_Unclassified.png
+173_2_00_G2_Art.png
+173_2_00_G2_Children.png
+173_2_00_G2_Education.png
+173_2_00_G2_Leisure.png
+173_2_00_G2_Movie.png
+173_2_00_G2_Music.png
+173_2_00_G2_News.png
+173_2_00_G2_Show.png
+173_2_00_G2_Society.png
+173_2_00_G2_Special.png
+173_2_00_G2_Sports.png
+173_2_26_G2_Not_Supported.png
+173_2_26_G2_Unclassified.png
+173_3_00_G3_Art.png
+173_3_00_G3_Children.png
+173_3_00_G3_Education.png
+173_3_00_G3_Leisure.png
+173_3_00_G3_Movie.png
+173_3_00_G3_Music.png
+173_3_00_G3_News.png
+173_3_00_G3_Show.png
+173_3_00_G3_Society.png
+173_3_00_G3_Special.png
+173_3_00_G3_Sports.png
+173_3_26_G3_Not_Supported.png
+173_3_26_G3_Unclassified.png
+174_1_00_Raiting_04.png
+174_1_00_Raiting_05.png
+174_1_00_Raiting_06.png
+174_1_00_Raiting_07.png
+174_1_00_Raiting_08.png
+174_1_00_Raiting_09.png
+174_1_00_Raiting_10.png
+174_1_00_Raiting_11.png
+174_1_00_Raiting_12.png
+174_1_00_Raiting_13.png
+174_1_00_Raiting_14.png
+174_1_00_Raiting_15.png
+174_1_00_Raiting_16.png
+174_1_00_Raiting_17.png
+174_1_00_Raiting_18.png
+174_1_26_GuidancePolicy.png
+174_3_06_Raiting_21_Mark.png
+174_3_06_Raiting_22_Mark.png
+175_1_00_Reservation_Watch.png
+175_1_11_Reservation_Record.png
+175_1_11_Series_Record.png
+178_1_00_Icon_AD.png
+178_1_00_Icon_Dolby.png
+178_1_00_Icon_Dolby_Plus.png
+178_1_00_Icon_Lock.png
+178_1_00_Icon_Multiaudio.png
+178_1_00_Icon_Multifeed.png
+178_1_00_Icon_Serise.png
+178_1_00_Icon_Subtitle.png
+178_1_00_Icon_Teletext.png
+178_1_26_Icon_InteractiveMHEG.png
+178_1_26_Icon_Recommend.png
+178_1_26_Icon_Split.png
+178_2_00_Icon_Subtitle_DVB.png
+178_2_00_Icon_Subtitle_EBU.png
+181_1_00_Help1_Red.png
+181_1_00_Help2_Green.png
+181_1_00_Help3_Yellow.png
+181_1_00_Help4_Blue.png
+181_1_00_Help5_OPT_Plus.png
+181_1_00_Help7_Info.png
+181_1_00_Help9_EXIT.png
+181_1_18_Help10_Portal.png
+181_1_18_Help9_EXIT.png
+182_1_00_Help1_Red_D.png
+182_1_00_Help2_Green_D.png
+182_1_00_Help3_Yellow_D.png
+182_1_00_Help4_Blue_D.png
+182_1_00_Help5_OPT_Plus_D.png
+183_1_16_Help1_Red_H.png
+211_1_00_WIZ_BG.png
+211_1_00_WIZ_Install_BG.png
+212_1_00_WIZ_Step01.png
+212_1_00_WIZ_Step02.png
+212_1_00_WIZ_Step03.png
+212_1_00_WIZ_Step04.png
+212_1_00_WIZ_Step05.png
+212_1_00_WIZ_Step06.png
+212_1_00_WIZ_Step07.png
+213_1_00_WIZ_Help1_LR.png
+213_1_00_WIZ_Help2_UD.png
+213_1_00_WIZ_Help3_OK.png
+214_1_00_GMT1.png
+214_1_00_GMT2.png
+214_1_00_GMT3.png
+215_1_00_WIZ_1Auto_43.png
+215_1_00_WIZ_2Letter_43.png
+215_1_00_WIZ_3Centre_43.png
+215_2_00_WIZ_1Auto_169.png
+215_2_00_WIZ_2Pillar_169.png
+215_2_00_WIZ_3Zoom_169.png
+216_1_00_WIZ_1Quick.png
+216_1_00_WIZ_2Auto.png
+216_1_00_WIZ_3Skip.png
+216_1_00_WIZ_4Automatic_Search.png
+217_1_07_WIZ_LAN.png
+217_1_08_WIZ_WiFi.png
+311_1_00_Menu_BG.png
+321_1_00_Menu_CHList.png
+321_1_00_Menu_CHList_1UP.png
+321_1_00_Menu_CHList_2DN.png
+322_1_00_Menu_EPG.png
+322_1_00_Menu_EPG_1UP.png
+322_1_00_Menu_EPG_2DN.png
+323_1_10_Menu_Video.png
+323_1_10_Menu_Video_1UP.png
+323_1_10_Menu_Video_2DN.png
+324_1_12_Menu_Music.png
+324_1_12_Menu_Music_1UP.png
+324_1_12_Menu_Music_2DN.png
+325_1_13_Menu_Photo.png
+325_1_13_Menu_Photo_1UP.png
+325_1_13_Menu_Photo_2DN.png
+326_1_00_Menu_Settings.png
+326_1_00_Menu_Settings_1UP.png
+326_1_00_Menu_Settings_2DN.png
+327_1_18_Menu_Portal.png
+327_1_18_Menu_Portal_1UP.png
+327_1_18_Menu_Portal_2DN.png
+328_1_26_Menu_TV_Guide.png
+328_1_26_Menu_TV_Guide_2DN.png
+331_1_00_ST_MSG_Icon.png
+332_1_00_ST_1Auto_43.png
+332_1_00_ST_2Letter_43.png
+332_1_00_ST_3Centre_43.png
+332_2_00_ST_1Auto_169.png
+332_2_00_ST_2Pillar_169.png
+332_2_00_ST_3Zoom_169.png
+332_4_00_ST_DST.png
+334_1_00_ST_Install_BG.png
+345_1_27_ST_USB_01.png
+345_1_27_ST_USB_02.png
+345_1_27_ST_USB_03.png
+345_1_27_ST_USB_04.png
+345_1_27_ST_USB_05.png
+345_1_27_ST_USB_06.png
+345_1_27_ST_USB_07.png
+345_1_27_ST_USB_08.png
+345_1_27_ST_USB_09.png
+345_1_27_ST_USB_10.png
+345_1_27_ST_USB_11.png
+345_1_27_ST_USB_12.png
+345_1_27_ST_USB_13.png
+345_1_27_ST_USB_14.png
+345_1_27_ST_USB_15.png
+345_1_27_ST_USB_16.png
+345_1_27_ST_USB_17.png
+345_1_27_ST_USB_18.png
+345_1_27_ST_USB_19.png
+345_1_27_ST_USB_20.png
+345_1_27_ST_USB_21.png
+345_1_27_ST_USB_22.png
+345_1_27_ST_USB_23.png
+345_1_27_ST_USB_24.png
+345_1_27_ST_USB_25.png
+345_1_27_ST_USB_BG.png
+345_2_14_ST_HDD_01.png
+345_2_14_ST_HDD_02.png
+345_2_14_ST_HDD_03.png
+345_2_14_ST_HDD_04.png
+345_2_14_ST_HDD_05.png
+345_2_14_ST_HDD_06.png
+345_2_14_ST_HDD_07.png
+345_2_14_ST_HDD_08.png
+345_2_14_ST_HDD_09.png
+345_2_14_ST_HDD_10.png
+345_2_14_ST_HDD_11.png
+345_2_14_ST_HDD_12.png
+345_2_14_ST_HDD_13.png
+345_2_14_ST_HDD_14.png
+345_2_14_ST_HDD_15.png
+345_2_14_ST_HDD_16.png
+345_2_14_ST_HDD_17.png
+345_2_14_ST_HDD_18.png
+345_2_14_ST_HDD_19.png
+345_2_14_ST_HDD_20.png
+345_2_14_ST_HDD_21.png
+345_2_14_ST_HDD_22.png
+345_2_14_ST_HDD_23.png
+345_2_14_ST_HDD_24.png
+345_2_14_ST_HDD_25.png
+345_3_07_ST_LAN.png
+345_3_07_ST_LAN_DisCon.png
+345_4_08_ST_WiFi.png
+345_4_08_ST_WiFi_00.png
+345_4_08_ST_WiFi_01.png
+345_4_08_ST_WiFi_02.png
+345_4_08_ST_WiFi_03.png
+345_4_08_ST_WiFi_04.png
+345_4_08_ST_WiFi_05.png
+345_4_08_ST_WiFi_DisCon.png
+345_5_08_ST_WiFi_Signal_00.png
+345_5_08_ST_WiFi_Signal_01.png
+345_5_08_ST_WiFi_Signal_02.png
+345_5_08_ST_WiFi_Signal_03.png
+345_5_08_ST_WiFi_Signal_04.png
+345_5_08_ST_WiFi_Signal_05.png
+345_6_08_ST_Ad_Hoc.png
+411_1_00_CH_MBar.png
+411_1_00_CH_Number0.png
+411_1_00_CH_Number1.png
+411_1_00_CH_Number2.png
+411_1_00_CH_Number3.png
+411_1_00_CH_Number4.png
+411_1_00_CH_Number5.png
+411_1_00_CH_Number6.png
+411_1_00_CH_Number7.png
+411_1_00_CH_Number8.png
+411_1_00_CH_Number9.png
+412_1_00_IP_Quality_01.png
+412_1_00_IP_Quality_02.png
+412_1_00_IP_Quality_03.png
+412_1_00_IP_Quality_04.png
+412_1_00_IP_Quality_05.png
+412_1_00_IP_Quality_06.png
+412_1_00_IP_Quality_07.png
+412_1_00_IP_Quality_08.png
+412_1_00_IP_Quality_09.png
+412_1_00_IP_Quality_10.png
+413_1_00_IP_Strength_01.png
+413_1_00_IP_Strength_02.png
+413_1_00_IP_Strength_03.png
+413_1_00_IP_Strength_04.png
+413_1_00_IP_Strength_05.png
+413_1_00_IP_Strength_06.png
+413_1_00_IP_Strength_07.png
+413_1_00_IP_Strength_08.png
+413_1_00_IP_Strength_09.png
+413_1_00_IP_Strength_10.png
+414_1_00_IP_1L_Arrow.png
+414_1_00_IP_2R_Arrow.png
+414_1_00_IP_3U_Arrow.png
+414_1_00_IP_4D_Arrow.png
+421_1_00_CH_Title_1L_Arrow.png
+421_1_00_CH_Title_2R_Arrow.png
+422_1_00_CH_Group_1L_Arrow.png
+422_1_00_CH_Group_2R_Arrow.png
+422_1_00_CH_Group_WIN.png
+423_1_00_CH_FAV_1Focus_C.png
+423_1_00_CH_FAV_2Select_C.png
+423_1_00_CH_FAV_3Select_N.png
+423_1_00_CH_FAV_4Unselect_CN.png
+431_1_00_Audio_C_1L.png
+431_1_00_Audio_C_2R.png
+431_1_00_Audio_N_1L.png
+431_1_00_Audio_N_2R.png
+432_1_00_Audio_Dolby_C.png
+432_1_00_Audio_Dolby_N.png
+432_1_00_Audio_Dolby_Plus_C.png
+432_1_00_Audio_Dolby_Plus_N.png
+434_1_00_HardofHearing_C.png
+434_1_00_HardofHearing_N.png
+434_1_00_HardofHearing_W.png
+441_1_00_Mute.png
+441_1_00_Volume.png
+451_1_33_Radio_BG.png
+461_1_00_SF_1Auto_43.png
+461_1_00_SF_2Letter_43.png
+461_1_00_SF_3Centre_43.png
+461_2_00_SF_1Auto_169.png
+461_2_00_SF_2Pillar_169.png
+461_2_00_SF_3Zoom_169.png
+462_1_26_RCT_Icon.png
+467_1_00_SF_Dolby.png
+467_1_00_SF_Dolby_Plus.png
+468_1_00_SF_Not_Available.png
+469_1_18_Network_Error.png
+511_1_00_EPG_BG40.png
+511_1_00_EPG_PIG.png
+511_1_00_EPG_Time.png
+512_1_00_EPG_PIG_DL.png
+512_1_33_EPG_PIG_Radio.png
+513_1_00_EPG_Current.png
+514_1_11_DRM_Expiration.png
+514_1_11_DRM_No_Record.png
+515_1_11_EPG_REC.png
+516_1_26_Freeview_Logo.png
+517_1_26_EPG_DST.png
+519_1_26_Help.png
+519_2_26_Dot_1TM.png
+519_2_26_Dot_2B.png
+521_1_00_RP_Daily_C.png
+521_1_00_RP_Daily_N.png
+521_1_00_RP_Weekdays_C.png
+521_1_00_RP_Weekdays_N.png
+521_1_00_RP_Weekend_C.png
+521_1_00_RP_Weekend_N.png
+521_1_00_RP_Weekly_C.png
+521_1_00_RP_Weekly_N.png
+531_1_00_Find_1L_Arrow.png
+531_1_00_Find_2R_Arrow.png
+532_1_00_Find_Path_Arrow.png
+533_1_00_Find_Keyword_C.png
+533_1_00_Find_Keyword_N.png
+534_1_00_Find_1T_Arrow.png
+534_1_00_Find_2B_Arrow.png
+611_1_10_Bookmark.png
+611_1_10_Cursor.png
+611_1_10_Cursor_Time.png
+611_1_11_AutoSplitting.png
+611_1_11_ProgramDivision.png
+611_2_11_Sub_line_1M.png
+611_2_11_Sub_line_2B.png
+621_1_11_TSR_Play01.png
+621_1_11_TSR_Play02.png
+621_1_11_TSR_Play03.png
+621_1_11_TSR_Play04.png
+621_1_11_TSR_Play05.png
+621_1_11_TSR_Play06.png
+621_1_11_TSR_Play07.png
+621_1_11_TSR_Play08.png
+622_1_11_TSR_Pause.png
+623_1_11_TSR_FF_x02.png
+623_1_11_TSR_FF_x04.png
+623_1_11_TSR_FF_x08.png
+623_1_11_TSR_FF_x16.png
+623_1_11_TSR_FF_x32.png
+624_1_11_TSR_FB_x02.png
+624_1_11_TSR_FB_x04.png
+624_1_11_TSR_FB_x08.png
+624_1_11_TSR_FB_x16.png
+624_1_11_TSR_FB_x32.png
+625_1_11_TSR_Slow_x02.png
+625_1_11_TSR_Slow_x04.png
+625_1_11_TSR_Slow_x08.png
+631_1_10_PB_Play01.png
+631_1_10_PB_Play02.png
+631_1_10_PB_Play03.png
+631_1_10_PB_Play04.png
+631_1_10_PB_Play05.png
+631_1_10_PB_Play06.png
+631_1_10_PB_Play07.png
+631_1_10_PB_Play08.png
+631_2_10_PB_RCUKey.png
+632_1_10_PB_Pause.png
+633_1_10_PB_FF_x02.png
+633_1_10_PB_FF_x04.png
+633_1_10_PB_FF_x08.png
+633_1_10_PB_FF_x16.png
+633_1_10_PB_FF_x32.png
+634_1_10_PB_FB_x02.png
+634_1_10_PB_FB_x04.png
+634_1_10_PB_FB_x08.png
+634_1_10_PB_FB_x16.png
+634_1_10_PB_FB_x32.png
+635_1_10_PB_Slow_x02.png
+635_1_10_PB_Slow_x04.png
+635_1_10_PB_Slow_x08.png
+641_1_11_REC_Play01.png
+641_1_11_REC_Play02.png
+641_1_11_REC_Play03.png
+641_1_11_REC_Play04.png
+641_1_11_REC_Play05.png
+641_1_11_REC_Play06.png
+641_1_11_REC_Play07.png
+641_1_11_REC_Play08.png
+642_1_11_REC_Pause.png
+643_1_11_REC_FF_x02.png
+643_1_11_REC_FF_x04.png
+643_1_11_REC_FF_x08.png
+643_1_11_REC_FF_x16.png
+643_1_11_REC_FF_x32.png
+644_1_11_REC_FB_x02.png
+644_1_11_REC_FB_x04.png
+644_1_11_REC_FB_x08.png
+644_1_11_REC_FB_x16.png
+644_1_11_REC_FB_x32.png
+645_1_11_REC_Slow_x02.png
+645_1_11_REC_Slow_x04.png
+645_1_11_REC_Slow_x08.png
+646_1_11_Recording.png
+711_1_09_Media_Folder.png
+711_1_09_Media_Folder_C.png
+711_2_09_Media_Folder_Plus.png
+711_2_09_Media_Folder_Plus_C.png
+711_3_09_Media_Folder_UP.png
+711_4_14_Media_HDD.png
+711_4_14_Media_HDD_C.png
+711_5_15_Media_USB.png
+711_5_15_Media_USB_C.png
+711_6_17_Media_DLNA.png
+721_1_12_Music_Title.png
+722_1_12_Music_BTN_C.png
+722_1_12_Music_BTN_N.png
+723_1_12_Music_Info_BG.png
+724_1_12_Music_Preview1.png
+724_1_12_Music_Preview2.png
+725_1_12_Music_1Repeat.png
+725_1_12_Music_2RepeatAll.png
+725_1_12_Music_3Shuffle.png
+725_2_12_Music_1Play.png
+725_2_12_Music_2Pause.png
+725_3_12_Music_Album_BG.png
+731_1_13_Photo_Title.png
+732_1_13_Photo_BTN_C.png
+732_1_13_Photo_BTN_N.png
+733_1_13_Photo_Preview1.png
+741_1_10_Video_Title.png
+742_1_10_Video_BTN_C.png
+742_1_10_Video_BTN_N.png
+743_1_10_Video_New.png
+743_2_10_Video_Thumb_BG.png
+743_3_11_Video_REC_Fail.png
+743_4_10_Video_Xvid_File.png
+743_4_10_Video_Xvid_File_Fail.png
+743_5_00_Video_Auto_Delete.png
+744_1_10_Video_Preview.png
+744_1_11_Video_Preview_Radio.png
+744_1_33_Video_Preview_Radio.png
+745_1_10_Video_2Live.png
+745_1_11_Video_1REC.png
+745_1_11_Video_3REC_Live.png
+746_1_10_Video_Folder.png
+746_1_10_Video_Folder_Plus.png
+746_2_10_Video_Folder_UP.png
+747_1_17_Video_Folder_Net.png
+748_1_15_Video_Folder_USB.png
+749_1_26_Video_Copy_Protect.png
+749_1_26_Video_Encryption.png
+749_2_11_Video_DRM.png
+751_1_16_Copy_BTN_C.png
+751_1_16_Copy_BTN_N.png
+752_1_16_Copy_1Auto.png
+752_1_16_Copy_2Video.png
+752_1_16_Copy_3Music.png
+752_1_16_Copy_4Photo.png
+753_1_16_Copy_Num1.png
+753_1_16_Copy_Num1_H.png
+753_1_16_Copy_Num2.png
+753_1_16_Copy_Num2_H.png
+753_1_16_Copy_Num3.png
+753_1_16_Copy_Num3_H.png
+761_1_15_USB_BTN_C.png
+761_1_15_USB_BTN_N.png
+762_1_15_Connect_USB.png
+763_1_15_Media_USB_01.png
+763_1_15_Media_USB_02.png
+763_1_15_Media_USB_03.png
+763_1_15_Media_USB_04.png
+763_1_15_Media_USB_05.png
+763_1_15_Media_USB_06.png
+763_1_15_Media_USB_07.png
+763_1_15_Media_USB_08.png
+763_1_15_Media_USB_09.png
+763_1_15_Media_USB_10.png
+763_1_15_Media_USB_11.png
+763_1_15_Media_USB_12.png
+763_1_15_Media_USB_13.png
+763_1_15_Media_USB_14.png
+763_1_15_Media_USB_15.png
+763_1_15_Media_USB_16.png
+763_1_15_Media_USB_17.png
+763_1_15_Media_USB_18.png
+763_1_15_Media_USB_19.png
+763_1_15_Media_USB_20.png
+763_1_15_Media_USB_21.png
+763_1_15_Media_USB_22.png
+763_1_15_Media_USB_23.png
+763_1_15_Media_USB_24.png
+763_1_15_Media_USB_25.png
+763_1_15_Media_USB_BG.png
+764_1_15_HDD_Pairing.png
+771_1_14_HDD_BTN_C.png
+771_1_14_HDD_BTN_N.png
+772_1_14_Media_HDD_01.png
+772_1_14_Media_HDD_02.png
+772_1_14_Media_HDD_03.png
+772_1_14_Media_HDD_04.png
+772_1_14_Media_HDD_05.png
+772_1_14_Media_HDD_06.png
+772_1_14_Media_HDD_07.png
+772_1_14_Media_HDD_08.png
+772_1_14_Media_HDD_09.png
+772_1_14_Media_HDD_10.png
+772_1_14_Media_HDD_11.png
+772_1_14_Media_HDD_12.png
+772_1_14_Media_HDD_13.png
+772_1_14_Media_HDD_14.png
+772_1_14_Media_HDD_15.png
+772_1_14_Media_HDD_16.png
+772_1_14_Media_HDD_17.png
+772_1_14_Media_HDD_18.png
+772_1_14_Media_HDD_19.png
+772_1_14_Media_HDD_20.png
+772_1_14_Media_HDD_21.png
+772_1_14_Media_HDD_22.png
+772_1_14_Media_HDD_23.png
+772_1_14_Media_HDD_24.png
+772_1_14_Media_HDD_25.png
+781_1_17_DLNA_Title.png
+782_1_17_DLNA_BTN_C.png
+782_1_17_DLNA_BTN_N.png
+821_1_03_NUM0_A0.png
+821_1_03_NUM0_A1_80.png
+821_1_03_NUM0_A2_60.png
+821_1_03_NUM0_A3_40.png
+821_1_03_NUM0_A4_20.png
+821_1_03_NUM1_A0.png
+821_1_03_NUM1_A1_80.png
+821_1_03_NUM1_A2_60.png
+821_1_03_NUM1_A3_40.png
+821_1_03_NUM1_A4_20.png
+821_1_03_NUM2_A0.png
+821_1_03_NUM2_A1_80.png
+821_1_03_NUM2_A2_60.png
+821_1_03_NUM2_A3_40.png
+821_1_03_NUM2_A4_20.png
+821_1_03_NUM3_A0.png
+821_1_03_NUM3_A1_80.png
+821_1_03_NUM3_A2_60.png
+821_1_03_NUM3_A3_40.png
+821_1_03_NUM3_A4_20.png
+821_1_03_NUM4_A0.png
+821_1_03_NUM4_A1_80.png
+821_1_03_NUM4_A2_60.png
+821_1_03_NUM4_A3_40.png
+821_1_03_NUM4_A4_20.png
+821_1_03_NUM5_A0.png
+821_1_03_NUM5_A1_80.png
+821_1_03_NUM5_A2_60.png
+821_1_03_NUM5_A3_40.png
+821_1_03_NUM5_A4_20.png
+821_1_03_NUM6_A0.png
+821_1_03_NUM6_A1_80.png
+821_1_03_NUM6_A2_60.png
+821_1_03_NUM6_A3_40.png
+821_1_03_NUM6_A4_20.png
+821_1_03_NUM7_A0.png
+821_1_03_NUM7_A1_80.png
+821_1_03_NUM7_A2_60.png
+821_1_03_NUM7_A3_40.png
+821_1_03_NUM7_A4_20.png
+821_1_03_NUM8_A0.png
+821_1_03_NUM8_A1_80.png
+821_1_03_NUM8_A2_60.png
+821_1_03_NUM8_A3_40.png
+821_1_03_NUM8_A4_20.png
+821_1_03_NUM9_A0.png
+821_1_03_NUM9_A1_80.png
+821_1_03_NUM9_A2_60.png
+821_1_03_NUM9_A3_40.png
+821_1_03_NUM9_A4_20.png
+821_1_03_NUM_Dim.png
+822_1_03_Colon_A0.png
+822_1_03_Colon_A1_80.png
+822_1_03_Colon_A2_60.png
+822_1_03_Colon_A3_40.png
+822_1_03_Colon_A4_20.png
+823_1_03_Reflection_A0.png
+823_1_03_Reflection_A1_80.png
+823_1_03_Reflection_A2_60.png
+823_1_03_Reflection_A3_40.png
+823_1_03_Reflection_A4_20.png
+824_1_03_Flip1_A0.png
+824_1_03_Flip1_A1_80.png
+824_1_03_Flip1_A2_60.png
+824_1_03_Flip1_A3_40.png
+824_1_03_Flip1_A4_20.png
+824_1_03_Flip2_A0.png
+824_1_03_Flip2_A1_80.png
+824_1_03_Flip2_A2_60.png
+824_1_03_Flip2_A3_40.png
+824_1_03_Flip2_A4_20.png
+824_1_03_Flip3_A0.png
+824_1_03_Flip3_A1_80.png
+824_1_03_Flip3_A2_60.png
+824_1_03_Flip3_A3_40.png
+824_1_03_Flip3_A4_20.png
+ + diff --git a/var/mongoose/html/img/favicon.ico b/var/mongoose/html/img/favicon.ico new file mode 100644 index 0000000..189df8c Binary files /dev/null and b/var/mongoose/html/img/favicon.ico differ diff --git a/var/mongoose/html/img/off.png b/var/mongoose/html/img/off.png new file mode 100644 index 0000000..15a6f8e Binary files /dev/null and b/var/mongoose/html/img/off.png differ diff --git a/var/mongoose/html/img/on.png b/var/mongoose/html/img/on.png new file mode 100644 index 0000000..4f538c8 Binary files /dev/null and b/var/mongoose/html/img/on.png differ diff --git a/var/mongoose/html/img/packages.jpg b/var/mongoose/html/img/packages.jpg new file mode 100644 index 0000000..aa89736 Binary files /dev/null and b/var/mongoose/html/img/packages.jpg differ diff --git a/var/mongoose/html/img/percentback.png b/var/mongoose/html/img/percentback.png new file mode 100644 index 0000000..c4b6e2d Binary files /dev/null and b/var/mongoose/html/img/percentback.png differ diff --git a/var/mongoose/html/img/percentimage.png b/var/mongoose/html/img/percentimage.png new file mode 100644 index 0000000..c528d65 Binary files /dev/null and b/var/mongoose/html/img/percentimage.png differ diff --git a/var/mongoose/html/img/prebg.png b/var/mongoose/html/img/prebg.png new file mode 100644 index 0000000..7212b2c Binary files /dev/null and b/var/mongoose/html/img/prebg.png differ diff --git a/var/mongoose/html/img/spanner.jpg b/var/mongoose/html/img/spanner.jpg new file mode 100644 index 0000000..5f9f8f9 Binary files /dev/null and b/var/mongoose/html/img/spanner.jpg differ diff --git a/var/mongoose/html/index.shtml b/var/mongoose/html/index.shtml new file mode 100644 index 0000000..cd1c6b8 --- /dev/null +++ b/var/mongoose/html/index.shtml @@ -0,0 +1,108 @@ + + + + + + + + +
+
+ + + +
+ + Browse Media Files + +
+ + (NOTE: The files are encrypted if they were
+ recorded off air.) +
+
+ +
+
+
+ + + +
+ + Scheduled Recordings + +
+
+
+
+
+ + + +
+ + EPG + +
+
+
+ +
+
+ + + +
+ + Service Management + +
+
+
+ +
+
+ + + +
+ + Package Management + +
+
+
+ + + diff --git a/var/mongoose/html/js/ajax.js b/var/mongoose/html/js/ajax.js new file mode 100644 index 0000000..5aacc99 --- /dev/null +++ b/var/mongoose/html/js/ajax.js @@ -0,0 +1,24 @@ +var request = false; + +/*@cc_on @*/ +/*@if (@_jscript_version >= 5) +try +{ + request = new ActiveXObject("Msxml2.XMLHTTP"); +} +catch (e) +{ + try + { + request = new ActiveXObject("Microsoft.XMLHTTP"); + } + case (e2) + { + request = false; + } +} +@end @*/ + +if (!request && typeof XMLHttpRequest != 'undefined') + request = new XMLHttpRequest(); + diff --git a/var/mongoose/html/js/highlight.js b/var/mongoose/html/js/highlight.js new file mode 100644 index 0000000..3f67115 --- /dev/null +++ b/var/mongoose/html/js/highlight.js @@ -0,0 +1,44 @@ + +function highlight(obj, searchTerm) +{ + var bodyText = obj.innerHTML; + + stag = ""; + etag = ""; + + var newText = ""; + var i = -1; + var lcSearchTerm = searchTerm.toLowerCase(); + var lcBodyText = bodyText.toLowerCase(); + + while (bodyText.length > 0) + { + i = lcBodyText.indexOf(lcSearchTerm, i + 1); + if (i < 0) + { + newText += bodyText; + bodyText = ""; + } + else + { + if (bodyText.lastIndexOf(">", i) >= + bodyText.lastIndexOf("<", i)) + { + if (lcBodyText.lastIndexOf("/script>", i) >= + lcBodyText.lastIndexOf("Rendered in: $rendertime seconds" + +puts { + + + + + +} + diff --git a/var/mongoose/html/lib/footer.shtml b/var/mongoose/html/lib/footer.shtml new file mode 100644 index 0000000..850397d --- /dev/null +++ b/var/mongoose/html/lib/footer.shtml @@ -0,0 +1,15 @@ + + + + + + diff --git a/var/mongoose/html/lib/header.jim b/var/mongoose/html/lib/header.jim new file mode 100644 index 0000000..c3d05b4 --- /dev/null +++ b/var/mongoose/html/lib/header.jim @@ -0,0 +1,20 @@ +puts { + + +Humax HD[R] Fox T2 + + + + +} + +source /mod/var/mongoose/html/lib/topbar.jim + +puts { +
+ + +} + +set renderstart [clock milliseconds] + diff --git a/var/mongoose/html/lib/header.shtml b/var/mongoose/html/lib/header.shtml new file mode 100644 index 0000000..44a9a37 --- /dev/null +++ b/var/mongoose/html/lib/header.shtml @@ -0,0 +1,13 @@ + + +Humax HD[R] Fox T2 + + + + + + + +
+ + diff --git a/var/mongoose/html/lib/topbar.jim b/var/mongoose/html/lib/topbar.jim new file mode 100644 index 0000000..3374573 --- /dev/null +++ b/var/mongoose/html/lib/topbar.jim @@ -0,0 +1,22 @@ +puts { + + +
+
+
+ + + Humax HD[R] Fox T2 + + +} +source /mod/var/mongoose/include/diskspace.jim +puts { + +
+
+
+ + +} + diff --git a/var/mongoose/html/lib/topbar.shtml b/var/mongoose/html/lib/topbar.shtml new file mode 100644 index 0000000..79d9a64 --- /dev/null +++ b/var/mongoose/html/lib/topbar.shtml @@ -0,0 +1,17 @@ + + +
+
+
+ + + Humax HD[R] Fox T2 + + + + +
+
+
+ + diff --git a/var/mongoose/html/packages.shtml b/var/mongoose/html/packages.shtml new file mode 100644 index 0000000..79369ca --- /dev/null +++ b/var/mongoose/html/packages.shtml @@ -0,0 +1,14 @@ + + +

Package Management

+ + + + + diff --git a/var/mongoose/html/sched.shtml b/var/mongoose/html/sched.shtml new file mode 100644 index 0000000..4cd719d --- /dev/null +++ b/var/mongoose/html/sched.shtml @@ -0,0 +1,4 @@ + + + + diff --git a/var/mongoose/html/services.shtml b/var/mongoose/html/services.shtml new file mode 100644 index 0000000..e529643 --- /dev/null +++ b/var/mongoose/html/services.shtml @@ -0,0 +1,58 @@ + + + + + + +

Service Management

+ + + + + + + + + +
ServiceAuto StartupStatus
+ diff --git a/var/mongoose/include/db.jim b/var/mongoose/include/db.jim new file mode 100755 index 0000000..50bf722 --- /dev/null +++ b/var/mongoose/include/db.jim @@ -0,0 +1,40 @@ +#!/mod/bin/jimsh + +package require sqlite3 + +proc db_info {db_file} { + set db [sqlite3.open $db_file] + set tables [$db query {SELECT name FROM sqlite_master WHERE type='table' ORDER BY name}] + + puts "

$db_file

" + + foreach table $tables { + set table_name [lindex $table 1] + set columns [$db query "pragma table_info($table_name)"] + set datas [$db query "SELECT * FROM $table_name"] + + puts "

$table_name

" + puts "" + puts " " + foreach column $columns { + puts " " + } + puts " " + foreach data $datas { + puts " " + + for {set i 1} {$i < [llength $data]} {incr i 2} { + puts " " + } + puts " " + } + puts "
[lindex $column 3]
[lindex $data $i]
" + } + + $db close +} + +puts {} +db_info /var/lib/humaxtv/rsv.db +db_info /var/lib/humaxtv/setup.db +db_info /var/lib/humaxtv/channel.db diff --git a/var/mongoose/include/diskspace.jim b/var/mongoose/include/diskspace.jim new file mode 100755 index 0000000..078a172 --- /dev/null +++ b/var/mongoose/include/diskspace.jim @@ -0,0 +1,24 @@ +#!/mod/bin/jimsh + +foreach df [split [exec df -h] "\n\r"] { + if [string match *sda2* $df] { + regsub -all -- {[[:space:]]+} $df " " df + set fields [split $df] + set size [lindex $fields 1] + set used [lindex $fields 2] + set perc [string trimright [lindex $fields 4] "%"] + } +} + +set file [format "%02d" [expr {$perc * 25 / 100 + 1}]] + +puts "
" +puts "" +puts "
" +puts "" +puts "
" +puts "Total space: $size
" +puts "Used: $used ($perc%)" +puts "
" + + diff --git a/var/mongoose/include/epg.jim b/var/mongoose/include/epg.jim new file mode 100755 index 0000000..0a3dc28 --- /dev/null +++ b/var/mongoose/include/epg.jim @@ -0,0 +1,49 @@ +#!/mod/bin/jimsh + +source /mod/var/mongoose/lib/epg.class +source /mod/var/mongoose/lib/altrow + +set start [clock milliseconds] +set records [epg fetch dump -time [clock seconds]] +set got [clock milliseconds] + +puts { + + + + + + +} + +proc rsort {v1 v2} { + set v1s [$v1 get channel_num] + set v2s [$v2 get channel_num] + + if {$v1s == $v2s} { return 0 } + if {$v1s > $v2s } { return 1 } + return -1 +} + +set i 0 +foreach record [lsort -command rsort $records] { + altrow + puts "" + puts "" + puts [$record cell] + puts [[$record next] cell] + puts "" +} +puts "
ChannelOn NowOn Next
[$record get channel_num] + + [$record get channel_name] +
" + +set end [clock milliseconds] +puts " + Retrieved now in: [expr [expr $got - $start] / 1000.0] seconds.
+ All rendered in: [expr [expr $end - $start] / 1000.0] seconds. +
" + +epg cleanup + diff --git a/var/mongoose/include/mediatomb.jim b/var/mongoose/include/mediatomb.jim new file mode 100755 index 0000000..c2ceae2 --- /dev/null +++ b/var/mongoose/include/mediatomb.jim @@ -0,0 +1,12 @@ +#!/mod/bin/jimsh + +if { [catch {set fd [open "/mod/mediatomb/config/mediatomb.html" r]} fid] } { + exit 0 +} +set data [read $fd] +close $fd +regexp {URL=([^"]*)} $data match +set url [string range $match 4 [string length $match]] + +puts ""; + diff --git a/var/mongoose/include/packages.jim b/var/mongoose/include/packages.jim new file mode 100755 index 0000000..1b77969 --- /dev/null +++ b/var/mongoose/include/packages.jim @@ -0,0 +1,54 @@ +#!/mod/bin/jimsh + +# Build a list of available packages + +set avail_pkgs {} +foreach pkg [split [exec /bin/opkg list] "\n"] { + if [regexp {^ } $pkg] { + append descr $pkg + } else { + if {[regexp {^([^ ]+) - ([^ ]+) - (.*)$} \ + $pkg full name ver descr] == 0} { continue } + } + set avail_pkgs($name) [concat $ver "$descr"] + #puts "Set: $name = ($ver, $descr)
" +} + +# Build a list of installed packages - just the names +set inst_pkgs {} +foreach pkg [split [exec /bin/opkg list-installed] "\n"] { + if {[regexp {^([^ ]+)} $pkg name] == 0} { continue } + lappend inst_pkgs $name + #puts "Inst: $name
" +} + +puts "" +puts "" +puts "" +puts "" +puts "" +puts "" +puts "" + +foreach name [lsort [array names avail_pkgs]] { + set value $avail_pkgs($name) + set ver [lindex $value 0] + set descr [lrange $value 1 [llength $value]] + + puts "" + puts "" + puts "" + puts "" + puts "" + puts "" +} + +puts "
InstalledNameVersionDescription
" + if {[lsearch $inst_pkgs $name] > -1} { + puts "" + } else { + puts "" + } + + puts "$name$ver$descr
" + diff --git a/var/mongoose/include/sched.jim b/var/mongoose/include/sched.jim new file mode 100755 index 0000000..e6425c9 --- /dev/null +++ b/var/mongoose/include/sched.jim @@ -0,0 +1,86 @@ +#!/mod/bin/jimsh + +package require sqlite3 + +source /mod/var/mongoose/lib/altrow + +set db [sqlite3.open /var/lib/humaxtv/rsv.db] +$db query {attach database '/var/lib/humaxtv/channel.db' as channel} + +set res [$db query { + select *, channel.TBL_SVC.szSvcName, channel.TBL_SVC.usLcn, + case when ersvtype > 3 then 1 else 0 end as sort + from tbl_reservation + left join channel.TBL_SVC + on main.TBL_RESERVATION.hSvc = channel.TBL_SVC.hSvc + order by sort, nsttime + }] + +puts "" +puts "" +#puts "" +puts "" +puts "" +puts "" +puts "" +puts "" +puts "" +puts "" +set i 0 +foreach r $res { + set name [string range $r(szevtname) 1 end] + if {[string first "i7" $name] == 0} { + set name [string range $name 2 end] + set b "*" + } else { + set b "" + } + + altrow + + set rsvicon "" + set alta "" + switch $r(ersvtype) { + 1 { set rsvicon "175_1_00_Reservation_Watch.png" } + 2 { set rsvicon "175_1_00_Reservation_Watch.png" } + 3 { set rsvicon "175_1_11_Reservation_Record.png" } + 5 { set rsvicon "745_1_10_Video_2Live.png"; set alta "Wake-up" } + 6 { set rsvicon "745_1_11_Video_1REC.png"; set alta "Sleep" } + 7 { set rsvicon "345_6_08_ST_Ad_Hoc.png" + set alta "Software Update" } + default { set alta "Unknown type $r(ersvtype)" } + } + if {$name == ""} { set name "-- $alta --" } + + if {$r(ucRecKind) == 4} { + set RKIcon "175_1_11_Series_Record.png" + } else { + switch $r(erepeat) { + 1 {set RKIcon "521_1_00_RP_Daily_C.png"} + 2 {set RKIcon "521_1_00_RP_Weekly_C.png"} + 3 {set RKIcon "521_1_00_RP_Weekdays_C.png"} + 4 {set RKIcon "521_1_00_RP_Weekend_C.png"} + default {set RKIcon ""} + } + } + + if {$rsvicon ne ""} { + set rsvicon " + } + if {$RKIcon ne ""} { + set RKIcon " + } + +# puts "" + puts "" + puts "" + puts "" + puts "" + puts "" + puts "" + puts "" + puts "" +} +puts "
SlotProgrammeDurationChannelDate/TimeModeSeries ID
{$r(ulslot)}$b$name[clock format $r(nduration) -format %T]$r(usLcn)[string range $r(szSvcName) 1 end][clock format $r(nsttime) -format {%c %Z}]$rsvicon $RKIcon$r(szCRID)
" +$db close + diff --git a/var/mongoose/include/services.jim b/var/mongoose/include/services.jim new file mode 100755 index 0000000..695d8a6 --- /dev/null +++ b/var/mongoose/include/services.jim @@ -0,0 +1,41 @@ +#!/mod/bin/jimsh + +set services [split [exec /mod/bin/service mlist]] + +proc button {state service action} { + puts -nonewline "
" + puts -nonewline "" + puts "" +} + +proc control {s a} { + return "" +} + +foreach service $services { + set data [split $service ":"] + set name [lindex $data 0] + set installed [lindex $data 1] + set auto [lindex $data 2] + set running [lindex $data 3] + + puts "$name" + if (!$installed) { + puts "Not installed" + continue + } + + puts "" + if ($auto) { button on $name auto } else { button off $name auto } + puts "" + + puts "" + if ($running) { button on $name toggle } else { + button off $name toggle } + puts "" + + puts "" +} + diff --git a/var/mongoose/include/status.jim b/var/mongoose/include/status.jim new file mode 100755 index 0000000..80d0bad --- /dev/null +++ b/var/mongoose/include/status.jim @@ -0,0 +1,35 @@ +#!/mod/bin/jimsh + +set ::env(PATH) "/mod/bin/busybox:/mod/bin:/bin" + +set pid [exec pgrep humaxtv] + +if {[catch {set line [exec lsof -p $pid | grep Video | fgrep .ts]} ]} { + exit +} + +regsub -all -- {[[:space:]]+} $line " " line +set fields [split $line " "] +set size [lindex $fields 6] + +sleep 2 + +set line [exec lsof -p $pid | grep Video | fgrep .ts] +regsub -all -- {[[:space:]]+} $line " " line +set fields [split $line " "] +set size2 [lindex $fields 6] + +if { $size2 > $size } { + set mode "Recording" + set icon "745_1_11_Video_1REC.png" +} else { + set mode "Watching" + set icon "745_1_10_Video_2Live.png" +} + +set name [lindex [split $line "/"] end] + +puts "
" +puts "$mode $name" +puts "
" + diff --git a/var/mongoose/lib/altrow b/var/mongoose/lib/altrow new file mode 100644 index 0000000..00a2023 --- /dev/null +++ b/var/mongoose/lib/altrow @@ -0,0 +1,12 @@ + +if {[expr ! [exists -proc altrow ]]} { + proc altrow {} {{i 0}} { + if { $i == 0 } { + puts "" + } else { + puts "" + } + set i [expr ! $i] + } +} + diff --git a/var/mongoose/lib/cat b/var/mongoose/lib/cat new file mode 100644 index 0000000..f80b25b --- /dev/null +++ b/var/mongoose/lib/cat @@ -0,0 +1,9 @@ + +if {[expr ! [exists -proc cat ]]} { + proc cat {file} { + if {[catch {set fp [open $file r]]} { return } + puts [read $fp] + close $fp + } +} + diff --git a/var/mongoose/lib/epg.class b/var/mongoose/lib/epg.class new file mode 100644 index 0000000..7887df6 --- /dev/null +++ b/var/mongoose/lib/epg.class @@ -0,0 +1,192 @@ + +if {[expr ! [exists -proc class ]]} { package require oo } +if {[expr ! [exists -proc sqlite3.open ]]} { package require sqlite3 } + +source /mod/var/mongoose/lib/progressbar + +set channeldb [sqlite3.open /var/lib/humaxtv/channel.db] + +# * service_id, event_id, start, duration, encrypted, name, text +# * warning, content code, content type, +# * event CRID, series CRID, rec CRID + +class epg { + service_id 0 + event_id 0 + start 0 + duration 0 + encrypted 0 + name "" + text "" + warning "" + content_code 0 + content_type "" + event_crid "" + series_crid "" + rec_crid "" + + channel_num 0 + channel_name "" +} + +epg method channel {chnum chname} { + set channel_num $chnum + set channel_name $chname +} + +epg method _parse {line} { + set vars [split $line "\t"] + + set service_id [lindex $vars 0] + set event_id [lindex $vars 1] + set start [lindex $vars 2] + set duration [lindex $vars 3] + set encrypted [lindex $vars 4] + set name [lindex $vars 5] + set text [lindex $vars 6] + set warning [lindex $vars 7] + set content_code [lindex $vars 8] + set content_type [lindex $vars 9] + set event_crid [lindex $vars 10] + set series_crid [lindex $vars 11] + set rec_crid [lindex $vars 12] +} + +epg method percent {} { + set now [clock seconds] + if {$start > $now} { return 0 } + if {$start + $duration < $now} { return 100 } + return [expr [expr $now - $start] * 100 / $duration] +} + +epg method showing {} { + set percent [$self percent] + if {$percent > 0 && $percent < 100} { return 1 } else { return 0 } +} + +epg method elapsed {} { + set percent [$self percent] + if {$percent == 0} { return 0 } + if {$percent == 100} { return $duration } + return [expr $duration * $percent / 100] +} + +epg method remaining {} { + return [expr $duration - [$self elapsed]] +} + +epg method cell {} { + set name [$self get name] + set text [$self get text] + + set percent [$self percent] + + puts "" + + set img "" + switch -- [$self get content_code] { + 1 { set img "Movie" } + 2 { set img "News" } + 3 { set img "Show" } + 4 { set img "Sports" } + 5 { set img "Children" } + 6 { set img "Music" } + 7 { set img "Art" } + 8 { set img "Society" } + 9 { set img "Education" } + 10 { set img "Leisure" } + } + if {$img != ""} { + puts "\"[$self" + } + if {[$self get series_crid] != ""} { + puts "" + } + puts " +
+ $name" + + puts "
" + + puts "" + puts "[clock format [$self get start] -format %H:%M]" + puts " ([clock format [$self get duration] -format %T])" + if {$percent > 0 && $percent < 100} { + puts "
[progressbar $percent]" + puts "$percent% [clock format [$self elapsed] -format %T] / + [clock format [$self remaining] -format %T]" + } + puts "
" + puts "" +} + +epg method next {} { + set tm [expr [$self get start] + [$self get duration] + 60] + set nextlist [epg fetch dump -service [$self get service_id] -time $tm] + + if {[llength nextlist] > 0} { + return [lindex $nextlist 0] + } else { + return "" + } +} + +proc {epg parse} {line} { + set e [epg new] + $e _parse $line + return $e +} + +proc {epg cleanup} {} { + global channeldb + + $channeldb close +} + +proc {epg exec} {mode args} { + set raw 0 + set cmd [list /mod/bin/epg] + set extra "" + foreach arg $args { + if {[string first "-" $arg] == 0} { + switch -- $arg { + -raw { set raw 1 } + -crid { lappend cmd -C $args($arg) } + -type { lappend cmd -T $args($arg) } + -service { lappend cmd -S $args($arg) } + -event { lappend cmd -E $args($arg) } + -time { lappend cmd -@ $args($arg) } + -extra { set extra $args($arg) } + default { error "Invalid option, $arg" } + } + } + } + if { $raw == 0 } { lappend cmd -p } + lappend cmd $mode + lappend cmd $extra + + #puts "CMD -$cmd-" + + return [exec {*}$cmd] +} + +proc {epg fetch} {mode args} { + global channeldb + + foreach line [split [epg exec $mode {*}$args] "\n"] { + set record [epg parse $line] + set chan [lindex [$channeldb query { + select szSvcName, usLcn from TBL_SVC + where usSvcId = %s} "[$record get service_id]" + ] 0] + $record channel $chan(usLcn) \ + [string range $chan(szSvcName) 1 end] + + lappend records $record + } + return $records +} + diff --git a/var/mongoose/lib/progressbar b/var/mongoose/lib/progressbar new file mode 100644 index 0000000..9763595 --- /dev/null +++ b/var/mongoose/lib/progressbar @@ -0,0 +1,10 @@ + +if {[expr ! [exists -proc progressbar ]]} { + proc progressbar {percent} { + set pos [expr 118 - $percent / 100.0 * 118] + return "\"$percent%\"" + } +} +