aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt
new file mode 100644
index 000000000..5e9181447
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt
@@ -0,0 +1,47 @@
+package at.hannibal2.skyhanni.utils.tracker
+
+import at.hannibal2.skyhanni.config.Storage
+import at.hannibal2.skyhanni.data.ProfileStorageData
+import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addDisplayModeToggle
+import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton
+
+class SkyHanniTracker<Data : TrackerData>(
+ val name: String,
+ private val currentSessionData: Data,
+ val getStorage: (Storage.ProfileSpecific) -> Data,
+ val update: () -> Unit,
+) {
+
+ private fun getSharedTracker(): SharedTracker<Data>? {
+ val profileSpecific = ProfileStorageData.profileSpecific ?: return null
+ return SharedTracker(getStorage(profileSpecific), currentSessionData)
+ }
+
+ fun addSessionResetButton(list: MutableList<List<Any>>, inventoryOpen: Boolean) {
+ if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) {
+ list.addSessionResetButton(name, getSharedTracker()) {
+ update()
+ }
+ }
+ }
+
+ fun addDisplayModeToggle(list: MutableList<List<Any>>, inventoryOpen: Boolean) {
+ if (inventoryOpen) {
+ list.addDisplayModeToggle {
+ update()
+ }
+ }
+ }
+
+ fun currentDisplay() = getSharedTracker()?.getCurrent()
+
+ fun resetCommand(args: Array<String>, command: String) {
+ TrackerUtils.resetCommand(name, command, args, getSharedTracker()) {
+ update()
+ }
+ }
+
+ fun modify(modifyFunction: (Data) -> Unit) {
+ getSharedTracker()?.modify(modifyFunction)
+ }
+}