diff --git a/src/main/ua-parser.js b/src/main/ua-parser.js index 7edc48d..87fac2a 100755 --- a/src/main/ua-parser.js +++ b/src/main/ua-parser.js @@ -76,6 +76,7 @@ LG = 'LG', MICROSOFT = 'Microsoft', MOTOROLA = 'Motorola', + ONEPLUS = 'OnePlus', OPPO = 'OPPO', SAMSUNG = 'Samsung', SHARP = 'Sharp', @@ -576,7 +577,7 @@ // Motorola /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i, /\bmot(?:orola)?[- ](\w*)/i, - /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i + /((?:moto(?! 360)[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [ /\b(mz60\d|xoom[2 ]{0,2}) build\//i ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [ @@ -585,7 +586,7 @@ /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [ /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i, - /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i, + /\blg[-e;\/ ]+((?!browser|netcast|android tv|watch)\w+)/i, /\blg-?([\d\w]+) bui/i ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [ @@ -617,7 +618,7 @@ // OnePlus / (kb2005|in20[12]5|be20[12][59])\b/i, /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i - ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [ + ], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [ // Amazon /(alexa)webm/i, @@ -697,14 +698,12 @@ /(infinix) (x1101b?)/i // Infinix XPad ], [VENDOR, MODEL, [TYPE, TABLET]], [ - /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i, + /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i, // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan /; (hmd|imo) ([\w ]+?)(?: bui|\))/i, // HMD/IMO /(hp) ([\w ]+\w)/i, // HP iPAQ - /(asus)-?(\w+)/i, // Asus /(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia /(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i, // Lenovo - /(jolla)/i, // Jolla /(oppo) ?([\w ]+) bui/i // OPPO ], [VENDOR, MODEL, [TYPE, MOBILE]], [ @@ -784,13 +783,23 @@ // WEARABLES /////////////////// - /\b(sm-[lr]\d\d[05][fnuw]?s?)\b/i // Samsung Galaxy Watch + /\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i // Samsung Galaxy Watch ], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [ /((pebble))app/i, // Pebble - /(google) (pixel watch[\w ]*)( bui|\))/i // Pixel Watch + /(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i // Asus ZenWatch / LG Watch / Pixel Watch ], [VENDOR, MODEL, [TYPE, WEARABLE]], [ + /(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch + ], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [ /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [ + /(opwwe\d{3})/i // OnePlus Watch + ], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [ + /(moto 360)/i // Motorola 360 + ], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [ + /(smartwatch 3)/i // Sony SmartWatch + ], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [ + /(g watch r)/i // LG G Watch R + ], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [ /droid.+; (wt63?0{2,3})\)/i ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [ diff --git a/test/data/ua/device/asus.json b/test/data/ua/device/asus.json index 4e3a0ef..e5fee47 100644 --- a/test/data/ua/device/asus.json +++ b/test/data/ua/device/asus.json @@ -151,5 +151,14 @@ "model": "Z00ED", "type": "mobile" } + }, + { + "desc": "ASUS ZenWatch", + "ua": "Mozilla/5.0 (Linux; Android 5.0.1; ASUS ZenWatch Build/LWX48S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/19.77.34.5 Mobile Safari/537.36", + "expect": { + "vendor": "ASUS", + "model": "ZenWatch", + "type": "wearable" + } } ] \ No newline at end of file diff --git a/test/data/ua/device/lg.json b/test/data/ua/device/lg.json index f0312eb..b47e99f 100644 --- a/test/data/ua/device/lg.json +++ b/test/data/ua/device/lg.json @@ -160,5 +160,23 @@ "model": "LK430", "type": "tablet" } + }, + { + "desc": "LG Watch Urbane", + "ua": "Mozilla/5.0 Linux; Android 7.1.1; LG Watch Urbane Build/NWD1.180306.004 AppleWebKit/537.36 KHTML, like Gecko Chrome/19.77.34.5 Mobile Safari/537.36", + "expect": { + "vendor": "LG", + "model": "Watch Urbane", + "type": "wearable" + } + }, + { + "desc": "LG G Watch R", + "ua": "Mozilla/5.0 (Linux; Android 5.1.1; G Watch R Build/LCA44B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Crosswalk/15.44.384.12 Mobile Safari/537.36", + "expect": { + "vendor": "LG", + "model": "G Watch R", + "type": "wearable" + } } ] \ No newline at end of file diff --git a/test/data/ua/device/motorola.json b/test/data/ua/device/motorola.json index af6a4c8..b9227ba 100644 --- a/test/data/ua/device/motorola.json +++ b/test/data/ua/device/motorola.json @@ -79,5 +79,14 @@ "model": "Moto E (4)", "type": "mobile" } + }, + { + "desc": "Motorola Moto 360", + "ua": "Mozilla/5.0 (Linux; Android 4.4; Moto 360 Build/KNX01S) AppleWebKit/537.36 (KHTML, like Gecko) WIB/0.9.8 Mobile Safari/537.36", + "expect": { + "vendor": "Motorola", + "model": "Moto 360", + "type": "wearable" + } } ] \ No newline at end of file diff --git a/test/data/ua/device/oneplus.json b/test/data/ua/device/oneplus.json index 44407d4..74ddcf6 100644 --- a/test/data/ua/device/oneplus.json +++ b/test/data/ua/device/oneplus.json @@ -115,5 +115,14 @@ "model": "OPD2203", "type": "tablet" } + }, + { + "desc": "OnePlus Watch 2", + "ua": "Dalvik/2.1.0 (Linux; U; Android 13; OPWWE231 Build/TWR7.231113.001.OPWWE231_11_A.117.240703)", + "expect": { + "vendor": "OnePlus", + "model": "OPWWE231", + "type": "wearable" + } } ] \ No newline at end of file diff --git a/test/data/ua/device/oppo.json b/test/data/ua/device/oppo.json index 250909b..367039e 100644 --- a/test/data/ua/device/oppo.json +++ b/test/data/ua/device/oppo.json @@ -133,5 +133,41 @@ "model": "CPH1723", "type": "mobile" } + }, + { + "desc": "OPPO Watch 46mm", + "ua": "Mozilla/5.0 (Linux; Android 8.1.0; OW19W3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36", + "expect": { + "vendor": "OPPO", + "model": "OW19W3", + "type": "wearable" + } + }, + { + "desc": "OPPO Watch 41mm", + "ua": "Mozilla/5.0 (Linux; Android 8.1.0; OW19W2 Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.98 Mobile Safari/537.36", + "expect": { + "vendor": "OPPO", + "model": "OW19W2", + "type": "wearable" + } + }, + { + "desc": "OPPO Watch 2", + "ua": "Mozilla/5.0 (Linux; Android 8.1.0; OW20W1 Build/OPM1.171019.026.11_A.37.210713172937; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.98 Mobile Safari/537.36", + "expect": { + "vendor": "OPPO", + "model": "OW20W1", + "type": "wearable" + } + }, + { + "desc": "OPPO Watch X", + "ua": "Dalvik/2.1.0 (Linux; U; Android 13; OWWE231 Build/TWR7.231113.001.OWWE231_11_A.117.240703)", + "expect": { + "vendor": "OPPO", + "model": "OWWE231", + "type": "wearable" + } } ] \ No newline at end of file diff --git a/test/data/ua/device/samsung.json b/test/data/ua/device/samsung.json index 0edb0f0..56e7b73 100644 --- a/test/data/ua/device/samsung.json +++ b/test/data/ua/device/samsung.json @@ -242,6 +242,15 @@ "type": "wearable" } }, + { + "desc": "Samsung Galaxy Watch7", + "ua": "Dalvik/2.1.0 (Linux; U; Android 14; SM-L300 Build/AW2E.240318.016)", + "expect": { + "vendor": "Samsung", + "model": "SM-L300", + "type": "wearable" + } + }, { "desc": "Samsung Note 10.1", "ua": "Mozilla/5.0 (Linux; Android 5.1.1; SM-P605) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36", @@ -367,5 +376,14 @@ "model": "SM-N920C", "type": "mobile" } + }, + { + "desc": "Samsung Galaxy Gear Live", + "ua": "Mozilla/5.0 (Linux; Android 4.4; Gear Live Build/KMV78X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/19.77.34.5 Mobile Safari/537.36", + "expect": { + "vendor": "Samsung", + "model": "Gear Live", + "type": "wearable" + } } ] \ No newline at end of file diff --git a/test/data/ua/device/sony.json b/test/data/ua/device/sony.json index a4debe7..92151af 100644 --- a/test/data/ua/device/sony.json +++ b/test/data/ua/device/sony.json @@ -205,5 +205,14 @@ "model": "PlayStation Vita", "type": "console" } + }, + { + "desc": "Sony SmartWatch 3", + "ua": "Mozilla/5.0 (Linux; Android 5.0.2; SmartWatch 3 Build/LWX49K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/19.77.34.5 Mobile Safari/537.36", + "expect": { + "vendor": "Sony", + "model": "SmartWatch 3", + "type": "wearable" + } } ] \ No newline at end of file