#!/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"} {
chunk "No path."
exit
}
set dir [cgi_unquote_input [cgi_get dir]]
set mode [cgi_get mode copy]
foreach p $path {
set p [cgi_unquote_input $p]
if {$dir ne "0" && ![string match "$dir/*" $p]} {
chunk "$p not in directory
"
continue
}
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