1
1
#! /bin/bash
2
-
2
+ VERSION=3.2.3
3
3
printDownloaderHelp (){
4
4
cat << EOF
5
5
@@ -26,26 +26,74 @@ validate_url(){
26
26
fi
27
27
}
28
28
29
+ #! /bin/bash
30
+
31
+ CHECK_RESULT=0
32
+ check_remote_vs_local () {
33
+ LOCAL_FILE=" $1 "
34
+ REMOTE_URL=" $2 "
35
+
36
+ if [ ! -f " $LOCAL_FILE " ]; then
37
+ echo " cURL [check_remote_vs_local] - LOCAL_FILE:[$LOCAL_FILE ] not found. Download"
38
+ CHECK_RESULT=0
39
+ return
40
+ else
41
+ echo " cURL [check_remote_vs_local] - LOCAL_FILE:[$LOCAL_FILE ] exists"
42
+ fi
43
+
44
+ # Get local file size
45
+ LocalSize=$( wc -c < " $LOCAL_FILE " )
46
+
47
+ # Get remote file size
48
+ RemoteSize=$( curl -sI -L --retry 20 " $REMOTE_URL " | awk ' /Content-Length/ {print $2}' | tr -d ' \r' | tail -n 1)
49
+
50
+ # Get remote file modification time
51
+ modified=$( curl -L --retry 20 --silent --head " $REMOTE_URL " | awk ' /^Last-Modified/{print $0}' | sed ' s/^Last-Modified: //' )
52
+ remote_ctime=$( date --date=" $modified " +%s)
53
+
54
+ # Get local file modification time
55
+ local_ctime=$( stat -c %z " $LOCAL_FILE " )
56
+ local_ctime=$( date --date=" $local_ctime " +%s)
57
+
58
+ # Check size
59
+ if [ " $LocalSize " != " $RemoteSize " ]; then
60
+ echo " File sizes differ. Run the cURL. LocalSize:[$LocalSize ] RemoteSize:[$RemoteSize ]"
61
+ CHECK_RESULT=0
62
+ return
63
+ fi
64
+
65
+ # Check modification time
66
+ if [ " $local_ctime " -lt " $remote_ctime " ]; then
67
+ echo " Remote file is newer. Run the cURL. local_ctime[$local_ctime ] remote_ctime:[$remote_ctime ]"
68
+ CHECK_RESULT=0
69
+ return
70
+ fi
71
+
72
+ echo " Files are the same. Do not run the cURL."
73
+ CHECK_RESULT=1
74
+ return
75
+ }
76
+
29
77
downloader () {
30
- echo " [downloader] ... "
78
+ echo " [openFrameworks downloader v ${VERSION} ] ... "
31
79
if [ -z " $1 " ]; then
32
80
printDownloaderHelp
33
81
exit 1
34
82
fi
83
+ ERROR_MSG=" Downloading failed: No Installed: wget2, curl or wget. Please install (via homebrew, winget, apt-get) and try again. "
35
84
SILENT=0
36
85
NO_SSL=0
37
86
URLS=()
38
-
39
87
while [[ $# -gt 0 ]]; do
40
88
key=" $1 "
41
89
case $key in
42
90
-s|--silent)
43
91
SILENT=1
44
- shift # past argument
92
+ shift
45
93
;;
46
94
-k|--no-ssl)
47
95
NO_SSL=1
48
- shift # past argument
96
+ shift
49
97
;;
50
98
-h|--help)
51
99
printDownloaderHelp
@@ -56,46 +104,100 @@ downloader() {
56
104
URLS+=(" $1 " )
57
105
else
58
106
if [ $1 != " 0" ]; then
59
- echo " Invalid URL: [$1 ]"
107
+ echo " Invalid URL: [$1 ]"
60
108
fi
61
109
fi
62
- shift # past argument
110
+ shift
63
111
;;
64
112
esac
65
113
done
66
-
114
+ if command -v wget2 > /dev/null 2>&1 ; then
115
+ WGET2_INSTALLED=1
116
+ else
117
+ WGET2_INSTALLED=0
118
+ fi
119
+ if command -v curl > /dev/null 2>&1 ; then
120
+ CURL_INSTALLED=1
121
+ else
122
+ CURL_INSTALLED=0
123
+ fi
124
+ if command -v wget > /dev/null 2>&1 ; then
125
+ WGET_INSTALLED=1
126
+ else
127
+ WGET_INSTALLED=0
128
+ fi
129
+ WGET2=1
130
+ CURL=1
131
+ WGET=1
67
132
SSL_ARGS=" "
68
133
if [[ " $NO_SSL " == " 1" ]]; then
69
- echo " no SSL == 1"
70
- if command -v wget2 > /dev/null 2>&1 ; then
134
+ if [[ $WGET2 == 1 ]] && [[ $WGET2_INSTALLED == 0 ]]; then
71
135
SSL_ARGS=" --no-check-certificate"
72
- elif command -v curl > /dev/null 2>&1 ; then
136
+ elif [[ $CURL == 1 ]] && [[ $CURL_INSTALLED == 0 ]] ; then
73
137
SSL_ARGS=" --insecure"
74
138
else
75
139
SSL_ARGS=" --no-check-certificate"
76
140
fi
77
- echo " [Warning SSL Validation is Disabled with -k or --no-ssl]"
141
+ echo " [WARNING SSL Validation is Disabled with -k or --no-ssl]"
78
142
fi
79
-
80
- for URL in " ${URLS[@]} " ; do
81
- DL_FILENAME=$( basename " $URL " )
82
- echo " Downloading [$DL_FILENAME ] @ [$URL ]"
83
- if [[ " ${SILENT} " == " 1" ]]; then
84
- if command -v wget2 2> /dev/null; then
85
- wget2 -q $URL 2> /dev/null;
86
- elif command -v curl 2> /dev/null; then
87
- curl -L --parallel --retry 20 -s $SSL_ARGS -N -O $URL ;
143
+ URLS_TO_DOWNLOAD=" "
144
+ for (( i = 0 ; i < ${# URLS[@]} ; i++ )) ; do
145
+ URL=" ${URLS[$i]} "
146
+ FILENAME=$( basename " $URL " )
147
+ if [[ $WGET2 == 1 ]] && [[ $WGET2_INSTALLED == 1 ]]; then
148
+ URLS_TO_DOWNLOAD+=" ${URL} "
149
+ elif [[ $CURL == 1 ]] && [[ $CURL_INSTALLED == 1 ]]; then
150
+ LOCAL_FILE=$FILENAME
151
+ REMOTE_URL=$URL
152
+ check_remote_vs_local " $LOCAL_FILE " " $REMOTE_URL "
153
+ if [ $CHECK_RESULT -eq 0 ]; then
154
+ URLS_TO_DOWNLOAD+=" ${URL} -o ${FILENAME} "
155
+ if [ $(( i + 1 )) -lt ${# URLS[@]} ]; then
156
+ URLS_TO_DOWNLOAD+=" -k " ;
157
+ fi
88
158
else
89
- wget -q $URL 2> /dev/null;
159
+ echo " LOCAL_FILE:[${LOCAL_FILE} ] is same as remote - skipping download"
160
+ fi
161
+ else
162
+ URLS_TO_DOWNLOAD+=" ${URL} "
163
+ fi
164
+ done
165
+ echo
166
+ if [ -z " $URLS_TO_DOWNLOAD " ]; then
167
+ echo " No URLS to download, continue"
168
+ else
169
+ if [[ " ${SILENT} " == 1 ]]; then
170
+ if [[ $WGET2 == 1 ]] && [[ $WGET2_INSTALLED == 1 ]]; then
171
+ echo
172
+ wget2 -nv --progress=bar -N -t20 $SSL_ARGS $URLS_TO_DOWNLOAD
173
+ elif [[ $CURL == 1 ]] && [[ $CURL_INSTALLED == 1 ]]; then
174
+ echo
175
+ curl -L --retry 20 --progress-bar $SSL_ARGS ${URLS_TO_DOWNLOAD}
176
+ elif [[ $WGET == 1 ]] && [[ $WGET_INSTALLED == 1 ]]; then
177
+ echo
178
+ wget -nv -N -t20 ${URLS_TO_DOWNLOAD}
179
+ else
180
+ echo $ERROR_MSG ;
181
+ exit 1;
90
182
fi ;
91
183
else
92
- if command -v wget2 2> /dev/null; then
93
- wget2 --progress=bar $URL 2> /dev/null;
94
- elif command -v curl 2> /dev/null; then
95
- curl -L --parallel --retry 20 --progress-bar -N $SSL_ARGS -O $URL || echo $? ;
96
- else
97
- wget --progress=bar $URL 2> /dev/null;
184
+ if [[ $WGET2 == 1 ]] && [[ $WGET2_INSTALLED == 1 ]]; then
185
+ echo " Downloading [wget2] urls:[$URLS_TO_DOWNLOAD ]"
186
+ echo
187
+ wget2 -N -nv --progress=bar -t20 $SSL_ARGS ${URLS_TO_DOWNLOAD}
188
+ elif [[ $CURL == 1 ]] && [[ $CURL_INSTALLED == 1 ]]; then
189
+ echo " Downloading [cURL] urls:[$URLS_TO_DOWNLOAD ]"
190
+ echo
191
+ curl -L --retry 20 --progress-bar $SSL_ARGS ${URLS_TO_DOWNLOAD}
192
+ elif [[ $WGET == 1 ]] && [[ $WGET_INSTALLED == 1 ]]; then
193
+ echo " Downloading [wget] [$FILENAME ] urls:[$URLS_TO_DOWNLOAD ]"
194
+ echo
195
+ wget -nv --progress=bar -N -t20 $SSL_ARGS $URLS_TO_DOWNLOAD
196
+ else
197
+ echo $ERROR_MSG ;
198
+ exit 1;
98
199
fi
99
200
fi
100
- done
201
+ fi
202
+ echo
101
203
}
0 commit comments