From 7cde8ed5383df39bb6660a50e416ffd3cd784c92 Mon Sep 17 00:00:00 2001 From: Kelvin <kelvin@futo.org> Date: Fri, 1 Dec 2023 16:45:17 +0100 Subject: [PATCH] Filler dev options --- .../com/futo/platformplayer/SettingsDev.kt | 88 ++++++++++++++++++- .../activities/DeveloperActivity.kt | 22 +++++ .../platformplayer/states/StateHistory.kt | 4 +- .../platformplayer/views/buttons/BigButton.kt | 17 ++++ .../views/fields/ButtonField.kt | 2 + app/src/main/res/values/strings.xml | 1 + 6 files changed, 131 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/SettingsDev.kt b/app/src/main/java/com/futo/platformplayer/SettingsDev.kt index 111911f1..ef4f9495 100644 --- a/app/src/main/java/com/futo/platformplayer/SettingsDev.kt +++ b/app/src/main/java/com/futo/platformplayer/SettingsDev.kt @@ -13,9 +13,11 @@ import androidx.work.WorkManager import androidx.work.WorkerParameters import com.caoccao.javet.values.primitive.V8ValueInteger import com.caoccao.javet.values.primitive.V8ValueString +import com.futo.platformplayer.activities.DeveloperActivity import com.futo.platformplayer.activities.SettingsActivity import com.futo.platformplayer.api.http.ManagedHttpClient import com.futo.platformplayer.api.media.models.contents.IPlatformContent +import com.futo.platformplayer.api.media.models.video.IPlatformVideo import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.api.media.platforms.js.SourcePluginConfig import com.futo.platformplayer.api.media.platforms.js.SourcePluginDescriptor @@ -29,9 +31,13 @@ import com.futo.platformplayer.states.StateApp import com.futo.platformplayer.states.StateCache import com.futo.platformplayer.states.StateDeveloper import com.futo.platformplayer.states.StateDownloads +import com.futo.platformplayer.states.StateHistory +import com.futo.platformplayer.states.StatePlatform import com.futo.platformplayer.states.StateSubscriptions import com.futo.platformplayer.stores.FragmentedStorage import com.futo.platformplayer.stores.FragmentedStorageFileJson +import com.futo.platformplayer.stores.db.types.DBHistory +import com.futo.platformplayer.views.fields.ButtonField import com.futo.platformplayer.views.fields.FieldForm import com.futo.platformplayer.views.fields.FormField import kotlinx.coroutines.CoroutineScope @@ -40,6 +46,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import kotlinx.serialization.* import kotlinx.serialization.json.* +import java.time.OffsetDateTime import java.util.UUID import java.util.concurrent.TimeUnit import java.util.stream.IntStream.range @@ -89,8 +96,16 @@ class SettingsDev : FragmentedStorageFileJson() { @Serializable class Cache { - @FormField(R.string.subscriptions_cache_5000, FieldForm.BUTTON, -1, 1) + @FormField(R.string.subscriptions_cache_5000, FieldForm.BUTTON, -1, 1, "subscription_cache_button") fun subscriptionsCache5000() { + Logger.i("SettingsDev", "Started caching 5000 sub items"); + UIDialogs.toast( + SettingsActivity.getActivity()!!, + "Started caching 5000 sub items" + ); + val button = DeveloperActivity.getActivity()?.getField("subscription_cache_button"); + if(button is ButtonField) + button.setButtonEnabled(false); StateApp.instance.scope.launch(Dispatchers.IO) { try { val subsCache = @@ -127,6 +142,77 @@ class SettingsDev : FragmentedStorageFileJson() { Logger.e("SettingsDev", ex.message, ex); Logger.i("SettingsDev", "Failed: ${ex.message}"); } + finally { + withContext(Dispatchers.Main) { + if(button is ButtonField) + button.setButtonEnabled(true); + } + } + } + } + + @FormField(R.string.history_cache_100, FieldForm.BUTTON, -1, 1, "history_cache_button") + fun historyCache100() { + Logger.i("SettingsDev", "Started caching 100 history items (from home)"); + UIDialogs.toast( + SettingsActivity.getActivity()!!, + "Started caching 100 history items (from home)" + ); + val button = DeveloperActivity.getActivity()?.getField("history_cache_button"); + if(button is ButtonField) + button.setButtonEnabled(false); + StateApp.instance.scope.launch(Dispatchers.IO) { + try { + val subsCache = StatePlatform.instance.getHome(); + + var num = 0; + for(item in subsCache.getResults().filterIsInstance<IPlatformVideo>()) { + StateHistory.instance.getHistoryByVideo(item, true, OffsetDateTime.now().minusHours(num.toLong() * 4)) + num++; + } + + var total = 0; + var page = 0; + var lastToast = System.currentTimeMillis(); + while(subsCache!!.hasMorePages() && total < 5000) { + subsCache!!.nextPage(); + total += subsCache!!.getResults().size; + page++; + + for(item in subsCache.getResults().filterIsInstance<IPlatformVideo>()) { + StateHistory.instance.getHistoryByVideo(item, true, OffsetDateTime.now().minusHours(num.toLong() * 4)) + num++; + } + + if(page % 4 == 0) + withContext(Dispatchers.Main) { + val diff = System.currentTimeMillis() - lastToast; + lastToast = System.currentTimeMillis(); + UIDialogs.toast( + SettingsActivity.getActivity()!!, + "Page: ${page}, Total: ${total}, Speed: ${diff}ms" + ); + } + Thread.sleep(500); + } + + withContext(Dispatchers.Main) { + UIDialogs.toast( + SettingsActivity.getActivity()!!, + "FINISHED Page: ${page}, Total: ${total}" + ); + } + } + catch(ex: Throwable) { + Logger.e("SettingsDev", ex.message, ex); + Logger.i("SettingsDev", "Failed: ${ex.message}"); + } + finally { + withContext(Dispatchers.Main) { + if(button is ButtonField) + button.setButtonEnabled(true); + } + } } } } diff --git a/app/src/main/java/com/futo/platformplayer/activities/DeveloperActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/DeveloperActivity.kt index 53215522..f714f880 100644 --- a/app/src/main/java/com/futo/platformplayer/activities/DeveloperActivity.kt +++ b/app/src/main/java/com/futo/platformplayer/activities/DeveloperActivity.kt @@ -1,17 +1,24 @@ package com.futo.platformplayer.activities +import android.annotation.SuppressLint import android.os.Bundle import android.widget.ImageButton import androidx.appcompat.app.AppCompatActivity import com.futo.platformplayer.* import com.futo.platformplayer.views.fields.FieldForm +import com.futo.platformplayer.views.fields.IField class DeveloperActivity : AppCompatActivity() { private lateinit var _form: FieldForm; private lateinit var _buttonBack: ImageButton; + fun getField(id: String): IField? { + return _form.findField(id); + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); + DeveloperActivity._lastActivity = this; setContentView(R.layout.activity_dev); setNavigationBarColorAndIcons(); @@ -33,4 +40,19 @@ class DeveloperActivity : AppCompatActivity() { super.finish() overridePendingTransition(R.anim.slide_lighten, R.anim.slide_out_up) } + + + + companion object { + //TODO: Temporary for solving Settings issues + @SuppressLint("StaticFieldLeak") + private var _lastActivity: DeveloperActivity? = null; + + fun getActivity(): DeveloperActivity? { + val act = _lastActivity; + if(act != null) + return act; + return null; + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/futo/platformplayer/states/StateHistory.kt b/app/src/main/java/com/futo/platformplayer/states/StateHistory.kt index 0a03ade4..b60e22be 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StateHistory.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StateHistory.kt @@ -105,12 +105,12 @@ class StateHistory { fun getHistoryIndexByUrl(url: String): DBHistory.Index? { return historyIndex[url]; } - fun getHistoryByVideo(video: IPlatformVideo, create: Boolean = false): DBHistory.Index? { + fun getHistoryByVideo(video: IPlatformVideo, create: Boolean = false, watchDate: OffsetDateTime? = null): DBHistory.Index? { val existing = historyIndex[video.url]; if(existing != null) return _historyDBStore.get(existing.id!!); else if(create) { - val newHistItem = HistoryVideo(SerializedPlatformVideo.fromVideo(video), 0, OffsetDateTime.now()); + val newHistItem = HistoryVideo(SerializedPlatformVideo.fromVideo(video), 0, watchDate ?: OffsetDateTime.now()); val id = _historyDBStore.insert(newHistItem); return _historyDBStore.get(id); } diff --git a/app/src/main/java/com/futo/platformplayer/views/buttons/BigButton.kt b/app/src/main/java/com/futo/platformplayer/views/buttons/BigButton.kt index 6d5e30e8..61f8013a 100644 --- a/app/src/main/java/com/futo/platformplayer/views/buttons/BigButton.kt +++ b/app/src/main/java/com/futo/platformplayer/views/buttons/BigButton.kt @@ -40,6 +40,8 @@ open class BigButton : LinearLayout { _root.apply { isClickable = true; setOnClickListener { + if(!isEnabled) + return@setOnClickListener; action(); onClick.emit(); }; @@ -54,6 +56,8 @@ open class BigButton : LinearLayout { _root.apply { isClickable = true; setOnClickListener { + if(!isEnabled) + return@setOnClickListener; onClick.emit(); }; } @@ -144,4 +148,17 @@ open class BigButton : LinearLayout { return this; } + + fun setButtonEnabled(enabled: Boolean) { + if(enabled) { + alpha = 1f; + isEnabled = true; + isClickable = true; + } + else { + alpha = 0.5f; + isEnabled = false; + isClickable = false; + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/futo/platformplayer/views/fields/ButtonField.kt b/app/src/main/java/com/futo/platformplayer/views/fields/ButtonField.kt index 6996005c..03af1ee8 100644 --- a/app/src/main/java/com/futo/platformplayer/views/fields/ButtonField.kt +++ b/app/src/main/java/com/futo/platformplayer/views/fields/ButtonField.kt @@ -57,6 +57,8 @@ class ButtonField : BigButton, IField { }; super.onClick.subscribe { + if(!isEnabled) + return@subscribe; if(_method?.parameterCount == 1) _method?.invoke(_obj, context); else if(_method?.parameterCount == 2) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 583192bc..12b56994 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -435,6 +435,7 @@ <string name="settings_related_to_development_server_be_careful_as_it_may_open_your_phone_to_security_vulnerabilities">Settings related to development server, be careful as it may open your phone to security vulnerabilities</string> <string name="start_server">Start Server</string> <string name="subscriptions_cache_5000">Subscriptions Cache 5000</string> + <string name="history_cache_100">History Cache 100</string> <string name="start_server_on_boot">Start Server on boot</string> <string name="starts_a_devServer_on_port_11337_may_expose_vulnerabilities">Starts a DevServer on port 11337, may expose vulnerabilities.</string> <string name="test_v8_communication_speed">Test V8 Communication speed</string> -- GitLab