#!/mod/bin/jimsh

source /mod/webif/lib/setup
require system.class ts.class

proc do_shrink {ts} {
	if {[$ts flag "Shrunk"]} { return }

	set file [file rootname [$ts get file]]

	if {[$ts inuse]} { return }

	if {[catch {
		set perc [exec /mod/bin/stripts -aq $file]
	    } msg]} {
		return
	}

	if {[string match {*%} $perc]} {
		set perc [string range $perc 0 end-1]
	} else {
		set perc 0
	}

	if {$perc == 0} {
		puts "  Flagging $file as shrunk..."
		$ts set_shrunk
	}
}

proc entries {dir callback} {
	foreach entry [readdir -nocomplain $dir] {
		if {![string match {*.ts} $entry} continue
		if {[catch {set ts [ts fetch "$dir/$entry"]}]} continue
		if {$ts == 0} continue
		$callback $ts
	}
}

proc scan {dir} {
	puts "Scanning $dir..."
	file stat "$dir/" st
	if {$st(dev) != $::rootdev} { return }

	entries $dir do_shrink

	foreach entry [readdir -nocomplain $dir] {
		if {[file isdirectory "$dir/$entry"]} {
			scan "$dir/$entry"
		}
	}
}

set root [system mediaroot]
file stat "$root/" rootstat
set rootdev $rootstat(dev)

scan $root

