#!/mod/bin/jimsh package require cgi source /mod/var/mongoose/lib/setup require clipboard.class ts.class chunked start_chunked "text/html; no-cache\r\nExpires: Thu, 01 Jan 1970 00:00:00 GMT\r\nPragma: nocache" cgi_input 1 #cgi_dump set cb [[clipboard new {path "/tmp/webif-browse.cb"}] load] set action [cgi_get act list] switch $action { list { if {![$cb size]} { chunk "Clipboard is empty" break } chunk "
" foreach file [$cb get items] { set img "page_white_copy" if {[$file get action] eq "cut"} { set img "cut" } set path [$file get path] set xpath [cgi_quote_html $path] chunk "" chunk "" set dfile [file tail $path] if {[string length $dfile] > 25} { set dfile "[string range $dfile 0 22]..." } if {[file isdirectory $path]} { chunk "" } chunk [cgi_quote_html $dfile] chunk " " chunk "" } chunk "
" chunk "" } add { if {[set path [cgi_get path]] eq "0"} { puts "No path." exit } set mode [cgi_get mode copy] foreach p [split $path ","] { set p [cgi_unquote_input $p] if {![$cb present $p]} { $cb add $mode $p chunk "Added $p for $mode
" } } $cb save } remove { $cb remove [cgi_unquote_input [cgi_get path]] $cb save } clear { $cb clear $cb save } paste { set dir [cgi_unquote_input [cgi_get dir]] foreach item [$cb get items] { set path [$item get path] set file [file tail $path] set mode [$item get action] chunk "Pasting $file" chunk_pad if {[file isdirectory $path]} { # Directory if {$mode eq "cut"} { file rename $path "$dir/$file" } else { chunk [exec /mod/bin/busybox/cp -r \ $path $dir] } } else { set root [file rootname $path] # Protect special characters in root. # In particular [] characters which are used a lot # for torrent names. regsub -all {([\\["$])} $root {\\\1} root foreach f [glob -nocomplain "${root}.*"] { if {$mode eq "cut"} { file rename $f "$dir/[file tail $f]" } else { file copy $f "$dir/[file tail $f]" } } } } $cb clear $cb save } } end_chunked