commit 428db1df8fb9b5444f05b64a1706ce3a7ebc2b7b
parent 82ff8d9a5ac82cd42661d7ef0b8ffd4256f94713
Author: Andrew Kloet <andrew@kloet.net>
Date: Thu, 17 Sep 2026 22:53:38 -0400
tagpic: add meta for img to tag links
Diffstat:
| M | tagpic | | | 46 | ++++++++++++++++++++++++++++++++++------------ |
1 file changed, 34 insertions(+), 12 deletions(-)
diff --git a/tagpic b/tagpic
@@ -15,7 +15,6 @@
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
set -e # errexit
-set -u # nounset
IMGDIR="${TAGPIC_IMGDIR:-$HOME/imgdir}"
@@ -26,6 +25,7 @@ usage()
echo " i, insert <path/to/file> [tag1 tag2 ...]" >&2
echo " d, delete <filename>" >&2
echo " m, modify [-a|--append] <filename> [tag1 tag2 ...]" >&2
+ echo " l, lookup <filename>" >&2
exit 1
}
@@ -36,17 +36,17 @@ assert_file_exists()
delete_symlinks()
{
- for _tag_dir in "$IMGDIR"/*; do
- [ -d "$_tag_dir" ] || continue
- case "$_tag_dir" in
- */all) continue ;;
- esac
-
- _symlink="$_tag_dir/$1"
- if [ -L "$_symlink" ]; then
- rm -f "$_symlink"
- fi
- done
+ _filename="$1"
+ _meta_dir="$IMGDIR/meta/$_filename"
+
+ if [ -d "$_meta_dir" ]; then
+ for _tag_link in "$_meta_dir"/*; do
+ [ -L "$_tag_link" ] || continue
+ _tag="${_tag_link##*/}"
+ rm -f "$IMGDIR/$_tag/$_filename"
+ done
+ rm -rf "$_meta_dir"
+ fi
}
cmd_insert()
@@ -64,10 +64,12 @@ cmd_insert()
_filename="${_unixtime}.${_ext}"
cp "$_filepath" "$IMGDIR/all/$_filename"
+ mkdir -p "$IMGDIR/meta/$_filename"
for _tag do
mkdir -p "$IMGDIR/$_tag"
ln -s "../all/$_filename" "$IMGDIR/$_tag/$_filename"
+ ln -s "$IMGDIR/$_tag" "$IMGDIR/meta/$_filename/$_tag"
done
}
@@ -98,15 +100,35 @@ cmd_modify()
assert_file_exists "$IMGDIR/all/$_filename"
[ "$_append" -eq 0 ] && delete_symlinks "$_filename"
+ mkdir -p "$IMGDIR/meta/$_filename"
+
for _tag do
mkdir -p "$IMGDIR/$_tag"
ln -s "../all/$_filename" "$IMGDIR/$_tag/$_filename"
+ ln -s "$IMGDIR/$_tag" "$IMGDIR/meta/$_filename/$_tag"
done
}
+cmd_lookup()
+{
+ [ "$#" -ne 1 ] && usage
+ _filename="$1"
+
+ assert_file_exists "$IMGDIR/all/$_filename"
+
+ _meta_dir="$IMGDIR/meta/$_filename"
+ if [ -d "$_meta_dir" ]; then
+ for _tag_link in "$_meta_dir"/*; do
+ [ -L "$_tag_link" ] || continue
+ printf '%s\n' "${_tag_link##*/}"
+ done
+ fi
+}
+
case "$1" in
i|insert) shift; cmd_insert "$@" ;;
d|delete) shift; cmd_delete "$@" ;;
m|modify) shift; cmd_modify "$@" ;;
+ l|lookup) shift; cmd_lookup "$@" ;;
*) usage ;;
esac