X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;ds=sidebyside;f=pages%2Fbrowse.sh;h=be487ca3893976cd657cbd274042a1b891d70eef;hb=ddb7aec7f13135a201d99cf931d2eb88732816be;hp=e46023a70caf231fa22c6e6b990c272801fadebf;hpb=19b21afda273f971fa280531b1f51ea6623a7102;p=serve0
diff --git a/pages/browse.sh b/pages/browse.sh
index e46023a..be487ca 100755
--- a/pages/browse.sh
+++ b/pages/browse.sh
@@ -17,17 +17,15 @@
# 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"
-page_link="p=browse&d=$(urlsafe "$directory")&${page_link}"
-
present_filter(){
printf %s\\n "$*" \
| sed -r 's;(^|!|\^|\|)([^!\^\|:]+:);\1;g;s;\^;\n;g' \
@@ -57,9 +55,9 @@ category_selected(){
_printVideo(){
name="$1"
- video="${treeroot%/}/${directory%/}/${name}"
- thumb="${treeroot%/}/${directory%/}/.index/${name}.jpg"
- meta="${treeroot%/}/${directory%/}/.index/${name}.meta"
+ 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"
@@ -92,14 +90,6 @@ _printVideo(){
VIDEOend
}
-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() {
cachebase="?o=${order}&s=${search//\//}&f=${filter//\//}"
cache="${_DATA}/cache/${cachebase}"
@@ -133,16 +123,56 @@ selectionlist() {
}
filelist(){
- dir="${treeroot%/}/${directory#/}"
-
- find -L "$dir" -mindepth 1 -maxdepth 1 -type d \! -name ".index" -printf "directory %P\n" \
- | sort
- find -L "$dir" -mindepth 1 -maxdepth 1 \! -type d -printf "video %P\n" \
- | grep -iE "$file_pattern" \
- | sort
- find -L "$dir" -mindepth 1 -maxdepth 1 \! -type d -printf "plain %P\n" \
- | grep -viE "$file_pattern" \
- | sort
+ dir="${treeroot%/}${directory%/}"
+
+ 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
}
thumblist(){
@@ -156,15 +186,15 @@ thumblist(){
case $type in
directory)
printf '%s\n' \
- "$(urlsafe "${directory%/}/$name")" "$(htmlsafe "$name")"
+ "$(urlsafe "${directory%/}/${name##*/}")" "$(htmlsafe "${name##*/}")"
;;
video)
- $indexed && _printVideo "$name" \
+ $indexed && _printVideo "${name##*/}" \
|| printf '%s\n' \
- "$(urlsafe "${directory%/}/$name")" "$(htmlsafe "$name")"
+ "$(urlsafe "${directory%/}/${name##*/}")" "$(htmlsafe "${name##*/}")"
;;
plain)
- printf '%s\n' "$(htmlsafe "$name")"
+ printf '%s\n' "$(htmlsafe "${name##*/}")"
;;
esac
done