Make global filters take precedence over track filter

This commit is contained in:
cloudwithax 2022-10-25 21:00:20 -04:00
parent 8a9425c662
commit 0ef5db476b
2 changed files with 35 additions and 8 deletions

View File

@ -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):

View File

@ -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):
@ -55,7 +66,9 @@ class Filters:
"""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,13 +349,21 @@ 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: