diff --git a/app/src/main/java/fi/vanced/libraries/youtube/ui/AdBlock.java b/app/src/main/java/fi/vanced/libraries/youtube/ui/AdBlock.java index e6f0461c..7204c9de 100644 --- a/app/src/main/java/fi/vanced/libraries/youtube/ui/AdBlock.java +++ b/app/src/main/java/fi/vanced/libraries/youtube/ui/AdBlock.java @@ -10,9 +10,10 @@ import android.util.Log; import android.view.View; import android.view.ViewGroup; -import fi.vanced.libraries.youtube.ads.AdsRequester; import fi.vanced.libraries.youtube.ads.VideoAds; import fi.vanced.libraries.youtube.player.VideoInformation; +import fi.vanced.libraries.youtube.whitelisting.WhitelistType; +import fi.vanced.libraries.youtube.whitelisting.requests.WhitelistRequester; import fi.vanced.utils.SharedPrefUtils; import fi.vanced.utils.VancedUtils; @@ -68,7 +69,7 @@ public class AdBlock extends SlimButton { if (debug) { Log.d(TAG, "Fetching channelId for " + currentVideoId); } - AdsRequester.retrieveChannelDetails(this.view, this.button_icon, this.context); + WhitelistRequester.addChannelToWhitelist(WhitelistType.ADS, this.view, this.button_icon, this.context); }).start(); } } diff --git a/app/src/main/java/fi/vanced/libraries/youtube/whitelisting/Whitelist.java b/app/src/main/java/fi/vanced/libraries/youtube/whitelisting/Whitelist.java index 63c127a0..16475b68 100644 --- a/app/src/main/java/fi/vanced/libraries/youtube/whitelisting/Whitelist.java +++ b/app/src/main/java/fi/vanced/libraries/youtube/whitelisting/Whitelist.java @@ -2,6 +2,7 @@ package fi.vanced.libraries.youtube.whitelisting; import static fi.razerman.youtube.XGlobals.debug; import static fi.vanced.libraries.youtube.player.VideoInformation.channelName; +import static fi.vanced.utils.VancedUtils.getPreferences; import android.content.Context; import android.content.SharedPreferences; @@ -9,8 +10,11 @@ import android.util.Log; import com.google.android.apps.youtube.app.YouTubeTikTokRoot_Application; +import java.io.IOException; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -21,7 +25,7 @@ import fi.vanced.utils.VancedUtils; public class Whitelist { private static final String TAG = "VI - Whitelisting"; - private static final Map> whitelistMap = parseWhitelist(YouTubeTikTokRoot_Application.getAppContext()); + private static final Map> whitelistMap = parseWhitelist(YouTubeTikTokRoot_Application.getAppContext()); private static final Map enabledMap = parseEnabledMap(YouTubeTikTokRoot_Application.getAppContext()); private Whitelist() {} @@ -34,12 +38,12 @@ public class Whitelist { return !isWhitelisted(WhitelistType.SPONSORBLOCK); } - private static Map> parseWhitelist(Context context) { + private static Map> parseWhitelist(Context context) { if (context == null) { return Collections.emptyMap(); } WhitelistType[] whitelistTypes = WhitelistType.values(); - Map> whitelistMap = new HashMap<>(whitelistTypes.length); + Map> whitelistMap = new HashMap<>(whitelistTypes.length); for (WhitelistType whitelistType : whitelistTypes) { SharedPreferences preferences = VancedUtils.getPreferences(context, whitelistType.getPreferencesName()); @@ -48,10 +52,10 @@ public class Whitelist { if (debug) { Log.d(TAG, String.format("channels string was null for %s whitelisting", whitelistType)); } - return Collections.emptyMap(); + continue; } try { - List deserializedChannels = (List) ObjectSerializer.deserialize(serializedChannels); + ArrayList deserializedChannels = (ArrayList) ObjectSerializer.deserialize(serializedChannels); if (debug) { Log.d(TAG, serializedChannels); for (ChannelModel channel : deserializedChannels) { @@ -98,4 +102,50 @@ public class Whitelist { } return false; } + + public static boolean addToWhitelist(WhitelistType whitelistType, Context context, ChannelModel channel) { + ArrayList whitelisted = whitelistMap.get(whitelistType); + for (ChannelModel whitelistedChannel : whitelisted) { + String channelId = channel.getChannelId(); + if (whitelistedChannel.getChannelId().equals(channelId)) { + if (debug) { + Log.d(TAG, String.format("Tried whitelisting an existing channel again. Old info (%1$s | %2$s) - New info (%3$s | %4$s)", + whitelistedChannel.getAuthor(), channelId, channelName, channelId)); + } + return true; + } + } + whitelisted.add(channel); + return updateWhitelist(whitelistType, whitelisted, context); + } + + public static boolean removeFromWhitelist(WhitelistType whitelistType, Context context, String channelName) { + ArrayList channels = whitelistMap.get(whitelistType); + Iterator iterator = channels.iterator(); + while (iterator.hasNext()) { + ChannelModel channel = iterator.next(); + if (channel.getAuthor().equals(channelName)) { + iterator.remove(); + break; + } + } + return updateWhitelist(whitelistType, channels, context); + } + + private static boolean updateWhitelist(WhitelistType whitelistType, ArrayList channels, Context context) { + if (context == null) { + return false; + } + SharedPreferences preferences = getPreferences(context, whitelistType.getPreferencesName()); + SharedPreferences.Editor editor = preferences.edit(); + + try { + editor.putString("channels", ObjectSerializer.serialize(channels)); + editor.apply(); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } } \ No newline at end of file diff --git a/app/src/main/java/fi/vanced/libraries/youtube/ads/AdsRequester.java b/app/src/main/java/fi/vanced/libraries/youtube/whitelisting/requests/WhitelistRequester.java similarity index 87% rename from app/src/main/java/fi/vanced/libraries/youtube/ads/AdsRequester.java rename to app/src/main/java/fi/vanced/libraries/youtube/whitelisting/requests/WhitelistRequester.java index 7120acb6..b281c541 100644 --- a/app/src/main/java/fi/vanced/libraries/youtube/ads/AdsRequester.java +++ b/app/src/main/java/fi/vanced/libraries/youtube/whitelisting/requests/WhitelistRequester.java @@ -1,4 +1,4 @@ -package fi.vanced.libraries.youtube.ads; +package fi.vanced.libraries.youtube.whitelisting.requests; import static fi.razerman.youtube.XGlobals.debug; import static fi.vanced.libraries.youtube.player.VideoInformation.currentVideoId; @@ -20,16 +20,18 @@ import java.net.HttpURLConnection; import java.nio.charset.StandardCharsets; import fi.vanced.libraries.youtube.player.ChannelModel; +import fi.vanced.libraries.youtube.whitelisting.Whitelist; +import fi.vanced.libraries.youtube.whitelisting.WhitelistType; import fi.vanced.utils.requests.Requester; import fi.vanced.utils.requests.Route; -public class AdsRequester { +public class WhitelistRequester { private static final String YT_API_URL = "https://www.youtube.com/youtubei/v1/"; private static final String YT_API_KEY = "replaceMeWithTheYouTubeAPIKey"; - public static void retrieveChannelDetails(View view, ImageView buttonIcon, Context context) { + public static void addChannelToWhitelist(WhitelistType whitelistType, View view, ImageView buttonIcon, Context context) { try { - HttpURLConnection connection = getConnectionFromRoute(AdsRoutes.GET_CHANNEL_DETAILS, YT_API_KEY); + HttpURLConnection connection = getConnectionFromRoute(WhitelistRoutes.GET_CHANNEL_DETAILS, YT_API_KEY); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json; utf-8"); connection.setRequestProperty("Accept", "application/json"); @@ -50,7 +52,7 @@ public class AdsRequester { Log.d(TAG, "channelId " + channelModel.getChannelId() + " fetched for author " + channelModel.getAuthor()); } - boolean success = VideoAds.addToWhitelist(context, channelModel.getAuthor(), channelModel.getChannelId()); + boolean success = Whitelist.addToWhitelist(whitelistType, context, channelModel); new Handler(Looper.getMainLooper()).post(() -> { if (success) { buttonIcon.setEnabled(true); diff --git a/app/src/main/java/fi/vanced/libraries/youtube/ads/AdsRoutes.java b/app/src/main/java/fi/vanced/libraries/youtube/whitelisting/requests/WhitelistRoutes.java similarity index 52% rename from app/src/main/java/fi/vanced/libraries/youtube/ads/AdsRoutes.java rename to app/src/main/java/fi/vanced/libraries/youtube/whitelisting/requests/WhitelistRoutes.java index b885798f..f71858e2 100644 --- a/app/src/main/java/fi/vanced/libraries/youtube/ads/AdsRoutes.java +++ b/app/src/main/java/fi/vanced/libraries/youtube/whitelisting/requests/WhitelistRoutes.java @@ -1,11 +1,11 @@ -package fi.vanced.libraries.youtube.ads; +package fi.vanced.libraries.youtube.whitelisting.requests; import static fi.vanced.utils.requests.Route.Method.GET; import fi.vanced.utils.requests.Route; -public class AdsRoutes { - public static final Route GET_CHANNEL_DETAILS = new Route(GET, "player?key={api_key}"); +public class WhitelistRoutes { + public static final Route GET_CHANNEL_DETAILS = new Route(GET, "player?key={api_key"); - private AdsRoutes() {} + private WhitelistRoutes() {} } \ No newline at end of file