package diskusage class DiskUsageBehaviour( var form : DiskUsageForm ) : TableBehaviour("du ${form.folder.value.name}", Context( Context.FOLDER, form.folder.value )), Promptable { var includeFiles = false val contextType = Context.FOLDER init { columns = listOf( TableColumn("Size",150), TableColumn("") ) description = form.folder.value.path } override meth attached( container : Container ) { super.attached( container ) val allArgument = if (includeFiles) "-all" else "" val folder = form.folder.value val maxEntries = form.maxEntries.value val apparentSize = if (form.apparentSize.value) "--apparent-size" else "" val command = $( du ${allArgument} ${apparentSize} --block-size 1 --one-file-system '${folder}' ) | $( sort -n -r ) | $( head -n ${maxEntries+1} ) DiskUsageWorker( this ).apply { maxLines = form.maxEntries.value start( command ) } } override meth promptForm() = form } class DiskUsageWorker( val behaviour : DiskUsageBehaviour ) : TableCommandWorker( "du-${behaviour.form.folder.value.name}", ".txt", behaviour ) { override meth createTableRow(line: String) : TableRow { val parts = line.split( "\t" ) if (parts.size() > 1) { val size = parts[0].toLong() val fileOrFolder = File( parts[1] ) return DiskUsageRow( size.toHumanBytes(), fileOrFolder ) } return null } }