Use canonical URL and no custom tab for wikipedia
This commit is contained in:
parent
a5088f4185
commit
be4c51562a
@ -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 {
|
||||
|
||||
@ -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
|
||||
}
|
||||
@ -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
|
||||
)
|
||||
}
|
||||
|
||||
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user