diff --git a/CONTROL/control b/CONTROL/control index e40d222..3f79d60 100644 --- a/CONTROL/control +++ b/CONTROL/control @@ -1,10 +1,10 @@ Package: webif Priority: optional Section: web -Version: 1.4.3 +Version: 1.4.3-2 Architecture: mipsel Maintainer: af123@hpkg.tv -Depends: tcpfix,webif-channelicons(>=1.1.26),lighttpd(>=1.4.39-1),jim(>=0.77),jim-oo(>=0.77),jim-sqlite3(>=0.77),jim-cgi(>=0.7-1),jim-binary(>=0.76),service-control(>=2.3),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.8),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.11),webif-charts(>=1.2-1),stripts(>=1.4.0),tmenu(>=1.21-2),ffmpeg(>=2.8),id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.7),hwctl,nugget(>=0.95),sqlite3(>=3.15.1),jim-xconv +Depends: tcpfix,webif-channelicons(>=1.1.26),lighttpd(>=1.4.39-1),jim(>=0.77),jim-oo(>=0.77),jim-sqlite3(>=0.77),jim-cgi(>=0.7-1),jim-binary(>=0.76),service-control(>=2.3),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.8),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.11),webif-charts(>=1.2-1),stripts(>=1.4.1),tmenu(>=1.21-2),ffmpeg(>=2.8),id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.7),hwctl,nugget(>=0.98),sqlite3(>=3.15.1),jim-xconv Suggests: Description: An evolving web interface for the Humax. Tags: https://hummy.tv/forum/threads/7712/ diff --git a/webif/html/browse/assets.jim b/webif/html/browse/assets.jim index 507ed88..d08b4f4 100755 --- a/webif/html/browse/assets.jim +++ b/webif/html/browse/assets.jim @@ -12,12 +12,8 @@ puts {
  • Rename
  • Download
  • -} -if {$model eq "HDR"} { - puts {
  • Decrypt
  • } - puts {
  • Shrink
  • } -} else { - puts {
  • Shrink
  • } +
  • Decrypt
  • +
  • Shrink
  • } if {[system pkginst ffmpeg]} { puts { @@ -88,16 +84,8 @@ puts {
  • Auto-Shrink
  • Recursive Auto-Shrink
  • Auto-Dedup
  • -} -if {$model eq "HDR"} { - puts { -
  • Auto-Decrypt
  • -
  • Recursive Auto-Decrypt -
  • - } -} - -puts { +
  • Auto-Decrypt
  • +
  • Recursive Auto-Decrypt
  • Auto-Expire Options
  • } diff --git a/webif/html/browse/decrypt/decrypt.jim b/webif/html/browse/decrypt/decrypt.jim index 616fd19..0293c0f 100755 --- a/webif/html/browse/decrypt/decrypt.jim +++ b/webif/html/browse/decrypt/decrypt.jim @@ -3,64 +3,67 @@ package require sqlite3 package require cgi source /mod/webif/lib/setup -require ts.class +require ts.class system.class jqplugin progressbar jscss decrypt.js header +set mode "dlna" +if {[system model] eq "HD"} { set mode "direct" } + set rfile [cgi_get file] set ts [ts fetch $rfile] set dir [file dirname $rfile] set len [$ts duration 1] -lassign [$ts dlnaloc "127.0.0.1"] url + +if {$mode eq "dlna"} { + if {![system is_listening 9000]} { + puts { +
    +The Humax media server is not running.
    +Decryption will not use hardware acceleration.
    +Have you enabled Content Sharing in the Humax menus?
    +
    + } + set mode "direct" + } +} + +if {$mode eq "dlna"} { + set method "Hardware accelerated (via DLNA)" +} else { + set method "Directly without hardware acceleration" +} puts " -
    Decrypt in-place - +
    File:$rfile
    Length:[clock format $len -format "%T"]
    DLNA URL$url
    Decryption method:$method
    -" - -if {$url eq ""} { - puts "This file has not been indexed by the media server. - Cannot decrypt." - puts "Have you enabled Content Sharing in the Humax menus?" - exit -} - -if {![system is_listening 9000]} { - puts "The Humax media server is not running, cannot decrypt." - puts "Have you enabled Content Sharing in the Humax menus?" - puts "It can sometimes turn itself off so it's worth double checking." - puts "If it is on then try turning sharing off and on again." - exit -} - -puts " -
    +
    + -
    + +
    - -
    +
    - " diff --git a/webif/html/browse/decrypt/decrypt.js b/webif/html/browse/decrypt/decrypt.js index 0120b4f..21e870d 100755 --- a/webif/html/browse/decrypt/decrypt.js +++ b/webif/html/browse/decrypt/decrypt.js @@ -3,14 +3,15 @@ var handle = 0; function update() { - $.get('progress.jim?file=' + $('#params').attr('file'), + $.get('progress.jim?file=' + $('#params').attr('file') + + '&mode=' + $('#params').attr('mode'), function(data) { if (handle) $('#progressbar').reportprogress(data); }); } -$(document).ready(function() { +$(function() { $('#progressbar').reportprogress(0); @@ -23,7 +24,10 @@ $('#decryptit').button().click(function() { $('#progressdiv').show('slow'); $('#back').hide(); handle = setInterval("update()", 1000); - $('#output').load('execute.jim?file=' + $('#params').attr('file'), + $('#output') + .show() + .load('execute.jim?file=' + $('#params').attr('file') + + '&mode=' + $('#params').attr('mode'), function() { clearInterval(handle); handle = 0; diff --git a/webif/html/browse/decrypt/execute.jim b/webif/html/browse/decrypt/execute.jim index e706d17..c7107bd 100755 --- a/webif/html/browse/decrypt/execute.jim +++ b/webif/html/browse/decrypt/execute.jim @@ -8,15 +8,32 @@ require ts.class system.class httpheader set rfile [cgi_get file] +set mode [cgi_get mode dlna] set ts [ts fetch $rfile] set dir [file dirname $rfile] set len [$ts duration 1] -lassign [$ts dlnaloc "127.0.0.1"] url -if {$url eq ""} { - puts "This file has not been indexed by the media server. - Cannot decrypt." - exit +if {$mode eq "dlna"} { + lassign [$ts dlnaloc "127.0.0.1"] url + if {$url ne ""} { + # File is indexed + set helper 0 + } else { + if {[catch { + lassign [system dlnahelper [\ + file normalize $rfile]] url + } msg]} { + puts "Error: Cannot obtain DLNA access to file." + exit + } + set helper 1 + } + + if {$url eq ""} { + puts "This file has not been indexed by the media server. + Cannot decrypt." + exit + } } if {[system inuse $rfile]} { @@ -32,39 +49,53 @@ if {![file exists $origdir]} { file mkdir $origdir } set shname [file tail $base] puts "Processing $shname" - -if {[file exists "$origdir/$shname.ts"]} { - puts "The file already exists in _original, cannot decrypt." - exit -} +flush stdout set token [system startop -multiple decrypt $rfile] -exec wget -O "$rfile.decrypting" $url -system endop $token +set err 0 +if {$mode eq "dlna"} { + if {[catch {exec wget -O "$rfile.decrypting" $url} msg opts]} { + puts "Wget error - $msg - $opts" + incr err + } -puts "Moving recording to $origdir" - -set tail [file tail $base] -foreach ext $tsgroup { - if {![file exists "$base.$ext"]} continue - puts " $tail.$ext" - file rename "$base.$ext" "${origdir}/$tail.$ext" -} - -file rename "$rfile.decrypting" $rfile -file touch $rfile "$origdir/$tail.ts" - -foreach ext {nts hmt thm} { - set sidecar "$shname.$ext" - if {[file exists "$origdir/$sidecar"]} { - puts "Copying back sidecar $ext" - file copy "$origdir/$sidecar" "$dir/$sidecar" - file touch "$dir/$sidecar" "$origdir/$tail.ts" + # Release the helper lock once finished. + if {$helper} { system dlnahelper -release } +} else { + if {[catch { + exec /mod/bin/stripts -@@ "$base" "$base.decrypting" + } msg opts]} { + puts "Decrypt error - $msg - $opts" + incr err } } -if {[file exists "$dir/$shname.hmt"]} { - exec /mod/bin/hmt -encrypted "$dir/$shname.hmt" +system endop $token + +if {$err} exit + +puts "Moving recording to $origdir" + +$ts move "${origdir}" 1 + +if {$mode eq "dlna"} { + file rename "$rfile.decrypting" $rfile + foreach ext {nts hmt thm} { + set sidecar "$shname.$ext" + if {[file exists "$origdir/$sidecar"]} { + puts "Copying back sidecar $ext" + file copy "$origdir/$sidecar" "$dir/$sidecar" + file touch "$dir/$sidecar" "$origdir/$shname.ts" + } + } + if {[file exists "$dir/$shname.hmt"]} { + exec /mod/bin/hmt -encrypted "$dir/$shname.hmt" + } +} else { + foreach ext $::tsgroup { + if {![file exists "$base.decrypting.$ext"]} continue + file rename "$base.decrypting.$ext" $base.$ext + } } set xtime [expr [expr [clock milliseconds] - $xstart] / 1000.0] diff --git a/webif/html/browse/decrypt/progress.jim b/webif/html/browse/decrypt/progress.jim index d3a021e..3740c13 100755 --- a/webif/html/browse/decrypt/progress.jim +++ b/webif/html/browse/decrypt/progress.jim @@ -7,13 +7,20 @@ require ts.class httpheader set tsfile [cgi_get file] +set mode [cgi_get mode dlna] set rfile [file normalize $tsfile] -if {![file exists "$rfile.decrypting"]} { +if {$mode eq "dlna"} { + set file "$rfile.decrypting" +} else { + set file "[file rootname $rfile].decrypting.ts" +} + +if {![file exists "$file"]} { puts "0" } else { set sz [file size $rfile] - set nsz [file size "$rfile.decrypting"] + set nsz [file size "$file"] puts [expr $nsz * 100 / $sz] } diff --git a/webif/html/browse/script.js b/webif/html/browse/script.js index c8c3b45..d081e3a 100755 --- a/webif/html/browse/script.js +++ b/webif/html/browse/script.js @@ -301,8 +301,7 @@ function preparemenu(el, menu) $(menu).enableContextMenuItems('#delete'); } - if (el.attr('odencd') == 1 && el.attr('dlna') == 1 && - el.attr('encd') == 0) + if (el.attr('odencd') == 1 && el.attr('encd') == 0) $(menu).enableContextMenuItems('#decrypt'); else $(menu).disableContextMenuItems('#decrypt'); diff --git a/webif/lib/auto/plugin/decrypt/queue.hook b/webif/lib/auto/plugin/decrypt/queue.hook index 775fd9d..7f6637a 100644 --- a/webif/lib/auto/plugin/decrypt/queue.hook +++ b/webif/lib/auto/plugin/decrypt/queue.hook @@ -6,6 +6,11 @@ proc ::decrypt::dequeue {q ts} { set file [$ts get file] set rfile [file rootname $file] set bfile [file tail $file] + set mode "dlna" + + if {[system model] eq "HD"} { set mode "direct" } + if {"-direct" in [$q get args]} { set mode "direct" } + #if {$mode eq "dlna" && [$q get retries] > 5} { set mode "direct" } if {![$ts flag "ODEncrypted"]} { return {"OK" "Already decrypted"} @@ -15,7 +20,7 @@ proc ::decrypt::dequeue {q ts} { return {"FAILED" "Zero-byte recording, cannot process"} } - if {![system dlnastatus]} { + if {$mode eq "dlna" && ![system dlnastatus]} { if {[system instandby]} { # Prevent polling every minute return [list "DEFER" "Cannot decrypt in standby" +120] @@ -29,11 +34,6 @@ proc ::decrypt::dequeue {q ts} { return [list "DEFER" \ "Time-shifted recording in-progress" +120] } -# if {[$ts get scheddur] == 5700} { -# # Likely to be instant-recording. -# return [list "DEFER" \ -# "Instant-recording in-progress" +120] -# } # Recording in progress, defer until near expected # end. set left $([$ts get end] - [clock seconds]) @@ -57,47 +57,60 @@ proc ::decrypt::dequeue {q ts} { "Already decrypted but the HMT flag was wrong (fixed)"} } - lassign [$ts dlnaloc "127.0.0.1"] url + if {$mode eq "dlna"} { + lassign [$ts dlnaloc "127.0.0.1"] url - if {[$ts flag "Encrypted"]} { - #return {"DEFER" "Protected (Enc flag)"} - # Unset the flag but use the DLNA helper to decrypt - # this file since the DLNA database will be wrong. - log " $file - ENC flag set, using helper." - $ts unenc - set url "" + if {[$ts flag "Encrypted"]} { + #return {"DEFER" "Protected (Enc flag)"} + # Unset the flag but use the DLNA helper to decrypt + # this file since the DLNA database will be wrong. + log " $file - ENC flag set, using helper." + $ts unenc + set url "" + } + + if {$url ne ""} { + log " $file - has been indexed." + set helper 0 + } else { + log " $file - Not yet indexed, trying helper." + if {[catch { + lassign [system dlnahelper [\ + file normalize $file]] url + } msg]} { + log " $file - $msg" + return [list "DEFER" $msg] + } + if {$url eq ""} { + return {"DEFER" "DLNA helper failed"} + } + set helper 1 + } } - if {$url ne ""} { - log " $file - has been indexed." - set helper 0 - } else { - log " $file - Not yet indexed, trying helper." - if {[catch { - lassign [system dlnahelper [file normalize $file]] url - } msg]} { - log " $file - $msg" - return [list "DEFER" $msg] - } - if {$url eq ""} { - return {"DEFER" "DLNA helper failed"} - } - set helper 1 - } - - # Perform the decryption by requesting the file from the DLNA server. set size [$ts size] ::auto::dsc $size system startop decrypt $file ::auto::startclock log " DECRYPT: $rfile" 0 - log " DLNA: $url" 0 - if {[catch {exec wget -O "$tmp/$bfile" $url} msg opts]} { - ::auto::log "Wget error - $msg - $opts" - } - # Release the helper lock once finished. - if {$helper} { system dlnahelper -release } + if {$mode eq "dlna"} { + log " DLNA: $url" 0 + if {[catch {exec wget -O "$tmp/$bfile" $url} msg opts]} { + ::auto::log "Wget error - $msg - $opts" + } + + # Release the helper lock once finished. + if {$helper} { system dlnahelper -release } + } else { + log " Direct decryption" 0 + if {[catch {exec /mod/bin/stripts -@@ "$rfile" "$tmp/[\ + file rootname $bfile]" } msg opts]} { + ::auto::log "Decrypt error - $msg - $opts" + system endop decrypt + return {"FAILED" "Decryption failed"} + } + } if {![file exists "$tmp/$bfile"]} { log " $file - Download failed." 0 @@ -121,9 +134,10 @@ proc ::decrypt::dequeue {q ts} { return {"DEFER" "Recording in use"} } - # Copy the HMT file over for stripts + # Copy the HMT file over for stripts - can be removed once + # stripts can work without a .hmt - XXX set thmt "$tmp/[file rootname $bfile].hmt" - file copy "$rfile.hmt" $thmt + if {![file exists $thmt]} { file copy "$rfile.hmt" $thmt } # Check that the file is no longer encrypted by analysing it. set anencd [exec /mod/bin/stripts -qE "$tmp/[file rootname $bfile]"] file delete $thmt @@ -131,10 +145,11 @@ proc ::decrypt::dequeue {q ts} { if {$anencd != "0"} { log " $file - File did not decrypt properly." 0 file tdelete "$tmp/$bfile" + system endop decrypt if {[$q get retries] > 3} { system notify "$file - auto-decrypt failed." + return {"FAILED" "Recording did not decrypt properly"} } - system endop decrypt return {"DEFER" "Recording did not decrypt properly"} }