mirror of
https://github.com/Shabinder/SpotiFlyer.git
synced 2024-12-22 20:57:54 +01:00
Link Args Fixes.
This commit is contained in:
parent
dd0fd06036
commit
d91313370a
@ -42,6 +42,8 @@ import com.tonyodev.fetch2.Status
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import dev.chrisbanes.accompanist.insets.ProvideWindowInsets
|
||||
import dev.chrisbanes.accompanist.insets.statusBarsHeight
|
||||
import kotlinx.coroutines.*
|
||||
import okhttp3.Dispatcher
|
||||
import javax.inject.Inject
|
||||
|
||||
/*
|
||||
@ -196,7 +198,20 @@ class MainActivity : AppCompatActivity() {
|
||||
if ("text/plain" == intent.type) {
|
||||
intent.getStringExtra(Intent.EXTRA_TEXT)?.let {
|
||||
log("Intent Received", it)
|
||||
navController.navigateToTrackList(it)
|
||||
GlobalScope.launch {
|
||||
while(!this@MainActivity::navController.isInitialized){
|
||||
//Wait for Navigation Controller to initialize
|
||||
delay(200)
|
||||
}
|
||||
val filterLinkRegex = """http.+\w""".toRegex()
|
||||
withContext(Dispatchers.Main) {
|
||||
val string = it.replace("\n".toRegex(), " ")
|
||||
val link = filterLinkRegex.find(string)?.value.toString()
|
||||
log("Intent Link",link)
|
||||
sharedViewModel.updateLink(link)
|
||||
navController.navigateToTrackList(link)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -47,6 +47,16 @@ class SharedViewModel @ViewModelInject constructor(
|
||||
isAuthenticated = s
|
||||
}
|
||||
|
||||
/*
|
||||
* Nav Gives Error on YT links with ? sign
|
||||
* */
|
||||
var link by mutableStateOf("")
|
||||
private set
|
||||
|
||||
fun updateLink(s:String) {
|
||||
link = s
|
||||
}
|
||||
|
||||
|
||||
val trackList = mutableStateListOf<TrackDetails>()
|
||||
|
||||
|
@ -47,6 +47,7 @@ suspend fun queryYoutube(fullLink: String): PlatformQueryResult?{
|
||||
val link = fullLink.removePrefix("https://").removePrefix("http://")
|
||||
if(link.contains("playlist",true) || link.contains("list",true)){
|
||||
// Given Link is of a Playlist
|
||||
log("YT Play",link)
|
||||
val playlistId = link.substringAfter("?list=").substringAfter("&list=").substringBefore("&")
|
||||
return getYTPlaylist(
|
||||
playlistId,
|
||||
@ -78,7 +79,7 @@ suspend fun getYTPlaylist(
|
||||
searchId: String,
|
||||
ytDownloader: YoutubeDownloader,
|
||||
databaseDAO: DatabaseDAO,
|
||||
):PlatformQueryResult{
|
||||
):PlatformQueryResult?{
|
||||
val result = PlatformQueryResult(
|
||||
folderType = "",
|
||||
subFolder = "",
|
||||
@ -147,10 +148,12 @@ suspend fun getYTPlaylist(
|
||||
}
|
||||
queryActiveTracks()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
showDialog("An Error Occurred While Processing!")
|
||||
}
|
||||
}
|
||||
return result
|
||||
return if(result.title.isNotBlank()) result
|
||||
else null
|
||||
}
|
||||
|
||||
@SuppressLint("DefaultLocale")
|
||||
@ -158,7 +161,7 @@ suspend fun getYTTrack(
|
||||
searchId:String,
|
||||
ytDownloader: YoutubeDownloader,
|
||||
databaseDAO: DatabaseDAO
|
||||
):PlatformQueryResult {
|
||||
):PlatformQueryResult? {
|
||||
val result = PlatformQueryResult(
|
||||
folderType = "",
|
||||
subFolder = "",
|
||||
@ -219,8 +222,10 @@ suspend fun getYTTrack(
|
||||
}
|
||||
queryActiveTracks()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
showDialog("An Error Occurred While Processing!")
|
||||
}
|
||||
}
|
||||
return result
|
||||
return if(result.title.isNotBlank()) result
|
||||
else null
|
||||
}
|
||||
|
@ -49,8 +49,8 @@ fun Home(navController: NavController, modifier: Modifier = Modifier) {
|
||||
AuthenticationBanner(sharedViewModel.isAuthenticated,modifier)
|
||||
|
||||
SearchPanel(
|
||||
viewModel.link,
|
||||
viewModel::updateLink,
|
||||
sharedViewModel.link,
|
||||
sharedViewModel::updateLink,
|
||||
navController,
|
||||
modifier
|
||||
)
|
||||
|
@ -13,13 +13,6 @@ import androidx.compose.runtime.setValue
|
||||
|
||||
class HomeViewModel : ViewModel() {
|
||||
|
||||
var link by mutableStateOf("")
|
||||
private set
|
||||
|
||||
fun updateLink(s:String) {
|
||||
link = s
|
||||
}
|
||||
|
||||
var selectedCategory by mutableStateOf(HomeCategory.About)
|
||||
private set
|
||||
|
||||
|
@ -15,6 +15,7 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.res.vectorResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
@ -31,11 +32,11 @@ import com.shabinder.spotiflyer.providers.querySpotify
|
||||
import com.shabinder.spotiflyer.providers.queryYoutube
|
||||
import com.shabinder.spotiflyer.ui.utils.calculateDominantColor
|
||||
import com.shabinder.spotiflyer.utils.downloadTracks
|
||||
import com.shabinder.spotiflyer.utils.log
|
||||
import com.shabinder.spotiflyer.utils.sharedViewModel
|
||||
import com.shabinder.spotiflyer.utils.showDialog
|
||||
import dev.chrisbanes.accompanist.coil.CoilImage
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
/*
|
||||
* UI for List of Tracks to be universally used.
|
||||
@ -50,17 +51,22 @@ fun TrackList(
|
||||
|
||||
var result by remember(fullLink) { mutableStateOf<PlatformQueryResult?>(null) }
|
||||
|
||||
coroutineScope.launch {
|
||||
coroutineScope.launch(Dispatchers.Default) {
|
||||
@Suppress("UnusedEquals")//Add Delay if result is not Initialized yet.
|
||||
try{result == null}catch(e:java.lang.IllegalStateException){delay(100)}
|
||||
if(result == null){
|
||||
result = when{
|
||||
/*
|
||||
* Using SharedViewModel's Link as NAVIGATION's Arg is buggy for links.
|
||||
* */
|
||||
//SPOTIFY
|
||||
fullLink.contains("spotify",true) -> querySpotify(fullLink)
|
||||
sharedViewModel.link.contains("spotify",true) -> querySpotify(sharedViewModel.link)
|
||||
|
||||
//YOUTUBE
|
||||
fullLink.contains("youtube.com",true) || fullLink.contains("youtu.be",true) -> queryYoutube(fullLink)
|
||||
sharedViewModel.link.contains("youtube.com",true) || sharedViewModel.link.contains("youtu.be",true) -> queryYoutube(sharedViewModel.link)
|
||||
|
||||
//GAANA
|
||||
fullLink.contains("gaana",true) -> queryGaana(fullLink)
|
||||
sharedViewModel.link.contains("gaana",true) -> queryGaana(sharedViewModel.link)
|
||||
|
||||
else -> {
|
||||
showDialog("Link is Not Valid")
|
||||
@ -68,8 +74,10 @@ fun TrackList(
|
||||
}
|
||||
}
|
||||
}
|
||||
//Error Occurred And Has Been Shown to User
|
||||
if(result == null) navController.popBackStack()
|
||||
withContext(Dispatchers.Main){
|
||||
//Error Occurred And Has Been Shown to User
|
||||
if(result == null) navController.popBackStack()
|
||||
}
|
||||
}
|
||||
|
||||
sharedViewModel.updateTrackList(result?.trackList ?: listOf())
|
||||
@ -104,7 +112,6 @@ fun TrackList(
|
||||
track.downloaded = DownloadStatus.Queued
|
||||
}
|
||||
}
|
||||
showDialog("Downloading All Tracks")
|
||||
},
|
||||
modifier = Modifier.padding(bottom = 24.dp).align(Alignment.BottomCenter)
|
||||
)
|
||||
@ -135,6 +142,9 @@ fun CoverImage(
|
||||
Text(
|
||||
text = title,
|
||||
style = SpotiFlyerTypography.h5,
|
||||
maxLines = 2,
|
||||
textAlign = TextAlign.Center,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
//color = colorAccent,
|
||||
)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user