Skip to content

Commit 7f9514e

Browse files
Allow shared reading lists to be serialized as IDs or titles. (#3917)
Co-authored-by: Sharvani Haran <[email protected]>
1 parent e429c81 commit 7f9514e

File tree

3 files changed

+32
-18
lines changed

3 files changed

+32
-18
lines changed

app/src/main/java/org/wikipedia/dataclient/Service.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ interface Service {
7575
fun getInfoByPageId(@Query("pageids") pageIds: String): Observable<MwQueryResponse>
7676

7777
@GET(MW_API_PREFIX + "action=query&prop=info|description|pageimages&inprop=varianttitles|displaytitle&redirects=1")
78-
suspend fun getPageTitlesByPageId(@Query("pageids") pageIds: String): MwQueryResponse
78+
suspend fun getPageTitlesByPageIdsOrTitles(@Query("pageids") pageIds: String? = null, @Query("titles") titles: String? = null): MwQueryResponse
7979

8080
@GET(MW_API_PREFIX + "action=query")
8181
suspend fun getPageIds(@Query("titles") titles: String): MwQueryResponse

app/src/main/java/org/wikipedia/readinglist/ReadingListsReceiveHelper.kt

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1+
12
package org.wikipedia.readinglist
23

34
import android.content.Context
45
import android.util.Base64
6+
import kotlinx.serialization.json.int
57
import org.wikipedia.R
68
import org.wikipedia.dataclient.Service
79
import org.wikipedia.dataclient.ServiceFactory
810
import org.wikipedia.dataclient.WikiSite
11+
import org.wikipedia.dataclient.mwapi.MwQueryPage
912
import org.wikipedia.json.JsonUtil
1013
import org.wikipedia.readinglist.database.ReadingList
1114
import org.wikipedia.readinglist.database.ReadingListPage
@@ -23,18 +26,29 @@ object ReadingListsReceiveHelper {
2326
val listPages = mutableListOf<ReadingListPage>()
2427

2528
// Request API by languages
26-
readingListData?.list?.forEach {
27-
val wikiSite = WikiSite.forLanguageCode(it.key)
28-
it.value.chunked(ReadingListsShareHelper.API_MAX_SIZE).forEach { list ->
29-
val response = ServiceFactory.get(wikiSite).getPageTitlesByPageId(list.joinToString(separator = "|"))
30-
response.query?.pages?.forEach { page ->
29+
readingListData?.list?.forEach { map ->
30+
val wikiSite = WikiSite.forLanguageCode(map.key)
31+
map.value.chunked(ReadingListsShareHelper.API_MAX_SIZE).forEach { list ->
32+
val listOfTitles = list.filter { it.isString }.map { it.content }
33+
val listOfIds = list.filter { !it.isString }.map { it.int }
34+
35+
val pages = mutableListOf<MwQueryPage>()
36+
if (listOfIds.isNotEmpty()) {
37+
pages.addAll(ServiceFactory.get(wikiSite).getPageTitlesByPageIdsOrTitles(pageIds = listOfIds.joinToString(separator = "|"))
38+
.query?.pages.orEmpty())
39+
}
40+
if (listOfTitles.isNotEmpty()) {
41+
pages.addAll(ServiceFactory.get(wikiSite).getPageTitlesByPageIdsOrTitles(titles = listOfTitles.joinToString(separator = "|"))
42+
.query?.pages.orEmpty())
43+
}
44+
pages.forEach {
3145
val readingListPage = ReadingListPage(
3246
wikiSite,
33-
page.namespace(),
34-
page.displayTitle(wikiSite.languageCode),
35-
StringUtil.addUnderscores(page.title),
36-
page.description,
37-
ImageUrlUtil.getUrlForPreferredSize(page.thumbUrl().orEmpty(), Service.PREFERRED_THUMB_SIZE),
47+
it.namespace(),
48+
it.displayTitle(wikiSite.languageCode),
49+
StringUtil.addUnderscores(it.title),
50+
it.description,
51+
ImageUrlUtil.getUrlForPreferredSize(it.thumbUrl().orEmpty(), Service.PREFERRED_THUMB_SIZE),
3852
lang = wikiSite.languageCode
3953
)
4054
listPages.add(readingListPage)

app/src/main/java/org/wikipedia/readinglist/ReadingListsShareHelper.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.lifecycle.lifecycleScope
77
import kotlinx.coroutines.CoroutineExceptionHandler
88
import kotlinx.coroutines.launch
99
import kotlinx.serialization.Serializable
10+
import kotlinx.serialization.json.JsonPrimitive
1011
import org.wikipedia.R
1112
import org.wikipedia.WikipediaApp
1213
import org.wikipedia.analytics.eventplatform.ReadingListsSharingAnalyticsHelper
@@ -73,8 +74,8 @@ object ReadingListsShareHelper {
7374
}
7475

7576
private fun readingListToUrlParam(readingList: ReadingList, pageIdMap: Map<String, Map<String, Int>>): String {
76-
val projectUrlMap = mutableMapOf<String, Collection<Int>>()
77-
pageIdMap.keys.forEach { projectUrlMap[it] = pageIdMap[it]!!.values }
77+
val projectUrlMap = mutableMapOf<String, Collection<JsonPrimitive>>()
78+
pageIdMap.keys.forEach { key -> projectUrlMap[key] = pageIdMap[key]!!.values.map { JsonPrimitive(it) } }
7879

7980
// TODO: for now we're not transmitting the free-form Name and Description of a reading list.
8081
val exportedReadingLists = ExportedReadingLists(projectUrlMap /*, readingList.title, readingList.description */)
@@ -83,10 +84,9 @@ object ReadingListsShareHelper {
8384

8485
@Suppress("unused")
8586
@Serializable
86-
class ExportedReadingLists
87-
(
88-
val list: Map<String, Collection<Int>>,
89-
val name: String? = null,
90-
val description: String? = null
87+
class ExportedReadingLists(
88+
val list: Map<String, Collection<JsonPrimitive>>,
89+
val name: String? = null,
90+
val description: String? = null
9191
)
9292
}

0 commit comments

Comments
 (0)