X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=db_meta.sh;h=572ebbd30b4bfc0411b736dc5cffd395dc797852;hb=refs%2Fheads%2Fmaster;hp=9f427fc65b38c3b554ca20c0d61ece87181b55af;hpb=ccc8de4ebdd18fb52cdb8ce2013573d079186fba;p=serve0 diff --git a/db_meta.sh b/db_meta.sh index 9f427fc..572ebbd 100755 --- a/db_meta.sh +++ b/db_meta.sh @@ -28,15 +28,15 @@ read_meta() { # Global exports META_LENGTH='' META_WIDTH='' META_HEIGHT='' META_TAGS='' - META_COMMENT='' META_NAME='' META_GROUP='' + META_COMMENT='' META_NAME='' META_GROUP='' META_GROUPORDER='' if [ $# -eq 0 ]; then read -r META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT \ - META_NAME META_GROUP + META_NAME META_GROUP META_GROUPORDER elif [ "$name" -a -f "$meta_db" -a -r "$meta_db" ]; then read -r META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT \ - META_NAME META_GROUP <<-EOF - $(grep -F " ${name}${CR}" "$meta_db") + META_NAME META_GROUP META_GROUPORDER <<-EOF + $(grep -F " ${name}${CR}" "$meta_db" |dbmeta_autogroup) EOF fi if [ "$META_NAME" ]; then @@ -155,10 +155,54 @@ list_meta(){ pfx="$(STRING "${pfx#/}")" [ "$pfx" = '\' ] && pfx='' || pfx="${pfx}/" - while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME GROUP; do - printf '%i %i %i tags=%s comment=%s %s%s\r %s\n' \ - $LENGTH $WIDTH $HEIGHT "${TAGS#tags=}" \ - "${COMMENT#comment=}" "${pfx}" "${NAME%${CR}}" "${GROUP:-\\}" - done <"$meta" + { printf '%s\n' "$pfx" + dbmeta_autogroup "$meta" + } | sed -E ' + 1{ h; d; } + G; + s;^([^\t]+ [^\t]+ [^\t]+ [^\t]+ [^\t]+ )([^\n]+)\n(.*)$;\1\3\2; + ' done } + +dbmeta_autogroup(){ + sed -E ' + # strip empty group field + s;\r \\$;\r;; + h; # save original dataset + + # strip common suffixes of web video sites + s;-([0-9a-zA-Z_-]{11}|ph[0-9a-f]{13}|xh[0-9a-zA-Z]{5}|[0-9]{6,})\r;-\r;; + + # perform auto grouping if group id is missing or empty + /\r$/bAUTOGROUP; + + # only perform ordering if manual group id is present + /\r .+$/bAUTOORDER; + + b; # pass invalid records without processing + + :AUTOORDER + # strip all fields but the name + s;^([^\t]+ [^\t]+ [^\t]+ [^\t]+ [^\t]+ )([^\r]+)\r (.+)$;\2; + + # reduce to numerals + s;[^0-9]+;;g; + + # append ordering field to dataset + H; g; s;\n;\t;; + b; + + :AUTOGROUP + # strip all fields but the name + s;^[^\t]+ [^\t]+ [^\t]+ [^\t]+ [^\t]+ ;; + + # replace all numeric parts and append numerals to an ordering field + # the group id will be made up of only the non-numeric character frame + # the ordering field will hold all numbers from the name + :X s;^([^0-9]*)([0-9]+)([^\r]*)\r\t?([0-9]*)$;\1\r\3\r \4\2;; tX; + + # append group id and ordering field to dataset + H; g; s;\n;\t;; + ' "$@" +}