mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 00:10:32 +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.app.Application
|
||||||
import android.os.StrictMode
|
import android.os.StrictMode
|
||||||
import android.os.StrictMode.VmPolicy
|
import android.os.StrictMode.VmPolicy
|
||||||
|
import android.util.Log
|
||||||
import androidx.core.app.NotificationChannelCompat
|
import androidx.core.app.NotificationChannelCompat
|
||||||
import androidx.core.app.NotificationManagerCompat
|
import androidx.core.app.NotificationManagerCompat
|
||||||
import androidx.work.ExistingPeriodicWorkPolicy
|
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.DOWNLOAD_CHANNEL_ID
|
||||||
import com.github.libretube.constants.PUSH_CHANNEL_ID
|
import com.github.libretube.constants.PUSH_CHANNEL_ID
|
||||||
import com.github.libretube.db.DatabaseHolder
|
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.ExceptionHandler
|
||||||
import com.github.libretube.util.ImageHelper
|
import com.github.libretube.util.ImageHelper
|
||||||
import com.github.libretube.util.NotificationHelper
|
import com.github.libretube.util.NotificationHelper
|
||||||
@ -36,6 +41,8 @@ class LibreTubeApp : Application() {
|
|||||||
*/
|
*/
|
||||||
DatabaseHolder().initializeDatabase(this)
|
DatabaseHolder().initializeDatabase(this)
|
||||||
|
|
||||||
|
runDatabaseTests()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bypassing fileUriExposedException, see https://stackoverflow.com/questions/38200282/android-os-fileuriexposedexception-file-storage-emulated-0-test-txt-exposed
|
* 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 androidx.room.RoomDatabase
|
||||||
import com.github.libretube.db.dao.CustomInstanceDao
|
import com.github.libretube.db.dao.CustomInstanceDao
|
||||||
import com.github.libretube.db.dao.LocalSubscriptionDao
|
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.PlaylistBookmarkDao
|
||||||
import com.github.libretube.db.dao.SearchHistoryDao
|
import com.github.libretube.db.dao.SearchHistoryDao
|
||||||
import com.github.libretube.db.dao.WatchHistoryDao
|
import com.github.libretube.db.dao.WatchHistoryDao
|
||||||
import com.github.libretube.db.dao.WatchPositionDao
|
import com.github.libretube.db.dao.WatchPositionDao
|
||||||
import com.github.libretube.db.obj.CustomInstance
|
import com.github.libretube.db.obj.CustomInstance
|
||||||
import com.github.libretube.db.obj.LocalSubscription
|
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.PlaylistBookmark
|
||||||
import com.github.libretube.db.obj.SearchHistoryItem
|
import com.github.libretube.db.obj.SearchHistoryItem
|
||||||
import com.github.libretube.db.obj.WatchHistoryItem
|
import com.github.libretube.db.obj.WatchHistoryItem
|
||||||
@ -23,11 +26,14 @@ import com.github.libretube.db.obj.WatchPosition
|
|||||||
SearchHistoryItem::class,
|
SearchHistoryItem::class,
|
||||||
CustomInstance::class,
|
CustomInstance::class,
|
||||||
LocalSubscription::class,
|
LocalSubscription::class,
|
||||||
PlaylistBookmark::class
|
PlaylistBookmark::class,
|
||||||
|
LocalPlaylist::class,
|
||||||
|
LocalPlaylistItem::class
|
||||||
],
|
],
|
||||||
version = 8,
|
version = 9,
|
||||||
autoMigrations = [
|
autoMigrations = [
|
||||||
AutoMigration(from = 7, to = 8)
|
AutoMigration(from = 7, to = 8),
|
||||||
|
AutoMigration(from = 8, to = 9)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
abstract class AppDatabase : RoomDatabase() {
|
abstract class AppDatabase : RoomDatabase() {
|
||||||
@ -60,4 +66,9 @@ abstract class AppDatabase : RoomDatabase() {
|
|||||||
* Bookmarked Playlists
|
* Bookmarked Playlists
|
||||||
*/
|
*/
|
||||||
abstract fun playlistBookmarkDao(): PlaylistBookmarkDao
|
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