-"
+}
set renderstart [clock milliseconds]
diff --git a/var/mongoose/html/m/schedule.jim b/var/mongoose/html/m/schedule.jim
new file mode 100755
index 0000000..16e7c45
--- /dev/null
+++ b/var/mongoose/html/m/schedule.jim
@@ -0,0 +1,85 @@
+#!/mod/bin/jimsh
+
+package require cgi
+source /mod/webif/lib/setup
+require epg.class
+
+proc eventtab {type title} {
+ set events [rsv list $type]
+ if {[set num [llength $events]] <= 0} return
+
+ puts "
\n";
+
+ foreach event $events {
+ set name [$event name]
+ set rsvicon [$event icon]
+ set RKIcon [$event RKIcon]
+
+ set icons ""
+ if {$type eq "pending"} {
+ switch [$event get action] {
+ 0 { set icon "add" }
+ 1 { set icon "close" }
+ 2 { set icon "ar" }
+ 3 { set icon "pad" }
+ 4 { set icon "folder" }
+ }
+ append icons "
"
+ }
+
+ set s [$event get nsttime]
+ set d [$event get nduration]
+ set e $($s + $d)
+ set n [clock seconds]
+
+ set recording 0
+ if {$d > 0 && $n > $s && $n < $e} {
+ set recording 1
+ }
+
+ set last "[clock format $s -format {%a %d %b %Y %H:%M %Z}]"
+ if {$n > $e && [$event get ersvtype] <= 3} {
+ set ds "--- -- --- ---- --:--"
+ set dur "--:--:--
"
+ } else {
+ set ds $last
+ set dur "[clock format [$event get nduration] \
+ -format %T]"
+ }
+ puts "
+
"
+
+mfooter
+
diff --git a/var/mongoose/html/m/schedule_d.jim b/var/mongoose/html/m/schedule_d.jim
new file mode 100755
index 0000000..f91cac7
--- /dev/null
+++ b/var/mongoose/html/m/schedule_d.jim
@@ -0,0 +1,118 @@
+#!/mod/bin/jimsh
+
+package require cgi
+source /mod/webif/lib/setup
+require epg.class
+
+cgi_input
+
+set table [cgi_get table TBL_RESERVATION]
+set slot [cgi_get slot 0]
+set event [rsv slot $table $slot]
+
+mheader
+
+puts "
+
+
+"
+
+puts "
+
+
+ | Event [$event get ulslot] |
+ [join [$event iconset] ""] |
+
+ | Channel |
+
+"
+if {[$event get usLcn] ne ""} {
+ puts "[epg channelicon [$event channel_name] 50]
+ - [$event get usLcn] - [$event channel_name]
+ "
+}
+
+puts "
+ |
+
+ | Event Name |
+ [$event name]"
+if {[$event get ucRecKind] == 4 && [$event name] ne [$event folder]} {
+ puts "(Folder: [$event folder])"
+}
+
+puts " |
+
+ | Start |
+"
+
+set s [$event get nsttime]
+set d [$event get nduration]
+set e $($s + $d)
+set n [clock seconds]
+
+if { $n > $e } {
+ puts ""
+} else {
+ puts " | "
+}
+puts "[clock format $s -format "%a %d %b %Y"]
+ [clock format $s -format "%H:%M %Z"]"
+
+if {$d > 0 && $n > $s && $n < $e} {
+ puts " "
+ set perc [expr [expr $n - $s] * 100 / $d]
+ puts " "
+ puts [progressbar $perc]
+}
+
+puts "
+ |
+
+ | Duration |
+ [clock format [$event get nduration] -format %T] |
+
+"
+
+set crid [join [lrange [split [$event get szCRID] /] 1 end]]
+if {$crid != ""} {
+ puts "| "
+ if {[$event isseries]} { puts "Series" } else { puts "Event" }
+ puts " CRID |
+
+ [$event get szCRID]
+ |
"
+}
+puts "| Events | "
+set flag 0
+foreach ev [split [$event get szEventToRecord] "|"] {
+ if {$ev eq ""} { continue }
+ set ev [string range $ev 1 end]
+ if {$flag} { puts " " }
+ incr flag
+ set crid [join [lrange [split $ev /] 1 end]]
+ puts " $ev"
+}
+puts " |
"
+puts "| Accepted | "
+if {[$event get aulEventToRecordInfo] ne ""} {
+ puts "Yes"
+}
+puts " |
"
+puts "
"
+
+# Buttons
+puts "
Cancel Event"
+puts "
Close"
+
+epg cleanup
+
+mfooter
+
diff --git a/var/mongoose/html/m/script.js b/var/mongoose/html/m/script.js
index 28e5380..7958b25 100644
--- a/var/mongoose/html/m/script.js
+++ b/var/mongoose/html/m/script.js
@@ -1,11 +1,127 @@
+function s(query) {return $("div.ui-page-active " + query);}
+
$(document).bind('pageinit', function() {
$('div.status').last().load('/cgi-bin/status.jim', function() {
$(this).slideDown('slow');
});
+ $('a.refresh').on('click', function(e) {
+ e.preventDefault();
+ $.mobile.showPageLoadingMsg();
+ window.location.reload(true);
+ });
+});
+
+$(document).delegate('#indexpage', 'pageinit', function() {
+ $('#epgsearch').on('click', function(e) {
+ e.preventDefault();
+ $('#xepgsearch').toggle('slow');
+ });
+});
+
+$(document).delegate('#event_dpage', 'pageinit', function() {
+ $('a.schedule').click(function(e) {
+ e.preventDefault();
+ $.mobile.showPageLoadingMsg();
+ $('#epginfo_extra').load('/cgi-bin/epg/schedule.jim?' +
+ 'service=' +
+ encodeURIComponent($(this).attr('sid')) +
+ '&event=' +
+ encodeURIComponent($(this).attr('eid')) +
+ '&type=' +
+ $(this).attr('stype'), function() {
+ $('a.schedule').fadeOut('slow');
+ });
+ });
+});
+
+$(document).delegate('#schedule_dpage', 'pageinit', function() {
+ $('#delevent').click(function(e) {
+ e.preventDefault();
+ if (!confirm('Confirm event cancellation?'))
+ return;
+ $.mobile.showPageLoadingMsg();
+ $.get('/sched/cancel.jim' +
+ '?slot=' + $(this).attr('slot') +
+ '&table=' + $(this).attr('tab'), function() {
+ $('.ui-dialog').dialog('close');
+ $.mobile.showPageLoadingMsg();
+ window.location.reload(true);
+ });
+ });
+});
+
+function insert_folder_size(folder, size)
+{
+ folder = folder.replace(/ /g, '');
+ folder = folder.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
+ //console.log("Folder: (%s) = (%s)", folder, size);
+ if (size.search(/\d$/) == -1)
+ size += 'iB';
+ else
+ size += ' bytes';
+ if (folder == "")
+ $('span.dirsize').text(size);
+ else
+ $('#' + folder).text(size);
+}
+
+function folder_size_callback(data, status, xhr)
+{
+ //console.log("Status: %s", status);
+ //console.dir(data);
+ $.each(data, insert_folder_size);
+}
+
+function set_folder_new(folder, cnt)
+{
+ folder = folder.replace(/ /g, '');
+ folder = folder.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
+ //console.log("Folder: (%s) = (%s)", folder, cnt);
+ $('#img' + folder).attr('src', '/img/Folder_New.png');
+}
+
+function new_folder_callback(data, status, xhr)
+{
+ //console.log("Status: %s", status);
+ //console.dir(data);
+ $.each(data, set_folder_new);
+}
+
+function insert_shrunk(file, perc)
+{
+ if (perc == 0)
+ {
+ file = file.replace(/[ ]/g, '');
+ file = file.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
+ //console.log("File: (%s) = (%s)", file, perc);
+ $('#sp_' + file).show();
+ }
+}
+
+function shrunk_callback(data, status, xhr)
+{
+ //console.log("Status: %s", status);
+ //console.dir(data);
+ $.each(data, insert_shrunk);
+}
+
+$(document).delegate('#browsepage', 'pageinit', function() {
+ var dir = $('span.dir').last().text();
+
+ //console.log('DIR: %O', dir);
+
+ // Load folder sizes
+ $.getJSON('/cgi-bin/browse/sizes.jim?dir=' + encodeURIComponent(dir),
+ folder_size_callback);
+
+ // Flag folders with unwatched items
+ $.getJSON('/cgi-bin/browse/newdir.jim?dir=' + encodeURIComponent(dir),
+ new_folder_callback);
+
+ // Flag shrunk recordings
+ $.getJSON('/cgi-bin/browse/shrunk.jim?dir=' + encodeURIComponent(dir),
+ shrunk_callback);
});
-//$(document).delegate('#channelpage', 'pageinit', function() {
- //console.log('pageinit for channelpage');
-//});
diff --git a/var/mongoose/html/m/search.jim b/var/mongoose/html/m/search.jim
new file mode 100755
index 0000000..61519d5
--- /dev/null
+++ b/var/mongoose/html/m/search.jim
@@ -0,0 +1,36 @@
+#!/mod/bin/jimsh
+
+package require cgi
+source /mod/webif/lib/setup
+require epg.class
+source include/epgcell.jim
+
+cgi_input
+
+set term [cgi_get epgsearchterm ""]
+set full [cgi_get epgsearchfull 0]
+
+mheader
+
+source include/searchstyle.jim
+puts "
- "
+source include/searchform.jim
+puts "
"
+
+set cmd search
+if {$full} { set cmd searchall }
+if {$term ne ""} {
+ #set records [epg fetch $cmd -extra $term]
+ set records [epg dbfetch $cmd -term $term]
+} else {
+ set records {}
+}
+
+foreach e $records {
+ epgcell $e
+}
+
+puts "
"
+
+mfooter
+
diff --git a/var/mongoose/html/m/style.css b/var/mongoose/html/m/style.css
index af953dc..e46c5e0 100644
--- a/var/mongoose/html/m/style.css
+++ b/var/mongoose/html/m/style.css
@@ -1,4 +1,32 @@
+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;
+}
+
+p.datetime
+{
+ font-style: italic;
+}
+
+img.progress
+{
+ background: transparent url(/img/percentback.png) top left no-repeat;
+ padding: 0;
+ margin: 0;
+ background-position: 1px 0;
+}
+
.va
{
vertical-align: middle;
@@ -37,3 +65,32 @@ li.sticky
top: 0;
}
+table.keyval
+{
+ position: relative;
+ left: -10px;
+}
+
+table.keyval th, th.key
+{
+ background: #ccff99;
+ font-weight: bold;
+ text-align: right;
+ color: black;
+}
+
+table.keyval td
+{
+ background: #ffffcc;
+ color: black;
+}
+
+.also
+{
+ font-size: 0.8em;
+ font-style: italic;
+ color: #333;
+ background: transparent;
+ text-decoration: none;
+}
+
diff --git a/var/mongoose/html/sched/info.jim b/var/mongoose/html/sched/info.jim
index f2d5f18..2691754 100755
--- a/var/mongoose/html/sched/info.jim
+++ b/var/mongoose/html/sched/info.jim
@@ -2,7 +2,7 @@
package require cgi
source /mod/webif/lib/setup
-require rsv.class progressbar
+require rsv.class progressbar epg.class
puts "Content-Type: text/html"
puts ""
@@ -15,46 +15,17 @@ set slot [cgi_get slot 0]
set event [rsv slot $table $slot]
-set rsvicon [$event icon]
-if {$rsvicon ne ""} {
- set rsvicon "

"
- if {[$event get ersvtype] == 3} {
- if {[$event padded]} {
- set padding "<- [expr [$event get ulPreOffset] / 60], [expr [$event get ulPostOffset] / 60] ->"
- append rsvicon \
- "

"
- } else {
- append rsvicon \
- "

"
- }
- }
-}
-
-set RKIcon [$event RKIcon]
-if {$RKIcon ne ""} {
- set RKIcon "

"
-}
-
-if {[$event get ucRecKind] == 4} {
- set series 1
-} else {
- set series 0
-}
-
puts "
| Event [$event get ulslot] |
- $rsvicon $RKIcon |
+ [join [$event iconset] ""] |
| Channel |
"
if {[$event get usLcn] ne ""} {
- puts "
-
+ puts "[epg channelicon [$event channel_name] 50]
- [$event get usLcn] - [$event channel_name]
"
}
@@ -104,10 +75,10 @@ puts "
set crid [join [lrange [split [$event get szCRID] /] 1 end]]
if {$crid != ""} {
puts " |
| "
- if $series { puts "Series" } else { puts "Event" }
+ if {[$event isseries]} { puts "Series" } else { puts "Event" }
puts " CRID | "
puts -nonewline "
diff --git a/var/mongoose/html/sched/sched.jim b/var/mongoose/html/sched/sched.jim
index c299c75..3dba1d5 100755
--- a/var/mongoose/html/sched/sched.jim
+++ b/var/mongoose/html/sched/sched.jim
@@ -56,42 +56,8 @@ proc eventrow {event {table TBL_RESERVATION}} {
ar=[expr ! [$event padded]]"
altrow $attrs
- set rsvicon [$event icon]
- set RKIcon [$event RKIcon]
- if {[$event get ucRecKind] == 4} {
- set series 1
- } else {
- set series 0
- }
-
- if {$rsvicon ne ""} {
- set rsvicon " "
- if {[$event get ersvtype] == 3} {
- if {[$event padded]} {
- set padding "<- [expr [$event get ulPreOffset] / 60], [expr [$event get ulPostOffset] / 60] ->"
- append rsvicon \
- " "
- } else {
- append rsvicon \
- " "
- }
- }
- }
- if {$RKIcon ne ""} {
- set RKIcon " "
- }
-
if {$table eq "pending"} {
- switch [$event get action] {
- 0 { set icon "add" }
- 1 { set icon "close" }
- 2 { set icon "ar" }
- 3 { set icon "pad" }
- 4 { set icon "folder" }
- }
- puts " |
-  | "
+ puts "[$event pendingicon] | "
}
puts "[$event get ulslot] | "
@@ -127,7 +93,7 @@ proc eventrow {event {table TBL_RESERVATION}} {
set ds "[clock format $s -format "%a %d %b %Y"]
[clock format $s -format "%H:%M %Z"]"
- if { $n > $e && [$event get ersvtype] <= 3} {
+ if {$n > $e && [$event get ersvtype] <= 3} {
puts "
--- -- --- ---- --:--"
@@ -147,7 +113,7 @@ proc eventrow {event {table TBL_RESERVATION}} {
puts "[clock format [$event get nduration] -format %T] | "
}
- puts "$rsvicon $RKIcon | "
+ puts "[join [$event iconset] ""] | "
puts " | "
diff --git a/var/mongoose/include/menuicons.jim b/var/mongoose/include/menuicons.jim
index 5b0d088..4b75d7e 100755
--- a/var/mongoose/include/menuicons.jim
+++ b/var/mongoose/include/menuicons.jim
@@ -3,7 +3,13 @@
source /mod/webif/lib/setup
require settings.class
-proc menuitem {title icon link {width 217} {height 0} {extra ""}} {
+proc menuitem {title icon link {width 217} {height 0} {extra ""}} {{num 0}} {
+ incr num
+ if {$title eq ""} return
+ if {$num > 4} {
+ puts {}
+ set num 0
+ }
if {$extra ne ""} { append extra " " }
puts -nonewline "
@@ -42,7 +48,9 @@ if {[file exists "/mod/bin/ir"]} {
menuitem "Remote" "/img/remote.png" /plugin/ir/remote.jim 217 228
}
-puts {
}
+if {[[settings] nomobile] eq "0"} {
+ menuitem "Mobile Version" "/img/mobile.png" /m/ 217 228
+}
menuitem "Service Management" "/img/spanner.png" \
/services.shtml 217 228
@@ -50,8 +58,7 @@ menuitem "Package Management" "/img/packages.png" \
/pkg/index.shtml 217 228
menuitem "Settings" "/images/326_1_00_Menu_Settings.png" \
/cgi-bin/settings.jim 217 228
+
menuitem "Diagnostics" "/img/diagnostics.png" \
/diag/diag.jim 217 228
-puts {
}
-
diff --git a/var/mongoose/lib/browse.class b/var/mongoose/lib/browse.class
new file mode 100644
index 0000000..fc1b332
--- /dev/null
+++ b/var/mongoose/lib/browse.class
@@ -0,0 +1,54 @@
+
+require system.class
+
+#if {![exists -proc class]} { package require oo }
+#class browse {}
+
+set _flatten [system pkginst flatten]
+
+proc _addicon {img {hover ""} {class va}} {
+ set icon "

"
+ return $icon
+}
+
+proc {dir iconset} {dir} {
+ set icons {}
+ set attrs {}
+
+ set noflat 0
+ if $::_flatten {
+ if {[string match {\[*\]} [file tail $dir]]} { set noflat 1 }
+ if {[file exists "$dir/.noflatten"]} { set noflat 1 }
+ if $noflat { lappend icons \
+ [_addicon "/img/flat-tyre.png" "No-flatten" }
+ lappend attrs "noflat=$noflat"
+ }
+
+ set autoshrink 0
+ if {[file exists "$dir/.autoshrink"]} {
+ set autoshrink 1
+ lappend icons [_addicon "/img/compress.png" "Auto-shrink"]
+ lappend attrs "autoshrink=$autoshrink"
+ }
+
+ set autodedup 0
+ if {[file exists "$dir/.autodedup"]} {
+ set autodedup 1
+ lappend icons [_addicon "/img/dedup.png" "Auto-dedup"]
+ lappend attrs "autodedup=$autodedup"
+ }
+
+ set autodecrypt 0
+ if {[file exists "$dir/.autodecrypt"]} {
+ set autodecrypt 1
+ lappend icons [_addicon "/img/decrypt.png" "Auto-decrypt"]
+ lappend attrs "autodecrypt=$autodecrypt"
+ }
+
+ return [list $icons $attrs]
+}
+
diff --git a/var/mongoose/lib/epg.class b/var/mongoose/lib/epg.class
index 1642e2b..8f5811a 100644
--- a/var/mongoose/lib/epg.class
+++ b/var/mongoose/lib/epg.class
@@ -3,7 +3,7 @@ source /mod/webif/lib/setup
if {![exists -proc class]} { package require oo }
if {![exists -proc sqlite3.open]} { package require sqlite3 }
-require settings.class progressbar rsv.class
+require settings.class progressbar rsv.class mwildcard
set ::epgpath /mnt/hd1/dvbepg/epg.dat
@@ -155,6 +155,13 @@ epg method get_channel_info {} {
}
}
+epg method copy_channel_info {s} {
+ set channel_num [$s get channel_num]
+ set channel_name [$s get channel_name]
+ set channel_crid [$s get channel_crid]
+ set channel_hsvc [$s get channel_hsvc]
+}
+
epg method get_rsv {} {
if {$hsvc == 0} { $self get_channel_info }
if {$hsvc == 0} { return }
@@ -334,6 +341,7 @@ proc {epg exec} {mode args} {
proc {epg dbfetch} {mode args} {
set records {}
set extra ""
+ set params {}
set select "
select distinct *,
@@ -384,6 +392,18 @@ proc {epg dbfetch} {mode args} {
append q "and f.eFavGroup = $v "
set sort "order by f.favIdx, start"
}
+ -term {
+ set v [mwildcard $v]
+ append q "and ("
+ append q "e.name like '%s' "
+ lappend params "%$v%"
+ if {$mode eq "searchall"} {
+ append q \
+ "or e.text like '%s' "
+ lappend params "%$v%"
+ }
+ append q ") "
+ }
default { error "Invalid option, $arg" }
}
}
@@ -394,10 +414,12 @@ proc {epg dbfetch} {mode args} {
#puts "QUERY -$query-"
set records {}
- catch {
- foreach rec [$::channeldb query $query] {
+ if {[catch {
+ foreach rec [$::channeldb query $query {*}$params] {
lappend records [epg new $rec]
}
+ } msg]} {
+ puts "MSG: $msg"
}
return $records
}
diff --git a/var/mongoose/lib/mwildcard b/var/mongoose/lib/mwildcard
new file mode 100644
index 0000000..d9f8fc9
--- /dev/null
+++ b/var/mongoose/lib/mwildcard
@@ -0,0 +1,5 @@
+
+proc mwildcard {v} {
+ return [string map {"%" "\\%" "*" "%" "_" "\\_" "?" "_"} $v]
+}
+
diff --git a/var/mongoose/lib/rsv.class b/var/mongoose/lib/rsv.class
index db85a25..25653a1 100755
--- a/var/mongoose/lib/rsv.class
+++ b/var/mongoose/lib/rsv.class
@@ -69,6 +69,10 @@ rsv method clear_ulslot {} {
set ulslot -1
}
+rsv method isseries {} {
+ if {$ucRecKind == 4} { return 1 } else { return 0 }
+}
+
rsv method _strip {str} {
if {[string range $str 1 2] eq "i7"} {
set str [string range $str 3 end]
@@ -143,6 +147,41 @@ rsv method RKIcon {} {
return $RKIcon
}
+rsv method pendingicon {{width 30}} {
+ switch $action {
+ 0 { set icon "add" }
+ 1 { set icon "close" }
+ 2 { set icon "ar" }
+ 3 { set icon "pad" }
+ 4 { set icon "folder" }
+ }
+ return "

"
+}
+
+rsv method iconset {{height 20}} {
+ set iconlist {}
+ set icon [$self icon]
+ if {$icon ne ""} {
+ lappend iconlist "

"
+ if {$ersvtype == 3} {
+ if {[$self padded]} {
+ set padding "<- [expr $ulPreOffset / 60], [expr $ulPostOffset / 60] ->"
+ lappend iconlist \
+ "

"
+ } else {
+ lappend iconlist \
+ "

"
+ }
+ }
+ }
+ set icon [$self RKIcon]
+ if {$icon ne ""} {
+ lappend iconlist "

"
+ }
+ return $iconlist
+}
+
rsv method set_delete {} {
set action 1
}
diff --git a/var/mongoose/lib/settings.class b/var/mongoose/lib/settings.class
index f256a7d..ee13603 100644
--- a/var/mongoose/lib/settings.class
+++ b/var/mongoose/lib/settings.class
@@ -23,6 +23,7 @@ class settings {
smtp_server ""
pkgdev 0
notoolbar 0
+ nomobile 0
}
settings method hostname {{name ""}} {
@@ -121,6 +122,10 @@ settings method notoolbar {{val -1}} {
return [$self _nval_setting notoolbar $val]
}
+settings method nomobile {{val -1}} {
+ return [$self _nval_setting nomobile $val]
+}
+
settings method sortorder {{val -1}} {
return [$self _nval_setting sortorder $val]
}
|---|