diff --git a/apprise/plugins/bark.py b/apprise/plugins/bark.py index e676e0c3..c9f1fede 100644 --- a/apprise/plugins/bark.py +++ b/apprise/plugins/bark.py @@ -89,11 +89,14 @@ class NotifyBarkLevel: PASSIVE = 'passive' + CRITICAL = 'critical' + BARK_LEVELS = ( NotifyBarkLevel.ACTIVE, NotifyBarkLevel.TIME_SENSITIVE, NotifyBarkLevel.PASSIVE, + NotifyBarkLevel.CRITICAL, ) @@ -178,6 +181,12 @@ class NotifyBark(NotifyBase): 'type': 'choice:string', 'values': BARK_LEVELS, }, + 'volume': { + 'name': _('Volume'), + 'type': 'int', + 'min': 0, + 'max': 10, + }, 'click': { 'name': _('Click'), 'type': 'string', @@ -205,7 +214,7 @@ class NotifyBark(NotifyBase): def __init__(self, targets=None, include_image=True, sound=None, category=None, group=None, level=None, click=None, - badge=None, **kwargs): + badge=None, volume=None, **kwargs): """ Initialize Notify Bark Object """ @@ -260,6 +269,19 @@ class NotifyBark(NotifyBase): self.logger.warning( 'The specified Bark sound ({}) was not found ', sound) + # Volume + self.volume = None + if volume is not None: + try: + self.volume = int(volume) if volume is not None else None + if self.volume is not None and not (0 <= self.volume <= 10): + raise ValueError() + + except (TypeError, ValueError): + self.logger.warning( + 'The specified Bark volume ({}) is not valid. ' + 'Must be between 0 and 10', volume) + # Level self.level = None if not level else next( (f for f in BARK_LEVELS if f[0] == level[0]), None) @@ -330,6 +352,9 @@ class NotifyBark(NotifyBase): if self.group: payload['group'] = self.group + if self.volume: + payload['volume'] = self.volume + auth = None if self.user: auth = (self.user, self.password) @@ -429,6 +454,9 @@ class NotifyBark(NotifyBase): if self.level: params['level'] = self.level + if self.volume: + params['volume'] = str(self.volume) + if self.category: params['category'] = self.category @@ -502,6 +530,11 @@ class NotifyBark(NotifyBase): results['badge'] = NotifyBark.unquote( results['qsd']['badge'].strip()) + # Volume + if 'volume' in results['qsd'] and results['qsd']['volume']: + results['volume'] = NotifyBark.unquote( + results['qsd']['volume'].strip()) + # Level if 'level' in results['qsd'] and results['qsd']['level']: results['level'] = NotifyBark.unquote( diff --git a/test/test_plugin_bark.py b/test/test_plugin_bark.py index e8d12636..9f818c30 100644 --- a/test/test_plugin_bark.py +++ b/test/test_plugin_bark.py @@ -117,6 +117,30 @@ apprise_url_tests = ( # active level 'instance': NotifyBark, }), + ('bark://192.168.0.6:8081/device_key/?level=critical', { + # critical level + 'instance': NotifyBark, + }), + ('bark://192.168.0.6:8081/device_key/?level=critical&volume=10', { + # critical level with volume 10 + 'instance': NotifyBark, + }), + ('bark://192.168.0.6:8081/device_key/?level=critical&volume=invalid', { + # critical level with invalid volume + 'instance': NotifyBark, + }), + ('bark://192.168.0.6:8081/device_key/?level=critical&volume=11', { + # volume > 10 + 'instance': NotifyBark, + }), + ('bark://192.168.0.6:8081/device_key/?level=critical&volume=-1', { + # volume < 0 + 'instance': NotifyBark, + }), + ('bark://192.168.0.6:8081/device_key/?level=critical&volume=', { + # volume None + 'instance': NotifyBark, + }), ('bark://user:pass@192.168.0.5:8086/device_key/device_key2/', { # Everything is okay 'instance': NotifyBark,