Add a fleet overview page that shows every printer's status at once.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Joshua King
2026-10-20 13:05:32 -04:00
co-authored by Cursor
parent 0ec94a909e
commit 43f416ab69
7 changed files with 1283 additions and 61 deletions
+26 -2
View File
@@ -27,8 +27,8 @@ class FleetTests(unittest.TestCase):
extra.update(id=f'printer_{index}', entity_prefix=f'new_printer_{index}')
self.printers.append(extra)
package = generate(self.printers)
self.assertEqual(len([page for page in package['lvgl']['pages'] if not page.get('skip')]), expected_count)
self.assertEqual(len(package['script']), expected_count)
self.assertEqual(len([page for page in package['lvgl']['pages'] if not page.get('skip')]), expected_count + 1)
self.assertEqual(len(package['script']), expected_count + 1)
subscriptions = {entry['id']: entry['entity_id'] for entry in package['sensor']}
self.assertEqual(subscriptions['printer_9_progress'], 'sensor.new_printer_9_print_progress')
for page in package['lvgl']['pages']:
@@ -147,6 +147,30 @@ class FleetTests(unittest.TestCase):
self.assertEqual(config['packages']['fleet'], 'bambu-display/generated.yaml')
self.assertEqual(len(names), 2)
def test_fleet_overview_lists_every_printer(self):
package = generate(self.printers)
page = package['lvgl']['pages'][0]
self.assertEqual(page['id'], 'fleet_page')
self.assertFalse(page.get('skip'))
rows = [widget['obj'] for widget in page['widgets']
if 'obj' in widget and str(widget['obj'].get('id', '')).endswith('_overview_row')]
self.assertEqual([row['id'][:-len('_overview_row')] for row in rows],
[printer['id'] for printer in self.printers])
previous = 46
for row, printer in zip(rows, self.printers):
self.assertEqual(row['on_click'], [{'lvgl.page.show': printer['id'] + '_page'}])
self.assertGreaterEqual(row['y'], previous)
self.assertLessEqual(row['y'] + row['height'], 440)
previous = row['y'] + row['height']
code = next(script['then'][0]['lambda'] for script in package['script'] if script['id'] == 'fleet_refresh')
for printer in self.printers:
self.assertIn(f'id({printer["id"]}_overview_status)', code)
shown = [step['if']['condition']['lvgl.page.is_showing'] for step in package['interval'][0]['then']]
self.assertIn('fleet_page', shown)
charming = next(item for item in package['lvgl']['pages'] if item['id'] == 'prints_charming_page')
numbers = [next(iter(widget.values())).get('text') for widget in charming['widgets']]
self.assertIn(f'2 / {len(self.printers) + 1}', numbers)
def test_diagnostic_color_page_is_skipped_during_normal_navigation(self):
package = generate(self.printers)
page = next(page for page in package['lvgl']['pages'] if page['id'] == 'color_test_page')