Mercurial > ec-dotfiles
annotate moefetch.sh @ 218:aeca29670e26
broken!
author | edhoprima@gmail.com <edhoprima@gmail.com> |
---|---|
date | Thu, 02 Jul 2009 20:28:21 +0000 |
parents | 77cd21d714f6 |
children | c4568fed66ba |
rev | line source |
---|---|
148 | 1 #!/bin/sh |
2 | |
3 # Copyright (c) 2009, edogawaconan <me@myconan.net> | |
4 # | |
5 # Permission to use, copy, modify, and/or distribute this software for any | |
6 # purpose with or without fee is hereby granted, provided that the above | |
7 # copyright notice and this permission notice appear in all copies. | |
8 # | |
9 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
12 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
15 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
159 | 16 # |
17 # Lots of bugs here. Use with care | |
148 | 18 # USE WITH CARE |
159 | 19 # |
20 # what it does: fetch every picture that has the specified TAGS. | |
148 | 21 # requirement: wget, libxslt, md5sum (or md5) |
22 | |
159 | 23 # program additional paths for: cut, sed, wc, MD5(sum), wget, xsltproc, grep |
24 ADDITIONAL_PATH= | |
148 | 25 |
159 | 26 # custom md5 path with arguments, expected output: <32digit md5><space(s)><filename> |
27 # Leave empty for "md5sum" (Linux, Solaris), "md5 -r" (*BSD) | |
28 MD5= | |
148 | 29 |
159 | 30 # default server address. Danbooru only! I do not take responsibility of stupidity. |
31 DEFAULT_SITE="moe.imouto.org" | |
148 | 32 |
33 # base directory. make sure it's writeable. I do not take responsibility if you don't own the folder and files as no check is done for this one. | |
159 | 34 # Structure is ${BASE_DIR}/<TAGS> |
35 # Absolute path only. | |
36 # Leave empty to use whatever folder you're running this at | |
193 | 37 BASE_DIR= |
148 | 38 |
39 # not user modifiable from here | |
40 | |
193 | 41 ### TODO: |
211 | 42 ### - sanity validator(?) |
193 | 43 ### - unified repository to save bandwidth |
44 ### - bug stomping | |
45 ### - sanity checking | |
46 ### WILL BE FOR 0.3 | |
47 | |
159 | 48 # useless welcome message. Also version |
49 Msg_Welcome() { | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
50 MOEFETCHVERSION="0.3-beta1" |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
51 echo "moefetch ${MOEFETCHVERSION} |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
52 Copyright (c) 2009 edogawaconan <me@myconan.net> |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
53 " |
159 | 54 } |
55 | |
56 # fatal error handler | |
57 Err_Fatal() { | |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
58 echo " |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
59 Fatal error: ${1}" |
159 | 60 exit 1 |
61 } | |
62 | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
63 Err_Impossible() { |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
64 echo " |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
65 Impossible error. Or you modified content of the working directories when the script is running. |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
66 Please report to moefetch.googlecode.com if you see this message (complete with entire run log)" |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
67 exit 1 |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
68 } |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
69 |
159 | 70 # help message |
71 Err_Help() { | |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
72 echo "moefetch.sh COMMAND [-s SITE_URL] TAGS |
174
0948e76a57a1
added help. Bump to 0.1-beta2
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
173
diff
changeset
|
73 |
176
3d2ae9417273
even more improvement
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
175
diff
changeset
|
74 COMMAND: |
3d2ae9417273
even more improvement
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
175
diff
changeset
|
75 (quick)fetch: do a complete update. Add prefix quick to skip file checking |
3d2ae9417273
even more improvement
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
175
diff
changeset
|
76 check: get list of new files, clean up local folder and print total new files |
175
5b7a154dbd21
cosmetics fix for help message
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
174
diff
changeset
|
77 |
177 | 78 -s SITE_URL: Specify URL of the Danbooru powered site you want to leech from. Default is ${DEFAULT_SITE} |
175
5b7a154dbd21
cosmetics fix for help message
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
174
diff
changeset
|
79 |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
80 TAGS: Tags you want to download. Separated by spaces. Tag name follows standard Danbooru tagging scheme" |
193 | 81 exit 2 |
159 | 82 } |
83 | |
84 # generate link by transforming xml | |
85 Generate_Link() { | |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
86 echo " |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
87 Fetching XML file" |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
88 tempnum=1000 |
213
dd95cf01602c
working around limit
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
212
diff
changeset
|
89 _i=1 |
195
652d9e268cee
test migration to printf
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
194
diff
changeset
|
90 > "${TEMP_PREFIX}-list" |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
91 while [ "${tempnum}" -ge 1000 ]; do |
213
dd95cf01602c
working around limit
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
212
diff
changeset
|
92 wget "http://${SITE}/post/index.xml?tags=${TAGS}&offset=0&limit=1000&page=${_i}" -O "${TEMP_PREFIX}-xml" -e continue=off |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
93 printf "Processing XML file... " |
213
dd95cf01602c
working around limit
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
212
diff
changeset
|
94 # xslt evilry |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
95 xsltproc - "${TEMP_PREFIX}-xml" <<EOF | sed 's/.*\(http.*\)\(\/[a-f0-9]\{32\}\).*\.\([^\.]*\)/\1\2.\3/g' | grep ^http > "${TEMP_PREFIX}-templist" |
148 | 96 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> |
97 <xsl:output method="xml" indent="yes"/> | |
98 <xsl:template match="post"> | |
99 <xsl:value-of select="@file_url" /> | |
100 </xsl:template> | |
101 </xsl:stylesheet> | |
102 EOF | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
103 tempnum=$(echo $(wc -l < "${TEMP_PREFIX}-templist")) |
213
dd95cf01602c
working around limit
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
212
diff
changeset
|
104 _i=$((_i+1)) |
dd95cf01602c
working around limit
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
212
diff
changeset
|
105 cat "${TEMP_PREFIX}-templist" >> "${TEMP_PREFIX}-list" |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
106 echo "${tempnum} file(s) available" |
213
dd95cf01602c
working around limit
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
212
diff
changeset
|
107 done |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
108 numfiles=$(echo $(wc -l < "${TEMP_PREFIX}-list")) |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
109 echo "${numfiles} file(s) available on server" |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
110 [ "${numfiles}" -gt 0 ] || Err_Fatal "Error in processing list or no files can be found with specified tag(s) or site." |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
111 } |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
112 |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
113 Is_NotMD5() { |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
114 echo "${*}" | sed -e 's/\([0-9a-f]\{32\}\..*\)//g' |
148 | 115 } |
116 | |
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
117 Progress_Init() { |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
118 _last="-" |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
119 printf "${_last}" |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
120 } |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
121 |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
122 Progress_Anim() { |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
123 case "${_last}" in |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
124 /) _last="-";; |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
125 -) _last=\\;; |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
126 \\) _last=\|;; |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
127 \|) _last="/";; |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
128 esac |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
129 printf "\b${_last}" |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
130 } |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
131 |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
132 Progress_Done() { printf "\bdone\n"; } |
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
133 |
200 | 134 # getting rid of ls (as per suggestion) |
135 Count_Files() { | |
136 _i=0 | |
137 for _f in "${*}/"* "${*}/".*; do | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
138 if test "${_f}" != "${*}/"'*' || test -e "${_f}"; then |
200 | 139 _i=$((_i + 1)) |
140 fi | |
141 done | |
142 echo $((_i - 2)) | |
143 } | |
144 | |
159 | 145 # check tools availability |
146 Check_Tools() { | |
147 # verify all programs required do indeed exist | |
148 #MD5 | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
149 if test -z "${MD5}"; then |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
150 case "$(uname)" in |
159 | 151 *BSD) MD5="md5 -r";; |
152 Linux|SunOS) MD5="md5sum";; | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
153 *) Fatal_Err "No known md5 tool for this platform. Please specify manually";; |
159 | 154 esac |
155 fi | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
156 md5_command=$(echo ${MD5} | cut -d' ' -f1) |
159 | 157 # basic tools |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
158 commands="cut sed wc wget xsltproc xargs rm mkdir chown comm grep date ${md5_command}" |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
159 for cmd in ${commands} |
159 | 160 do |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
161 [ "$(command -v "${cmd}")" ] || Err_Fatal "${cmd} doesn't exist in ${PATH}" |
159 | 162 done |
163 } | |
164 | |
165 # verify required folders exist and writeable | |
166 Check_Folders(){ | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
167 test -O "${BASE_DIR}" || Err_Fatal "You don't own ${BASE_DIR}. Please fix ${BASE_DIR} or run this script in your own directory." |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
168 for directory in temp trash deleted "${SITE_DIR}/${TARGET_DIR}"; do |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
169 if [ ! -d "${BASE_DIR}/${directory}" ]; then |
216
a869987c4646
did I say 'mess up'?
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
215
diff
changeset
|
170 mkdir -p "${BASE_DIR}/${directory}" || Err_Impossible |
159 | 171 fi |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
172 if [ ! -O "${BASE_DIR}/${directory}" ]; then |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
173 echo "You don't own the ${BASE_DIR}/${directory}, applying globally writeable permission on it" |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
174 chmod -R u=rwX,g=rwX,o=rwX "${BASE_DIR}/${directory}" || Err_Impossible |
159 | 175 fi |
176 done | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
177 test "$(Count_Files "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}")" -eq 0 && ISNEW=1 |
201
30d2fb656029
scrapping grep -vf
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
200
diff
changeset
|
178 for i in error ok list newlist templist; do |
196 | 179 touch "${TEMP_PREFIX}-${i}" || Fatal_Err "Error creating ${TEMP_PREFIX}-${i}. This shouldn't happen" |
159 | 180 done |
181 # | |
182 } | |
183 | |
187
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
184 # Do some cleanup |
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
185 Cleanup_Repository() { |
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
186 # current dir: ${BASE_DIR}/${SITE_DIR}/${TARGET_DIR} |
207
17d816a63b4c
final progress version
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
206
diff
changeset
|
187 printf "Cleaning up repository folder... " |
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
188 Progress_Init |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
189 trash_dir="${BASE_DIR}/trash/${trash_dir}/$(date -u "+${SITE_DIR}-${TARGET_DIR}-%Y%m%d-%H.%M")" |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
190 trashes="These files have been moved to ${trash_dir}:" |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
191 has_trash= |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
192 if test ! -d "${trash_dir}"; then |
216
a869987c4646
did I say 'mess up'?
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
215
diff
changeset
|
193 mkdir -p "${trash_dir}" || Err_Impossible |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
194 else |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
195 if test ! -o "${trash_dir}"; then |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
196 chmod -R u=rwX,g=rwX,o=rwX "${BASE_DIR}/${directory}" || Err_Impossible |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
197 fi |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
198 fi |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
199 for trash in "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/"* |
187
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
200 do |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
201 is_trash= |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
202 if test -d "${trash}" || test -n "$(Is_NotMD5 "$(basename "${trash}")")" || test -n "$(grep "$(basename "${trash}")" "${TEMP_PREFIX}-list")"; then |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
203 is_trash=1 |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
204 has_trash=1 |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
205 mv -f "${trash}" "${trash_dir}" || Err_Impossible |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
206 trashes="${trashes} |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
207 $(basename "${trash}")" |
187
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
208 fi |
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
209 Progress_Anim |
187
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
210 done |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
211 rmdir "${trash_dir}" 2>/dev/null |
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
212 Progress_Done |
216
a869987c4646
did I say 'mess up'?
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
215
diff
changeset
|
213 test -z "${has_trash}" && echo "${trashes}" |
187
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
214 } |
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
215 |
159 | 216 # check files correctness |
217 Check_Files() { | |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
218 if test ! -n "${ISNEW}"; then |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
219 test -z "${NOCLEAN}" && Cleanup_Repository |
207
17d816a63b4c
final progress version
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
206
diff
changeset
|
220 printf "Checking for errors... " |
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
221 Progress_Init |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
222 files_error="These files do not match its md5:" |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
223 files_notdanbooru="These files are not checked:" |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
224 has_err_filename= |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
225 has_err_md5= |
196 | 226 > "${TEMP_PREFIX}-error" |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
227 > "${TEMP_PREFIX}-ok" |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
228 for file in "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/"* |
159 | 229 do |
217 | 230 if test "${file}" != "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/*"; then |
231 if test -n "$(Is_NotMD5 "$(basename "${file}")")" || test -d "${file}"; then | |
232 files_notdanbooru="${files_notdanbooru} | |
233 $(basename "${file}")" | |
234 has_err_filename=1 | |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
235 else |
217 | 236 if test "$(${MD5} "${file}" | cut -d ' ' -f1 -)" = "$(basename "${file}" | cut -d '.' -f1)"; then |
237 echo "$(basename "${file}")" >> "${TEMP_PREFIX}-ok" | |
238 else | |
239 rm "${file}" || Err_Fatal "Error removing ${file}" | |
240 echo "$(basename "${file}")" >> "${TEMP_PREFIX}-error" | |
241 files_error="${files_error} | |
242 $(basename "${file}")" | |
243 has_err_md5=1 | |
244 fi | |
187
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
245 fi |
148 | 246 fi |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
247 Progress_Anim |
148 | 248 done |
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
249 Progress_Done |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
250 if test ! -n "${has_err_md5}" && test ! -n "${has_err_filename}"; then |
203 | 251 echo "All files OK" |
170 | 252 else |
218 | 253 if test -n "${has_err_md5}"; then |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
254 echo "${files_error}" |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
255 echo "$(echo $(wc -l < "${TEMP_PREFIX}-error")) file(s) removed" |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
256 fi |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
257 test -n "${has_err_filename}" && echo "${files_notdanbooru}" |
170 | 258 fi |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
259 echo "$(echo $(wc -l < "${TEMP_PREFIX}-ok")) file(s) available locally" |
148 | 260 |
207
17d816a63b4c
final progress version
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
206
diff
changeset
|
261 printf "Generating list of new files... " |
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
262 Progress_Init |
218 | 263 cp -f "${TEMP_PREFIX}-list" "${TEMP_PREFIX}-templist" |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
264 while read -r is_ok; do |
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
265 grep -v "${is_ok}" "${TEMP_PREFIX}-templist" > "${TEMP_PREFIX}-newlist" |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
266 cp -f "${TEMP_PREFIX}-newlist" "${TEMP_PREFIX}-templist" || Err_Impossible |
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
267 Progress_Anim |
203 | 268 done < "${TEMP_PREFIX}-ok" |
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
269 Progress_Done |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
270 echo "$(echo $(wc -l < "${TEMP_PREFIX}-newlist")) file(s) to be downloaded" |
148 | 271 else |
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
272 if test -n "${ISQUICK}"; then |
207
17d816a63b4c
final progress version
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
206
diff
changeset
|
273 echo "Quick mode selected. Skipping check" |
152 | 274 else |
275 echo "Empty local repository" | |
276 fi | |
200 | 277 cat "${TEMP_PREFIX}-list" > "${TEMP_PREFIX}-newlist" |
148 | 278 fi |
279 } | |
280 | |
159 | 281 # start downloading the images |
282 Fetch_Images() { | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
283 if test "$(echo $(wc -l < "${TEMP_PREFIX}-newlist"))" -eq 0; then |
148 | 284 echo "No new file" |
285 else | |
207
17d816a63b4c
final progress version
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
206
diff
changeset
|
286 printf "Starting wget... " |
160
68227a30d0b3
forgot to fix Fetch_Images to reflect new folder naming scheme
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
159
diff
changeset
|
287 cd "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}" |
196 | 288 wget -e continue=on -bi "${TEMP_PREFIX}-newlist" -o "${TEMP_PREFIX}.log" |
148 | 289 fi |
290 } | |
291 | |
159 | 292 # initialize base variables and initial command check |
293 Init(){ | |
294 # path initialization | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
295 test -n "${ADDITIONAL_PATH}" && PATH="${ADDITIONAL_PATH}:${PATH}" |
159 | 296 export PATH |
158
cba73f6a96bb
grep check. OpenSolaris' default grep doesn't support -f
edhoprima
parents:
157
diff
changeset
|
297 |
159 | 298 # misc variables |
166 | 299 ISQUICK= |
300 ISNEW= | |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
301 |
159 | 302 [ $# -lt 2 ] && Err_Help |
303 case "$1" in | |
174
0948e76a57a1
added help. Bump to 0.1-beta2
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
173
diff
changeset
|
304 check|fetch|quickfetch) |
159 | 305 echo "Starting..." |
306 JOB="$1" | |
307 ;; | |
308 *) | |
309 Err_Help | |
310 ;; | |
311 esac | |
312 shift | |
313 SITE= | |
185
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
314 TAGS= |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
315 while [ "${1}" ]; do |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
316 case "$1" in |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
317 -s|--site) |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
318 shift |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
319 SITE="$1" |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
320 ;; |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
321 -nc|--noclean) |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
322 NOCLEAN=1 |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
323 ;; |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
324 *) |
186 | 325 if [ "${TAGS}" ]; then |
326 TAGS="$1 ${TAGS}" | |
327 else | |
328 TAGS="$1" | |
329 fi | |
185
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
330 ;; |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
331 esac |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
332 shift |
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
333 done |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
334 test -n "${SITE}" || SITE=${DEFAULT_SITE} |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
335 test -n "${TAGS}" || Err_Fatal "No tag specified" |
181
d3b7927bdb2b
restructuring and add check if the xml is processed properly
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
180
diff
changeset
|
336 # Get base folder - default, current folder or fallback to ${HOME} |
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
337 test -n "${BASE_DIR}" || BASE_DIR=${PWD} |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
338 test -n "${BASE_DIR}" || BASE_DIR=${HOME} |
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
339 test -n "$(echo "${BASE_DIR}" | cut -c1 | grep \/)" || BASE_DIR="/${BASE_DIR}" |
181
d3b7927bdb2b
restructuring and add check if the xml is processed properly
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
180
diff
changeset
|
340 |
159 | 341 echo "Tags: ${TAGS}" |
342 # slash is not wanted for folder name | |
193 | 343 TARGET_DIR=$(echo "${TAGS}" | sed -e 's/\//_/g') |
344 SITE_DIR=$(echo "${SITE}" | sed -e 's/\/$//g;s/\//_/g') | |
195
652d9e268cee
test migration to printf
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
194
diff
changeset
|
345 TEMP_PREFIX="${BASE_DIR}/temp/${SITE_DIR}-${TARGET_DIR}" |
159 | 346 } |
148 | 347 |
181
d3b7927bdb2b
restructuring and add check if the xml is processed properly
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
180
diff
changeset
|
348 # initialization |
159 | 349 Msg_Welcome |
350 Init "$@" | |
351 Check_Tools | |
352 Check_Folders | |
158
cba73f6a96bb
grep check. OpenSolaris' default grep doesn't support -f
edhoprima
parents:
157
diff
changeset
|
353 |
148 | 354 |
159 | 355 # let's do the job! |
356 case "${JOB}" in | |
174
0948e76a57a1
added help. Bump to 0.1-beta2
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
173
diff
changeset
|
357 check) |
159 | 358 Generate_Link |
359 Check_Files | |
148 | 360 ;; |
159 | 361 fetch) |
362 Generate_Link | |
363 Check_Files | |
364 Fetch_Images | |
365 ;; | |
366 quickfetch) | |
367 ISNEW=1 | |
368 ISQUICK=1 | |
369 Generate_Link | |
370 Check_Files | |
371 Fetch_Images | |
148 | 372 ;; |
373 esac |