123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- #!/bin/zsh -f
- # packaging, library.org
- LIBRARYFILE=~/.library/library.rec
- LIBRARYDIRECTORY=~/.library
- GIT=detect
- # help-message, /home/swflint/.library/library.org
- if [[ $# -eq 0 ]] ; then
- echo "library [ help | query query-expressions | add | emacs | git [ other-args ] | bulk-add number | report [ name | list | new name ] | edit id field [ value ] | init ]"
- exit
- fi
- function display-help {
- cat <<EOF
- library [ help | query query-expressions | add | emacs | git [ other-args ] | bulk-add number | report [ name | list | new name ] | edit id field [ value ] | init ]
- help: Display this help message.
- query: Query Library Database.
- add: Add a singular book record.
- emacs: View records in emacs.
- edit: Edit the value of a specified field in a specified record.
- git: Run a git command.
- report: Run a report.
- init: Initialize the database.
- bulk-add: Add a specified number of records.
- EOF
- }
- # help-message ends here
- # handle-reports, /home/swflint/.library/library.org
- function do-report {
- NAME=$1
- shift
- case ${NAME} in
- list)
- for report in ${LIBRARYDIRECTORY}/*.report ;
- do
- echo " - $(basename -- ${report} .report)"
- done
- ;;
- new)
- REPORT=$1
- shift
- echo "# -*- mode: sh-script -*-" > ${LIBRARYDIRECTORY}/${REPORT}.report
- emacsclient --alternate-editor="" -n ${LIBRARYDIRECTORY}/${REPORT}.report
- ;;
- *)
- if [[ -e ${LIBRARYDIRECTORY}/${NAME}.report ]] ; then
- sh ${LIBRARYDIRECTORY}/${NAME}.report $@
- fi
- esac
- }
- # handle-reports ends here
- # handle-git, /home/swflint/.library/library.org
- function do-git {
- FIRST=$1
- if [[ $FIRST == "init" ]] ; then
- OLD=`pwd`
- cd ${LIBRARYDIRECTORY}
- git $@
- cd ${OLD}
- else
- if [[ $GIT == "detect" ]] ; then
- OLD=`pwd`
- cd ${LIBRARYDIRECTORY}
- git $@
- cd ${OLD}
- fi
- fi
- }
- # handle-git ends here
- # handle-query, /home/swflint/.library/library.org
- function run-query {
- recsel -t Book $@ ${LIBRARYFILE}
- }
- # handle-query ends here
- # add-book, /home/swflint/.library/library.org
- function add-single {
- echo -n "Title: "
- read TITLE
- echo -n "Author: "
- read AUTHOR
- echo -n "LCCN: "
- read LCCN
- echo -n "Copyright: "
- read COPYRIGHT
- echo -n "Publisher: "
- read PUBLISHER
- echo -n "ISBN: "
- read ISBN
- echo -n "Location: "
- read LOCATION
- recins -t Book \
- -f Title -v "${TITLE}" \
- -f Author -v "${AUTHOR}" \
- -f LCCN -v "${LCCN}" \
- -f Copyright -v "${COPYRIGHT}" \
- -f Publisher -v "${PUBLISHER}" \
- -f ISBN -v "${ISBN}" \
- -f Location -v "${LOCATION}" \
- ${LIBRARYFILE}
- do-git add `basename ${LIBRARYFILE}`
- do-git commit -m "Added record for \"${TITLE}\""
- }
- # add-book ends here
- # add-in-bulk, /home/swflint/.library/library.org
- function bulk-add {
- GITOLD=${GIT}
- GIT=FALSE
- for i in {1..$1} ; do
- echo "Adding book number ${i}"
- add-single
- done
- GIT=${GITOLD}
- do-git add `basename ${LIBRARYFILE}`
- do-git commit -m "Added ${1} records"
- }
- # add-in-bulk ends here
- # edit-field, /home/swflint/.library/library.org
- function do-edit {
- ID=$1
- shift
- FIELD=$1
- shift
- if [[ $FIELD = "Withdrawn" ]] ; then
- recins -e "ID = ${ID}" \
- -f "Withdrawn" -v `date "%a, %d %b %Y %H:%M:%S %z"` \
- ${LIBRARYFILE}
- else
- VALUE=$1
- shift
- recins -e "ID = ${ID}" \
- -f "${FIELD}" -v "${VALUE}" \
- ${LIBRARYFILE}
- fi
- do-git add `basename ${LIBRARYFILE}`
- do-git commit -m "Edited record id ${ID}"
- }
- # edit-field ends here
- # initialize-database, /home/swflint/.library/library.org
- function initialize {
- OLD=`pwd`
- mkdir -p ${LIBRARYDIRECTORY}
- cd ${LIBRARYDIRECTORY}
- [[ -ne `basename ${LIBRARYFILE}` ]] && \
- cat <<EOF > `basename ${LIBRARYFILE}`
- # file-format, /home/swflint/.library/library.org
- # -*- mode: rec -*-
- %rec: Book
- %doc: Foo
- %key: ID
- %unique: Title
- %type: ID int
- %type: Title line
- %type: Author line
- %type: LCCN line
- %type: ISBN regexp /[0-9]*X?/
- %type: Publisher line
- %type: Copyright int
- %type: Location line
- %type: Inserted date
- %mandatory: Title Author LCCN Inserted
- %allowed: ISBN Publisher Copyright Location
- %auto: ID Inserted
- # file-format ends here
- EOF
- }
- # initialize-database ends here
- # view-in-emacs, /home/swflint/.library/library.org
- function view-in-emacs {
- emacsclient --alternate-editor="" -n ${LIBRARYFILE}
- }
- # view-in-emacs ends here
- # process-commands, /home/swflint/.library/library.org
- COMMAND=$1
- shift
- case ${COMMAND} in
- help)
- display-help
- exit
- ;;
- query)
- run-query $@
- exit
- ;;
- add)
- add-single
- exit
- ;;
- git)
- do-git $@
- exit
- ;;
- bulk-add)
- bulk-add $@
- exit
- ;;
- report)
- do-report $@
- exit
- ;;
- emacs)
- view-in-emacs
- exit
- ;;
- edit)
- do-edit $@
- exit
- ;;
- init)
- initialize
- exit
- ;;
- *)
- display-help
- exit
- esac
- # process-commands ends here
- # packaging ends here
|