Parse browser version.
This commit is contained in:
parent
bf4576d155
commit
ea8dc45796
|
@ -39,8 +39,4 @@ data class DeviceExtendedInfo(
|
||||||
* i.e. 1.5.0.
|
* i.e. 1.5.0.
|
||||||
*/
|
*/
|
||||||
val clientVersion: String? = null,
|
val clientVersion: String? = null,
|
||||||
/**
|
|
||||||
* i.e. Chrome.
|
|
||||||
*/
|
|
||||||
val browser: String? = null,
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -74,21 +74,38 @@ class ParseDeviceUserAgentUseCase @Inject constructor() {
|
||||||
|
|
||||||
private fun parseDesktopUserAgent(userAgent: String): DeviceExtendedInfo {
|
private fun parseDesktopUserAgent(userAgent: String): DeviceExtendedInfo {
|
||||||
val browserSegments = userAgent.split(" ")
|
val browserSegments = userAgent.split(" ")
|
||||||
val browserName = when {
|
val (browserName, browserVersion) = when {
|
||||||
isFirefox(browserSegments) -> {
|
isFirefox(browserSegments) -> {
|
||||||
"Firefox"
|
Pair("Firefox", getBrowserVersion(browserSegments, "Firefox"))
|
||||||
}
|
}
|
||||||
isEdge(browserSegments) -> {
|
isEdge(browserSegments) -> {
|
||||||
"Edge"
|
Pair("Edge", getBrowserVersion(browserSegments, "Edge"))
|
||||||
}
|
}
|
||||||
isMobile(browserSegments) -> {
|
isMobile(browserSegments) -> {
|
||||||
getMobileBrowserName(browserSegments)
|
when (val name = getMobileBrowserName(browserSegments)) {
|
||||||
|
null -> {
|
||||||
|
Pair(null, null)
|
||||||
|
}
|
||||||
|
"Safari" -> {
|
||||||
|
Pair(name, getBrowserVersion(browserSegments, "Version"))
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
Pair(name, getBrowserVersion(browserSegments, name))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
isSafari(browserSegments) -> {
|
isSafari(browserSegments) -> {
|
||||||
"Safari"
|
Pair("Safari", getBrowserVersion(browserSegments, "Version"))
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
getRegularBrowserName(browserSegments)
|
when (val name = getRegularBrowserName(browserSegments)) {
|
||||||
|
null -> {
|
||||||
|
Pair(null, null)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
Pair(name, getBrowserVersion(browserSegments, name))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,9 +119,8 @@ class ParseDeviceUserAgentUseCase @Inject constructor() {
|
||||||
deviceType = DeviceType.DESKTOP,
|
deviceType = DeviceType.DESKTOP,
|
||||||
deviceModel = null,
|
deviceModel = null,
|
||||||
deviceOperatingSystem = deviceOperatingSystem,
|
deviceOperatingSystem = deviceOperatingSystem,
|
||||||
clientName = null,
|
clientName = browserName,
|
||||||
clientVersion = null,
|
clientVersion = browserVersion,
|
||||||
browser = browserName
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,6 +138,16 @@ class ParseDeviceUserAgentUseCase @Inject constructor() {
|
||||||
return browserSegments.lastOrNull()?.startsWith("Firefox").orFalse()
|
return browserSegments.lastOrNull()?.startsWith("Firefox").orFalse()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getBrowserVersion(browserSegments: List<String>, browserName: String): String? {
|
||||||
|
// Chrome/104.0.3497.100 -> 104
|
||||||
|
return browserSegments
|
||||||
|
.find { it.startsWith(browserName) }
|
||||||
|
?.split("/")
|
||||||
|
?.getOrNull(1)
|
||||||
|
?.split(".")
|
||||||
|
?.firstOrNull()
|
||||||
|
}
|
||||||
|
|
||||||
private fun isEdge(browserSegments: List<String>): Boolean {
|
private fun isEdge(browserSegments: List<String>): Boolean {
|
||||||
return browserSegments.lastOrNull()?.startsWith("Edge").orFalse()
|
return browserSegments.lastOrNull()?.startsWith("Edge").orFalse()
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,8 +61,8 @@ private val A_USER_AGENT_LIST_FOR_DESKTOP = listOf(
|
||||||
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) ElementNightly/2022091301 Chrome/104.0.5112.102 Electron/20.1.1 Safari/537.36",
|
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) ElementNightly/2022091301 Chrome/104.0.5112.102 Electron/20.1.1 Safari/537.36",
|
||||||
)
|
)
|
||||||
private val AN_EXPECTED_RESULT_LIST_FOR_DESKTOP = listOf(
|
private val AN_EXPECTED_RESULT_LIST_FOR_DESKTOP = listOf(
|
||||||
DeviceExtendedInfo(DeviceType.DESKTOP, null, "Macintosh", null, null, "Electron"),
|
DeviceExtendedInfo(DeviceType.DESKTOP, null, "Macintosh", "Electron", "20"),
|
||||||
DeviceExtendedInfo(DeviceType.DESKTOP, null, "Windows NT 10.0", null, null, "Electron"),
|
DeviceExtendedInfo(DeviceType.DESKTOP, null, "Windows NT 10.0", "Electron", "20"),
|
||||||
)
|
)
|
||||||
|
|
||||||
private val A_USER_AGENT_LIST_FOR_WEB = listOf(
|
private val A_USER_AGENT_LIST_FOR_WEB = listOf(
|
||||||
|
@ -77,15 +77,15 @@ private val A_USER_AGENT_LIST_FOR_WEB = listOf(
|
||||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246",
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246",
|
||||||
)
|
)
|
||||||
private val AN_EXPECTED_RESULT_LIST_FOR_WEB = listOf(
|
private val AN_EXPECTED_RESULT_LIST_FOR_WEB = listOf(
|
||||||
DeviceExtendedInfo(DeviceType.WEB, null, "Macintosh", null, null, "Chrome"),
|
DeviceExtendedInfo(DeviceType.WEB, null, "Macintosh", "Chrome", "104"),
|
||||||
DeviceExtendedInfo(DeviceType.WEB, null, "Windows NT 10.0", null, null, "Chrome"),
|
DeviceExtendedInfo(DeviceType.WEB, null, "Windows NT 10.0", "Chrome", "104"),
|
||||||
DeviceExtendedInfo(DeviceType.WEB, null, "Macintosh", null, null, "Firefox"),
|
DeviceExtendedInfo(DeviceType.WEB, null, "Macintosh", "Firefox", "39"),
|
||||||
DeviceExtendedInfo(DeviceType.WEB, null, "Macintosh", null, null, "Safari"),
|
DeviceExtendedInfo(DeviceType.WEB, null, "Macintosh", "Safari", "8"),
|
||||||
DeviceExtendedInfo(DeviceType.WEB, null, "Android 9", null, null, "Chrome"),
|
DeviceExtendedInfo(DeviceType.WEB, null, "Android 9", "Chrome", "69"),
|
||||||
DeviceExtendedInfo(DeviceType.WEB, null, "iPad", null, null, "Safari"),
|
DeviceExtendedInfo(DeviceType.WEB, null, "iPad", "Safari", "8"),
|
||||||
DeviceExtendedInfo(DeviceType.WEB, null, "iPhone", null, null, "Safari"),
|
DeviceExtendedInfo(DeviceType.WEB, null, "iPhone", "Safari", "8"),
|
||||||
DeviceExtendedInfo(DeviceType.WEB, null, "Windows NT 6.0", null, null, "Firefox"),
|
DeviceExtendedInfo(DeviceType.WEB, null, "Windows NT 6.0", "Firefox", "40"),
|
||||||
DeviceExtendedInfo(DeviceType.WEB, null, "Windows NT 10.0", null, null, "Edge"),
|
DeviceExtendedInfo(DeviceType.WEB, null, "Windows NT 10.0", "Edge", "12"),
|
||||||
)
|
)
|
||||||
|
|
||||||
private val AN_UNKNOWN_USER_AGENT_LIST = listOf(
|
private val AN_UNKNOWN_USER_AGENT_LIST = listOf(
|
||||||
|
|
Loading…
Reference in New Issue