Skip to content

Commit b617be0

Browse files
authored
Simplify and guard YiR impact API call. (#6172)
1 parent fd203c6 commit b617be0

File tree

1 file changed

+22
-35
lines changed

1 file changed

+22
-35
lines changed

app/src/main/java/org/wikipedia/yearinreview/YearInReviewViewModel.kt

Lines changed: 22 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import org.wikipedia.dataclient.WikiSite
2121
import org.wikipedia.dataclient.growthtasks.GrowthUserImpact
2222
import org.wikipedia.dataclient.restbase.UserEdits
2323
import org.wikipedia.json.JsonUtil
24-
import org.wikipedia.page.PageTitle
2524
import org.wikipedia.settings.Prefs
2625
import org.wikipedia.settings.RemoteConfig
2726
import org.wikipedia.util.DateUtil
@@ -110,40 +109,28 @@ class YearInReviewViewModel() : ViewModel() {
110109
val wikiSite = WikipediaApp.instance.wikiSite
111110
val userInfoResponse = ServiceFactory.get(wikiSite).getLocalAndGlobalUserInfo()
112111

113-
val impactDataJob = async {
114-
val now = Instant.now().epochSecond
115-
val impact: GrowthUserImpact
116-
val impactLastResponseBodyMap = Prefs.impactLastResponseBody.toMutableMap()
117-
val impactResponse = impactLastResponseBodyMap[wikiSite.languageCode]
118-
if (impactResponse.isNullOrEmpty() || abs(now - Prefs.impactLastQueryTime) > TimeUnit.HOURS.toSeconds(12)) {
119-
val userId = userInfoResponse.query?.userInfo?.id ?: 0
120-
impact = ServiceFactory.getCoreRest(wikiSite).getUserImpact(userId)
121-
impactLastResponseBodyMap[wikiSite.languageCode] =
122-
JsonUtil.encodeToString(impact).orEmpty()
123-
Prefs.impactLastResponseBody = impactLastResponseBodyMap
124-
Prefs.impactLastQueryTime = now
125-
} else {
126-
impact = JsonUtil.decodeFromString(impactResponse)!!
112+
val totalPageViewsJob = async {
113+
var pageViewsFromImpactApi = 0L
114+
try {
115+
val now = Instant.now().epochSecond
116+
val impact: GrowthUserImpact
117+
val impactLastResponseBodyMap = Prefs.impactLastResponseBody.toMutableMap()
118+
val impactResponse = impactLastResponseBodyMap[wikiSite.languageCode]
119+
if (impactResponse.isNullOrEmpty() || abs(now - Prefs.impactLastQueryTime) > TimeUnit.HOURS.toSeconds(12)) {
120+
val userId = userInfoResponse.query?.userInfo?.id ?: 0
121+
impact = ServiceFactory.getCoreRest(wikiSite).getUserImpact(userId)
122+
impactLastResponseBodyMap[wikiSite.languageCode] =
123+
JsonUtil.encodeToString(impact).orEmpty()
124+
Prefs.impactLastResponseBody = impactLastResponseBodyMap
125+
Prefs.impactLastQueryTime = now
126+
} else {
127+
impact = JsonUtil.decodeFromString(impactResponse)!!
128+
}
129+
pageViewsFromImpactApi = impact.totalPageviewsCount
130+
} catch (e: IOException) {
131+
L.e(e)
127132
}
128-
129-
val pagesResponse = ServiceFactory.get(wikiSite).getInfoByPageIdsOrTitles(
130-
titles = impact.topViewedArticles.keys.joinToString(separator = "|")
131-
)
132-
133-
// Transform the response to a map of PageTitle to ArticleViews
134-
val pageMap = pagesResponse.query?.pages?.associate { page ->
135-
val pageTitle = PageTitle(
136-
text = page.title,
137-
wiki = wikiSite,
138-
thumbUrl = page.thumbUrl(),
139-
description = page.description,
140-
displayText = page.displayTitle(wikiSite.languageCode)
141-
)
142-
pageTitle to impact.topViewedArticles[pageTitle.text]!!
143-
} ?: emptyMap()
144-
145-
impact.topViewedArticlesWithPageTitle = pageMap
146-
impact
133+
pageViewsFromImpactApi
147134
}
148135

149136
val editCountCall = async {
@@ -162,7 +149,7 @@ class YearInReviewViewModel() : ViewModel() {
162149
}
163150
response
164151
}
165-
totalPageViews = impactDataJob.await().totalPageviewsCount
152+
totalPageViews = totalPageViewsJob.await()
166153
editCount = editCountCall.await().items.sumOf { it.editCount }
167154
}
168155

0 commit comments

Comments
 (0)