X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=pages%2Fbrowse.sh;h=faf4e67a20977521290d3cf82d96d2ff58bdcf84;hb=d716f2ce1fe64cf87f777490315bc51906001c72;hp=95741af55f1542e952e2c9af476a27f19365fabc;hpb=5667597778145b23dc04aa65e1e9ea3ac0b7fd97;p=serve0 diff --git a/pages/browse.sh b/pages/browse.sh index 95741af..faf4e67 100755 --- a/pages/browse.sh +++ b/pages/browse.sh @@ -17,12 +17,12 @@ # You should have received a copy of the GNU Affero General Public License # along with Serve0. If not, see . +directory="$(invalidate "${_GET[d]}" '(.*/)?\.\.(/.*)?|' /)" +page_link="p=browse&d=$(urlsafe "$directory")&" + . $_EXEC/pages/common.sh -LF=' -' -directory="$(invalidate "${_GET[d]}" '(.*/)?\.\.(/.*)?|' /)" -[ -d "${treeroot}/${directory#/}/.index" ] && indexed=true || indexed=false +[ -d "${treeroot%/}${directory%/}/.index" ] && indexed=true || indexed=false filters="${_GET[f]}" debug "FILTERS: $filters" @@ -53,55 +53,41 @@ category_selected(){ } _printVideo(){ - info="$1" - cache="${info%/*}/.index/${info##*/}.cache" - meta="${info%/*}/.index/${info##*/}.meta" - - if [ "$cache" -ont "$meta" ]; then - cat "$cache" - else - videofile="$info" - thumb="${info%/*}/.index/${info##*/}.jpg" - [ -f "$thumb" ] || genthumb "$videofile" "$thumb" - [ -f "$meta" ] || genmeta "$videofile" "$meta" - - { read -r length width height filename - read -r tags - } <"$meta" - length=$(validate "$length" '[0-9]+' 0) - width=$(validate "$width" '[0-9]+' 0) - height=$(validate "$height" '[0-9]+' 0) - - video="$(urlsafe "$info")" - thumb="$(urlsafe "$directory/.index/${info##*/}.jpg")" - linkinfo="$(urlsafe "${directory%/}/${info##*/}")" - htmlinfo="$(htmlsafe "${info##*/}")" - attrinfo="$(attribsafe "$info")" - - minutes="$(printf "%d:%02d" $(($length / 60)) $(($length % 60)) )" - - tee "$cache" < - -

${htmlinfo}

- - - ${minutes}min - ${width}x${height} - $(printf %s "$tags" |sed -r 's:\|*([^|]+)\|*: \1:g') - + name="$1" + + video="${treeroot%/}${directory%/}/${name}" + thumb="${treeroot%/}${directory%/}/.index/${name}.jpg" + meta="${treeroot%/}${directory%/}/.index/${name}.meta" + + [ -f "$thumb" ] || genthumb "$video" "$thumb" + [ -f "$meta" ] || genmeta "$video" "$meta" + + { read -r length width height filename + read -r tags + } <"$meta" + read length width height <<-EOF + $(validate "$length $width $height" '[0-9]+ [0-9]+ [0-9]+' "0 0 0") + EOF + + location="$(attribsafe "${directory%/}/${name}")" + thumblocation="$(attribsafe "${directory%/}/.index/${name}.jpg")" + display="$(htmlsafe "$name")" + + minutes="$(printf "%d:%02d" $(($length / 60)) $(($length % 60)) )" + + cat < + +

${display}

