mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-27 15:30:31 +05:30
Use Kotlinx Serialization with the subscription import/export functionality.
This commit is contained in:
parent
187c7ac0e9
commit
e00b0c8263
@ -1,5 +1,8 @@
|
||||
package com.github.libretube.obj
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class ImportPlaylist(
|
||||
var name: String? = null,
|
||||
val type: String? = null,
|
||||
|
@ -1,7 +1,10 @@
|
||||
package com.github.libretube.obj
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class ImportPlaylistFile(
|
||||
val format: String? = null,
|
||||
val version: Int? = null,
|
||||
val format: String,
|
||||
val version: Int,
|
||||
val playlists: List<ImportPlaylist> = emptyList()
|
||||
)
|
||||
|
@ -1,10 +1,11 @@
|
||||
package com.github.libretube.obj
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class NewPipeSubscription(
|
||||
val name: String? = null,
|
||||
val service_id: Int? = null,
|
||||
val url: String? = null
|
||||
val name: String,
|
||||
@SerialName("service_id") val serviceId: Int,
|
||||
val url: String
|
||||
)
|
||||
|
@ -1,10 +1,11 @@
|
||||
package com.github.libretube.obj
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class NewPipeSubscriptions(
|
||||
val app_version: String = "",
|
||||
val app_version_int: Int = 0,
|
||||
@SerialName("app_version") val appVersion: String = "",
|
||||
@SerialName("app_version_int") val appVersionInt: Int = 0,
|
||||
val subscriptions: List<NewPipeSubscription> = emptyList()
|
||||
)
|
||||
|
@ -19,7 +19,6 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.json.decodeFromStream
|
||||
import kotlinx.serialization.json.encodeToStream
|
||||
import okio.use
|
||||
@ -63,7 +62,7 @@ class ImportHelper(
|
||||
JsonHelper.json.decodeFromStream<NewPipeSubscriptions>(it)
|
||||
}
|
||||
subscriptions?.subscriptions.orEmpty().map {
|
||||
it.url!!.replace("https://www.youtube.com/channel/", "")
|
||||
it.url.replace("https://www.youtube.com/channel/", "")
|
||||
}
|
||||
}
|
||||
"text/csv", "text/comma-separated-values" -> {
|
||||
@ -93,21 +92,13 @@ class ImportHelper(
|
||||
SubscriptionHelper.getFormattedLocalSubscriptions()
|
||||
)
|
||||
}
|
||||
val newPipeChannels = mutableListOf<NewPipeSubscription>()
|
||||
subs.forEach {
|
||||
newPipeChannels += NewPipeSubscription(
|
||||
name = it.name,
|
||||
service_id = 0,
|
||||
url = "https://www.youtube.com" + it.url
|
||||
)
|
||||
val newPipeChannels = subs.map {
|
||||
NewPipeSubscription(it.name, 0, "https://www.youtube.com${it.url}")
|
||||
}
|
||||
|
||||
val newPipeSubscriptions = NewPipeSubscriptions(
|
||||
subscriptions = newPipeChannels
|
||||
)
|
||||
val newPipeSubscriptions = NewPipeSubscriptions(subscriptions = newPipeChannels)
|
||||
|
||||
activity.contentResolver.openOutputStream(uri)?.use {
|
||||
JsonHelper.json.encodeToStream<Any>(newPipeSubscriptions, it)
|
||||
JsonHelper.json.encodeToStream(newPipeSubscriptions, it)
|
||||
}
|
||||
|
||||
activity.toastFromMainThread(R.string.exportsuccess)
|
||||
@ -138,9 +129,10 @@ class ImportHelper(
|
||||
}
|
||||
}
|
||||
"application/json", "application/*", "application/octet-stream" -> {
|
||||
val playlistFile = JsonHelper.json
|
||||
.decodeFromString<ImportPlaylistFile>(uri.readText())
|
||||
importPlaylists.addAll(playlistFile.playlists)
|
||||
val playlistFile = activity.contentResolver.openInputStream(uri)?.use {
|
||||
JsonHelper.json.decodeFromStream<ImportPlaylistFile>(it)
|
||||
}
|
||||
importPlaylists.addAll(playlistFile?.playlists.orEmpty())
|
||||
}
|
||||
else -> {
|
||||
activity.applicationContext.toastFromMainThread("Unsupported file type $fileType")
|
||||
@ -169,23 +161,13 @@ class ImportHelper(
|
||||
|
||||
runBlocking {
|
||||
val playlists = PlaylistsHelper.exportPlaylists()
|
||||
val playlistFile = ImportPlaylistFile(
|
||||
format = "Piped",
|
||||
version = 1,
|
||||
playlists = playlists
|
||||
)
|
||||
val playlistFile = ImportPlaylistFile("Piped", 1, playlists)
|
||||
|
||||
activity.contentResolver.openOutputStream(uri)?.use {
|
||||
JsonHelper.json.encodeToStream<Any>(playlistFile, it)
|
||||
JsonHelper.json.encodeToStream(playlistFile, it)
|
||||
}
|
||||
|
||||
activity.toastFromMainThread(R.string.exportsuccess)
|
||||
}
|
||||
}
|
||||
|
||||
private fun Uri.readText(): String {
|
||||
return activity.contentResolver.openInputStream(this)?.use {
|
||||
it.bufferedReader().use { reader -> reader.readText() }
|
||||
}.orEmpty()
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user