From 8cd924c8ac3681380870b3e4229a22680f599865 Mon Sep 17 00:00:00 2001 From: hummypkg Date: Wed, 9 Nov 2016 16:39:24 +0000 Subject: [PATCH] improve status with centralised operation tracking and plugin support git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3339 2a923420-c742-0410-a762-8d5b09965624 --- CONTROL/control | 2 +- webif/cgi-bin/status.jim | 86 +++++++++++++++++---------- webif/html/browse/audio/execute.jim | 2 + webif/html/browse/decrypt/execute.jim | 2 + webif/html/browse/mpg/execute.jim | 2 + webif/html/browse/strip/execute.jim | 5 +- webif/lib/bin/auto | 40 +++++-------- webif/lib/system.class | 52 ++++++++++++++++ 8 files changed, 129 insertions(+), 62 deletions(-) diff --git a/CONTROL/control b/CONTROL/control index ba585a10..6a764a36 100644 --- a/CONTROL/control +++ b/CONTROL/control @@ -1,7 +1,7 @@ Package: webif Priority: optional Section: web -Version: 1.3.2-11 +Version: 1.3.2-12 Architecture: mipsel Maintainer: af123@hpkg.tv Depends: tcpfix,webif-channelicons(>=1.1.24),lighttpd(>=1.4.39-1),jim(>=0.76-2),jim-oo,jim-sqlite3(>=0.76),jim-cgi(>=0.7-1),jim-binary(>=0.76),service-control(>=2.3),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.3),hmt(>=2.0.10),ssmtp,cron-daemon(>=1.18.3-3),at(>=3.1.18),anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.1.9),webif-charts(>=1.2-1),stripts(>=1.2.5-3),tmenu(>=1.08),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.7),hwctl,nugget(>=0.95) diff --git a/webif/cgi-bin/status.jim b/webif/cgi-bin/status.jim index 06111ebc..1f84771d 100755 --- a/webif/cgi-bin/status.jim +++ b/webif/cgi-bin/status.jim @@ -2,7 +2,7 @@ package require cgi source /mod/webif/lib/setup -require system.class findhsvc epg.class rsv.class +require system.class findhsvc epg.class rsv.class plugin set runmode cli if {[string match {*jim} $argv0]} { set runmode cgi } @@ -32,8 +32,29 @@ if {[catch {set pid [exec pgrep -n humaxtv]}]} { set exts {.ts .avi .mpg .mpeg .wmv .mkv .mp3 .mp4 .mov .hmt .m4v .m4a} +set statusops { + decrypt { "Decrypting" + "/img/decrypt.png style=\"padding: 0 0.2em 0 0.5em\"" + } + mpg { "Extracting MPG" + "/img/mpg.png style=\"padding: 0 0.2em 0 0.5em\"" + } + mp3 { "Extracting MP3" + "/img/mp3.png style=\"padding: 0 0.2em 0 0.5em\"" + } + shrink { "Shrinking" + "/img/compress.png style=\"padding: 0 0.2em 0 0.5em\"" + } +} + +proc register_statusop {op name icon} { + set statusops($op) [list $name $icon] +} + +eval_plugins status + proc get_data {} { - global pid exts opfile + global pid exts set ret {} if {[catch {set data \ @@ -75,8 +96,10 @@ proc get_data {} { } } } - if {$opfile ne "" && $opfile ni $ret && [file exists $opfile]} { - set ret($opfile) [file size $opfile] + } + foreach file [dict keys $::ops] { + if {![dict exists $ret $file] && [file exists $file]} { + set ret($file) [file size $file] } } return $ret @@ -85,18 +108,27 @@ proc get_data {} { set play 0 set rec 0 set output {} +set ops {} +set model [system model] -set opfile "" -if {[file exists "/mod/tmp/webif_auto/.op"]} { - set fp [open "/mod/tmp/webif_auto/.op"] - lassign [split [string trim [$fp read]] ":"] op opfile - $fp close - if {[system model] eq "HDR"} { - set opfile [string map {/media/ /mnt/hd2/} $opfile] +foreach opfile [glob -nocomplain -directory /tmp -tails -- ".bgop.*"] { + set op [string range $opfile 6 end] + lassign [split [file read "/tmp/$opfile"] "\n"] file oppid + if {$model eq "HDR"} { + set file [string map {/media/ /mnt/hd2/} $file] + } + + # Check that the lock is still held + if {![system checkop $op]} { + debug "$op/$file/$oppid - process not found." + file delete "/tmp/$opfile" + } else { + set ops($file) $op } - debug "OP: $op - $opfile" } +debug "OPS: $ops" + set data {} if {$type eq "full"} { set data [get_data] @@ -132,8 +164,8 @@ if {[llength $data]} { foreach file [array names data] { set bname [file rootname [file tail $file]] - if {$file eq $opfile} { - set mode $op + if {[dict exists $ops $file]} { + set mode $ops($file) } elseif {$data($file) == -1} { set mode chase } elseif {$rr} { @@ -168,25 +200,13 @@ if {[llength $data]} { set mode "Playing" set icon "745_1_10_Video_2Live.png" } - dec { - set mode "Decrypting" - set icon "/img/decrypt.png " - append icon "style=\"padding: 0 0.2em 0 0.5em\"" - } - mpg { - set mode "Extracting MPG" - set icon "/img/mpg.png " - append icon "style=\"padding: 0 0.2em 0 0.5em\"" - } - mp3 { - set mode "Extracting MP3" - set icon "/img/mp3.png " - append icon "style=\"padding: 0 0.2em 0 0.5em\"" - } - shrink { - set mode "Shrinking" - set icon "/img/compress.png " - append icon "style=\"padding: 0 0.2em 0 0.5em\"" + default { + if {[dict exists $statusops $mode]} { + lassign $statusops($mode) mode icon + } else { + set mode "Unknown" + set icon "/img/blank.gif" + } } } diff --git a/webif/html/browse/audio/execute.jim b/webif/html/browse/audio/execute.jim index f3b21102..aff16475 100755 --- a/webif/html/browse/audio/execute.jim +++ b/webif/html/browse/audio/execute.jim @@ -26,7 +26,9 @@ if {![[settings] audiomp3]} { lappend cmd "${base}.mp3" #puts "$cmd" +system startop mp3 $rfile puts [exec {*}$cmd] +system endop mp3 if {[system pkginst id3v2]} { puts [exec /mod/bin/id3v2 \ diff --git a/webif/html/browse/decrypt/execute.jim b/webif/html/browse/decrypt/execute.jim index 207db040..c31ebb22 100755 --- a/webif/html/browse/decrypt/execute.jim +++ b/webif/html/browse/decrypt/execute.jim @@ -38,7 +38,9 @@ if {[file exists "$origdir/$shname.ts"]} { exit } +system startop decrypt $rfile exec wget -O "$rfile.decrypting" $url +system endop decrypt puts "Moving recording to $origdir" diff --git a/webif/html/browse/mpg/execute.jim b/webif/html/browse/mpg/execute.jim index 55b34430..51bfcb2f 100755 --- a/webif/html/browse/mpg/execute.jim +++ b/webif/html/browse/mpg/execute.jim @@ -18,10 +18,12 @@ set base [file rootname $rfile] set shname [file tail $base] puts "Processing $shname" +system startop mpg $rfile puts [exec /mod/bin/ffmpeg -y -benchmark -v 0 \ -i $rfile \ -map 0:0 -map 0:1 \ -vcodec copy -acodec copy "${base}.mpg"] +endop mpg set xtime [expr [expr [clock milliseconds] - $xstart] / 1000.0] puts "Time taken: $xtime" diff --git a/webif/html/browse/strip/execute.jim b/webif/html/browse/strip/execute.jim index e776bbad..049482f7 100755 --- a/webif/html/browse/strip/execute.jim +++ b/webif/html/browse/strip/execute.jim @@ -2,7 +2,7 @@ package require cgi source /mod/webif/lib/setup -require ts.class pretty_size +require system.class ts.class pretty_size httpheader @@ -35,11 +35,12 @@ foreach ext $tsgroup { file rename "$base.$ext" "${origdir}/$tail.$ext" } +system startop shrink $rfile puts [exec /mod/bin/stripts \ "$origdir/$shname" \ "$dir/$shname" \ ] - +system endop shrink # Set the file time to match the old file ts touchgroup "$dir/$shname.ts" "$origdir/$shname.ts" diff --git a/webif/lib/bin/auto b/webif/lib/bin/auto index f16b1714..d3eabcc9 100755 --- a/webif/lib/bin/auto +++ b/webif/lib/bin/auto @@ -197,18 +197,6 @@ proc dorecalc {dir} { incr recalc -1 } -proc startop {op file} { - global tmp - set fp [open "$tmp/.op" "w"] - puts $fp "$op:$file" - $fp close -} - -proc endop {} { - global tmp - file delete "$tmp/.op" -} - proc dedup {dir {flag ""}} { log "DEDUP: \[$dir]" 2 loop i 0 1 { @@ -267,7 +255,7 @@ proc do_shrink {ts} { } set size [$ts size] dsc $size - startop shrink [$ts get file] + system startop shrink [$ts get file] runplugin preshrink $ts startclock log " SHRINK: $file" 0 @@ -282,7 +270,7 @@ proc do_shrink {ts} { } msg]} { log "Error during shrink: $msg" 0 system notify "$file - auto-shrink - error $msg." - endop + system endop shrink return } @@ -313,7 +301,7 @@ proc do_shrink {ts} { log "Done... [endclock $size]" 0 lappend processed_files [$ts get file] runplugin postshrink $ts - endop + system endop shrink } proc do_decrypt {ts} { @@ -375,7 +363,7 @@ proc do_decrypt {ts} { set size [$ts size] dsc $size runplugin predecrypt $ts - startop dec $file + system startop decrypt $file startclock log " DECRYPT: $rfile" 0 log " DLNA: $url" 0 @@ -387,7 +375,7 @@ proc do_decrypt {ts} { if {[file size $file] != [file size "$tmp/$bfile"]} { log " $file - File size mismatch." 0 file tdelete "$tmp/$bfile" - endop + system endop decrypt return } @@ -396,7 +384,7 @@ proc do_decrypt {ts} { if {[inuse $ts]} { log " $file - In use." file tdelete "$tmp/$bfile" - endop + system endop decrypt return } @@ -411,7 +399,7 @@ proc do_decrypt {ts} { log " $file - File did not decrypt properly." 0 system notify "$file - auto-decrypt failed." file tdelete "$tmp/$bfile" - endop + system endop decrypt return } @@ -447,7 +435,7 @@ proc do_decrypt {ts} { lappend processed_files [$ts get file] $ts unflag "ODEncrypted" runplugin postdecrypt $ts - endop + system endop decrypt } proc do_mpg {ts} { @@ -474,7 +462,7 @@ proc do_mpg {ts} { log " $file - In use." return } - startop mpg [$ts get file] + system startop mpg [$ts get file] runplugin prempg $ts dsc [$ts size] @@ -491,7 +479,7 @@ proc do_mpg {ts} { } msg]} { log "Error during mpg extract: $msg" 0 system notify "$file - auto-mpg - error $msg." - endop + system endop mpg return } @@ -499,7 +487,7 @@ proc do_mpg {ts} { file rename $tmp/mpg.mpg $file.mpg lappend processed_files [$ts get file] runplugin postmpg $ts - endop + system endop mpg } proc do_mp3 {ts} { @@ -527,7 +515,7 @@ proc do_mp3 {ts} { log " $file - In use." return } - startop mp3 [$ts get file] + system startop mp3 [$ts get file] runplugin premp3 $ts dsc [$ts size] @@ -545,7 +533,7 @@ proc do_mp3 {ts} { } msg]} { log "Error during mp3 extract: $msg" 0 system notify "$file - auto-mp3 - error $msg." - endop + system endop mp3 return } @@ -562,7 +550,7 @@ proc do_mp3 {ts} { file rename $tmp/mp3.mp3 $file.mp3 lappend processed_files [$ts get file] runplugin postmp3 $ts - endop + system endop mp3 } proc entries {dir callback {flag ""}} { diff --git a/webif/lib/system.class b/webif/lib/system.class index 1aef7a0e..a7a3a526 100644 --- a/webif/lib/system.class +++ b/webif/lib/system.class @@ -743,3 +743,55 @@ proc {system has} {comp} { return 0 } +set ::system::ops {} + +proc {system checkop} {op} { + if {![regexp -nocase -- {^[a-z0-9]+$} $op]} { return 0 } + if {[catch {set fp [open "/tmp/.bgop.$op" "a"]}]} { + return 0 + } + set ret 1 + if {[$fp lock]} { + $fp unlock + set ret 0 + } + $fp close + return $ret +} + +proc {system startop} {op file} { + if {![regexp -nocase -- {^[a-z0-9]+$} $op]} { return 0 } + if {[dict exists $::system::ops $op]} { + system endop $op + } + if {[catch { + set fp [open "/tmp/.bgop.$op" "a"] + if {[$fp lock]} { + $fp puts "$file\n[pid]" + $fp flush + set ::system::ops($op) $fp + } else { + $fp close + error "Could not lock op file." + } + }]} { return 0 } + return 1 +} + +proc {system endop} {op} { + if {![regexp -nocase -- {^[a-z0-9]+$} $op]} { return 0 } + if {[dict exists $::system::ops $op]} { + catch { + set fp $::system::ops($op) + $fp unlock + $fp close + } + dict unset ::system::ops $op + } + if {[file exists "/tmp/.bgop.$op"]} { + file delete "/tmp/.bgop.$op" + return 1 + } + return 0 +} +