From 0ef5db476b41c9ca7d7374c7403f602e8a3e475b Mon Sep 17 00:00:00 2001 From: cloudwithax Date: Tue, 25 Oct 2022 21:00:20 -0400 Subject: [PATCH] Make global filters take precedence over track filter --- pomice/filters.py | 6 ++++++ pomice/player.py | 37 +++++++++++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/pomice/filters.py b/pomice/filters.py index 3c666cb..20bed15 100644 --- a/pomice/filters.py +++ b/pomice/filters.py @@ -15,6 +15,12 @@ class Filter: def __init__(self): self.payload = None self.tag: str = None + self.preload: bool = False + + def set_preload(self) -> bool: + """Internal method to set whether or not the filter was preloaded.""" + self.preload = True + return self.preload class Equalizer(Filter): diff --git a/pomice/player.py b/pomice/player.py index 4543584..302565d 100644 --- a/pomice/player.py +++ b/pomice/player.py @@ -28,6 +28,17 @@ class Filters: def __init__(self): self._filters: List[Filter] = [] + @property + def has_preload(self): + """Property which checks if any applied filters were preloaded""" + return any(f for f in self._filters if f.preload == True) + + @property + def empty(self): + """Property which checks if the filter list is empty""" + return len(self._filters) == 0 + + def add_filter(self, *, filter: Filter): """Adds a filter to the list of filters applied""" if any(f for f in self._filters if f.tag == filter.tag): @@ -35,7 +46,7 @@ class Filters: "A filter with that tag is already in use." ) self._filters.append(filter) - + def remove_filter(self, *, filter_tag: str): """Removes a filter from the list of filters applied using its filter tag""" if not any(f for f in self._filters if f.tag == filter_tag): @@ -54,8 +65,10 @@ class Filters: def reset_filters(self): """Removes all filters from the list""" self._filters = [] - - + + def get_preload_filters(self): + """Get all preloaded filters""" + return [f for f in self._filters if f.preload == True] def get_all_payloads(self): """Returns a formatted dict of all the filter payloads""" @@ -336,15 +349,23 @@ class Player(VoiceProtocol): "noReplace": ignore_if_playing } - # Apply track filters - if track.filters: - # First lets remove all filters quickly - await self.reset_filters() + # Remove preloaded filters if last track had any + if self.filters.has_preload: + for filter in self.filters.get_preload_filters(): + await self.remove_filter(filter_tag=filter.tag) + + # Global filters take precedence over track filters + # So if no global filters are detected, lets apply any + # necessary track filters + + if self.filters.empty and track.filters: # Now apply all filters for filter in track.filters: + # Set preload for filter + filter.set_preload() await self.add_filter(filter=filter) - + if end > 0: data["endTime"] = str(end)