diff --git a/apprise/plugins/bark.py b/apprise/plugins/bark.py index e676e0c3..839018e6 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': 1, + '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,18 @@ class NotifyBark(NotifyBase): self.logger.warning( 'The specified Bark sound ({}) was not found ', sound) + # Volume + try: + self.volume = int(volume) if volume is not None else None + if self.volume is not None and not (1 <= self.volume <= 10): + raise ValueError() + except (TypeError, ValueError): + self.volume = None + if volume is not None: + self.logger.warning( + 'The specified Bark volume ({}) is not valid. ' + 'Must be between 1 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 +351,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 +453,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 +529,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..fc81189b 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=0', { + # volume < 1 + '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, @@ -150,3 +174,4 @@ def test_plugin_bark_urls(): # Run our general tests AppriseURLTester(tests=apprise_url_tests).run_all() +