diff --git a/DeviceDetector.php b/DeviceDetector.php index 8933a7652c..5c51fd11a4 100644 --- a/DeviceDetector.php +++ b/DeviceDetector.php @@ -1049,11 +1049,11 @@ protected function parseDevice(): void } /** - * Devices running those browsers are assumed to be a TV + * Devices running those clients are assumed to be a TV */ if (\in_array($clientName, [ 'Kylo', 'Espial TV Browser', 'LUJO TV Browser', 'LogicUI TV Browser', 'Open TV Browser', 'Seraphic Sraf', - 'Opera Devices', 'Crow Browser', 'Vewd Browser', 'Quick Search TV', + 'Opera Devices', 'Crow Browser', 'Vewd Browser', 'TiviMate', 'Quick Search TV', ]) ) { $this->device = AbstractDeviceParser::DEVICE_TYPE_TV; diff --git a/Parser/Device/AbstractDeviceParser.php b/Parser/Device/AbstractDeviceParser.php index c7dd1f9db4..ce5f5d8af6 100644 --- a/Parser/Device/AbstractDeviceParser.php +++ b/Parser/Device/AbstractDeviceParser.php @@ -354,6 +354,7 @@ abstract class AbstractDeviceParser extends AbstractParser '9C' => 'Colors', 'CO' => 'Coolpad', 'COO' => 'Coopers', + 'CDE' => 'COOD-E', '4R' => 'CORN', '1O' => 'Cosmote', 'CW' => 'Cowon', @@ -441,6 +442,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'JQ' => 'Doppio', 'DR' => 'Doro', 'ZD' => 'DORLAND', + 'DRO' => 'Droidlogic', 'D8' => 'Droxio', 'DJ' => 'Dragon Touch', 'DRA' => 'DRAGON', @@ -514,6 +516,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'EE' => 'Essential', 'E2' => 'Essentielb', '6E' => 'eSTAR', + 'ETO' => 'ETOE', 'EN' => 'Eton', 'ET' => 'eTouch', '1E' => 'Etuline', @@ -553,6 +556,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'FAR' => 'Farassoo', 'FB' => 'Fantec', 'FE' => 'Fengxiang', + 'FEN' => 'Fenoti', 'F7' => 'Fero', '67' => 'FEONAL', 'FI' => 'FiGO', @@ -583,6 +587,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'FOD' => 'FoxxD', 'FJ' => 'FOODO', 'FOS' => 'FOSSiBOT', + 'FRE' => 'free', 'FT' => 'Freetel', 'FEY' => 'FreeYond', 'FRU' => 'Frunsi', @@ -761,17 +766,20 @@ abstract class AbstractDeviceParser extends AbstractParser 'U4' => 'iMan', 'ILE' => 'iLepo', 'IL' => 'IMO Mobile', + 'IMA' => 'Imaq', 'IM1' => 'Imose', 'I3' => 'Impression', 'FC' => 'INCAR', '2H' => 'Inch', '6I' => 'Inco', + 'INK' => 'Inka', 'IW' => 'iNew', 'IF' => 'Infinix', 'INF' => 'Infiniton', 'I0' => 'InFocus', 'IN1' => 'InFone', 'II' => 'Inkti', + 'MIR' => 'Infomir', '81' => 'InfoKit', 'I5' => 'InnJoo', '26' => 'Innos', @@ -814,6 +822,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'QW' => 'iWaylink', 'I9' => 'iZotron', 'IXT' => 'iXTech', + 'IOT' => 'IOTWE', 'JA' => 'JAY-Tech', 'KJ' => 'Jiake', 'JD' => 'Jedi', @@ -1220,6 +1229,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'PA' => 'Panasonic', 'PT' => 'Pantech', 'PAN' => 'Pano', + 'PND' => 'Panodic', 'PA1' => 'Panoramic', 'PLT' => 'Platoon', '94' => 'Packard Bell', @@ -1510,7 +1520,6 @@ abstract class AbstractDeviceParser extends AbstractParser 'SWI' => 'Switel', 'SS' => 'SWISSMOBILITY', '1W' => 'Swisstone', - 'W7' => 'SWTV', 'SSK' => 'SSKY', 'SYC' => 'Syco', 'SM' => 'Symphony', @@ -1539,6 +1548,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'TPS' => 'TPS', '9E' => 'Techwood', '7F' => 'Technopc', + 'TCH' => 'Techstorm', 'T7' => 'Teclast', 'TB' => 'Tecno Mobile', 'TEC' => 'TecToy', @@ -1742,6 +1752,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'WAL' => 'Waltter', 'WHI' => 'White Mobile', 'WBL' => 'We. by Loewe.', + 'WCP' => 'WeChip', 'WM' => 'Weimei', 'WE' => 'WellcoM', 'W6' => 'WELLINGTON', diff --git a/Tests/Parser/Client/fixtures/mobile_app.yml b/Tests/Parser/Client/fixtures/mobile_app.yml index f4ead952d3..bb8fb9fa7c 100644 --- a/Tests/Parser/Client/fixtures/mobile_app.yml +++ b/Tests/Parser/Client/fixtures/mobile_app.yml @@ -1631,6 +1631,12 @@ type: mobile app name: HistoryHound version: "1.9" +- + user_agent: Mozilla/5.0 (Linux; Android 7.1.2; Amlogic Alvatech GT1 Build/NHG47L) IPTV Pro/7.1.3 + client: + type: mobile app + name: IPTV Pro + version: 7.1.3 - user_agent: Quicksilver (Blacktree,MacOSX) client: diff --git a/Tests/fixtures/smartphone-37.yml b/Tests/fixtures/smartphone-37.yml index 7cea987746..0e9ee0e585 100644 --- a/Tests/fixtures/smartphone-37.yml +++ b/Tests/fixtures/smartphone-37.yml @@ -8111,6 +8111,60 @@ model: 11x 5G os_family: Android browser_family: Unknown +- + user_agent: Mozilla/5.0 (Linux; Android 8.1; Q5.8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 + os: + name: Android + version: "8.1" + platform: "" + client: + type: browser + name: Chrome Mobile + version: 96.0.4664.45 + engine: Blink + engine_version: 96.0.4664.45 + device: + type: smartphone + brand: Uniqcell + model: Q5.8 + os_family: Android + browser_family: Chrome +- + user_agent: Mozilla/5.0 (Linux; Android 8.1; Space A5.8 Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.119 Mobile Safari/537.36 + os: + name: Android + version: "8.1" + platform: "" + client: + type: browser + name: Chrome Webview + version: 44.0.2403.119 + engine: Blink + engine_version: 44.0.2403.119 + device: + type: smartphone + brand: Uniqcell + model: Space A5.8 + os_family: Android + browser_family: Chrome +- + user_agent: Mozilla/5.0 (Linux; Android 8.1.0; WS054) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 + os: + name: Android + version: 8.1.0 + platform: "" + client: + type: browser + name: Chrome Mobile + version: 96.0.4664.45 + engine: Blink + engine_version: 96.0.4664.45 + device: + type: smartphone + brand: Wolki + model: W5.5 Lite + os_family: Android + browser_family: Chrome - user_agent: iPhone11 os: diff --git a/Tests/fixtures/tablet-11.yml b/Tests/fixtures/tablet-11.yml index 0f28c06d41..16a37f67c8 100644 --- a/Tests/fixtures/tablet-11.yml +++ b/Tests/fixtures/tablet-11.yml @@ -143,3 +143,21 @@ model: Red Magic Gaming Pad os_family: Android browser_family: Unknown +- + user_agent: Mozilla/5.0 (Linux; Android 8.1.0; MID169) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.92 Safari/537.36 + os: + name: Android + version: 8.1.0 + platform: "" + client: + type: browser + name: Chrome + version: 96.0.4664.92 + engine: Blink + engine_version: 96.0.4664.92 + device: + type: tablet + brand: Takara + model: MID169 + os_family: Android + browser_family: Chrome diff --git a/Tests/fixtures/tv-3.yml b/Tests/fixtures/tv-3.yml index 8d63ef23ed..cf855df790 100644 --- a/Tests/fixtures/tv-3.yml +++ b/Tests/fixtures/tv-3.yml @@ -2079,6 +2079,24 @@ model: LS445 os_family: GNU/Linux browser_family: Chrome +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 11; Panodic Build/RD2A.211001.002) + os: + name: Android + version: "11" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Panodic + model: TV Box + os_family: Android + browser_family: Android Browser - user_agent: Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.172 Mobile Safari/537.36 os: @@ -2099,3 +2117,495 @@ browser_family: Chrome headers: http-x-requested-with: com.aospstudio.tvsearch +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 13; FENOTI_42FN6000F Build/TP1A.220905.004.A2) + os: + name: Android + version: "13" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Fenoti + model: 42FN6000F + os_family: Android + browser_family: Android Browser +- + user_agent: Kodi/19.3 (Linux; Android 9.0; MAG425A Build/PPR1.180610.011) Android/9.0.0 Sys_CPU/armv7l App_Bitness/32 Version/19.3-(19.3.0) + os: + name: Android + version: "9.0" + platform: ARM + client: + type: mediaplayer + name: Kodi + version: "19.3" + device: + type: tv + brand: Infomir + model: MAG425A + os_family: Android + browser_family: Unknown +- + user_agent: TiviMate/4.7.0 (SDMC D1221; Android 11) + os: + name: Android + version: "11" + platform: "" + client: + type: mobile app + name: TiviMate + version: 4.7.0 + device: + type: tv + brand: ETOE + model: D1221 + os_family: Android + browser_family: Unknown +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 9; IMAQ TETRA Build/PPR1.180610.011) + os: + name: Android + version: "9" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Imaq + model: Tetra + os_family: Android + browser_family: Android Browser +- + user_agent: Mozilla/5.0 (Linux; Android 7.1.2; Amlogic Alvatech GT1 Build/NHG47L) IPTV Pro/7.1.3 + os: + name: Android + version: 7.1.2 + platform: "" + client: + type: mobile app + name: IPTV Pro + version: 7.1.3 + device: + type: tv + brand: Beelink + model: GT1 + os_family: Android + browser_family: Unknown +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 7.1.2; COOD-E TV 4K Build/NHG47L) + os: + name: Android + version: 7.1.2 + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: COOD-E + model: TV Box 4K + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 9; D2140 Build/PI) + os: + name: Android + version: "9" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Anker + model: Nebula Cosmos + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 9; D2150 Build/PI) + os: + name: Android + version: "9" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Anker + model: Nebula Cosmos Max + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 11; AI PONT Build/RTO2.220913.001) + os: + name: Android + version: "11" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: "" + model: AI PONT + os_family: Android + browser_family: Android Browser +- + user_agent: Kodi/20.2 (Linux; Android 13.0; DQ08 Build/TQ3C.230805.001.B2) Android/13.0.0 Sys_CPU/armv8l App_Bitness/32 Version/20.2-(20.2.0)-Git:20230629-5f418d0b13 + os: + name: Android + version: "13.0" + platform: ARM + client: + type: mediaplayer + name: Kodi + version: "20.2" + device: + type: tv + brand: Vontar + model: DQ08 + os_family: Android + browser_family: Unknown +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; MINIM8S Build/LMY47V) + os: + name: Android + version: 5.1.1 + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Sunvell + model: Mini M8S + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 7.1.2; X96mini Build/NHG47L) + os: + name: Android + version: 7.1.2 + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Inka + model: X96 mini + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 10; WZONE Build/QTT8.201201.002) + os: + name: Android + version: "10" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Botech + model: Wzone + os_family: Android + browser_family: Android Browser +- + user_agent: TiviMate/4.7.0 (Freebox Player Mini; Android 7.1.1) + os: + name: Android + version: 7.1.1 + platform: "" + client: + type: mobile app + name: TiviMate + version: 4.7.0 + device: + type: tv + brand: free + model: Freebox Player Mini + os_family: Android + browser_family: Unknown +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 10; i96 Pro Build/QP1A.191105.004) + os: + name: Android + version: "10" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Droidlogic + model: i96 Pro + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 10; SWTV-20AE-PRO Build/QTG3.200617.002) + os: + name: Android + version: "10" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Skyworth + model: SWTV-20AE-PRO + os_family: Android + browser_family: Android Browser +- + user_agent: TiviMate/4.7.0 (Allwinner Nitro Pro; Android 12) + os: + name: Android + version: "12" + platform: "" + client: + type: mobile app + name: TiviMate + version: 4.7.0 + device: + type: tv + brand: Techstorm + model: Nitro Pro + os_family: Android + browser_family: Unknown +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 9; SWTV Build/PTO7.200925.001) + os: + name: Android + version: "9" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Skyworth + model: "" + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 10; MyBox Build/QP1A.191105.004) + os: + name: Android + version: "10" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: 'Next & NextStar' + model: MyBox + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 10; V10 Build/QP1A.191105.004) + os: + name: Android + version: "10" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: WeChip + model: V10 + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 13; T95pro Build/SP1A.210812.015) + os: + name: Android + version: "13" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: IOTWE + model: T95 Pro + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 11; X6-PRO Build/RD2A.211001.002) + os: + name: Android + version: "11" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Hiremco + model: X6 Pro + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 13; 8K3528-T Build/TQ3C.230805.001.B2) + os: + name: Android + version: "13" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: "" + model: 8K3528-T + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 7.0; MXQ-H3 Build/NRD91N) + os: + name: Android + version: "7.0" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: Sunvell + model: MXQ-H3 + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 13; MX10 Build/TQ2A.230305.008.F1) + os: + name: Android + version: "13" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: "" + model: MX10 + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 6.0.1; V88 Build/MXC89L) + os: + name: Android + version: 6.0.1 + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: "" + model: V88 + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 12; H8S Build/SP1A.211105.004) + os: + name: Android + version: "12" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: "" + model: H8S + os_family: Android + browser_family: Android Browser +- + user_agent: Dalvik/2.1.0 (Linux; U; Android 9; X92 Build/PI) + os: + name: Android + version: "9" + platform: "" + client: + type: browser + name: Android Browser + version: "" + engine: WebKit + engine_version: "" + device: + type: tv + brand: "" + model: X92 + os_family: Android + browser_family: Android Browser diff --git a/Tests/fixtures/tv.yml b/Tests/fixtures/tv.yml index f035e49a3b..0b1385737a 100644 --- a/Tests/fixtures/tv.yml +++ b/Tests/fixtures/tv.yml @@ -9163,7 +9163,7 @@ engine_version: "55.0.2883.91" device: type: tv - brand: SWTV + brand: Skyworth model: SKWE20E21 os_family: GNU/Linux browser_family: Chrome diff --git a/regexes/client/mobile_apps.yml b/regexes/client/mobile_apps.yml index a5e646ceee..e9825f0cc4 100644 --- a/regexes/client/mobile_apps.yml +++ b/regexes/client/mobile_apps.yml @@ -2204,6 +2204,11 @@ name: 'IPTV' version: '$1' +# IPTV Pro (https://play.google.com/store/apps/details?id=ru.iptvremote.android.iptv.pro) +- regex: 'IPTV Pro/([\d\.]+)' + name: 'IPTV Pro' + version: '$1' + # MetaMask (https://apps.apple.com/us/app/metamask-blockchain-wallet/id1438144202) - regex: 'MetaMask/' name: 'MetaMask' diff --git a/regexes/device/mobiles.yml b/regexes/device/mobiles.yml index 94b1d8009e..0332839e42 100644 --- a/regexes/device/mobiles.yml +++ b/regexes/device/mobiles.yml @@ -7439,6 +7439,12 @@ Eurostar: model: '$1' device: 'tv' +# ETOE (https://etoeofficial.com/) +ETOE: + regex: 'SDMC D1221(?:[);/ ]|$)' + device: 'tv' + model: 'D1221' + # Eton Eton: regex: 'Eton' @@ -21807,12 +21813,12 @@ Sky: # Skyworth Skyworth: - regex: 'Sky_?worth|(?:FlowBox-F1|SWTV-20AE)(?:[);/ ]|$)' + regex: 'Sky_?worth|SWTV-|(?:FlowBox-F1|SWTV)(?:[);/ ]|$)' device: 'tv' models: - regex: 'FlowBox-F1' model: 'FlowBox-F1' - - regex: '(SWTV-20AE)' + - regex: '(SWTV-20AE(?:-PRO)?)' model: '$1' - regex: 'Sky_?worth ([^;/)]+)(?: Build|[;)])' model: '$1' @@ -23237,9 +23243,15 @@ Ok: # Anker (https://www.anker.com/) Anker: - regex: 'Anker|smarttv_AFTMM-Anker-AK-D3000111|AFTMM(?:[);/ ]|$)' + regex: 'Anker|smarttv_AFTMM-Anker-AK-D3000111|(?:AFTMM|D21[45]0)(?:[);/ ]|$)' device: 'tv' - model: 'Nebula Soundbar' + models: + - regex: 'Anker|smarttv_AFTMM-Anker-AK-D3000111|AFTMM(?:[);/ ]|$)' + model: 'Nebula Soundbar' + - regex: 'D2140(?:[);/ ]|$)' + model: 'Nebula Cosmos' + - regex: 'D2150(?:[);/ ]|$)' + model: 'Nebula Cosmos Max' # Altus (https://www.altus.com.tr/) Altus: @@ -24681,11 +24693,13 @@ UMIDIGI: # Uniqcell Uniqcell: - regex: 'UNIQCELL_' + regex: 'UNIQCELL_|[AQ]5.8(?:[;/) ]|$)' device: 'smartphone' models: - regex: 'UNIQCELL_A4(?:[;/) ]|$)' model: 'A4' + - regex: '(Space A5.8|Q5.8)(?:[;/) ]|$)' + model: '$1' # Uniscope Uniscope: @@ -24819,6 +24833,14 @@ Fengxiang: device: 'tablet' model: '$1' +# Fenoti +Fenoti: + regex: 'FENOTI' + device: 'tv' + models: + - regex: 'FENOTI_(42FN6000F)(?:[);/ ]|$)' + model: '$1' + # VK Mobile VK Mobile: regex: 'VK-VK([79]00)(?:[);/ ]|$)' @@ -25499,6 +25521,12 @@ Inco: device: 'tablet' model: 'Sphere$1' +# Inka +Inka: + regex: 'X96mini(?:[);/ ]|$)' + device: 'tv' + model: 'X96 mini' + # Wink Wink: regex: '(?