name="$(meta_name "$file")"
if [ -d "${meta%/meta}" ] && LOCK "$meta"; then
- grep -vF " ${name}" "$meta" >"$meta.tmp"
+ grep -avF " ${name}" "$meta" >"$meta.tmp"
meta_line "$file" \
| tee -a "$meta.tmp"
mv "$meta.tmp" "$meta"
fi
}
+meta_purge(){
+ local file meta name
+ file="$1"
+ meta="${file%/*}/.index/meta"
+ name="$(meta_name "$file")"
+
+ if [ -d "${meta%/meta}" ] && LOCK "$meta"; then
+ grep -avF " ${name}" "$meta" >"$meta.tmp"
+ grep -aF " ${name}" "$meta" >>"$meta.trash"
+ mv "$meta.tmp" "$meta"
+ RELEASE "$meta"
+ fi
+}
+
meta_info(){
local file meta
file="$1"
if [ -d "$_DATA/$ITEM/$1" ]; then
printf '[a .list .dir href="%s" %s]' "${path}?${qry}" "$name"
- else
+ elif [ -f "$_DATA/$ITEM/$1" ]; then
read -r length width height tags comment n <<-EOF
$(meta_info "$_DATA/$ITEM/$1")
EOF
"$width" "$height" \
"$(UNSTRING "${tags#tags=}" |tr , '\0' |xargs -r0 printf ' [span .tag %s]')" \
"$path" "$path" "$path"
+ else
+ printf 'Canning record for nonexist file: %s\n' "$1" >&2
+ meta_purge "$_DATA/$ITEM/$1"
fi
}
| tail -n1
)"
+list_fullname(){
+ sn="$1"
+ [ ! "${sn%%*/*}" ] && base="${sn%/*}" || base=.
+ file="$(printf '%s' "$_DATA/$ITEM/$sn".*)"
+ file="${file##*/}"
+ [ -e "$_DATA/$ITEM/$base/${file}" ] \
+ && printf '%s\n' "${base}/${file}"
+}
+
list_filemeta(){
local meta base f fn file
base="$1"
grep -viE "$(STRING "${SEARCH#!}")"
else
grep -iE "$(STRING "${SEARCH}")"
- fi |cut -f6 \
- | UNSTRING \
+ fi |cut -f6 | UNSTRING \
| while read -r fn; do
- file="$(printf '%s' "$_DATA/$ITEM/$base/${fn%${CR}}".*)"
- file="${file##*/}"
- [ -e "$_DATA/$ITEM/$base/${file}" ] \
- && printf '%s\n' "${base}/${file}"
+ printf '%s\n' "${base}/${fn%${CR}}"
done
}
done
}
+list_dateorder(){
+ while read -r sn; do
+ list_fullname "$sn"
+ done \
+ | xargs -rd'\n' stat -c '%Y %n' \
+ | sort -rn |cut -d/ -f2- \
+ | sed -r 's;\.[^\.]*$;;;'
+}
+
list_items() {
local mode
mode="$(COOKIE mode |grep -m1 -xE 'index|browse' || printf browse )"
if [ "$mode" = browse -a "$ORDER" = Date ]; then
list_directories
- list_filemeta . \
- | xargs -rd'\n' stat -c '%Y %n' \
- | sort -rn |cut -d/ -f2-
+ list_filemeta . |list_dateorder
+ elif [ "$mode" = index -a "$ORDER" = Date ]; then
+ list_index |list_dateorder
elif [ "$mode" = browse ]; then
list_directories
list_filemeta .
- elif [ "$mode" = index -a "$ORDER" = Date ]; then
- list_index \
- | xargs -rd'\n' stat -c '%Y %n' \
- | sort -rn | cut -d/ -f2-
elif [ "$mode" = index ]; then
list_index
fi
printf '[div .itemlist '
while read -r i; do
[ $c -ge $page -a $c -lt $end ] \
- && list_item "$i"
+ && list_item "$(list_fullname "$i")"
c=$((c + 1))
done
printf ']'
printf '[div .pagination'
for n in $( seq 1 $((c / LISTSIZE + 1)) ); do
printf '[a .page href="%s" %s]' \
- "?p=$(( (n - 1) * LISTSIZE + 1))" "$n"
+ "?p=$(( (n - 1) * LISTSIZE + 1))&$qry" "$n"
done
printf ']'
}