mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 16:30:31 +05:30
refactor: Simplify router URL resolution
This commit is contained in:
parent
41c35c5392
commit
77a756d5c5
@ -14,12 +14,11 @@ import com.github.libretube.util.TextUtils.toTimeInSeconds
|
|||||||
class RouterActivity : BaseActivity() {
|
class RouterActivity : BaseActivity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
if (intent.getStringExtra(Intent.EXTRA_TEXT) != null) {
|
val uri = intent.getStringExtra(Intent.EXTRA_TEXT)?.toUri() ?: intent.data
|
||||||
// start processing the given text
|
if (uri != null) {
|
||||||
handleSendText(intent.getStringExtra(Intent.EXTRA_TEXT)!!.toUri())
|
// Start processing the given text, if available. Otherwise use the link shared as text
|
||||||
} else if (intent.data != null) {
|
// to the app.
|
||||||
// link shared as text to the app
|
handleSendText(uri)
|
||||||
handleSendText(intent.data!!)
|
|
||||||
} else {
|
} else {
|
||||||
// start app as normal if unknown action, shouldn't be reachable
|
// start app as normal if unknown action, shouldn't be reachable
|
||||||
NavigationHelper.restartMainActivity(this)
|
NavigationHelper.restartMainActivity(this)
|
||||||
@ -30,65 +29,25 @@ class RouterActivity : BaseActivity() {
|
|||||||
* Resolve the uri and return a bundle with the arguments
|
* Resolve the uri and return a bundle with the arguments
|
||||||
*/
|
*/
|
||||||
private fun Intent.resolveType(uri: Uri) = apply {
|
private fun Intent.resolveType(uri: Uri) = apply {
|
||||||
val channelNamePaths = listOf("/c/", "/user/")
|
val lastSegment = uri.lastPathSegment
|
||||||
val videoPaths = listOf("/shorts/", "/embed/", "/v/", "/live/")
|
val secondLastSegment = uri.pathSegments.getOrNull(uri.pathSegments.size - 2)
|
||||||
when {
|
when {
|
||||||
uri.path!!.contains("/results") -> {
|
lastSegment == "results" -> {
|
||||||
val searchQuery = uri.getQueryParameter("search_query")
|
putExtra(IntentData.query, uri.getQueryParameter("search_query"))
|
||||||
|
|
||||||
putExtra(IntentData.query, searchQuery)
|
|
||||||
}
|
}
|
||||||
|
secondLastSegment == "channel" -> {
|
||||||
uri.path!!.contains("/channel/") -> {
|
putExtra(IntentData.channelId, lastSegment)
|
||||||
val channelId = uri.path!!
|
|
||||||
.replace("/channel/", "")
|
|
||||||
|
|
||||||
putExtra(IntentData.channelId, channelId)
|
|
||||||
}
|
}
|
||||||
|
secondLastSegment == "c" || secondLastSegment == "user" -> {
|
||||||
channelNamePaths.any { uri.path!!.contains(it) } -> {
|
putExtra(IntentData.channelName, lastSegment)
|
||||||
var channelName = uri.path!!
|
|
||||||
|
|
||||||
channelNamePaths.forEach {
|
|
||||||
channelName = channelName.replace(it, "")
|
|
||||||
}
|
|
||||||
|
|
||||||
putExtra(IntentData.channelName, channelName)
|
|
||||||
}
|
}
|
||||||
|
lastSegment == "playlist" -> {
|
||||||
uri.path!!.contains("/playlist") -> {
|
putExtra(IntentData.playlistId, uri.getQueryParameter("list"))
|
||||||
val playlistId = uri.getQueryParameter("list")
|
|
||||||
|
|
||||||
putExtra(IntentData.playlistId, playlistId)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
videoPaths.any { uri.path!!.contains(it) } -> {
|
|
||||||
var videoId = uri.path!!
|
|
||||||
|
|
||||||
videoPaths.forEach {
|
|
||||||
videoId = videoId.replace(it, "")
|
|
||||||
}
|
|
||||||
|
|
||||||
putExtra(IntentData.videoId, videoId)
|
|
||||||
|
|
||||||
uri.getQueryParameter("t")
|
|
||||||
?.let { putExtra(IntentData.timeStamp, it.toTimeInSeconds()) }
|
|
||||||
}
|
|
||||||
|
|
||||||
uri.path!!.contains("/watch") && uri.query != null -> {
|
|
||||||
val videoId = uri.getQueryParameter("v")
|
|
||||||
|
|
||||||
putExtra(IntentData.videoId, videoId)
|
|
||||||
uri.getQueryParameter("t")
|
|
||||||
?.let { putExtra(IntentData.timeStamp, it.toTimeInSeconds()) }
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
val videoId = uri.path!!.replace("/", "")
|
val id = if (lastSegment == "watch") uri.getQueryParameter("v") else lastSegment
|
||||||
|
putExtra(IntentData.videoId, id)
|
||||||
putExtra(IntentData.videoId, videoId)
|
putExtra(IntentData.timeStamp, uri.getQueryParameter("t")?.toTimeInSeconds())
|
||||||
uri.getQueryParameter("t")
|
|
||||||
?.let { putExtra(IntentData.timeStamp, it.toTimeInSeconds()) }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,9 +55,7 @@ class RouterActivity : BaseActivity() {
|
|||||||
private fun handleSendText(uri: Uri) {
|
private fun handleSendText(uri: Uri) {
|
||||||
Log.i(TAG(), uri.toString())
|
Log.i(TAG(), uri.toString())
|
||||||
|
|
||||||
val intent = this.packageManager.getLaunchIntentForPackage(
|
val intent = packageManager.getLaunchIntentForPackage(packageName)!!.resolveType(uri)
|
||||||
this.packageName
|
|
||||||
)!!.resolveType(uri)
|
|
||||||
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK
|
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
finishAndRemoveTask()
|
finishAndRemoveTask()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user