mirror of
https://github.com/libre-tube/LibreTube.git
synced 2024-12-14 14:20:30 +05:30
Allow creating backups of subscripton groups
This commit is contained in:
parent
4402bf1baf
commit
a4088189bf
@ -14,6 +14,9 @@ interface SubscriptionGroupsDao {
|
|||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
suspend fun createGroup(subscriptionGroup: SubscriptionGroup)
|
suspend fun createGroup(subscriptionGroup: SubscriptionGroup)
|
||||||
|
|
||||||
|
@Insert
|
||||||
|
suspend fun insertAll(subscriptionGroups: List<SubscriptionGroup>)
|
||||||
|
|
||||||
@Query("DELETE FROM subscriptionGroups WHERE name = :name")
|
@Query("DELETE FROM subscriptionGroups WHERE name = :name")
|
||||||
suspend fun deleteGroup(name: String)
|
suspend fun deleteGroup(name: String)
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,9 @@ package com.github.libretube.db.obj
|
|||||||
|
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
import androidx.room.PrimaryKey
|
import androidx.room.PrimaryKey
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
@Entity(tableName = "subscriptionGroups")
|
@Entity(tableName = "subscriptionGroups")
|
||||||
data class SubscriptionGroup(
|
data class SubscriptionGroup(
|
||||||
@PrimaryKey var name: String,
|
@PrimaryKey var name: String,
|
||||||
|
@ -52,13 +52,14 @@ object BackupHelper {
|
|||||||
Database.localSubscriptionDao().insertAll(backupFile.localSubscriptions.orEmpty())
|
Database.localSubscriptionDao().insertAll(backupFile.localSubscriptions.orEmpty())
|
||||||
Database.customInstanceDao().insertAll(backupFile.customInstances.orEmpty())
|
Database.customInstanceDao().insertAll(backupFile.customInstances.orEmpty())
|
||||||
Database.playlistBookmarkDao().insertAll(backupFile.playlistBookmarks.orEmpty())
|
Database.playlistBookmarkDao().insertAll(backupFile.playlistBookmarks.orEmpty())
|
||||||
|
Database.subscriptionGroupsDao().insertAll(backupFile.channelGroups.orEmpty())
|
||||||
|
|
||||||
backupFile.localPlaylists?.forEach {
|
backupFile.localPlaylists?.forEach {
|
||||||
Database.localPlaylistsDao().createPlaylist(it.playlist)
|
Database.localPlaylistsDao().createPlaylist(it.playlist)
|
||||||
val playlistId = Database.localPlaylistsDao().getAll().last().playlist.id
|
val playlistId = Database.localPlaylistsDao().getAll().last().playlist.id
|
||||||
it.videos.forEach {
|
it.videos.forEach { playlistItem ->
|
||||||
it.playlistId = playlistId
|
playlistItem.playlistId = playlistId
|
||||||
Database.localPlaylistsDao().addPlaylistVideo(it)
|
Database.localPlaylistsDao().addPlaylistVideo(playlistItem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import com.github.libretube.db.obj.LocalPlaylistWithVideos
|
|||||||
import com.github.libretube.db.obj.LocalSubscription
|
import com.github.libretube.db.obj.LocalSubscription
|
||||||
import com.github.libretube.db.obj.PlaylistBookmark
|
import com.github.libretube.db.obj.PlaylistBookmark
|
||||||
import com.github.libretube.db.obj.SearchHistoryItem
|
import com.github.libretube.db.obj.SearchHistoryItem
|
||||||
|
import com.github.libretube.db.obj.SubscriptionGroup
|
||||||
import com.github.libretube.db.obj.WatchHistoryItem
|
import com.github.libretube.db.obj.WatchHistoryItem
|
||||||
import com.github.libretube.db.obj.WatchPosition
|
import com.github.libretube.db.obj.WatchPosition
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
@ -18,5 +19,6 @@ data class BackupFile(
|
|||||||
var customInstances: List<CustomInstance>? = emptyList(),
|
var customInstances: List<CustomInstance>? = emptyList(),
|
||||||
var playlistBookmarks: List<PlaylistBookmark>? = emptyList(),
|
var playlistBookmarks: List<PlaylistBookmark>? = emptyList(),
|
||||||
var localPlaylists: List<LocalPlaylistWithVideos>? = emptyList(),
|
var localPlaylists: List<LocalPlaylistWithVideos>? = emptyList(),
|
||||||
var preferences: List<PreferenceItem>? = emptyList()
|
var preferences: List<PreferenceItem>? = emptyList(),
|
||||||
|
var channelGroups: List<SubscriptionGroup>? = emptyList()
|
||||||
)
|
)
|
||||||
|
@ -17,11 +17,11 @@ import kotlinx.serialization.json.JsonNull
|
|||||||
import kotlinx.serialization.json.JsonPrimitive
|
import kotlinx.serialization.json.JsonPrimitive
|
||||||
|
|
||||||
class BackupDialog(
|
class BackupDialog(
|
||||||
private val createBackupFile: (BackupFile) -> Unit
|
private val createBackupFile: (BackupFile) -> Unit,
|
||||||
) : DialogFragment() {
|
) : DialogFragment() {
|
||||||
sealed class BackupOption(
|
sealed class BackupOption(
|
||||||
@StringRes val name: Int,
|
@StringRes val name: Int,
|
||||||
val onSelected: suspend (BackupFile) -> Unit
|
val onSelected: suspend (BackupFile) -> Unit,
|
||||||
) {
|
) {
|
||||||
object WatchHistory : BackupOption(R.string.watch_history, onSelected = {
|
object WatchHistory : BackupOption(R.string.watch_history, onSelected = {
|
||||||
it.watchHistory = Database.watchHistoryDao().getAll()
|
it.watchHistory = Database.watchHistoryDao().getAll()
|
||||||
@ -51,6 +51,10 @@ class BackupDialog(
|
|||||||
it.localPlaylists = Database.localPlaylistsDao().getAll()
|
it.localPlaylists = Database.localPlaylistsDao().getAll()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
object SubscriptionGroups : BackupOption(R.string.channel_groups, onSelected = {
|
||||||
|
it.channelGroups = Database.subscriptionGroupsDao().getAll()
|
||||||
|
})
|
||||||
|
|
||||||
object Preferences : BackupOption(R.string.preferences, onSelected = { file ->
|
object Preferences : BackupOption(R.string.preferences, onSelected = { file ->
|
||||||
file.preferences = PreferenceHelper.settings.all.map { (key, value) ->
|
file.preferences = PreferenceHelper.settings.all.map { (key, value) ->
|
||||||
val jsonValue = when (value) {
|
val jsonValue = when (value) {
|
||||||
@ -73,7 +77,8 @@ class BackupDialog(
|
|||||||
BackupOption.CustomInstances,
|
BackupOption.CustomInstances,
|
||||||
BackupOption.PlaylistBookmarks,
|
BackupOption.PlaylistBookmarks,
|
||||||
BackupOption.LocalPlaylists,
|
BackupOption.LocalPlaylists,
|
||||||
BackupOption.Preferences
|
BackupOption.SubscriptionGroups,
|
||||||
|
BackupOption.Preferences,
|
||||||
)
|
)
|
||||||
|
|
||||||
val backupItems = backupOptions.map { context?.getString(it.name)!! }.toTypedArray()
|
val backupItems = backupOptions.map { context?.getString(it.name)!! }.toTypedArray()
|
||||||
|
@ -460,7 +460,6 @@
|
|||||||
<string name="new_group">New</string>
|
<string name="new_group">New</string>
|
||||||
<string name="group_name">Group name</string>
|
<string name="group_name">Group name</string>
|
||||||
<string name="edit_group">Edit group</string>
|
<string name="edit_group">Edit group</string>
|
||||||
<string name="group_already_exists">Group already exists!</string>
|
|
||||||
|
|
||||||
<!-- Notification channel strings -->
|
<!-- Notification channel strings -->
|
||||||
<string name="download_channel_name">Download Service</string>
|
<string name="download_channel_name">Download Service</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user