- [ "$mode" = browse -a "$ITEM" ] && printf '..\n'
- if [ "$mode" = browse ]; then
- [ -d "$_DATA/$ITEM/.index" -a \! "$_DATA/$ITEM" -ot "$_DATA/$ITEM/.index/meta" ] \
- && dir="$_DATA/$ITEM" . "$_EXEC/update_meta.sh"
- (cd "$_DATA/$ITEM";
- find ./ -type d \! -name .index -mindepth 1 -maxdepth 1 \
- -exec stat -c '%Y %n' '{}' +
- find ./ -type f -mindepth 1 -maxdepth 1 \
- -exec stat -c '%Y %n' '{}' +
- )
- elif [ "$mode" = index ]; then
- find "$_DATA/$ITEM" -type d -name .index \
- | while d="$(line)"; do
- [ ! "${d%/.index}" -ot "$d/meta" ] \
- && dir="${d%/.index}" . "$_EXEC/update_meta.sh"
+list_browse(){
+ meta="$_DATA/$ITEM/.index/meta"
+ meta_dir "$_DATA/$ITEM"
+ (cd "$_DATA/$ITEM";
+ find ./ -type d \! -name .index -mindepth 1 -maxdepth 1 \
+ ) | cut -d/ -f2- | sort
+ sort -n "$meta" | cut -f6- \
+ | while f="$(line)"; do
+ fn="$(UNSTRING "${f#* }")"; fn="${fn%${CR}}";
+ file="$(printf '%s\n' "$_DATA/$ITEM/${fn}".*)"
+ file="${file##*/}"
+ [ -e "$_DATA/$ITEM/$base/${file}" ] \
+ && printf '%s\n' "${file}"
+ done
+}
+
+list_index(){
+ (cd "$_DATA/$ITEM";
+ find ./ -path '*/.index/meta'
+ ) | while meta="$(line)"; do
+ base="${meta%/.index/meta}"
+ meta_dir "$_DATA/$ITEM/$base"
+ cut -f1,6- <"$_DATA/$ITEM/$meta" \
+ | while f="$(line)"; do
+ fn="$(UNSTRING "${f#* }")"; fn="${fn%${CR}}";
+ file="$(printf '%s\n' "$_DATA/$ITEM/$base/${fn}".*)"
+ file="${file##*/}"
+ [ -e "$_DATA/$ITEM/$base/${file}" ] \
+ && printf '%s %s\n' "${f%% *}" "${base}/${file}"