-start_adblocking() {
- local whitelist_domains blacklist_domains whitelist_domains_urls blacklist_domains_urls blacklist_hosts_urls
- config_get whitelist_domains 'config' 'whitelist_domain'
- config_get blacklist_domains 'config' 'blacklist_domain'
- config_get whitelist_domains_urls 'config' 'whitelist_domains_url'
- config_get blacklist_domains_urls 'config' 'blacklist_domains_url'
- config_get blacklist_hosts_urls 'config' 'blacklist_hosts_url'
-
- local hf w_filter
-
- [ ! -d ${hosts_file%/*} ] && mkdir -p ${hosts_file%/*}
- [ ! -f "$hosts_file" ] && touch "$hosts_file"
- if [[ -s $T_TMP && ! "$1" == "reload" ]]; then
- output 3 'Found existing data file, reusing it '
- mv $T_TMP $hosts_file && okn || failn
- else
- [ -f $A_TMP ] && rm -f $A_TMP; [ -f $B_TMP ] && rm -f $B_TMP; [ -f $T_TMP ] && rm -f $T_TMP; [ -f $hosts_file ] && rm -f $hosts_file;
- if [ "$(awk '/^MemFree/ {print int($2/1000)}' "/proc/meminfo")" -lt 32 ]; then
- output 1 'Low free memory, restarting dnsmasq...'
- /etc/init.d/dnsmasq restart >/dev/null 2>&1 && okn || failn
- fi
- touch $A_TMP; touch $B_TMP; touch $T_TMP;
- if [ -n "$blacklist_hosts_urls" ]; then
- output 1 '[DL] Blocked Hosts '
- for hf in ${blacklist_hosts_urls}; do process_url "$hf" 'hosts' 'blocked'; done
- output 1 '\n'
- fi
- if [ -n "$blacklist_domains_urls" ]; then
- output 1 '[DL] Blocked Domains '
- for hf in ${blacklist_domains_urls}; do process_url "$hf" 'domains' 'blocked'; done
+download_lists() {
+ local i hf w_filter whitelist_domains blacklist_domains whitelist_domains_urls blacklist_domains_urls blacklist_hosts_urls j=0
+ config_get whitelist_domains 'config' 'whitelist_domain'
+ config_get blacklist_domains 'config' 'blacklist_domain'
+ config_get whitelist_domains_urls 'config' 'whitelist_domains_url'
+ config_get blacklist_domains_urls 'config' 'blacklist_domains_url'
+ config_get blacklist_hosts_urls 'config' 'blacklist_hosts_url'
+
+ ubus_status set 'Reloading '
+ [ ! -d ${dnsmasqFile%/*} ] && mkdir -p ${dnsmasqFile%/*}
+ for i in $A_TMP $B_TMP $CACHE_TMP $dnsmasqFile; do [ -f $i ] && rm -f $i; done
+ if [ "$(awk '/^MemFree/ {print int($2/1000)}' "/proc/meminfo")" -lt 32 ]; then
+ output 3 'Low free memory, restarting dnsmasq...'
+ reload_dnsmasq 'quiet' && output_okn || output_failn
+ fi
+ touch $A_TMP; touch $B_TMP;
+ output 1 'Downloading lists '
+ if [ -n "$blacklist_hosts_urls" ]; then
+ for hf in ${blacklist_hosts_urls}; do
+ process_url "$hf" 'hosts' 'blocked' &
+ done
+ fi
+ if [ -n "$blacklist_domains_urls" ]; then
+ for hf in ${blacklist_domains_urls}; do
+ process_url "$hf" 'domains' 'blocked' &
+ done
+ fi
+ if [ -n "$whitelist_domains_urls" ]; then
+ for hf in ${whitelist_domains_urls}; do
+ process_url "$hf" 'domains' 'allowed' &
+ done
+ fi
+ wait
+ i="$(ubus_status get)"
+ [ "${i//-}" != "$i" ] && serviceStatus="${serviceStatus:-'Download error'}" || unset serviceStatus
+ i="${i//Reloading }"
+ i="${i//-/$xmark}"
+ i="${i//+/$checkmark}"
+ [ "$verbosity" == "1" ] && logmsg="${logmsg}${i}"
+ output 1 '\n'
+
+ [ -n "$blacklist_domains" ] && for hf in ${blacklist_domains}; do echo "$hf" | sed "$d_filter" >> $B_TMP; done
+ whitelist_domains="${whitelist_domains}"$'\n'"$(cat $A_TMP)"
+ [ -n "$whitelist_domains" ] && for hf in ${whitelist_domains}; do hf=$(echo $hf | sed 's/\./\\./g'); w_filter="$w_filter/^${hf}$/d;/\\.${hf}$/d;"; done
+ if [ -s $B_TMP ]; then
+ output 1 'Processing downloads '
+ output 2 'Sorting combined list '
+ if sort $B_TMP | uniq > $A_TMP; then
+ output_ok
+ else
+ output_fail
+ serviceStatus="${serviceStatus:-'Sorting error'}"
+ fi
+ output 2 'Optimizing combined list '
+ if awk -F "." '{for(f=NF;f>1;f--)printf "%s.",$f;print $1}' "$A_TMP" > "$B_TMP"; then
+ if sort "$B_TMP" > "$A_TMP"; then
+ if awk '{if(NR==1){tld=$NF};while(getline){if($NF!~tld"\\."){print tld;tld=$NF}}print tld}' "$A_TMP" > "$B_TMP"; then
+ if awk -F "." '{for(f=NF;f>1;f--)printf "%s.",$f;print $1}' "$B_TMP" > "$A_TMP"; then
+ if sort "$A_TMP" | uniq > "$B_TMP"; then
+ output_ok
+ else
+ output_fail
+ serviceStatus="${serviceStatus:-'Data file optimization error'}"
+ mv $A_TMP $B_TMP
+ fi
+ else
+ output_fail
+ serviceStatus="${serviceStatus:-'Data file optimization error'}"
+ fi
+ else
+ output_fail
+ serviceStatus="${serviceStatus:-'Data file optimization error'}"
+ mv $A_TMP $B_TMP
+ fi
+ else
+ output_fail
+ serviceStatus="${serviceStatus:-'Data file optimization error'}"
+ fi
+ else
+ output_fail
+ serviceStatus="${serviceStatus:-'Data file optimization error'}"
+ mv $A_TMP $B_TMP
+ fi
+ output 2 'Whitelisting domains '
+ if sed -i "$w_filter" $B_TMP; then
+ output_ok
+ else
+ output_fail
+ serviceStatus="${serviceStatus:-'Whitelist processing error'}"
+ fi
+ output 2 'Formatting merged file '
+ if sed "$f_filter" $B_TMP > $A_TMP; then
+ output_ok
+ else
+ output_fail
+ serviceStatus="${serviceStatus:-'Data file formatting error'}"
+ fi
+ output 2 'Creating dnsmasq config '
+ if mv $A_TMP $dnsmasqFile; then
+ output_ok
+ else
+ output_fail
+ serviceStatus="${serviceStatus:-'Error moving data file'}"
+ fi
+ output 2 'Removing temporary files '
+ rm -f /var/simple-adblock_tmp_* >/dev/null 2>&1;
+ for i in $A_TMP $B_TMP $CACHE_TMP; do if [ -s $i ]; then rm -f $i || j=1; fi; done
+ if [ $j -eq 0 ]; then
+ output_ok
+ else
+ output_fail
+ serviceStatus="${serviceStatus:-'Error removing temporary files'}"
+ fi