From 6201592fc79472dc8854c9c5a919627b12ce9cbd Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 19 Jul 2020 19:53:51 +0200 Subject: [PATCH] Check Diconnect top domains --- .../faircode/email/DisconnectBlacklist.java | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/DisconnectBlacklist.java b/app/src/main/java/eu/faircode/email/DisconnectBlacklist.java index 1ff30a6be2..9ce81e8b07 100644 --- a/app/src/main/java/eu/faircode/email/DisconnectBlacklist.java +++ b/app/src/main/java/eu/faircode/email/DisconnectBlacklist.java @@ -20,7 +20,6 @@ package eu.faircode.email; */ import android.content.Context; -import android.net.Uri; import android.os.SystemClock; import org.json.JSONArray; @@ -84,18 +83,10 @@ public class DisconnectBlacklist { JSONObject jsites = (JSONObject) jblock.get(name); Iterator sites = jsites.keys(); if (sites.hasNext()) { - List domains = new ArrayList<>(); - String site = sites.next(); - String host = Uri.parse(site).getHost(); - if (host != null) - domains.add(host.toLowerCase(Locale.ROOT)); - JSONArray jdomains = jsites.getJSONArray(site); - for (int d = 0; d < jdomains.length(); d++) - domains.add(jdomains.getString(d).toLowerCase(Locale.ROOT)); - - for (String domain : domains) { + for (int d = 0; d < jdomains.length(); d++) { + String domain = jdomains.getString(d).toLowerCase(Locale.ROOT); if (!map.containsKey(domain)) map.put(domain, new ArrayList<>()); List list = map.get(domain); @@ -134,25 +125,32 @@ public class DisconnectBlacklist { } static List getCategories(String domain) { + return _getCategories(domain); + } + + static boolean isTracking(String host) { + List categories = _getCategories(host); + if (categories == null || categories.size() == 0) + return false; + return !categories.contains("Content"); + } + + private static List _getCategories(String domain) { if (domain == null) return null; synchronized (map) { - List result = map.get(domain.toLowerCase(Locale.ROOT)); - return (result == null || result.size() == 0 ? null : result); + String d = domain.toLowerCase(Locale.ROOT); + while (d.contains(".")) { + List result = map.get(d); + if (result != null) + return result; + int dot = d.indexOf("."); + d = d.substring(dot + 1); + } } - } - static boolean isTracking(String host) { - if (host == null) - return false; - - synchronized (map) { - List result = map.get(host.toLowerCase(Locale.ROOT)); - if (result == null || result.size() == 0) - return false; - return !result.contains("Content"); - } + return null; } private static File getFile(Context context) {