diff --git a/src/c3nav/routing/route.py b/src/c3nav/routing/route.py index bb178ad4..55794ff0 100644 --- a/src/c3nav/routing/route.py +++ b/src/c3nav/routing/route.py @@ -49,6 +49,20 @@ class Route: items.append(item) last_item = item last_node = node + + # descriptions for waytypes + next_item = None + for item in reversed(items): + if item.waytype: + if item.waytype.join_edges and next_item and next_item.waytype == item.waytype: + continue + if item.waytype.up_separate and item.edge.rise > 0: + item.description = item.waytype.description_up + else: + item.description = item.waytype.description + elif item.new_space: + item.description = _('Enter %(space)s.') % {'space': item.space.title} + return OrderedDict(( ('origin', describe_location(self.origin, locations)), ('destination', describe_location(self.destination, locations)), @@ -63,6 +77,7 @@ class RouteItem: self.node = node self.edge = edge self.last_item = last_item + self.description = None @cached_property def waytype(self): @@ -77,6 +92,14 @@ class RouteItem: def level(self): return self.route.router.levels[self.space.level_id] + @cached_property + def new_space(self): + return not self.last_item or self.space.pk != self.last_item.space.pk + + @cached_property + def new_level(self): + return not self.last_item or self.level.pk != self.last_item.level.pk + def serialize(self, locations): result = OrderedDict(( ('id', self.node.pk), @@ -87,11 +110,14 @@ class RouteItem: if self.waytype: result['waytype'] = self.waytype.serialize(detailed=False) - if not self.last_item or self.space.pk != self.last_item.space.pk: + if self.new_space: result['space'] = describe_location(self.space, locations) - if not self.last_item or self.level.pk != self.last_item.level.pk: + if self.new_level: result['level'] = describe_location(self.level, locations) + + if self.description: + result['description'] = self.description return result