Mercurial > ec-dotfiles
annotate moefetch.sh @ 215:710082ce6788
major cleanup part2.
also called major mess up part 2.
| author | edhoprima@gmail.com <edhoprima@gmail.com> |
|---|---|
| date | Thu, 02 Jul 2009 20:01:13 +0000 |
| parents | a6624fb9b317 |
| children | a869987c4646 |
| 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 |
|
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
170 mkdir "${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 |
|
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
193 mkdir -p "${BASE_DIR}/trash/${trash_dir}" || Err_Impossible |
|
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 |
|
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
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 |
|
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
230 if test -n "$(Is_NotMD5 "$(basename "${file}")")" || test -d "${file}"; then |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
231 files_notdanbooru="${files_notdanbooru} |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
232 $(basename "${file}")" |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
233 has_err_filename=1 |
|
187
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
234 else |
|
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
235 if test "$(${MD5} "${file}" | cut -d ' ' -f1 -)" = "$(basename "${file}" | cut -d '.' -f1)"; then |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
236 echo "$(basename "${file}")" >> "${TEMP_PREFIX}-ok" |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
237 else |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
238 rm "${file}" || Err_Fatal "Error removing ${file}" |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
239 echo "$(basename "${file}")" >> "${TEMP_PREFIX}-error" |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
240 files_error="${files_error} |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
241 $(basename "${file}")" |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
242 has_err_md5=1 |
|
187
efd957294c8c
refactoring. cleanup. etc.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
186
diff
changeset
|
243 fi |
| 148 | 244 fi |
|
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
245 Progress_Anim |
| 148 | 246 done |
|
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
247 Progress_Done |
|
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
248 if test ! -n "${has_err_md5}" && test ! -n "${has_err_filename}"; then |
| 203 | 249 echo "All files OK" |
| 170 | 250 else |
|
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
251 if test ! -n "${has_err_md5}"; then |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
252 echo "${files_error}" |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
253 echo "$(echo $(wc -l < "${TEMP_PREFIX}-error")) file(s) removed" |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
254 fi |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
255 test -n "${has_err_filename}" && echo "${files_notdanbooru}" |
| 170 | 256 fi |
|
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
257 echo "$(echo $(wc -l < "${TEMP_PREFIX}-ok")) file(s) available locally" |
| 148 | 258 |
|
207
17d816a63b4c
final progress version
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
206
diff
changeset
|
259 printf "Generating list of new files... " |
|
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
260 Progress_Init |
|
201
30d2fb656029
scrapping grep -vf
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
200
diff
changeset
|
261 cat "${TEMP_PREFIX}-list" > "${TEMP_PREFIX}-templist" |
|
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
262 while read -r is_ok; do |
|
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
263 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
|
264 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
|
265 Progress_Anim |
| 203 | 266 done < "${TEMP_PREFIX}-ok" |
|
205
2e866999c042
now with useless animation
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
204
diff
changeset
|
267 Progress_Done |
|
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
268 echo "$(echo $(wc -l < "${TEMP_PREFIX}-newlist")) file(s) to be downloaded" |
| 148 | 269 else |
|
214
a6624fb9b317
major cleanup. tweaking.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
213
diff
changeset
|
270 if test -n "${ISQUICK}"; then |
|
207
17d816a63b4c
final progress version
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
206
diff
changeset
|
271 echo "Quick mode selected. Skipping check" |
| 152 | 272 else |
| 273 echo "Empty local repository" | |
| 274 fi | |
| 200 | 275 cat "${TEMP_PREFIX}-list" > "${TEMP_PREFIX}-newlist" |
| 148 | 276 fi |
| 277 } | |
| 278 | |
| 159 | 279 # start downloading the images |
| 280 Fetch_Images() { | |
|
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
281 if test "$(echo $(wc -l < "${TEMP_PREFIX}-newlist"))" -eq 0; then |
| 148 | 282 echo "No new file" |
| 283 else | |
|
207
17d816a63b4c
final progress version
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
206
diff
changeset
|
284 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
|
285 cd "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}" |
| 196 | 286 wget -e continue=on -bi "${TEMP_PREFIX}-newlist" -o "${TEMP_PREFIX}.log" |
| 148 | 287 fi |
| 288 } | |
| 289 | |
| 159 | 290 # initialize base variables and initial command check |
| 291 Init(){ | |
| 292 # path initialization | |
|
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
293 test -n "${ADDITIONAL_PATH}" && PATH="${ADDITIONAL_PATH}:${PATH}" |
| 159 | 294 export PATH |
|
158
cba73f6a96bb
grep check. OpenSolaris' default grep doesn't support -f
edhoprima
parents:
157
diff
changeset
|
295 |
| 159 | 296 # misc variables |
| 166 | 297 ISQUICK= |
| 298 ISNEW= | |
|
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
299 |
| 159 | 300 [ $# -lt 2 ] && Err_Help |
| 301 case "$1" in | |
|
174
0948e76a57a1
added help. Bump to 0.1-beta2
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
173
diff
changeset
|
302 check|fetch|quickfetch) |
| 159 | 303 echo "Starting..." |
| 304 JOB="$1" | |
| 305 ;; | |
| 306 *) | |
| 307 Err_Help | |
| 308 ;; | |
| 309 esac | |
| 310 shift | |
| 311 SITE= | |
|
185
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
312 TAGS= |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
313 while [ "${1}" ]; do |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
314 case "$1" in |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
315 -s|--site) |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
316 shift |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
317 SITE="$1" |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
318 ;; |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
319 -nc|--noclean) |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
320 NOCLEAN=1 |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
321 ;; |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
322 *) |
| 186 | 323 if [ "${TAGS}" ]; then |
| 324 TAGS="$1 ${TAGS}" | |
| 325 else | |
| 326 TAGS="$1" | |
| 327 fi | |
|
185
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
328 ;; |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
329 esac |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
330 shift |
|
6d926d4b3c5a
initial clean system support
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
184
diff
changeset
|
331 done |
|
215
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
332 test -n "${SITE}" || SITE=${DEFAULT_SITE} |
|
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
333 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
|
334 # 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
|
335 test -n "${BASE_DIR}" || BASE_DIR=${PWD} |
|
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
336 test -n "${BASE_DIR}" || BASE_DIR=${HOME} |
|
710082ce6788
major cleanup part2.
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
214
diff
changeset
|
337 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
|
338 |
| 159 | 339 echo "Tags: ${TAGS}" |
| 340 # slash is not wanted for folder name | |
| 193 | 341 TARGET_DIR=$(echo "${TAGS}" | sed -e 's/\//_/g') |
| 342 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
|
343 TEMP_PREFIX="${BASE_DIR}/temp/${SITE_DIR}-${TARGET_DIR}" |
| 159 | 344 } |
| 148 | 345 |
|
181
d3b7927bdb2b
restructuring and add check if the xml is processed properly
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
180
diff
changeset
|
346 # initialization |
| 159 | 347 Msg_Welcome |
| 348 Init "$@" | |
| 349 Check_Tools | |
| 350 Check_Folders | |
|
158
cba73f6a96bb
grep check. OpenSolaris' default grep doesn't support -f
edhoprima
parents:
157
diff
changeset
|
351 |
| 148 | 352 |
| 159 | 353 # let's do the job! |
| 354 case "${JOB}" in | |
|
174
0948e76a57a1
added help. Bump to 0.1-beta2
edhoprima@gmail.com <edhoprima@gmail.com>
parents:
173
diff
changeset
|
355 check) |
| 159 | 356 Generate_Link |
| 357 Check_Files | |
| 148 | 358 ;; |
| 159 | 359 fetch) |
| 360 Generate_Link | |
| 361 Check_Files | |
| 362 Fetch_Images | |
| 363 ;; | |
| 364 quickfetch) | |
| 365 ISNEW=1 | |
| 366 ISQUICK=1 | |
| 367 Generate_Link | |
| 368 Check_Files | |
| 369 Fetch_Images | |
| 148 | 370 ;; |
| 371 esac |
