2011-11-03 23:43:17 +00:00
|
|
|
#!/mod/bin/jimsh
|
|
|
|
|
|
|
|
package require cgi
|
|
|
|
source /mod/var/mongoose/lib/setup
|
2011-11-04 20:47:27 +00:00
|
|
|
require ts.class pretty_size
|
2011-11-03 23:43:17 +00:00
|
|
|
|
|
|
|
puts "Content-Type: text/html\r\n\r\n"
|
|
|
|
|
|
|
|
cgi_input
|
|
|
|
#cgi_dump
|
|
|
|
|
|
|
|
set tsfile [cgi_get file]
|
|
|
|
set rfile [file normalize $tsfile]
|
|
|
|
set ts [ts fetch $rfile]
|
|
|
|
set dir [file dirname $rfile]
|
|
|
|
|
|
|
|
set len [$ts duration 1]
|
|
|
|
|
|
|
|
if {[cgi_get do] eq "it"} {
|
2011-11-04 20:47:27 +00:00
|
|
|
|
|
|
|
set cropstart [clock milliseconds]
|
|
|
|
|
2011-11-03 23:43:17 +00:00
|
|
|
set base [file rootname $rfile]
|
|
|
|
set origdir "$dir/_original"
|
|
|
|
if {![file exists $origdir]} { file mkdir $origdir }
|
|
|
|
|
|
|
|
set shname [file tail $base]
|
|
|
|
puts "Processing $shname"
|
|
|
|
|
2011-11-04 20:47:27 +00:00
|
|
|
if {[file exists "$origdir/$shname.ts"]} {
|
|
|
|
puts "This recording already exists within _original"
|
|
|
|
puts "Cannot continue."
|
|
|
|
exit
|
|
|
|
}
|
2011-11-03 23:43:17 +00:00
|
|
|
|
2011-11-04 20:47:27 +00:00
|
|
|
puts "Moving recording to $origdir"
|
2011-11-03 23:43:17 +00:00
|
|
|
foreach f [glob -nocomplain "${base}.*"] {
|
|
|
|
set tail [file tail $f]
|
|
|
|
puts " $tail"
|
2011-11-04 20:47:27 +00:00
|
|
|
file rename $f "$origdir/$tail"
|
2011-11-03 23:43:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
puts [exec /mod/bin/nicesplice \
|
|
|
|
-in "$origdir/$shname" \
|
|
|
|
-out "$dir/$shname" \
|
|
|
|
-cutBookMarks]
|
|
|
|
|
2011-11-04 20:47:27 +00:00
|
|
|
set newname "$shname-[clock seconds]"
|
|
|
|
puts "Renaming file group to $newname"
|
|
|
|
ts renamegroup "$dir/$shname.ts" $newname
|
|
|
|
exec /mod/bin/hmt "+setfilename=$newname" "$dir/$newname.hmt"
|
|
|
|
|
|
|
|
set croptime [expr [expr [clock milliseconds] - $cropstart] / 1000.0]
|
|
|
|
puts "Time taken: $croptime"
|
|
|
|
|
2011-11-03 23:43:17 +00:00
|
|
|
exit
|
|
|
|
}
|
|
|
|
|
|
|
|
header
|
|
|
|
|
|
|
|
puts "
|
|
|
|
<link href=/css/jquery.progressbar.css rel=stylesheet type=text/css />
|
|
|
|
<script type=\"text/javascript\" src=\"/js/jquery.progressbar.js\"></script>
|
|
|
|
|
|
|
|
<table class=keyval cellpadding=5>
|
|
|
|
<tr><th>File:</th><td>$rfile</td></tr>
|
|
|
|
<tr><th>Length:</th><td>[clock format $len -format "%T"]</td></tr>
|
2011-11-16 22:55:06 +00:00
|
|
|
<tr><th>Size:</th><td>[pretty_size [$ts size]] ([$ts get definition])</td></tr>
|
2011-11-03 23:43:17 +00:00
|
|
|
<tr><th>Bookmarks:</th><td>[$ts get bookmarks] @ "
|
|
|
|
|
|
|
|
set flag 0
|
|
|
|
foreach b [$ts bookmarks] {
|
|
|
|
if $flag { puts -nonewline ", " }
|
|
|
|
incr flag
|
|
|
|
puts -nonewline [clock format $b -format "%T"]
|
|
|
|
}
|
|
|
|
|
2011-11-04 20:47:27 +00:00
|
|
|
puts "</td></tr><tr><th>File</th><td>"
|
2011-11-03 23:43:17 +00:00
|
|
|
|
2011-11-04 20:47:27 +00:00
|
|
|
puts "<div style=\"position: relative; top: -10px\">"
|
2011-11-03 23:43:17 +00:00
|
|
|
|
|
|
|
proc div {type left right} {
|
|
|
|
set width $($right - $left)
|
|
|
|
puts "<div class=$type style=\"left: ${left}px; width: ${width}px\">
|
|
|
|
$type</div>"
|
|
|
|
}
|
|
|
|
|
2011-11-04 20:47:27 +00:00
|
|
|
set keeping 0
|
2011-11-03 23:43:17 +00:00
|
|
|
set last 0
|
|
|
|
set start -1
|
|
|
|
foreach b [$ts bookmarks] {
|
|
|
|
if {$start < 0} {
|
|
|
|
set start $b
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
set end $b
|
|
|
|
|
2011-11-04 20:47:27 +00:00
|
|
|
incr keeping $($end - $start)
|
|
|
|
|
2011-11-03 23:43:17 +00:00
|
|
|
set left $($start * 500 / $len)
|
|
|
|
set right $($end * 500 / $len)
|
|
|
|
|
|
|
|
div cut $last $($left - 1)
|
|
|
|
div keep $left $($right - 1)
|
|
|
|
|
|
|
|
set last $right
|
|
|
|
|
|
|
|
set start -1
|
|
|
|
}
|
|
|
|
|
|
|
|
if {$start > 0} {
|
2011-11-04 20:47:27 +00:00
|
|
|
incr keeping $($len - $start)
|
2011-11-04 13:19:56 +00:00
|
|
|
set left $($start * 500 / $len)
|
|
|
|
div cut $last $($left - 1)
|
|
|
|
div keep $left 500
|
2011-11-03 23:43:17 +00:00
|
|
|
} else {
|
|
|
|
div cut $last 500
|
|
|
|
}
|
|
|
|
|
2011-11-04 20:47:27 +00:00
|
|
|
set keepperc $($keeping * 100.0 / $len)
|
|
|
|
set esttime $(int($keeping * 0.025))
|
2011-11-16 22:55:06 +00:00
|
|
|
if {[$ts get definition] eq "HD"} { set esttime $($esttime * 4) }
|
2011-11-03 23:43:17 +00:00
|
|
|
|
2011-11-04 20:47:27 +00:00
|
|
|
puts "
|
|
|
|
</div>
|
|
|
|
</td></tr>
|
|
|
|
<tr><th>Keeping:</th><td>
|
|
|
|
[clock format $keeping -format "%T"] ([format "%.2f" $keepperc]%)
|
|
|
|
</td></tr>
|
|
|
|
<tr><th>Time:</th>
|
|
|
|
<td>Cropping will take around [clock format $esttime -format "%T"]</td></tr>
|
|
|
|
</table>
|
|
|
|
"
|
2011-11-03 23:43:17 +00:00
|
|
|
|
2011-11-16 22:55:06 +00:00
|
|
|
puts "
|
2011-11-04 20:47:27 +00:00
|
|
|
<div id=cropdiv>
|
|
|
|
<button id=cropit>Perform crop operation</button>
|
|
|
|
</div>
|
2011-11-16 22:55:06 +00:00
|
|
|
<div id=progressdiv style=\"display: none\">
|
2011-11-03 23:43:17 +00:00
|
|
|
Cropping: <div id=progressbar></div>
|
2011-11-16 22:55:06 +00:00
|
|
|
<button id=back
|
2011-11-04 13:38:48 +00:00
|
|
|
dir=\"[cgi_quote_url $dir]\"
|
|
|
|
rfile=\"[cgi_quote_url $rfile]\"
|
2011-11-16 22:55:06 +00:00
|
|
|
perc=\"$keepperc\"
|
2011-11-03 23:43:17 +00:00
|
|
|
style=\"display: none\">Back to media list</button>"
|
|
|
|
puts {
|
|
|
|
<div id=output class=pre style="margin-top: 10px"></div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<script type=text/javascript>
|
|
|
|
|
|
|
|
var handle = 0;
|
|
|
|
|
|
|
|
function update()
|
|
|
|
{
|
2011-11-16 22:55:06 +00:00
|
|
|
$.get('/cgi-bin/browse/crop_progress.jim'
|
|
|
|
+ '?perc=' + $('#back').attr('perc')
|
|
|
|
+ '&file=' + $('#back').attr('rfile'),
|
|
|
|
function(data) {
|
2011-11-04 13:38:48 +00:00
|
|
|
if (handle)
|
|
|
|
$('#progressbar').reportprogress(data);
|
|
|
|
});
|
2011-11-03 23:43:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
$(document).ready(function() {
|
|
|
|
|
|
|
|
$('#progressbar').reportprogress(0);
|
|
|
|
|
|
|
|
$('#back').button().click(function() {
|
|
|
|
window.location = '/cgi-bin/browse.jim?dir=' + $(this).attr('dir');
|
|
|
|
});
|
|
|
|
|
|
|
|
$('#cropit').button().click(function() {
|
|
|
|
$('#cropdiv').hide('slow');
|
|
|
|
$('#progressdiv').show('slow');
|
2011-11-04 20:47:27 +00:00
|
|
|
handle = setInterval("update()", 1000);
|
|
|
|
$('#output').text('Please do not interrupt...')
|
2011-11-16 22:55:06 +00:00
|
|
|
.load(document.URL + '&do=it',
|
|
|
|
function() {
|
2011-11-03 23:43:17 +00:00
|
|
|
clearInterval(handle);
|
2011-11-04 13:38:48 +00:00
|
|
|
handle = 0;
|
2011-11-03 23:43:17 +00:00
|
|
|
$('#back').show();
|
2011-11-04 13:38:48 +00:00
|
|
|
$('#progressbar').reportprogress(100);
|
2011-11-03 23:43:17 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
}
|
|
|
|
|