Merge pull request #2380 from Bnyro/master

Playlists import from YouTube
This commit is contained in:
Bnyro 2022-12-15 19:11:16 +01:00 committed by GitHub
commit 066e030025
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 10 deletions

View File

@ -1,7 +1,6 @@
package com.github.libretube.api
import android.content.Context
import android.net.Uri
import android.util.Log
import com.github.libretube.R
import com.github.libretube.api.obj.Playlist
@ -207,7 +206,7 @@ object PlaylistsHelper {
addToPlaylist(
playlistId,
*playlist.videos.map {
Uri.parse(it).getQueryParameter("v")!!
it.substring(it.length - 11, it.length)
}.toTypedArray()
)
}

View File

@ -1,8 +1,8 @@
package com.github.libretube.obj
data class ImportPlaylist(
val name: String? = null,
var name: String? = null,
val type: String? = null,
val visibility: String? = null,
val videos: List<String> = listOf()
var videos: List<String> = listOf()
)

View File

@ -11,6 +11,7 @@ import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.SubscriptionHelper
import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.toastFromMainThread
import com.github.libretube.obj.ImportPlaylist
import com.github.libretube.obj.ImportPlaylistFile
import com.github.libretube.obj.NewPipeSubscription
import com.github.libretube.obj.NewPipeSubscriptions
@ -112,13 +113,37 @@ class ImportHelper(
fun importPlaylists(uri: Uri?) {
if (uri == null) return
val playlistFile = ObjectMapper().readValue(uri.readText(), ImportPlaylistFile::class.java)
val importPlaylists = mutableListOf<ImportPlaylist>()
when (val fileType = activity.contentResolver.getType(uri)) {
"text/csv", "text/comma-separated-values" -> {
val playlist = ImportPlaylist()
activity.contentResolver.openInputStream(uri)?.use {
val lines = it.bufferedReader().readLines()
playlist.name = lines[1].split(",").reversed()[2]
val splitIndex = lines.indexOfFirst { line -> line.startsWith("Video ID") }
lines.subList(splitIndex + 1, lines.size).forEach { line ->
line.split(",").firstOrNull()?.let { videoId ->
if (videoId.isNotBlank()) playlist.videos = playlist.videos + videoId
}
}
importPlaylists.add(playlist)
}
}
"application/json", "application/*", "application/octet-stream" -> {
val playlistFile = ObjectMapper().readValue(uri.readText(), ImportPlaylistFile::class.java)
importPlaylists.addAll(playlistFile.playlists.orEmpty())
}
else -> {
activity.applicationContext.toastFromMainThread("Unsupported file type $fileType")
return
}
}
CoroutineScope(Dispatchers.IO).launch {
try {
playlistFile.playlists?.let {
PlaylistsHelper.importPlaylists(activity, it)
}
PlaylistsHelper.importPlaylists(activity, importPlaylists)
activity.applicationContext.toastFromMainThread(R.string.success)
} catch (e: Exception) {
Log.e(TAG(), e.toString())
e.localizedMessage?.let {
@ -126,8 +151,6 @@ class ImportHelper(
}
}
}
activity.toastFromMainThread(R.string.success)
}
/**