add search results as backup category

pull/1366/head
deniscerri 4 days ago
parent 00512a2878
commit ba356d8a93
No known key found for this signature in database
GPG Key ID: 95C43D517D830350

@ -56,6 +56,9 @@ interface ResultDao {
@Query("SELECT * FROM results WHERE id IN (:ids)")
fun getAllByIDs(ids: List<Long>) : List<ResultItem>
@Query("SELECT * FROM results")
fun getAll() : List<ResultItem>
@Update(onConflict = OnConflictStrategy.REPLACE)
suspend fun update(item: ResultItem)

@ -4,6 +4,7 @@ import com.deniscerri.ytdl.database.models.observeSources.ObserveSourcesItem
data class RestoreAppDataItem(
var settings : List<BackupSettingsItem>? = null,
var searchResults: List<ResultItem>? = null,
var downloads: List<HistoryItem>? = null,
var queued: List<DownloadItem>? = null,
var scheduled: List<DownloadItem>? = null,

@ -399,6 +399,10 @@ class ResultRepository(private val resultDao: ResultDao, commandTemplateDao: Com
return resultDao.getAllByURL(url)
}
fun getAll() : List<ResultItem> {
return resultDao.getAll()
}
fun getAllByIDs(ids: List<Long>) : List<ResultItem> {
return resultDao.getAllByIDs(ids)
}

@ -18,6 +18,7 @@ import com.deniscerri.ytdl.database.repository.CookieRepository
import com.deniscerri.ytdl.database.repository.DownloadRepository
import com.deniscerri.ytdl.database.repository.HistoryRepository
import com.deniscerri.ytdl.database.repository.ObserveSourcesRepository
import com.deniscerri.ytdl.database.repository.ResultRepository
import com.deniscerri.ytdl.database.repository.SearchHistoryRepository
import com.deniscerri.ytdl.ui.more.settings.SettingsRegistry
import com.deniscerri.ytdl.util.BackupSettingsUtil
@ -41,6 +42,7 @@ class SettingsViewModel(private val application: Application) : AndroidViewModel
private val preferences : SharedPreferences = PreferenceManager.getDefaultSharedPreferences(application)
private val historyRepository : HistoryRepository
private val resultRepository : ResultRepository
private val downloadRepository : DownloadRepository
private val cookieRepository : CookieRepository
private val commandTemplateRepository : CommandTemplateRepository
@ -54,6 +56,7 @@ class SettingsViewModel(private val application: Application) : AndroidViewModel
init {
val dbManager = DBManager.getInstance(application)
historyRepository = HistoryRepository(dbManager.historyDao)
resultRepository = ResultRepository(dbManager.resultDao, dbManager.commandTemplateDao, application)
downloadRepository = DownloadRepository(dbManager.downloadDao)
cookieRepository = CookieRepository(dbManager.cookieDao)
commandTemplateRepository = CommandTemplateRepository(dbManager.commandTemplateDao)
@ -83,7 +86,21 @@ class SettingsViewModel(private val application: Application) : AndroidViewModel
suspend fun backup(items: List<String> = listOf()) : Result<String> {
var list = items
if (list.isEmpty()) {
list = listOf("settings", "downloads", "queued", "scheduled", "cancelled", "errored", "saved", "cookies", "templates", "shortcuts", "searchHistory", "observeSources")
list = listOf(
"settings",
"searchResults",
"downloads",
"queued",
"scheduled",
"cancelled",
"errored",
"saved",
"cookies",
"templates",
"shortcuts",
"searchHistory",
"observeSources"
)
}
val json = JsonObject()
@ -92,6 +109,7 @@ class SettingsViewModel(private val application: Application) : AndroidViewModel
runCatching {
when(it){
"settings" -> json.add("settings", BackupSettingsUtil.backupSettings(preferences))
"searchResults" -> json.add("searchResults", BackupSettingsUtil.backupSearchResults(resultRepository))
"downloads" -> json.add("downloads", BackupSettingsUtil.backupHistory(historyRepository))
"queued" -> json.add("queued", BackupSettingsUtil.backupQueuedDownloads(downloadRepository))
"scheduled" -> json.add("scheduled", BackupSettingsUtil.backupScheduledDownloads(downloadRepository))
@ -154,6 +172,14 @@ class SettingsViewModel(private val application: Application) : AndroidViewModel
}
}
data.searchResults?.apply {
withContext(Dispatchers.IO){
if (resetData) resultRepository.deleteAll()
data.searchResults!!.forEach {
resultRepository.insert(it)
}
}
}
data.downloads?.apply {
withContext(Dispatchers.IO){

@ -35,6 +35,7 @@ import com.deniscerri.ytdl.database.models.CookieItem
import com.deniscerri.ytdl.database.models.DownloadItem
import com.deniscerri.ytdl.database.models.HistoryItem
import com.deniscerri.ytdl.database.models.RestoreAppDataItem
import com.deniscerri.ytdl.database.models.ResultItem
import com.deniscerri.ytdl.database.models.SearchHistoryItem
import com.deniscerri.ytdl.database.models.TemplateShortcut
import com.deniscerri.ytdl.database.models.observeSources.ObserveSourcesItem
@ -304,6 +305,17 @@ class MainSettingsFragment : PreferenceFragmentCompat() {
parsedDataMessage.appendLine("${getString(R.string.settings)}: ${restoreData.settings!!.size}")
}
if (json.has("searchResults")) {
restoreData.searchResults = json.getAsJsonArray("searchResults").map {
val item =
Gson().fromJson(it.toString().replace("^\"|\"$", ""), ResultItem::class.java)
item.id = 0L
item
}
parsedDataMessage.appendLine("${getString(R.string.search_results)}: ${restoreData.searchResults!!.size}")
}
if (json.has("downloads")) {
restoreData.downloads = json.getAsJsonArray("downloads").map {
val item =

@ -7,6 +7,7 @@ import com.deniscerri.ytdl.database.repository.CookieRepository
import com.deniscerri.ytdl.database.repository.DownloadRepository
import com.deniscerri.ytdl.database.repository.HistoryRepository
import com.deniscerri.ytdl.database.repository.ObserveSourcesRepository
import com.deniscerri.ytdl.database.repository.ResultRepository
import com.deniscerri.ytdl.database.repository.SearchHistoryRepository
import com.google.gson.Gson
import com.google.gson.JsonArray
@ -39,6 +40,21 @@ object BackupSettingsUtil {
return JsonArray()
}
suspend fun backupSearchResults(resultRepository: ResultRepository) : JsonArray {
runCatching {
val items = withContext(Dispatchers.IO) {
resultRepository.getAll()
}
val arr = JsonArray()
items.forEach {
it.creationTime = Long.MAX_VALUE
arr.add(JsonParser.parseString(Gson().toJson(it)).asJsonObject)
}
return arr
}
return JsonArray()
}
suspend fun backupHistory(historyRepository: HistoryRepository) : JsonArray {
runCatching {
val historyItems = withContext(Dispatchers.IO) {

@ -821,6 +821,7 @@
<array name="backup_category_entries">
<item>@string/settings</item>
<item>@string/search_results</item>
<item>@string/downloads</item>
<item>@string/in_queue</item>
<item>@string/scheduled</item>
@ -836,6 +837,7 @@
<array name="backup_category_values">
<item>settings</item>
<item>searchResults</item>
<item>downloads</item>
<item>queued</item>
<item>scheduled</item>

@ -71,6 +71,7 @@
<string name="api_key_summary">Video recommendations from YouTube API</string>
<string name="update_app_summary">Announce new versions of the app when it is opened. The data is extracted from the official GitHub Repository</string>
<string name="downloads">Downloads</string>
<string name="search_results">Search Results</string>
<string name="remove_deleted">Remove deleted</string>
<string name="remove_duplicates">Remove duplicates</string>
<string name="sort_by">Sorting</string>

Loading…
Cancel
Save