forked from hummypkg/webif
157 lines
3.5 KiB
Tcl
Executable File
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> </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> (
|
|
"
|
|
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>
|
|
|
|
</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>
|
|
"
|
|
|