diff --git a/app/src/main/java/com/futo/platformplayer/states/StateApp.kt b/app/src/main/java/com/futo/platformplayer/states/StateApp.kt index 08e02159..0b4f8d78 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StateApp.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StateApp.kt @@ -528,11 +528,13 @@ class StateApp { StatePlaylists.instance.toMigrateCheck(); StatePlaylists.instance._historyDBStore.deleteAll(); + if(StatePlaylists.instance.shouldMigrateLegacyHistory()) StatePlaylists.instance.migrateLegacyHistory(); - if(false) { + if(true) { + /* Logger.i(TAG, "TEST:--------(200)---------"); testHistoryDB(200); Logger.i(TAG, "TEST:--------(1000)---------"); @@ -543,14 +545,19 @@ class StateApp { testHistoryDB(4000); Logger.i(TAG, "TEST:--------(6000)---------"); testHistoryDB(6000); + */ + Logger.i(TAG, "TEST:--------(100000)---------"); + scope.launch(Dispatchers.Default) { + testHistoryDB(100000); + } } } fun testHistoryDB(count: Int) { Logger.i(TAG, "TEST: Starting tests"); StatePlaylists.instance._historyDBStore.deleteAll(); - val testHistoryItem = StatePlaylists.instance.getHistory().first(); - val testItemJson = StatePlaylists.instance.getHistory().first().video.toJson(); + val testHistoryItem = StatePlaylists.instance.getHistoryLegacy().first(); + val testItemJson = testHistoryItem.video.toJson(); val now = OffsetDateTime.now(); val testSet = (0..count).map { HistoryVideo(Json.decodeFromString(testItemJson.replace(testHistoryItem.video.url, UUID.randomUUID().toString())), it.toLong(), now.minusHours(it.toLong())) } @@ -562,7 +569,7 @@ class StateApp { StatePlaylists.instance._historyDBStore.insert(item); }; Logger.i(TAG, "TEST: Inserting in ${insertMS}ms"); - + /* var fetched: List? = null; val fetchMS = measureTimeMillis { fetched = StatePlaylists.instance._historyDBStore.getAll(); @@ -574,7 +581,7 @@ class StateApp { Logger.i(TAG, "TEST: Deserialized: ${deserialized.size}"); }; Logger.i(TAG, "TEST: Deserialize speed ${deserializeMS}MS"); - + */ var fetchedIndex: List? = null; val fetchIndexMS = measureTimeMillis { fetchedIndex = StatePlaylists.instance._historyDBStore.getAllIndexes(); diff --git a/app/src/main/java/com/futo/platformplayer/states/StatePlaylists.kt b/app/src/main/java/com/futo/platformplayer/states/StatePlaylists.kt index 43ff1bed..1dea8560 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StatePlaylists.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StatePlaylists.kt @@ -58,8 +58,7 @@ class StatePlaylists { val historyIndex: ConcurrentMap = ConcurrentHashMap(); val _historyDBStore = ManagedDBStore.create("history", DBHistory.Descriptor()) - .withIndex({ it.url }, historyIndex) - .withUnique({ it.url }, historyIndex) + .withIndex({ it.url }, historyIndex, true) .load(); val playlistShareDir = FragmentedStorage.getOrCreateDirectory("shares"); @@ -158,6 +157,9 @@ class StatePlaylists { } } */ + fun getHistoryLegacy(): List { + return _historyStore.getItems(); + } fun getHistory() : List { return _historyDBStore.getAllObjects(); //return _historyStore.getItems().sortedByDescending { it.date }; diff --git a/app/src/main/java/com/futo/platformplayer/stores/db/ManagedDBStore.kt b/app/src/main/java/com/futo/platformplayer/stores/db/ManagedDBStore.kt index e2665eac..a5677b9e 100644 --- a/app/src/main/java/com/futo/platformplayer/stores/db/ManagedDBStore.kt +++ b/app/src/main/java/com/futo/platformplayer/stores/db/ManagedDBStore.kt @@ -2,6 +2,7 @@ package com.futo.platformplayer.stores.db import androidx.room.ColumnInfo import androidx.room.Room +import androidx.room.migration.Migration import androidx.sqlite.db.SimpleSQLiteQuery import com.futo.platformplayer.api.media.structures.AdhocPager import com.futo.platformplayer.api.media.structures.IPager @@ -241,6 +242,7 @@ class ManagedDBStore, T, D: ManagedDBDatabase, DA if(index.serialized == null) throw IllegalStateException("Cannot deserialize index-only items from [${name}]"); val obj = _serializer.deserialize(_class, index.serialized!!); index.obj = obj; + index.serialized = null; return index; } fun deserializeIndexes(indexes: List): List { diff --git a/app/src/main/java/com/futo/platformplayer/views/adapters/HistoryListAdapter.kt b/app/src/main/java/com/futo/platformplayer/views/adapters/HistoryListAdapter.kt index 6970d82a..5b847f61 100644 --- a/app/src/main/java/com/futo/platformplayer/views/adapters/HistoryListAdapter.kt +++ b/app/src/main/java/com/futo/platformplayer/views/adapters/HistoryListAdapter.kt @@ -4,6 +4,7 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.futo.platformplayer.* +import com.futo.platformplayer.api.media.structures.IPager import com.futo.platformplayer.constructs.Event1 import com.futo.platformplayer.models.HistoryVideo import com.futo.platformplayer.states.StateApp @@ -45,6 +46,7 @@ class HistoryListAdapter : RecyclerView.Adapter { fun updateFilteredVideos() { val videos = StatePlaylists.instance.getHistory(); + if (_query.isBlank()) { _filteredVideos = videos.toMutableList(); } else {