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 id: Long,
|
||||||
val text: String,
|
val text: String,
|
||||||
val image: String?,
|
val image: String?,
|
||||||
|
val url: String,
|
||||||
val wikipediaUrl: String,
|
val wikipediaUrl: String,
|
||||||
override val labelOverride: String? = null,
|
override val labelOverride: String? = null,
|
||||||
) : SavableSearchable {
|
) : SavableSearchable {
|
||||||
@ -45,15 +46,7 @@ data class Wikipedia(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getLaunchIntent(): Intent {
|
private fun getLaunchIntent(): Intent {
|
||||||
val intent = CustomTabsIntent
|
return Intent(Intent.ACTION_VIEW, Uri.parse(url))
|
||||||
.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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun launch(context: Context, options: Bundle?): Boolean {
|
override fun launch(context: Context, options: Bundle?): Boolean {
|
||||||
|
|||||||
@ -15,28 +15,16 @@ data class WikipediaSearchResultQueryPage(
|
|||||||
val pageid: Long,
|
val pageid: Long,
|
||||||
val title: String,
|
val title: String,
|
||||||
val extract: String,
|
val extract: String,
|
||||||
|
val thumbnail: WikipediaSearchResultQueryPageThumnail?,
|
||||||
|
val fullurl: String,
|
||||||
|
val canonicalurl: String,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class WikipediaGetPageImageResult(
|
data class WikipediaSearchResultQueryPageThumnail(
|
||||||
val query: WikipediaGetPageImageResultQuery?,
|
|
||||||
)
|
|
||||||
|
|
||||||
data class WikipediaGetPageImageResultQuery(
|
|
||||||
val pages: Map<String, WikipediaGetPageImageResultQueryPage>
|
|
||||||
)
|
|
||||||
|
|
||||||
data class WikipediaGetPageImageResultQueryPage(
|
|
||||||
val thumbnail: WikipediaGetPageImageResultQueryPageThumnail?
|
|
||||||
)
|
|
||||||
|
|
||||||
data class WikipediaGetPageImageResultQueryPageThumnail(
|
|
||||||
val source: String
|
val source: String
|
||||||
)
|
)
|
||||||
|
|
||||||
interface WikipediaApi {
|
interface WikipediaApi {
|
||||||
@GET("w/api.php?action=query&generator=search&redirects=true&gsrlimit=1&exchars=500&prop=extracts&exintro=true&format=json")
|
@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): WikipediaSearchResult
|
suspend fun search(@Query("gsrsearch") query: String, @Query("pithumbsize") thumbnailSize: Int): WikipediaSearchResult
|
||||||
|
|
||||||
@GET("w/api.php?action=query&prop=pageimages&format=json")
|
|
||||||
suspend fun getPageImage(@Query("pageids") pageId: Long, @Query("pithumbsize") thumbnailSize: Int): WikipediaGetPageImageResult
|
|
||||||
}
|
}
|
||||||
@ -1,7 +1,6 @@
|
|||||||
package de.mm20.launcher2.wikipedia
|
package de.mm20.launcher2.wikipedia
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.Log
|
|
||||||
import de.mm20.launcher2.crashreporter.CrashReporter
|
import de.mm20.launcher2.crashreporter.CrashReporter
|
||||||
import de.mm20.launcher2.preferences.LauncherDataStore
|
import de.mm20.launcher2.preferences.LauncherDataStore
|
||||||
import de.mm20.launcher2.search.data.Wikipedia
|
import de.mm20.launcher2.search.data.Wikipedia
|
||||||
@ -9,7 +8,6 @@ import kotlinx.coroutines.*
|
|||||||
import kotlinx.coroutines.flow.*
|
import kotlinx.coroutines.flow.*
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import org.koin.core.component.KoinComponent
|
import org.koin.core.component.KoinComponent
|
||||||
import org.koin.core.component.inject
|
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import retrofit2.converter.gson.GsonConverterFactory
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
@ -77,7 +75,8 @@ internal class WikipediaRepositoryImpl(
|
|||||||
val wikipediaUrl = retrofit.baseUrl().toString()
|
val wikipediaUrl = retrofit.baseUrl().toString()
|
||||||
|
|
||||||
val result = try {
|
val result = try {
|
||||||
wikipediaService.search(query)
|
val imageWidth = context.resources.displayMetrics.widthPixels / 2
|
||||||
|
wikipediaService.search(query, imageWidth)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
CrashReporter.logException(e)
|
CrashReporter.logException(e)
|
||||||
return null
|
return null
|
||||||
@ -86,14 +85,7 @@ internal class WikipediaRepositoryImpl(
|
|||||||
val page = result.query?.pages?.values?.toList()?.getOrNull(0) ?: return null
|
val page = result.query?.pages?.values?.toList()?.getOrNull(0) ?: return null
|
||||||
|
|
||||||
val image = if (loadImages) {
|
val image = if (loadImages) {
|
||||||
val width = context.resources.displayMetrics.widthPixels / 2
|
result.query.pages.values.toList().getOrNull(0)?.thumbnail?.source
|
||||||
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
|
|
||||||
} else null
|
} else null
|
||||||
|
|
||||||
return Wikipedia(
|
return Wikipedia(
|
||||||
@ -101,6 +93,7 @@ internal class WikipediaRepositoryImpl(
|
|||||||
id = page.pageid,
|
id = page.pageid,
|
||||||
text = page.extract,
|
text = page.extract,
|
||||||
image = image,
|
image = image,
|
||||||
|
url = page.fullurl,
|
||||||
wikipediaUrl = wikipediaUrl
|
wikipediaUrl = wikipediaUrl
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,6 +16,7 @@ class WikipediaSerializer : SearchableSerializer {
|
|||||||
json.put("id", searchable.id)
|
json.put("id", searchable.id)
|
||||||
json.put("image", searchable.image)
|
json.put("image", searchable.image)
|
||||||
json.put("wikipedia_url", searchable.wikipediaUrl)
|
json.put("wikipedia_url", searchable.wikipediaUrl)
|
||||||
|
json.put("url", searchable.url)
|
||||||
return json.toString()
|
return json.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,12 +27,15 @@ class WikipediaSerializer : SearchableSerializer {
|
|||||||
class WikipediaDeserializer(val context: Context) : SearchableDeserializer {
|
class WikipediaDeserializer(val context: Context) : SearchableDeserializer {
|
||||||
override fun deserialize(serialized: String): SavableSearchable? {
|
override fun deserialize(serialized: String): SavableSearchable? {
|
||||||
val json = JSONObject(serialized)
|
val json = JSONObject(serialized)
|
||||||
|
val wikipediaUrl = json.optString("wikipedia_url").takeIf { !it.isNullOrBlank() } ?: return null
|
||||||
|
val id = json.getLong("id")
|
||||||
return Wikipedia(
|
return Wikipedia(
|
||||||
label = json.getString("label"),
|
label = json.getString("label"),
|
||||||
text = json.getString("text"),
|
text = json.getString("text"),
|
||||||
id = json.getLong("id"),
|
id = id,
|
||||||
image = json.optString("image"),
|
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