mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-28 07:50:31 +05:30
add database structure for local playlists
This commit is contained in:
parent
3aca124372
commit
ea1d2765c9
@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
@ -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
|
||||
)
|
@ -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
|
||||
)
|
@ -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>
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user