#!/mod/bin/jimsh

package require cgi
source /mod/var/mongoose/lib/setup
require ts.class pretty_size

puts "Content-Type: text/html\r\n\r\n"

cgi_input
#cgi_dump

set rfile [cgi_get file]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]

set len [$ts duration 1]

if {[cgi_get do] eq "it"} {

	set cropstart [clock milliseconds]

	set base [file rootname $rfile]
	set origdir "$dir/_original"
	if {![file exists $origdir]} { file mkdir $origdir }

	set shname [file tail $base]
	puts "Processing $shname"

	if {[file exists "$origdir/$shname.ts"]} {
		puts "This recording already exists within _original"
		puts "Cannot continue."
		exit
	}

	puts "Moving recording to $origdir"
	foreach f [glob -nocomplain "${base}.*"] {
		set tail [file tail $f]
		puts "  $tail"
		file rename $f "$origdir/$tail"
	}

	puts [exec /mod/bin/nicesplice \
	    -in "$origdir/$shname" \
	    -out "$dir/$shname" \
	    -cutBookMarks]

	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"

	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>
<tr><th>Size:</th><td>[pretty_size [$ts size]] ([$ts get definition])</td></tr>
<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"]
}

puts "</td></tr><tr><th>File</th><td>"

puts "<div style=\"position: relative; top: -10px\">"

proc div {type left right} {
	set width $($right - $left)
	puts "<div class=$type style=\"left: ${left}px; width: ${width}px\">
	    $type</div>"
}

set keeping 0
set last 0
set start -1
foreach b [$ts bookmarks] {
	if {$start < 0} {
		set start $b
		continue
	}
	set end $b

	incr keeping $($end - $start)

	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} {
	incr keeping $($len - $start)
	set left $($start * 500 / $len)
	div cut $last $($left - 1)
	div keep $left 500
} else {
	div cut $last 500
}

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>
<tr><th>Time:</th>
<td>Cropping will take around [clock format $esttime -format "%T"]</td></tr>
</table>
"

puts "
<div id=cropdiv>
<button id=cropit>Perform crop operation</button>
</div>
<div id=progressdiv style=\"display: none\">
Cropping: <div id=progressbar></div>
<button id=back
    dir=\"[cgi_quote_url $dir]\"
    rfile=\"[cgi_quote_url $rfile]\"
    perc=\"$keepperc\"
    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()
{
	$.get('/cgi-bin/browse/crop_progress.jim'
	    + '?perc=' + $('#back').attr('perc')
	    + '&file=' + $('#back').attr('rfile'),
	    function(data) {
		if (handle)
			$('#progressbar').reportprogress(data);
	});
}

$(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');
	handle = setInterval("update()", 1000);
	$('#output').text('Please do not interrupt...')
	    .load(document.URL + '&do=it',
	    function() {
		clearInterval(handle);
		handle = 0;
		$('#back').show();
		$('#progressbar').reportprogress(100);
	});
});

});
</script>
</div>

}