add database structure for local playlists

This commit is contained in:
Bnyro 2022-11-20 13:23:56 +01:00
parent 3aca124372
commit ea1d2765c9
6 changed files with 117 additions and 3 deletions

View File

@ -3,6 +3,7 @@ package com.github.libretube
import android.app.Application
import android.os.StrictMode
import android.os.StrictMode.VmPolicy
import android.util.Log
import androidx.core.app.NotificationChannelCompat
import androidx.core.app.NotificationManagerCompat
import androidx.work.ExistingPeriodicWorkPolicy
@ -12,6 +13,10 @@ import com.github.libretube.constants.BACKGROUND_CHANNEL_ID
import com.github.libretube.constants.DOWNLOAD_CHANNEL_ID
import com.github.libretube.constants.PUSH_CHANNEL_ID
import com.github.libretube.db.DatabaseHolder
import com.github.libretube.db.obj.LocalPlaylist
import com.github.libretube.db.obj.LocalPlaylistItem
import com.github.libretube.extensions.awaitQuery
import com.github.libretube.extensions.query
import com.github.libretube.util.ExceptionHandler
import com.github.libretube.util.ImageHelper
import com.github.libretube.util.NotificationHelper
@ -36,6 +41,8 @@ class LibreTubeApp : Application() {
*/
DatabaseHolder().initializeDatabase(this)
runDatabaseTests()
/**
* Bypassing fileUriExposedException, see https://stackoverflow.com/questions/38200282/android-os-fileuriexposedexception-file-storage-emulated-0-test-txt-exposed
*/
@ -100,4 +107,23 @@ class LibreTubeApp : Application() {
)
)
}
private fun runDatabaseTests() {
awaitQuery {
val playlist = LocalPlaylist(
name = "TEstlist",
thumbnailUrl = "thumb"
)
DatabaseHolder.Database.localPlaylistsDao().createPlaylist(playlist)
val playlistId = DatabaseHolder.Database.localPlaylistsDao().getAll().first().playlist.id
val video = LocalPlaylistItem(
videoId = "video",
playlistId = playlistId,
title = "awesomePlaylistTitle"
)
DatabaseHolder.Database.localPlaylistsDao().addPlaylistVideo(video)
val lists = DatabaseHolder.Database.localPlaylistsDao().getAll()
Log.e("lists", lists.toString())
}
}
}

View File

@ -5,12 +5,15 @@ import androidx.room.Database
import androidx.room.RoomDatabase
import com.github.libretube.db.dao.CustomInstanceDao
import com.github.libretube.db.dao.LocalSubscriptionDao
import com.github.libretube.db.dao.LocalPlaylistsDao
import com.github.libretube.db.dao.PlaylistBookmarkDao
import com.github.libretube.db.dao.SearchHistoryDao
import com.github.libretube.db.dao.WatchHistoryDao
import com.github.libretube.db.dao.WatchPositionDao
import com.github.libretube.db.obj.CustomInstance
import com.github.libretube.db.obj.LocalSubscription
import com.github.libretube.db.obj.LocalPlaylist
import com.github.libretube.db.obj.LocalPlaylistItem
import com.github.libretube.db.obj.PlaylistBookmark
import com.github.libretube.db.obj.SearchHistoryItem
import com.github.libretube.db.obj.WatchHistoryItem
@ -23,11 +26,14 @@ import com.github.libretube.db.obj.WatchPosition
SearchHistoryItem::class,
CustomInstance::class,
LocalSubscription::class,
PlaylistBookmark::class
PlaylistBookmark::class,
LocalPlaylist::class,
LocalPlaylistItem::class
],
version = 8,
version = 9,
autoMigrations = [
AutoMigration(from = 7, to = 8)
AutoMigration(from = 7, to = 8),
AutoMigration(from = 8, to = 9)
]
)
abstract class AppDatabase : RoomDatabase() {
@ -60,4 +66,9 @@ abstract class AppDatabase : RoomDatabase() {
* Bookmarked Playlists
*/
abstract fun playlistBookmarkDao(): PlaylistBookmarkDao
/**
* Local playlists
*/
abstract fun localPlaylistsDao(): LocalPlaylistsDao
}

View File

@ -0,0 +1,33 @@
package com.github.libretube.db.dao
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Transaction
import androidx.room.Update
import com.github.libretube.db.obj.LocalPlaylist
import com.github.libretube.db.obj.LocalPlaylistItem
import com.github.libretube.db.obj.LocalPlaylistWithVideos
@Dao
interface LocalPlaylistsDao {
@Transaction
@Query("SELECT * FROM LocalPlaylist")
fun getAll(): List<LocalPlaylistWithVideos>
@Insert
fun createPlaylist(playlist: LocalPlaylist)
@Update
fun updatePlaylist(playlist: LocalPlaylist)
@Delete
fun deletePlaylist(playlist: LocalPlaylist)
@Insert
fun addPlaylistVideo(playlistVideo: LocalPlaylistItem)
@Delete
fun removePlaylistVideo(playlistVideo: LocalPlaylistItem)
}

View File

@ -0,0 +1,12 @@
package com.github.libretube.db.obj
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class LocalPlaylist(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
val name: String,
val thumbnailUrl: String
)

View File

@ -0,0 +1,19 @@
package com.github.libretube.db.obj
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class LocalPlaylistItem(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
@ColumnInfo val playlistId: Int,
@ColumnInfo val videoId: String,
@ColumnInfo val title: String? = null,
@ColumnInfo val uploadDate: String? = null,
@ColumnInfo val uploader: String? = null,
@ColumnInfo val uploaderUrl: String? = null,
@ColumnInfo val uploaderAvatar: String? = null,
@ColumnInfo val thumbnailUrl: String? = null,
@ColumnInfo val duration: Long? = null
)

View File

@ -0,0 +1,13 @@
package com.github.libretube.db.obj
import androidx.room.Embedded
import androidx.room.Relation
data class LocalPlaylistWithVideos(
@Embedded val playlist: LocalPlaylist,
@Relation(
parentColumn = "id",
entityColumn = "playlistId"
)
val videos: List<LocalPlaylistItem>
)