diff --git a/app/src/main/java/com/deniscerri/ytdl/database/dao/ResultDao.kt b/app/src/main/java/com/deniscerri/ytdl/database/dao/ResultDao.kt index a43fe960..73a04233 100644 --- a/app/src/main/java/com/deniscerri/ytdl/database/dao/ResultDao.kt +++ b/app/src/main/java/com/deniscerri/ytdl/database/dao/ResultDao.kt @@ -56,6 +56,9 @@ interface ResultDao { @Query("SELECT * FROM results WHERE id IN (:ids)") fun getAllByIDs(ids: List) : List + @Query("SELECT * FROM results") + fun getAll() : List + @Update(onConflict = OnConflictStrategy.REPLACE) suspend fun update(item: ResultItem) diff --git a/app/src/main/java/com/deniscerri/ytdl/database/models/RestoreAppDataItem.kt b/app/src/main/java/com/deniscerri/ytdl/database/models/RestoreAppDataItem.kt index 53e90ec7..84ad042b 100644 --- a/app/src/main/java/com/deniscerri/ytdl/database/models/RestoreAppDataItem.kt +++ b/app/src/main/java/com/deniscerri/ytdl/database/models/RestoreAppDataItem.kt @@ -4,6 +4,7 @@ import com.deniscerri.ytdl.database.models.observeSources.ObserveSourcesItem data class RestoreAppDataItem( var settings : List? = null, + var searchResults: List? = null, var downloads: List? = null, var queued: List? = null, var scheduled: List? = null, diff --git a/app/src/main/java/com/deniscerri/ytdl/database/repository/ResultRepository.kt b/app/src/main/java/com/deniscerri/ytdl/database/repository/ResultRepository.kt index aa8a9581..c86833fe 100644 --- a/app/src/main/java/com/deniscerri/ytdl/database/repository/ResultRepository.kt +++ b/app/src/main/java/com/deniscerri/ytdl/database/repository/ResultRepository.kt @@ -399,6 +399,10 @@ class ResultRepository(private val resultDao: ResultDao, commandTemplateDao: Com return resultDao.getAllByURL(url) } + fun getAll() : List { + return resultDao.getAll() + } + fun getAllByIDs(ids: List) : List { return resultDao.getAllByIDs(ids) } diff --git a/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/SettingsViewModel.kt b/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/SettingsViewModel.kt index 37eefa63..507c8ec9 100644 --- a/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/SettingsViewModel.kt @@ -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 = listOf()) : Result { 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){ diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/MainSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/MainSettingsFragment.kt index 49d6f254..40ca48de 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/MainSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/MainSettingsFragment.kt @@ -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 = diff --git a/app/src/main/java/com/deniscerri/ytdl/util/BackupSettingsUtil.kt b/app/src/main/java/com/deniscerri/ytdl/util/BackupSettingsUtil.kt index 7853c42f..046adee1 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/BackupSettingsUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/BackupSettingsUtil.kt @@ -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) { diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index fb84c131..940c43c2 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -821,6 +821,7 @@ @string/settings + @string/search_results @string/downloads @string/in_queue @string/scheduled @@ -836,6 +837,7 @@ settings + searchResults downloads queued scheduled diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 05979761..73630ea5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -71,6 +71,7 @@ Video recommendations from YouTube API Announce new versions of the app when it is opened. The data is extracted from the official GitHub Repository Downloads + Search Results Remove deleted Remove duplicates Sorting