X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;ds=sidebyside;f=pages%2Fbrowse.sh;h=be487ca3893976cd657cbd274042a1b891d70eef;hb=ddb7aec7f13135a201d99cf931d2eb88732816be;hp=95741af55f1542e952e2c9af476a27f19365fabc;hpb=5667597778145b23dc04aa65e1e9ea3ac0b7fd97;p=serve0
diff --git a/pages/browse.sh b/pages/browse.sh
index 95741af..be487ca 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" <
-
-
-
-
- ${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 <
+
+
+
+
+ ${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 ))"
+}