diff --git a/server/src/adsb.mjs b/server/src/adsb.mjs index eb96b8f..3109a03 100644 --- a/server/src/adsb.mjs +++ b/server/src/adsb.mjs @@ -111,21 +111,21 @@ export async function initAircraftDb() { db = new Database(DB_PATH); db.exec(` CREATE TABLE IF NOT EXISTS aircraft ( - icao TEXT PRIMARY KEY, - built TEXT, - categoryDescription TEXT, - country TEXT, - engines TEXT, - class TEXT, - manufacturer TEXT, - model TEXT, - modes TEXT, - operator TEXT, - operatorCallsign TEXT, - owner TEXT, - registration TEXT, - serialNumber TEXT, - aircraft TEXT + icao TEXT PRIMARY KEY, + built TEXT, + categoryDescription TEXT, + country TEXT, + engines TEXT, + class TEXT, + manufacturer TEXT, + model TEXT, + modes TEXT, + operator TEXT, + operatorCallsign TEXT, + owner TEXT, + registration TEXT, + serialNumber TEXT, + aircraft TEXT ); CREATE TABLE IF NOT EXISTS military_ranges (start TEXT NOT NULL, end TEXT NOT NULL); @@ -243,7 +243,10 @@ export function classifyAircraft(row) { const matchesAny = (fields, list) => fields.some(f => { const value = normalizeName(f); - return value && list.some(k => value.includes(normalizeName(k))); + return value && list.some(k => { + const kw = normalizeName(k); + return kw && new RegExp('\\b' + kw.replace(/[.*+?^${}()|[\\]\\]/g, '\\$&') + '\\b', 'i').test(value); + }); }); const operators = [row.operator, row.operatorCallsign, row.owner]; @@ -503,4 +506,4 @@ setInterval(() => { const last = trail.at(-1); if (!last || last.ts < cutoff) history.delete(key); } -}, 1000 * 60 * 5); +}, 1000 * 60 * 5); \ No newline at end of file