@@ -66,6 +66,55 @@ def get_device_condition_by_status(device_status):
6666 return get_device_conditions ().get (device_status , "WHERE 1=0" )
6767
6868
69+ # -------------------------------------------------------------------------------
70+ def get_sql_devices_tiles ():
71+ """Build the device tiles count SQL using get_device_conditions() to avoid duplicating filter logic."""
72+ conds = get_device_conditions ()
73+
74+ def f (key ):
75+ """Strip 'WHERE ' prefix for use inside SELECT subqueries."""
76+ return conds [key ][len ("WHERE " ):]
77+
78+ # UI_MY_DEVICES setting values mapped to their device_conditions keys
79+ my_devices_setting_map = [
80+ ("online" , "connected" ),
81+ ("offline" , "offline" ),
82+ ("down" , "down" ),
83+ ("new" , "new" ),
84+ ("archived" , "archived" ),
85+ ]
86+
87+ my_devices_clauses = "\n OR " .join (
88+ f"(instr((SELECT setValue FROM Statuses), '{ sk } ') > 0 AND { f (ck )} )"
89+ for sk , ck in my_devices_setting_map
90+ )
91+
92+ return f"""
93+ WITH Statuses AS (
94+ SELECT setValue
95+ FROM Settings
96+ WHERE setKey = 'UI_MY_DEVICES'
97+ ),
98+ MyDevicesFilter AS (
99+ SELECT devMac
100+ FROM Devices
101+ WHERE
102+ { my_devices_clauses }
103+ )
104+ SELECT
105+ (SELECT COUNT(*) FROM Devices WHERE { f ('connected' )} ) AS connected,
106+ (SELECT COUNT(*) FROM Devices WHERE { f ('offline' )} ) AS offline,
107+ (SELECT COUNT(*) FROM Devices WHERE { f ('down' )} ) AS down,
108+ (SELECT COUNT(*) FROM Devices WHERE { f ('new' )} ) AS new,
109+ (SELECT COUNT(*) FROM Devices WHERE { f ('archived' )} ) AS archived,
110+ (SELECT COUNT(*) FROM Devices WHERE { f ('favorites' )} ) AS favorites,
111+ (SELECT COUNT(*) FROM Devices WHERE { f ('all' )} ) AS "all",
112+ (SELECT COUNT(*) FROM Devices) AS "all_devices",
113+ (SELECT COUNT(*) FROM MyDevicesFilter) AS my_devices
114+ FROM Statuses;
115+ """
116+
117+
69118# -------------------------------------------------------------------------------
70119# Creates a JSON-like dictionary from a database row
71120def row_to_json (names , row ):
0 commit comments