+ + + ${minutes}min + ${width}x${height} + $(printf %s "$tags" |sed -r 's:\|*([^|]+)\|*: \1:g') + VIDEOend - fi -} - -genlist(){ - case "$order" in - Date) find "${_DATA}"/videos/ -maxdepth 1 -mindepth 1 -printf '%T@ %f\n' |sort -r |cut -d\ -f2- |egrep -i "$file_pattern";; - Length) sed -sn 1p "${_DATA}"/meta/*.meta |sort -n |sed -r 's;^[0-9\t]+\t;;';; - Name) find "${_DATA}"/videos/ -maxdepth 1 -mindepth 1 -printf '%f\n' |sort |egrep -i "$file_pattern";; - esac } selectionlist() { @@ -136,47 +122,84 @@ selectionlist() { fi } -thumblist() { - selectionlist \ - | sed -n "$page,$(($page + $pagesize - 1))p" \ - | while read line; do - _printVideo "$line" - done -} +filelist(){ + dir="${treeroot%/}${directory%/}" -pagecount() { - printf "$(( $(selectionlist | wc -l) / $pagesize + 1 ))" + case "$order" in + Name) + find -L "$dir" -mindepth 1 -maxdepth 1 -type d \! -name ".index" -print0 \ + | sort -fz \ + | xargs -0 printf 'directory %s\n' + + find -L "$dir" -mindepth 1 -maxdepth 1 \! -type d -print0 \ + | grep -ziE "$file_pattern" \ + | sort -fz \ + | xargs -0 printf 'video %s\n' + + find -L "$dir" -mindepth 1 -maxdepth 1 \! -type d -print0 \ + | grep -zviE "$file_pattern" \ + | sort -fz \ + | xargs -0 printf 'plain %s\n' + ;; + Date) + find -L "$dir" -mindepth 1 -maxdepth 1 -type d \! -name ".index" -print0 \ + | xargs -0 stat -c '%Z directory %n' \ + | sort -r |cut -c12- + + find -L "$dir" -mindepth 1 -maxdepth 1 \! -type d -print0 \ + | grep -ziE "$file_pattern" \ + | xargs -0 stat -c '%Y video %n' \ + | sort -r |cut -c12- + + find -L "$dir" -mindepth 1 -maxdepth 1 \! -type d -print0 \ + | grep -zviE "$file_pattern" \ + | xargs -0 stat -c '%Y plain %n' \ + | sort -r |cut -c12- + ;; + Length) + find -L "$dir" -mindepth 1 -maxdepth 1 -type d \! -name ".index" -print0 \ + | sort -z \ + | xargs -0 printf 'directory %s\n' + + head -qn1 "${dir}"/.index/*.meta \ + | sort \ + | cut -f4- \ + | tr \\n \\0 \ + | xargs -0 printf 'video %s\n' + + find -L "$dir" -mindepth 1 -maxdepth 1 \! -type d -print0 \ + | grep -zviE "$file_pattern" \ + | sort -z \ + | xargs -0 printf 'plain %s\n' + ;; + esac } -filelist(){ +thumblist(){ debug "Filelist with dir = $directory" [ -n "${directory#/}" ] && printf %s ".." - find -L "${treeroot%/}/${directory#/}" -mindepth 1 -maxdepth 1 -type d \ - | grep -v '.index' \ - | sort \ - | while read dir; do - name="${dir##*/}" - printf %s "$(htmlsafe "$name")" - done - - find -L "${treeroot%/}/${directory#/}" -mindepth 1 -maxdepth 1 -type f \ - | grep -E "$file_pattern" \ - | sort \ - | while read -r file; do - name="${file##*/}" - $indexed && _printVideo "$file" \ - || printf '%s' \ - "$(urlsafe "${directory%/}/$name")" "$(htmlsafe "$name")" - done - - find -L "${treeroot%/}/${directory#/}" -mindepth 1 -maxdepth 1 -type f \ - | grep -vE "$file_pattern" \ - | sort \ - | while read -r file; do - name="${file##*/}" - printf '%s' "$(htmlsafe "$name")" + filelist \ + | sed -n "$page,$(($page + $pagesize - 1))p" \ + | while read -r type name; do + case $type in + directory) + printf '%s\n' \ + "$(urlsafe "${directory%/}/${name##*/}")" "$(htmlsafe "${name##*/}")" + ;; + video) + $indexed && _printVideo "${name##*/}" \ + || printf '%s\n' \ + "$(urlsafe "${directory%/}/${name##*/}")" "$(htmlsafe "${name##*/}")" + ;; + plain) + printf '%s\n' "$(htmlsafe "${name##*/}")" + ;; + esac done } +pagecount() { + printf "$(( $(filelist | wc -l) / $pagesize + 1 ))" +}