mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-01-06 01:20:29 +05:30
migrate custom instances
This commit is contained in:
parent
3eadc46780
commit
4244efc448
@ -2,15 +2,17 @@ package com.github.libretube.database
|
|||||||
|
|
||||||
import androidx.room.Database
|
import androidx.room.Database
|
||||||
import androidx.room.RoomDatabase
|
import androidx.room.RoomDatabase
|
||||||
|
import com.github.libretube.obj.CustomInstance
|
||||||
import com.github.libretube.obj.WatchHistoryItem
|
import com.github.libretube.obj.WatchHistoryItem
|
||||||
import com.github.libretube.obj.WatchPosition
|
import com.github.libretube.obj.WatchPosition
|
||||||
|
|
||||||
@Database(
|
@Database(
|
||||||
entities = [
|
entities = [
|
||||||
WatchHistoryItem::class,
|
WatchHistoryItem::class,
|
||||||
WatchPosition::class
|
WatchPosition::class,
|
||||||
|
CustomInstance::class
|
||||||
],
|
],
|
||||||
version = 2
|
version = 3
|
||||||
)
|
)
|
||||||
abstract class AppDatabase : RoomDatabase() {
|
abstract class AppDatabase : RoomDatabase() {
|
||||||
/**
|
/**
|
||||||
@ -22,4 +24,9 @@ abstract class AppDatabase : RoomDatabase() {
|
|||||||
* Watch Positions
|
* Watch Positions
|
||||||
*/
|
*/
|
||||||
abstract fun watchPositionDao(): WatchPositionDao
|
abstract fun watchPositionDao(): WatchPositionDao
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom Instances
|
||||||
|
*/
|
||||||
|
abstract fun customInstanceDao(): CustomInstanceDao
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.github.libretube.database
|
||||||
|
|
||||||
|
import androidx.room.Dao
|
||||||
|
import androidx.room.Delete
|
||||||
|
import androidx.room.Insert
|
||||||
|
import androidx.room.OnConflictStrategy
|
||||||
|
import androidx.room.Query
|
||||||
|
import com.github.libretube.obj.CustomInstance
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface CustomInstanceDao {
|
||||||
|
@Query("SELECT * FROM customInstance")
|
||||||
|
fun getAll(): List<CustomInstance>
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
fun insertAll(vararg customInstances: CustomInstance)
|
||||||
|
|
||||||
|
@Delete
|
||||||
|
fun delete(customInstance: CustomInstance)
|
||||||
|
}
|
@ -5,9 +5,9 @@ import android.os.Bundle
|
|||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
|
import com.github.libretube.database.DatabaseHolder
|
||||||
import com.github.libretube.databinding.DialogCustomInstanceBinding
|
import com.github.libretube.databinding.DialogCustomInstanceBinding
|
||||||
import com.github.libretube.obj.CustomInstance
|
import com.github.libretube.obj.CustomInstance
|
||||||
import com.github.libretube.preferences.PreferenceHelper
|
|
||||||
import com.github.libretube.util.ThemeHelper
|
import com.github.libretube.util.ThemeHelper
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
@ -41,7 +41,10 @@ class CustomInstanceDialog : DialogFragment() {
|
|||||||
URL(customInstance.apiUrl).toURI()
|
URL(customInstance.apiUrl).toURI()
|
||||||
URL(customInstance.frontendUrl).toURI()
|
URL(customInstance.frontendUrl).toURI()
|
||||||
|
|
||||||
PreferenceHelper.saveCustomInstance(customInstance)
|
Thread {
|
||||||
|
DatabaseHolder.database.customInstanceDao().insertAll(customInstance)
|
||||||
|
}.start()
|
||||||
|
|
||||||
activity?.recreate()
|
activity?.recreate()
|
||||||
dismiss()
|
dismiss()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
@ -7,6 +7,8 @@ import androidx.fragment.app.DialogFragment
|
|||||||
import com.github.libretube.PIPED_FRONTEND_URL
|
import com.github.libretube.PIPED_FRONTEND_URL
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.YOUTUBE_FRONTEND_URL
|
import com.github.libretube.YOUTUBE_FRONTEND_URL
|
||||||
|
import com.github.libretube.database.DatabaseHolder
|
||||||
|
import com.github.libretube.obj.CustomInstance
|
||||||
import com.github.libretube.preferences.PreferenceHelper
|
import com.github.libretube.preferences.PreferenceHelper
|
||||||
import com.github.libretube.preferences.PreferenceKeys
|
import com.github.libretube.preferences.PreferenceKeys
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
@ -71,7 +73,13 @@ class ShareDialog(
|
|||||||
)
|
)
|
||||||
|
|
||||||
// get the api urls of the other custom instances
|
// get the api urls of the other custom instances
|
||||||
val customInstances = PreferenceHelper.getCustomInstances()
|
var customInstances = listOf<CustomInstance>()
|
||||||
|
Thread {
|
||||||
|
customInstances = DatabaseHolder.database.customInstanceDao().getAll()
|
||||||
|
}.apply {
|
||||||
|
start()
|
||||||
|
join()
|
||||||
|
}
|
||||||
|
|
||||||
// return the custom instance frontend url if available
|
// return the custom instance frontend url if available
|
||||||
customInstances.forEach { instance ->
|
customInstances.forEach { instance ->
|
||||||
|
@ -2,10 +2,12 @@ package com.github.libretube.obj
|
|||||||
|
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
|
import androidx.room.PrimaryKey
|
||||||
|
|
||||||
@Entity
|
@Entity(tableName = "customInstance")
|
||||||
class CustomInstance(
|
class CustomInstance(
|
||||||
|
@PrimaryKey(autoGenerate = true) var id: Int = 0,
|
||||||
@ColumnInfo var name: String = "",
|
@ColumnInfo var name: String = "",
|
||||||
var apiUrl: String = "",
|
@ColumnInfo var apiUrl: String = "",
|
||||||
var frontendUrl: String = ""
|
@ColumnInfo var frontendUrl: String = ""
|
||||||
)
|
)
|
||||||
|
@ -13,10 +13,12 @@ import androidx.preference.Preference
|
|||||||
import androidx.preference.SwitchPreferenceCompat
|
import androidx.preference.SwitchPreferenceCompat
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.activities.SettingsActivity
|
import com.github.libretube.activities.SettingsActivity
|
||||||
|
import com.github.libretube.database.DatabaseHolder
|
||||||
import com.github.libretube.dialogs.CustomInstanceDialog
|
import com.github.libretube.dialogs.CustomInstanceDialog
|
||||||
import com.github.libretube.dialogs.DeleteAccountDialog
|
import com.github.libretube.dialogs.DeleteAccountDialog
|
||||||
import com.github.libretube.dialogs.LoginDialog
|
import com.github.libretube.dialogs.LoginDialog
|
||||||
import com.github.libretube.dialogs.LogoutDialog
|
import com.github.libretube.dialogs.LogoutDialog
|
||||||
|
import com.github.libretube.obj.CustomInstance
|
||||||
import com.github.libretube.util.ImportHelper
|
import com.github.libretube.util.ImportHelper
|
||||||
import com.github.libretube.util.PermissionHelper
|
import com.github.libretube.util.PermissionHelper
|
||||||
import com.github.libretube.util.RetrofitInstance
|
import com.github.libretube.util.RetrofitInstance
|
||||||
@ -157,7 +159,13 @@ class InstanceSettings : MaterialPreferenceFragment() {
|
|||||||
|
|
||||||
private fun initCustomInstances(instancePref: ListPreference) {
|
private fun initCustomInstances(instancePref: ListPreference) {
|
||||||
lifecycleScope.launchWhenCreated {
|
lifecycleScope.launchWhenCreated {
|
||||||
val customInstances = PreferenceHelper.getCustomInstances()
|
var customInstances = listOf<CustomInstance>()
|
||||||
|
Thread {
|
||||||
|
customInstances = DatabaseHolder.database.customInstanceDao().getAll()
|
||||||
|
}.apply {
|
||||||
|
start()
|
||||||
|
join()
|
||||||
|
}
|
||||||
|
|
||||||
val instanceNames = arrayListOf<String>()
|
val instanceNames = arrayListOf<String>()
|
||||||
val instanceValues = arrayListOf<String>()
|
val instanceValues = arrayListOf<String>()
|
||||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
|||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.fasterxml.jackson.core.type.TypeReference
|
import com.fasterxml.jackson.core.type.TypeReference
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import com.github.libretube.obj.CustomInstance
|
|
||||||
|
|
||||||
object PreferenceHelper {
|
object PreferenceHelper {
|
||||||
private val TAG = "PreferenceHelper"
|
private val TAG = "PreferenceHelper"
|
||||||
@ -71,27 +70,6 @@ object PreferenceHelper {
|
|||||||
authEditor.putString(PreferenceKeys.USERNAME, newValue).apply()
|
authEditor.putString(PreferenceKeys.USERNAME, newValue).apply()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun saveCustomInstance(customInstance: CustomInstance) {
|
|
||||||
val customInstancesList = getCustomInstances()
|
|
||||||
customInstancesList += customInstance
|
|
||||||
|
|
||||||
val json = mapper.writeValueAsString(customInstancesList)
|
|
||||||
editor.putString("customInstances", json).apply()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getCustomInstances(): ArrayList<CustomInstance> {
|
|
||||||
val json: String = settings.getString("customInstances", "")!!
|
|
||||||
val type = mapper.typeFactory.constructCollectionType(
|
|
||||||
List::class.java,
|
|
||||||
CustomInstance::class.java
|
|
||||||
)
|
|
||||||
return try {
|
|
||||||
mapper.readValue(json, type)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
arrayListOf()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getSearchHistory(): List<String> {
|
fun getSearchHistory(): List<String> {
|
||||||
return try {
|
return try {
|
||||||
val json = settings.getString("search_history", "")!!
|
val json = settings.getString("search_history", "")!!
|
||||||
|
Loading…
Reference in New Issue
Block a user