Use canonical URL and no custom tab for wikipedia

This commit is contained in:
MM20 2023-01-23 14:31:08 +01:00
parent a5088f4185
commit be4c51562a
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
4 changed files with 18 additions and 40 deletions

View File

@ -19,6 +19,7 @@ data class Wikipedia(
val id: Long,
val text: String,
val image: String?,
val url: String,
val wikipediaUrl: String,
override val labelOverride: String? = null,
) : SavableSearchable {
@ -45,15 +46,7 @@ data class Wikipedia(
}
private fun getLaunchIntent(): Intent {
val intent = CustomTabsIntent
.Builder()
.setToolbarColor(Color.BLACK)
.enableUrlBarHiding()
.setShowTitle(true)
.build()
val uri = "${wikipediaUrl.padEnd(1, '/')}wiki?curid=$id"
intent.intent.data = Uri.parse(uri)
return intent.intent
return Intent(Intent.ACTION_VIEW, Uri.parse(url))
}
override fun launch(context: Context, options: Bundle?): Boolean {

View File

@ -15,28 +15,16 @@ data class WikipediaSearchResultQueryPage(
val pageid: Long,
val title: String,
val extract: String,
val thumbnail: WikipediaSearchResultQueryPageThumnail?,
val fullurl: String,
val canonicalurl: String,
)
data class WikipediaGetPageImageResult(
val query: WikipediaGetPageImageResultQuery?,
)
data class WikipediaGetPageImageResultQuery(
val pages: Map<String, WikipediaGetPageImageResultQueryPage>
)
data class WikipediaGetPageImageResultQueryPage(
val thumbnail: WikipediaGetPageImageResultQueryPageThumnail?
)
data class WikipediaGetPageImageResultQueryPageThumnail(
data class WikipediaSearchResultQueryPageThumnail(
val source: String
)
interface WikipediaApi {
@GET("w/api.php?action=query&generator=search&redirects=true&gsrlimit=1&exchars=500&prop=extracts&exintro=true&format=json")
suspend fun search(@Query("gsrsearch") query: String): WikipediaSearchResult
@GET("w/api.php?action=query&prop=pageimages&format=json")
suspend fun getPageImage(@Query("pageids") pageId: Long, @Query("pithumbsize") thumbnailSize: Int): WikipediaGetPageImageResult
@GET("w/api.php?action=query&generator=search&redirects=true&gsrlimit=1&prop=extracts|info|pageimages&exchars=500&exintro=true&inprop=url&format=json")
suspend fun search(@Query("gsrsearch") query: String, @Query("pithumbsize") thumbnailSize: Int): WikipediaSearchResult
}

View File

@ -1,7 +1,6 @@
package de.mm20.launcher2.wikipedia
import android.content.Context
import android.util.Log
import de.mm20.launcher2.crashreporter.CrashReporter
import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.search.data.Wikipedia
@ -9,7 +8,6 @@ import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
import okhttp3.OkHttpClient
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
@ -77,7 +75,8 @@ internal class WikipediaRepositoryImpl(
val wikipediaUrl = retrofit.baseUrl().toString()
val result = try {
wikipediaService.search(query)
val imageWidth = context.resources.displayMetrics.widthPixels / 2
wikipediaService.search(query, imageWidth)
} catch (e: Exception) {
CrashReporter.logException(e)
return null
@ -86,14 +85,7 @@ internal class WikipediaRepositoryImpl(
val page = result.query?.pages?.values?.toList()?.getOrNull(0) ?: return null
val image = if (loadImages) {
val width = context.resources.displayMetrics.widthPixels / 2
val imageResult = try {
wikipediaService.getPageImage(page.pageid, width)
} catch (e: Exception) {
CrashReporter.logException(e)
return null
}
imageResult.query?.pages?.values?.toList()?.getOrNull(0)?.thumbnail?.source
result.query.pages.values.toList().getOrNull(0)?.thumbnail?.source
} else null
return Wikipedia(
@ -101,6 +93,7 @@ internal class WikipediaRepositoryImpl(
id = page.pageid,
text = page.extract,
image = image,
url = page.fullurl,
wikipediaUrl = wikipediaUrl
)
}

View File

@ -16,6 +16,7 @@ class WikipediaSerializer : SearchableSerializer {
json.put("id", searchable.id)
json.put("image", searchable.image)
json.put("wikipedia_url", searchable.wikipediaUrl)
json.put("url", searchable.url)
return json.toString()
}
@ -26,12 +27,15 @@ class WikipediaSerializer : SearchableSerializer {
class WikipediaDeserializer(val context: Context) : SearchableDeserializer {
override fun deserialize(serialized: String): SavableSearchable? {
val json = JSONObject(serialized)
val wikipediaUrl = json.optString("wikipedia_url").takeIf { !it.isNullOrBlank() } ?: return null
val id = json.getLong("id")
return Wikipedia(
label = json.getString("label"),
text = json.getString("text"),
id = json.getLong("id"),
id = id,
image = json.optString("image"),
wikipediaUrl = json.optString("wikipedia_url").takeIf { !it.isNullOrBlank() } ?: return null,
url = json.optString("url").takeIf { !it.isNullOrBlank() } ?: "${wikipediaUrl.padEnd(1, '/')}wiki?curid=$id",
wikipediaUrl = wikipediaUrl
)
}
}