webif/webif/html/browse/crop/crop.jim

157 lines
3.5 KiB
Tcl
Executable File

#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
jqplugin progressbar iphone-style-checkboxes
jscss crop.js style.css
header
set rfile [cgi_get file]
set invert [cgi_get invert 0]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
set planwidth 500
puts "
<fieldset>
<legend>Crop recording</legend>
<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>
<tr><th>Size:</th><td>[pretty_size [$ts size]] ([$ts get definition])</td></tr>
<tr><th>Bookmarks:</th><td id=originalbookmarks>[$ts get bookmarks] @ "
puts [join [lmap i [$ts bookmarks 1] {
clock format $i -format "%T"
}] ", "]
# set minimum width as positioned contents doesn't resize its cell
puts "</td></tr><tr><th>&nbsp;</th><td id=cutplan style=\"min-width: ${planwidth}px\">"
puts "<div style=\"position: relative; top: -10px\">"
proc div {type left right} {
set width $($right - $left)
if {$width < 0} {
# negative values are invalid for CSS width
set width 0
}
puts "<div class=$type style=\"left: ${left}px; width: ${width}px\">
$type</div>"
}
set bookmarks {}
if {$invert} {
append bookmarks "0 "
}
append bookmarks [$ts bookmarks]
set keeping 0
set last 0
set start -1
set newbookmarks "0 "
set cur 0
foreach b $bookmarks {
if {$start < 0} {
# Start of a section to keep
set start $b
continue
}
# End of a section to keep
set end $b
set l $($end - $start)
incr keeping $l
incr cur $l
append newbookmarks "[expr $cur + 3] "
set left $($start * $planwidth / $len)
set right $($end * $planwidth / $len)
div cut $last $($left - 1)
div keep $left $($right - 1)
set last $right
set start -1
}
if {$start > 0} {
# Still in a keep section...
incr keeping $($len - $start)
set left $($start * $planwidth / $len)
div cut $last $($left - 1)
div keep $left $planwidth
} else {
div cut $last $planwidth
}
if {$cur > $keeping - 8 && $keeping - 8 > 0} {
set newbookmarks [lreplace $newbookmarks end end $($keeping - 8)]
}
set keepperc $($keeping * 100.0 / $len)
set esttime $(int($keeping * 0.025))
if {[$ts get definition] eq "HD"} { set esttime $($esttime * 4) }
puts "
</div>
</td></tr>
<tr><th>Keeping:</th><td>
[clock format $keeping -format "%T"] ([format "%.2f" $keepperc]%)
</td></tr>"
puts "
<tr>
<th title=\"Calculated bookmarks for edit points following crop.\">
New Bookmarks:
</th><td id=newbookmarks>
<span id=bookmarks val=\"$newbookmarks\">
$newbookmarks</span>&nbsp;&nbsp;&nbsp;&nbsp;(
"
puts [join [lmap i $newbookmarks {
clock format $i -format "%T"
}] ", "]
puts " )</td></tr>"
puts "
<tr id=esttime><th>Time:</th>
<td>Cropping will take around [clock format $esttime -format "%T"]</td></tr>
</table>
<span class=hidden id=params
file=\"$rfile\"
perc=\"$keepperc\"
dir=\"[cgi_quote_url $dir]\"
></span>
<div id=cropdiv style=\"padding: 1em\">
<table><tr>
<td><button id=invert invert=$invert>Invert selection</button></td>
<td><button id=cropit>Perform crop operation</button></td>
<td>
<label id=saveitlabel for=saveit>Save new bookmarks?</label>
<input id=saveit type=checkbox name=saveit checked>
&nbsp;
</td>
</tr></table>
</div>
<button id=back>Back to media list</button>
<button id=save class=\"hidden\">Save New Bookmarks</button>
<div id=results class=\"hidden blood\"></div>
<div id=progressdiv class=hidden>
Cropping: <div id=progressbar></div>
</div>
<div id=output class=\"hidden pre\" style=\"margin-top: 10px\"></div>
</fieldset>
"