diff --git a/src/c3nav/control/forms.py b/src/c3nav/control/forms.py index 1b3a87f3..e57f34d3 100644 --- a/src/c3nav/control/forms.py +++ b/src/c3nav/control/forms.py @@ -22,6 +22,7 @@ from c3nav.mapdata.models.access import (AccessPermission, AccessPermissionToken AccessRestriction, AccessRestrictionGroup) from c3nav.mesh.messages import MeshMessageType from c3nav.mesh.models import MeshNode +from c3nav.mesh.utils import group_msg_type_choices from c3nav.site.models import Announcement @@ -302,7 +303,7 @@ class MapUpdateForm(ModelForm): class MeshMessageFilterForm(Form): message_types = MultipleChoiceField( - choices=[(msgtype.value, msgtype.name) for msgtype in MeshMessageType], + choices=group_msg_type_choices(list(MeshMessageType)), required=False, label=_('message types'), ) diff --git a/src/c3nav/control/templates/control/mesh_nodes.html b/src/c3nav/control/templates/control/mesh_nodes.html index cc67c10f..31b4bda9 100644 --- a/src/c3nav/control/templates/control/mesh_nodes.html +++ b/src/c3nav/control/templates/control/mesh_nodes.html @@ -17,8 +17,12 @@ {% csrf_token %} diff --git a/src/c3nav/control/views/mesh.py b/src/c3nav/control/views/mesh.py index 76bbe5d9..2870085c 100644 --- a/src/c3nav/control/views/mesh.py +++ b/src/c3nav/control/views/mesh.py @@ -15,7 +15,7 @@ from c3nav.control.views.base import ControlPanelMixin from c3nav.mesh.forms import MeshMessageForm, MeshNodeForm from c3nav.mesh.messages import MeshMessage, MeshMessageType from c3nav.mesh.models import MeshNode, NodeMessage -from c3nav.mesh.utils import get_node_names +from c3nav.mesh.utils import get_node_names, group_msg_type_choices class MeshNodeListView(ControlPanelMixin, ListView): @@ -30,7 +30,7 @@ class MeshNodeListView(ControlPanelMixin, ListView): def get_context_data(self, *args, **kwargs): return { **super().get_context_data(*args, **kwargs), - "send_msg_types": {msg_type for msg_type in MeshMessageForm.msg_types.keys()} + "send_msg_types": group_msg_type_choices({msg_type for msg_type in MeshMessageForm.msg_types.keys()}) } def post(self, request): diff --git a/src/c3nav/mesh/utils.py b/src/c3nav/mesh/utils.py index 393561ed..a0784f98 100644 --- a/src/c3nav/mesh/utils.py +++ b/src/c3nav/mesh/utils.py @@ -1,3 +1,6 @@ +from operator import attrgetter + + def get_mesh_comm_group(address): return 'mesh_comm_%s' % address.replace(':', '-') @@ -14,3 +17,13 @@ def get_node_names(): '00:00:00:ff:ff:ff': "direct parent", '00:00:00:00:00:00': "root", } + + +def group_msg_type_choices(msg_types): + msg_types = sorted(msg_types, key=attrgetter('value')) + choices = {} + for msg_type in msg_types: + choices.setdefault(msg_type.name.split('_')[0].lower(), []).append( + (msg_type.name, msg_type.pretty_name) + ) + return tuple(choices.items())