Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.48 KB | None | 0 0
  1. package com.sbtech.android.features.sportsbook.repo
  2.  
  3. import com.google.gson.Gson
  4. import com.sbtech.android.features.common.Mapper
  5. import com.sbtech.android.features.common.MethodDelegate
  6. import com.sbtech.android.features.common.extensions.fromJson
  7. import com.sbtech.android.features.sportsbook.EventKeys
  8. import com.sbtech.android.features.sportsbook.TranslationKeys
  9. import com.sbtech.android.features.sportsbook.UpdateType
  10. import com.sbtech.android.features.sportsbook.entity.*
  11. import com.sbtech.android.features.sportsbook.eventList.SportsbookRecycleAdapter.Companion.ITEM_AMERICAN_CARD
  12. import com.sbtech.android.features.sportsbook.eventList.SportsbookRecycleAdapter.Companion.ITEM_EUROPEAN_CARD
  13. import com.sbtech.android.features.sportsbook.eventList.SportsbookRecycleAdapter.Companion.ITEM_OUTRIGHT_CARD
  14. import com.sbtech.android.features.sportsbook.response.Event
  15. import com.sbtech.android.features.sportsbook.response.EventsResult
  16. import com.sbtech.android.features.sportsbook.response.Market
  17. import com.sbtech.android.features.sportsbook.response.Selection
  18. import com.sbtech.android.uikit.composite.selections.SbtSelection.Companion.STATE_DISABLED
  19. import com.sbtech.android.uikit.composite.selections.SbtSelection.Companion.STATE_SELECTED
  20. import com.sbtech.android.uikit.composite.selections.SbtSelection.Companion.STATE_SUSPENDED_ACTIVE
  21. import com.sbtech.android.uikit.composite.selections.SbtSelection.Companion.STATE_SUSPENDED_SELECTED
  22. import com.sbtech.android.uikit.composite.selections.SelectionItem
  23. import io.reactivex.subjects.PublishSubject
  24. import org.json.JSONObject
  25. import java.text.SimpleDateFormat
  26. import java.util.*
  27. import java.util.TimeZone.getTimeZone
  28. import kotlin.collections.ArrayList
  29.  
  30. class EventsMapper(
  31. private val events: ArrayList<BaseSportsbookListItem>,
  32. private val gson: Gson,
  33. private val sportsbookConfig: SportsbookConfig,
  34. private val tickSubject: PublishSubject<Unit>,
  35. private val selectedOdds: List<String>,
  36. private val timezone: String,
  37. private val translationsDelegate: MethodDelegate<String, String>
  38. ) : Mapper<String?, EventEntity>() {
  39.  
  40. private val dateFormatFrom = SimpleDateFormat(EventKeys.SERVER_DATE_FORMAT.key, Locale.getDefault())
  41. private val dateFormatTo = SimpleDateFormat(sportsbookConfig.datesFormat, Locale.getDefault())
  42. private val timeFormatTo = SimpleDateFormat(sportsbookConfig.timeFormatting, Locale.getDefault())
  43. private val selectionOrder = listOf(EventKeys.OUTCOME_TYPE_HOME.key, EventKeys.OUTCOME_TYPE_TIE.key, EventKeys.OUTCOME_TYPE_AWAY.key)
  44.  
  45. override fun map(from: String?): EventEntity {
  46. val jsonObject = JSONObject(from)
  47. var loadedEventsCount = 0
  48.  
  49. when (jsonObject.optString(UpdateType.TYPE.key)) {
  50. UpdateType.ADD.key -> {
  51. val payload = jsonObject.optJSONObject(EventKeys.PAYLOAD.key)
  52.  
  53. val eventKey = payload.optString(EventKeys.EVENTS.key)
  54.  
  55. if (!eventKey.isNullOrEmpty()) {
  56. addEvents(gson.fromJson<EventsResult<Event>>(from)?.payload?.updatedEvents)
  57. } else {
  58. addMarkets(gson.fromJson<EventsResult<Market>>(from)?.payload?.updatedMarkets)
  59. }
  60. }
  61. UpdateType.CHANGE.key -> {
  62. val payload = jsonObject.optJSONObject(EventKeys.PAYLOAD.key)
  63. val eventKey = payload.optString(EventKeys.EVENTS.key)
  64.  
  65. if (!eventKey.isNullOrEmpty()) {
  66. updateEvents(gson.fromJson<EventsResult<Event>>(from)?.payload?.updatedEvents)
  67. } else {
  68. //updateMarkets(gson.fromJson<EventsResult<Market>>(from)?.payload?.updatedMarkets)
  69. }
  70. }
  71. UpdateType.DELETE.key -> {
  72. val payload = jsonObject.optJSONObject(EventKeys.PAYLOAD.key)
  73. val eventKey = payload.optString(EventKeys.EVENTS.key)
  74.  
  75. if (!eventKey.isNullOrEmpty()) {
  76. removeEvents(gson.fromJson<EventsResult<String>>(from)?.payload?.updatedEvents)
  77. } else {
  78. //removeMarkets(gson.fromJson<EventsResult<String>>(from)?.payload?.updatedMarkets)
  79. }
  80. }
  81. else -> {
  82. val remoteEvents = gson.fromJson<EventsResult<Event>>(from)?.events
  83. addEvents(remoteEvents, true)
  84. loadedEventsCount = remoteEvents?.size ?: 0
  85. }
  86. }
  87. return EventEntity(loadedEventsCount, events)
  88. }
  89.  
  90. /*INIT*/
  91.  
  92. //add events
  93. private fun addEvents(newEvents: List<Event>?, isInit: Boolean = false) {
  94. newEvents?.forEach { event ->
  95. if (events.any { e -> e.id != event.id } || isInit) {
  96. if (event.type == EventKeys.CARD_TYPE_OUTRIGHT.key) {
  97. addOutRightEvent(event)
  98. } else {
  99. val sportType = event.sportType
  100.  
  101. if (sportType == EventKeys.SPORT_TYPE_AMERICA.key) {
  102. addAmericanEvent(event, sportType)
  103. } else {
  104. addEuropeanEvent(event, sportType)
  105. }
  106. }
  107. }
  108. }
  109. }
  110.  
  111. //add outright event
  112. private fun addOutRightEvent(remoteEvent: Event) {
  113. events.add(
  114. OutrightEventListItem(
  115. eventId = remoteEvent.id,
  116. eventName = remoteEvent.eventName ?: "",
  117. leagueId = remoteEvent.leagueId ?: "",
  118. leagueName = remoteEvent.leagueName ?: "",
  119. sportId = remoteEvent.sportId ?: "",
  120. startEventDate = formatDate(remoteEvent.startEventDate),
  121. clockRunning = remoteEvent.liveGameState?.clockRunning ?: false,
  122. clockDirection = remoteEvent.liveGameState?.clockDirection ?: "",
  123. marketEntities = fillMarkets(remoteEvent.markets, remoteEvent.isSuspended == true, remoteEvent.isLive == true),
  124. isTeamSwap = remoteEvent.isTeamSwap ?: false,
  125. tickSubject = tickSubject,
  126. created = System.currentTimeMillis() / 1000,
  127. timer = remoteEvent.liveGameState?.gameTime ?: 0L,
  128. isSuspended = remoteEvent.isSuspended,
  129. isLive = remoteEvent.isLive
  130. )
  131. )
  132. }
  133.  
  134. private fun formatDate(dateString: String?): String {
  135. if (dateString.isNullOrEmpty()) {
  136. return ""
  137. }
  138.  
  139. dateFormatFrom.timeZone = getTimeZone(EventKeys.TIME_ZONE_UTC.key)
  140. val date = dateFormatFrom.parse(dateString.substringBeforeLast(":"))
  141.  
  142. if (sportsbookConfig.monthNaming == EventKeys.MONTH_NAMING_NAME.key) {
  143.  
  144. val calendar = Calendar.getInstance()
  145. calendar.time = date
  146.  
  147. val today = Calendar.getInstance()
  148.  
  149. val yesterday = Calendar.getInstance()
  150. yesterday.add(Calendar.DATE, -1)
  151.  
  152. val tomorrow = Calendar.getInstance()
  153. yesterday.add(Calendar.DATE, +1)
  154.  
  155. if (calendar.get(Calendar.YEAR) == today.get(Calendar.YEAR) && calendar.get(Calendar.DAY_OF_YEAR) == today.get(Calendar.DAY_OF_YEAR)) {
  156. return translationsDelegate.get(TranslationKeys.SPORTSBOOOK_TODAY_KEY.key)
  157. } else if (calendar.get(Calendar.YEAR) == tomorrow.get(Calendar.YEAR) && calendar.get(Calendar.DAY_OF_YEAR) == tomorrow.get(Calendar.DAY_OF_YEAR)) {
  158. return translationsDelegate.get(TranslationKeys.SPORTSBOOOK_TOMORROW_KEY.key)
  159. }
  160. }
  161. dateFormatTo.timeZone = getTimeZone(timezone)
  162. return dateFormatTo.format(date)
  163. }
  164.  
  165. private fun formatTime(dateString: String?): String {
  166. if (dateString.isNullOrEmpty()) {
  167. return ""
  168. }
  169.  
  170. dateFormatFrom.timeZone = getTimeZone(EventKeys.TIME_ZONE_UTC.key)
  171. val date = dateFormatFrom.parse(dateString.substringBeforeLast(":"))
  172. timeFormatTo.timeZone = getTimeZone(timezone)
  173. return timeFormatTo.format(date)
  174. }
  175.  
  176. //add american event
  177. private fun addAmericanEvent(event: Event, sportType: String?) {
  178. addEuropeanEvent(event, sportType)
  179. }
  180.  
  181. //add european event
  182. private fun addEuropeanEvent(remoteEvent: Event, sportType: String?) {
  183. var startEventDate = ""
  184. var startEventTime = ""
  185. if (remoteEvent.isLive == false) {
  186. startEventDate = formatDate(remoteEvent.startEventDate)
  187. startEventTime = formatTime(remoteEvent.startEventDate)
  188. }
  189.  
  190. val prematchInfo = PrematchEventInfo(
  191. startEventDate,
  192. startEventTime
  193. )
  194.  
  195. val event = EventListItem(
  196. eventId = remoteEvent.id,
  197. eventType = if (remoteEvent.isLive == true) EventKeys.LIVE.key else EventKeys.PREMATCH.key,
  198. leagueId = remoteEvent.leagueId ?: "",
  199. leagueName = remoteEvent.leagueName ?: "",
  200. totalMarketsCount = "${remoteEvent.totalMarketsCount} ${translationsDelegate.get(TranslationKeys.SPORTSBOOK_BUTTON_MORE_BETS_TEXT.key)}",
  201. sportId = remoteEvent.sportId ?: "",
  202. liveEventInfo = LiveEventInfo(
  203. serveIndicator = remoteEvent.score?.onServe?.toInt(),
  204. clockRunning = remoteEvent.liveGameState?.clockRunning ?: false,
  205. clockDirection = remoteEvent.liveGameState?.clockDirection ?: "",
  206. firstScore = remoteEvent.score?.totalScore?.first() ?: "",
  207. secondScore = remoteEvent.score?.totalScore?.last() ?: "",
  208. firstSetScore = remoteEvent.score?.currentGameScore?.first() ?: "",
  209. secondSetScore = remoteEvent.score?.currentGameScore?.last() ?: "",
  210. timer = remoteEvent.liveGameState?.gameTime ?: 0L,
  211. gamePart = if (!remoteEvent.liveGameState?.gamePart.isNullOrEmpty()) {
  212. translationsDelegate.get("${EventKeys.GAME_PART.key}${remoteEvent.liveGameState?.gamePart}")
  213. } else {
  214. ""
  215. }
  216. ),
  217. marketEntities = fillMarkets(remoteEvent.markets, remoteEvent.isSuspended == true, remoteEvent.isLive == true),
  218. prematchEventInfo = prematchInfo,
  219. firstTeamName = if (!remoteEvent.teamNames.isNullOrEmpty()) remoteEvent.teamNames.first() else "",
  220. secondTeamName = if (!remoteEvent.teamNames.isNullOrEmpty()) remoteEvent.teamNames.last() else "",
  221. cardType = if (sportType == EventKeys.SPORT_TYPE_AMERICA.key) ITEM_AMERICAN_CARD else ITEM_EUROPEAN_CARD,
  222. isTeamSwap = remoteEvent.isTeamSwap ?: false,
  223. tickSubject = tickSubject,
  224. created = System.currentTimeMillis() / 1000,
  225. isSuspended = remoteEvent.isSuspended,
  226. isLive = remoteEvent.isLive
  227. )
  228. if (remoteEvent.isTeamSwap == true) {
  229. applyTeamSwap(event)
  230. }
  231. events.add(event)
  232. }
  233.  
  234.  
  235. //add outright market
  236. // private fun addOutrightMarket(remoteEvent: Event): List<MarketEntity> {
  237. // return addEuropeanMarket(remoteEvent)
  238. // }
  239. //
  240. // //add american market
  241. // private fun addAmericanMarkets(remoteEvent: Event): List<MarketEntity> {
  242. // val markets = ArrayList<MarketEntity>()
  243. // sportsbookConfig.americanMarketsOrder.forEach {
  244. // markets.add(generateEmptyMarket(it))
  245. // }
  246. //
  247. // remoteEvent.markets?.forEach { remoteMarket ->
  248. // for (marketEntity in markets) {
  249. // if (remoteMarket.marketType.id == marketEntity.marketType.idLive || remoteMarket.marketType.id == marketEntity.marketType.idPrematch) {
  250. // addSelections(
  251. // remoteMarket.selections,
  252. // marketEntity.selections,
  253. // remoteEvent.isSuspended == true || remoteMarket.isSuspended == true
  254. // )
  255. // break
  256. // }
  257. // }
  258. // }
  259. // return markets
  260. // }
  261.  
  262. //add european market
  263. // private fun addEuropeanMarket(remoteEvent: Event): List<MarketEntity> {
  264. // val markets = ArrayList<MarketEntity>()
  265. // markets.add(generateEmptyMarket(MarketTypeId("", ""), remoteEvent.type, remoteEvent.sportType))
  266. //
  267. // remoteEvent.markets?.forEach { remoteMarket ->
  268. //
  269. // for (marketEntity in markets) {
  270. // addSelections(remoteMarket.selections, marketEntity.selections, remoteEvent.isSuspended == true || remoteMarket.isSuspended == true)
  271. // }
  272. // }
  273. //
  274. // return markets
  275. // }
  276.  
  277. private fun addMarkets(remoteMarkets: List<Market>?) {
  278. val eventId = remoteMarkets?.getOrNull(0)?.eventId
  279.  
  280. when (val localEvent = events.find { it.id == eventId }) {
  281. is EventListItem -> {
  282. val localMarkets = fillMarkets(remoteMarkets, localEvent.isSuspended == true, localEvent.isLive == true)
  283. localEvent.marketEntities.addAll(localMarkets)
  284. }
  285. is OutrightEventListItem -> {
  286. val localMarkets = fillMarkets(remoteMarkets, localEvent.isSuspended == true, localEvent.isLive == true)
  287. localEvent.marketEntities.addAll(localMarkets)
  288. }
  289. }
  290. }
  291.  
  292. private fun fillMarkets(remoteMarkets: List<Market>?, isSuspended: Boolean, isLiveEvent: Boolean): ArrayList<MarketEntity> {
  293. val localMarkets = ArrayList<MarketEntity>()
  294.  
  295. remoteMarkets?.let {
  296. Collections.sort(
  297. it,
  298. compareBy { market ->
  299. sportsbookConfig.americanMarketsOrder.map { marketId -> if (isLiveEvent) marketId.liveId else marketId.prematchId }
  300. .indexOf(market.marketType.id)
  301. })
  302. }
  303.  
  304. remoteMarkets?.forEach { remoteMarket ->
  305. val localSelections = ArrayList<SelectionItem>()
  306.  
  307. remoteMarket.selections.let {
  308. Collections.sort(it, compareBy { s -> selectionOrder.indexOf(s.outcomeType) })
  309. }
  310.  
  311. for (remoteSelection in remoteMarket.selections) {
  312. val state = if (isSuspended || remoteMarket.isSuspended == true) {
  313. if (selectedOdds.contains(remoteSelection.id)) {
  314. STATE_SUSPENDED_SELECTED
  315. } else {
  316. STATE_SUSPENDED_ACTIVE
  317. }
  318. } else {
  319. if (selectedOdds.contains(remoteSelection.id)) {
  320. STATE_SELECTED
  321. } else {
  322. remoteSelection.status
  323. }
  324. }
  325.  
  326. localSelections.add(
  327. SelectionItem(
  328. id = remoteSelection.id,
  329. name = getSelectionName(remoteSelection.outcomeType, remoteSelection.name) ?: "",
  330. value = remoteSelection.odds?.toDouble() ?: 0.0,
  331. state = state
  332. )
  333. )
  334. }
  335.  
  336. localMarkets.add(
  337. MarketEntity(
  338. id = remoteMarket.id,
  339. eventId = remoteMarket.eventId,
  340. selections = localSelections,
  341. marketTypeId = remoteMarket.marketType.id
  342. )
  343. )
  344. }
  345. return localMarkets
  346. }
  347.  
  348. private fun getSelectionName(outcomeType: String?, remoteSelectionName: String?) = when (outcomeType) {
  349. EventKeys.OUTCOME_TYPE_HOME.key -> translationsDelegate.get(TranslationKeys.SPORTSBOOK_ML_HOME_SELECTION_NAME.key)
  350. EventKeys.OUTCOME_TYPE_AWAY.key -> translationsDelegate.get(TranslationKeys.SPORTSBOOK_ML_AWAY_SELECTION_NAME.key)
  351. EventKeys.OUTCOME_TYPE_TIE.key -> translationsDelegate.get(TranslationKeys.SPORTSBOOK_ML_DRAW_SELECTION_NAME.key)
  352. else -> remoteSelectionName
  353. }
  354.  
  355. //add selections
  356. // private fun addSelections(remoteSelections: List<Selection>?, selections: List<SelectionItem>, isSuspended: Boolean) {
  357. //
  358. // remoteSelections?.let {
  359. // Collections.sort(it, compareBy { s -> selectionOrder.indexOf(s.outcomeType) })
  360. // }
  361. //
  362. // selections.forEachIndexed { index, selectionItem ->
  363. //
  364. // val remoteSelection = remoteSelections?.getOrNull(index)
  365. //
  366. // remoteSelection?.let {
  367. // selectionItem.id = it.id
  368. // selectionItem.name = getSelectionName(it.outcomeType, it.name) ?: ""
  369. // selectionItem.value = it.odds?.toDouble() ?: 0.0
  370. // if (isSuspended) {
  371. // if (selectedOdds.contains(it.id)) {
  372. // selectionItem.state = STATE_SUSPENDED_SELECTED
  373. // } else {
  374. // selectionItem.state = STATE_SUSPENDED_ACTIVE
  375. // }
  376. // } else {
  377. // if (selectedOdds.contains(it.id)) {
  378. // selectionItem.state = STATE_SELECTED
  379. // } else {
  380. // selectionItem.state = it.status
  381. // }
  382. // }
  383. // }
  384. // }
  385. // }
  386.  
  387.  
  388. // private fun generateEmptyMarket(marketTypeId: MarketTypeId, cardType: String? = null, sportType: String? = null): MarketEntity {
  389. // val selections = ArrayList<SelectionItem>().apply {
  390. // add(generateEmptySelection())
  391. // add(generateEmptySelection())
  392. // }
  393. //
  394. // if (sportType == EventKeys.SPORT_TYPE_EUROPE.key && cardType != EventKeys.CARD_TYPE_OUTRIGHT.key) {
  395. // selections.add(generateEmptySelection())
  396. // }
  397. // return MarketEntity(
  398. // id = "",
  399. // name = "",
  400. // marketType = MarketType(marketTypeId.liveId, marketTypeId.prematchId),
  401. // selections = selections
  402. // )
  403. // }
  404.  
  405. // private fun generateEmptySelection() =
  406. // SelectionItem(
  407. // id = "",
  408. // name = "",
  409. // value = 0.0,
  410. // state = STATE_DISABLED
  411. // )
  412.  
  413. /*ADD*/
  414. //add markets
  415. // private fun addMarkets(remoteMarkets: List<Market>?) {
  416. //
  417. // remoteMarkets?.forEach { remoteMarket ->
  418. // val event = events.first { e -> remoteMarket.eventId == e.id }
  419. //
  420. // when {
  421. // event.type == ITEM_AMERICAN_CARD -> {
  422. // val e = event as EventListItem
  423. // e.marketEntities.forEach { marketEntity ->
  424. // if (marketEntity.marketType.idLive == remoteMarket.marketType.id || marketEntity.marketType.idPrematch == remoteMarket.marketType.id) {
  425. // marketEntity.id = remoteMarket.id
  426. // addSelections(remoteMarkets.first().selections, marketEntity.selections, remoteMarket.isSuspended == true)
  427. // }
  428. // }
  429. // }
  430. // event.type == ITEM_EUROPEAN_CARD -> {
  431. // val e = event as EventListItem
  432. // addSelections(remoteMarkets.first().selections, e.marketEntities.first().selections, remoteMarket.isSuspended == true)
  433. // }
  434. // event.type == ITEM_OUTRIGHT_CARD -> {
  435. // val e = event as OutrightEventListItem
  436. // addSelections(remoteMarkets.first().selections, e.marketEntities.first().selections, remoteMarket.isSuspended == true)
  437. // }
  438. // }
  439. // }
  440. // }
  441.  
  442. /*CHANGE*/
  443. //update events
  444. private fun updateEvents(newEvents: List<Event>?) {
  445.  
  446. newEvents?.forEach { newEvent ->
  447. val oldEvent = events.first { newEvent.id == it.id }
  448.  
  449. if (oldEvent.type == ITEM_AMERICAN_CARD || oldEvent.type == ITEM_EUROPEAN_CARD) {
  450. updateEvent(newEvent, oldEvent as EventListItem)
  451. } else {
  452. updateOutRightEvent(newEvent, oldEvent as OutrightEventListItem)
  453. }
  454. }
  455. }
  456.  
  457. private fun updateEvent(newEvent: Event, oldEvent: EventListItem) {
  458.  
  459. newEvent.run {
  460.  
  461. isLive?.let {
  462. oldEvent.eventType = if (it) EventKeys.LIVE.key else EventKeys.PREMATCH.key
  463. }
  464.  
  465. if (!leagueId.isNullOrEmpty()) {
  466. oldEvent.leagueId = leagueId
  467. }
  468.  
  469. if (!leagueName.isNullOrEmpty()) {
  470. oldEvent.leagueName = leagueName
  471. }
  472.  
  473. totalMarketsCount?.let {
  474. oldEvent.totalMarketsCount = "$it ${translationsDelegate.get(TranslationKeys.SPORTSBOOK_BUTTON_MORE_BETS_TEXT.key)}"
  475. }
  476.  
  477. if (!startEventDate.isNullOrEmpty()) {
  478. oldEvent.prematchEventInfo.startTime = formatDate(startEventDate)
  479. oldEvent.prematchEventInfo.startTime = formatTime(startEventDate)
  480. }
  481.  
  482. isTeamSwap?.let {
  483. oldEvent.isTeamSwap = it
  484.  
  485. }
  486.  
  487. score?.let { score ->
  488. score.onServe?.let {
  489. oldEvent.liveEventInfo.serveIndicator
  490. }
  491.  
  492. score.currentGameScore?.let {
  493. oldEvent.liveEventInfo.firstSetScore = it.first()
  494. oldEvent.liveEventInfo.secondSetScore = it.last()
  495. }
  496.  
  497. score.totalScore?.let {
  498. oldEvent.liveEventInfo.firstScore = it.first()
  499. oldEvent.liveEventInfo.secondScore = it.last()
  500. }
  501.  
  502. }
  503.  
  504. liveGameState?.let { liveGameState ->
  505. liveGameState.clockDirection?.let {
  506. oldEvent.liveEventInfo.clockDirection = it
  507. }
  508.  
  509. liveGameState.clockRunning?.let {
  510. oldEvent.liveEventInfo.clockRunning = it
  511. }
  512.  
  513. liveGameState.gamePart?.let { gamepart ->
  514. oldEvent.liveEventInfo.gamePart = translationsDelegate.get("${EventKeys.GAME_PART.key} $gamepart")
  515. }
  516.  
  517. liveGameState.gameTime?.let {
  518. oldEvent.created = System.currentTimeMillis() / 1000
  519. oldEvent.liveEventInfo.timer = it
  520. }
  521. }
  522.  
  523. if (!teamNames.isNullOrEmpty()) {
  524. oldEvent.firstTeamName = teamNames.first()
  525. oldEvent.secondTeamName = teamNames.last()
  526. }
  527.  
  528. if (isTeamSwap == true) {
  529. applyTeamSwap(oldEvent)
  530. }
  531. }
  532. }
  533.  
  534. private fun applyTeamSwap(eventEntity: EventListItem) {
  535. var temp: String = eventEntity.firstTeamName
  536. eventEntity.firstTeamName = eventEntity.secondTeamName
  537. eventEntity.secondTeamName = temp
  538.  
  539. temp = eventEntity.liveEventInfo.firstScore
  540. eventEntity.liveEventInfo.firstScore = eventEntity.liveEventInfo.secondScore
  541. eventEntity.liveEventInfo.secondScore = temp
  542.  
  543. temp = eventEntity.liveEventInfo.firstSetScore
  544. eventEntity.liveEventInfo.firstSetScore = eventEntity.liveEventInfo.secondSetScore
  545. eventEntity.liveEventInfo.secondSetScore = temp
  546.  
  547. if (eventEntity.type == ITEM_AMERICAN_CARD || eventEntity.type == ITEM_OUTRIGHT_CARD) {
  548.  
  549. eventEntity.marketEntities.forEach { marketEntity ->
  550.  
  551. if (marketEntity.marketTypeId != EventKeys.MARKET_TYPE_OVER_UNDER_LIVE.key && marketEntity.marketTypeId != EventKeys.MARKET_TYPE_OVER_UNDER.key) {
  552. marketEntity.selections = marketEntity.selections.reversed()
  553. }
  554. }
  555. }
  556. }
  557.  
  558. private fun updateOutRightEvent(newEvent: Event, oldEvent: OutrightEventListItem) {
  559. newEvent.run {
  560.  
  561. if (!eventName.isNullOrEmpty()) {
  562. oldEvent.eventName = eventName
  563. }
  564.  
  565. if (!leagueId.isNullOrEmpty()) {
  566. oldEvent.leagueId = leagueId
  567. }
  568.  
  569. if (!leagueName.isNullOrEmpty()) {
  570. oldEvent.leagueName = leagueName
  571. }
  572.  
  573. if (!startEventDate.isNullOrEmpty()) {
  574. oldEvent.startEventDate = startEventDate
  575. }
  576.  
  577. if (liveGameState != null) {
  578. liveGameState.clockDirection?.let {
  579. oldEvent.clockDirection = it
  580. }
  581.  
  582. liveGameState.clockRunning?.let {
  583. oldEvent.clockRunning
  584. }
  585. }
  586. }
  587. }
  588.  
  589. //update markets
  590. // private fun updateMarkets(newMarkets: List<Market>?) {
  591. // newMarkets?.forEach { remoteMarket ->
  592. //
  593. // val event = events.first { event -> event.id == remoteMarket.eventId }
  594. //
  595. // when {
  596. // event.type == ITEM_AMERICAN_CARD -> {
  597. // val eventEntity = event as EventListItem
  598. //
  599. // for (marketEntity in eventEntity.marketEntities) {
  600. // if (remoteMarket.marketType.id == marketEntity.marketType.idLive || remoteMarket.marketType.id == marketEntity.marketType.idPrematch) {
  601. // updateSelections(remoteMarket, marketEntity)
  602. // break
  603. // }
  604. // }
  605. // }
  606. // event.type == ITEM_EUROPEAN_CARD -> {
  607. // val eventEntity = event as EventListItem
  608. // updateSelections(remoteMarket, eventEntity.marketEntities.first())
  609. //
  610. // }
  611. // event.type == ITEM_OUTRIGHT_CARD -> {
  612. // val eventEntity = event as OutrightEventListItem
  613. // updateSelections(remoteMarket, eventEntity.marketEntities.first())
  614. // }
  615. // }
  616. // }
  617. // }
  618.  
  619. private fun updateSelections(remoteMarket: Market, marketEntity: MarketEntity) {
  620.  
  621. marketEntity.selections.forEach { selectionItem ->
  622.  
  623. loop@ for (remoteSelection in remoteMarket.selections) {
  624. if (remoteSelection.id == selectionItem.id) {
  625. selectionItem.name = getSelectionName(remoteSelection.outcomeType, remoteSelection.name) ?: ""
  626. selectionItem.value = remoteSelection.odds?.toDouble() ?: 0.0
  627. if (remoteMarket.isSuspended == true) {
  628. if (selectedOdds.contains(remoteSelection.id)) {
  629. selectionItem.state = STATE_SUSPENDED_SELECTED
  630. } else {
  631. selectionItem.state = STATE_SUSPENDED_ACTIVE
  632. }
  633. } else {
  634. if (selectedOdds.contains(remoteSelection.id)) {
  635. selectionItem.state = STATE_SELECTED
  636. } else {
  637. selectionItem.state = remoteSelection.status
  638. }
  639. }
  640. break@loop
  641. }
  642. }
  643. }
  644. }
  645.  
  646. /*REMOVE*/
  647. //remove events
  648. private fun removeEvents(removedEvents: List<String>?) {
  649. val list = removedEvents?.flatMap { id -> events.filter { id == it.id } }
  650. list?.let { events.removeAll(it) }
  651. }
  652.  
  653. // private fun removeMarkets(remoteMarkets: List<String>?) {
  654. //
  655. // remoteMarkets?.forEach { remoteMarketId ->
  656. //
  657. // for (eventEntity in events) {
  658. // if (eventEntity.type == ITEM_AMERICAN_CARD || eventEntity.type == ITEM_EUROPEAN_CARD) {
  659. // val e = eventEntity as EventListItem
  660. // clearMarkets(e.marketEntities, remoteMarketId)
  661. // } else {
  662. // val e = eventEntity as OutrightEventListItem
  663. // clearMarkets(e.marketEntities, remoteMarketId)
  664. // }
  665. // }
  666. // }
  667. //
  668. // }
  669.  
  670. // private fun clearMarkets(marketEntities: List<MarketEntity>, remoteMarketId: String) {
  671. // for (marketEntity in marketEntities) {
  672. // if (marketEntity.id == remoteMarketId) {
  673. // marketEntity.id = ""
  674. // marketEntity.marketType = MarketType("", "")
  675. // marketEntity.selections.forEach { selectionEntity ->
  676. // selectionEntity.id = ""
  677. // selectionEntity.name = ""
  678. // selectionEntity.value = 0.0
  679. // selectionEntity.state = STATE_DISABLED
  680. // }
  681. // }
  682. // }
  683. // }
  684. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement