LaMetric Time supports icon= for custom defined ones (#287)

pull/288/head
Chris Caron 2020-09-01 21:46:21 -04:00 committed by GitHub
parent 7e49de9f6a
commit 397ad4de0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 60 additions and 3 deletions

View File

@ -55,6 +55,8 @@
# A great source for the icon reference:
# - https://developer.lametric.com/icons
import re
import six
import requests
from json import dumps
@ -383,6 +385,10 @@ class NotifyLametric(NotifyBase):
'values': LAMETRIC_PRIORITIES,
'default': LametricPriority.INFO,
},
'icon': {
'name': _('Custom Icon'),
'type': 'string',
},
'icon_type': {
'name': _('Icon Type'),
'type': 'choice:string',
@ -409,7 +415,8 @@ class NotifyLametric(NotifyBase):
})
def __init__(self, apikey=None, client_id=None, secret=None, priority=None,
icon_type=None, sound=None, mode=None, cycles=None, **kwargs):
icon=None, icon_type=None, sound=None, mode=None,
cycles=None, **kwargs):
"""
Initialize LaMetric Object
"""
@ -465,6 +472,11 @@ class NotifyLametric(NotifyBase):
else:
self.priority = priority
# assign our icon (if it was defined); we also eliminate
# any hashtag (#) entries that might be present
self.icon = re.search(r'[#\s]*(?P<value>.+?)\s*$', icon) \
.group('value') if isinstance(icon, six.string_types) else None
if icon_type not in LAMETRIC_ICON_TYPES:
self.icon_type = self.template_args['icon_type']['default']
@ -530,12 +542,18 @@ class NotifyLametric(NotifyBase):
self.logger.warning(
'LaMetric cycle settings is unavailable in Cloud mode')
# Assign our icon if the user specified a custom one, otherwise
# choose from our pre-set list (based on notify_type)
icon = self.icon if self.icon \
else self.lametric_icon_id_mapping[notify_type]
# Our Payload
# Cloud Notifications don't have as much functionality
# You can not set priority and/or sound
payload = {
"frames": [
{
"icon": self.lametric_icon_id_mapping[notify_type],
"icon": icon,
"text": body,
}
]
@ -552,6 +570,11 @@ class NotifyLametric(NotifyBase):
Return URL and Payload for Device directed requests
"""
# Assign our icon if the user specified a custom one, otherwise
# choose from our pre-set list (based on notify_type)
icon = self.icon if self.icon \
else self.lametric_icon_id_mapping[notify_type]
# Our Payload
payload = {
# Priority of the message
@ -573,7 +596,7 @@ class NotifyLametric(NotifyBase):
"cycles": self.cycles,
"frames": [
{
"icon": self.lametric_icon_id_mapping[notify_type],
"icon": icon,
"text": body,
}
]
@ -701,6 +724,10 @@ class NotifyLametric(NotifyBase):
# Extend our parameters
params.update(self.url_parameters(privacy=privacy, *args, **kwargs))
if self.icon:
# Assign our icon IF one was specified
params['icon'] = self.icon
if self.mode == LametricMode.CLOUD:
# Upstream/LaMetric App Return
return '{schema}://{client_id}@{secret}/?{params}'.format(
@ -775,6 +802,10 @@ class NotifyLametric(NotifyBase):
if 'priority' in results['qsd'] and len(results['qsd']['priority']):
results['priority'] = results['qsd']['priority'].strip().lower()
# Icon Type
if 'icon' in results['qsd'] and len(results['qsd']['icon']):
results['icon'] = results['qsd']['icon'].strip().lower()
# Icon Type
if 'icon_type' in results['qsd'] and len(results['qsd']['icon_type']):
results['icon_type'] = results['qsd']['icon_type'].strip().lower()

View File

@ -1353,6 +1353,26 @@ TEST_URLS = (
# Invalid priority just produce warnings... object still loads
'instance': plugins.NotifyLametric,
}),
('lametric://{}@192.168.1.2/?icon=230'.format(UUID4), {
# Our custom icon by it's ID
'instance': plugins.NotifyLametric,
}),
('lametrics://{}@192.168.1.2/?icon=#230'.format(UUID4), {
# Our custom icon by it's ID; the hashtag at the front is ignored
'instance': plugins.NotifyLametric,
}),
('lametric://{}@192.168.1.2/?icon=Heart'.format(UUID4), {
# Our custom icon; the hashtag at the front is ignored
'instance': plugins.NotifyLametric,
}),
('lametric://{}@192.168.1.2/?icon=#'.format(UUID4), {
# a hashtag and nothing else
'instance': plugins.NotifyLametric,
}),
('lametric://{}@192.168.1.2/?icon=#%20%20%20'.format(UUID4), {
# a hashtag and some spaces
'instance': plugins.NotifyLametric,
}),
('lametric://{}@192.168.1.3/?cycles=2'.format(UUID4), {
# Cycles changed
'instance': plugins.NotifyLametric,
@ -1374,6 +1394,12 @@ TEST_URLS = (
# Our expected url(privacy=True) startswith() response:
'privacy_url': 'lametric://8...2@****/',
}),
('lametric://{}@{}/'.format(
UUID4, 'YWosnkdnoYREsdogfoSDff734kjsfbweo7r434597FYODIoicosdonnreiuhvd'
'ciuhouerhohcd8sds89fdRw==?icon=Heart'), {
# Cloude mode with the icon over-ride
'instance': plugins.NotifyLametric,
}),
('lametric://{}@example.com/'.format(UUID4), {
'instance': plugins.NotifyLametric,
# force a failure