]> CyberLeo.Net >> Repos - CDN/taggery.git/blob - lib/taggery.sh
Use tmp/ for temporary file storage
[CDN/taggery.git] / lib / taggery.sh
1 [ "${taggery_name}" -a "${taggery_fmturl}" -a "${taggery_image_url_filter}" -a "${taggery_image_tags_filter}" ] || {
2   cat <<EOF
3 Taggery v0.1
4 Copyright - http://wiki.cyberleo.net/wiki/CyberLeo/COPYRIGHT?version=4
5
6 Set the following variables before sourcing this library:
7
8  taggery_name              - A string token to use when formatting things
9  taggery_fmturl            - A printf-compatible format string that will
10                              transform an ID into the URL of a 'view' page
11  taggery_image_url_filter  - A program or function that takes a webpage on
12                              stdin and provides on stdout the URL to the raw
13                              image to be downloaded.
14  taggery_image_tags_filter - A program or function that takes a webpage on
15                              stdin and provides on stdout a list of newline-
16                              delimited tags.
17
18 Examples:
19  Format URL:
20   taggery_fmturl="http://e621.net/post/show/%s"
21   taggery_fmturl="http://gelbooru.com/index.php?page=post&s=view&id=%s"
22
23  Filters:
24   e621_image_url_filter() { sed -e '...'; }
25   taggery_image_url_filter="e621_image_url_filter"
26 EOF
27   kill $$
28   exit 1
29 }
30
31 taggery_cleanup() {
32   local cleanup="$(kvs_get clean up)"
33   if [ "${cleanup}" ]
34   then
35     local id
36     for id in ${cleanup}
37     do
38       taggery_free_page "${id}"
39     done
40   fi
41   kvs_unset clean up
42 }
43 trap "taggery_cleanup" EXIT HUP INT TERM KILL
44
45 taggery_register_cleanup() {
46   [ "${1}" ] || return 1
47   local id="${1}"
48   kvs_set clean up "$(kvs_get clean up) ${id}"
49 }
50
51 taggery_init_page() {
52   [ "${1}" ] || return 1
53   local id="${1}"
54   kvs_set "${id}" tmp "$(mktemp --tmpdir ".taggery_${id}.XXXXXXXX")"
55   kvs_set "${id}" url "$(printf "${taggery_fmturl}" "${id}")"
56   taggery_register_cleanup "${id}"
57 }
58
59 taggery_free_page() {
60   [ "${1}" ] || return 1
61   local id="${1}"
62   local tmp="$(kvs_get "${id}" tmp)"
63   [ -f "${tmp}" -a "${tmp%%_*}" = ".taggery" ] && rm -f "${tmp}"
64   kvs_unset_all "${id}"
65 }
66
67 taggery_fetch() {
68   [ "${1}" ] || return 1
69   local id="${1}"
70   kvs_has_id "${id}" || taggery_init_page "${id}"
71   local url="$(kvs_get "${id}" url)"
72   local tmp="$(kvs_get "${id}" tmp)"
73   wget -qO "${tmp}" "${url}"
74 }
75
76 taggery_page() {
77   [ "${1}" ] || return 1
78   local id="${1}"
79   kvs_has_id "${id}" || taggery_init_page "${id}"
80   local tmp="$(kvs_get "${id}" tmp)"
81   [ -s "${tmp}" ] || taggery_fetch "${id}"
82   cat "${tmp}"
83 }
84
85 taggery_image_url() {
86   [ "${1}" ] || return 1
87   local id="${1}"
88   taggery_page "${id}" | "${taggery_image_url_filter}"
89 }
90
91 taggery_image_tags() {
92   [ "${1}" ] || return 1
93   local id="${1}"
94   echo "$(basename "${taggery_profile}")"
95   taggery_page "${id}" | "${taggery_image_tags_filter}"
96 }