From 29f6ece98be29eddbc5008635c73943b62f46725 Mon Sep 17 00:00:00 2001
From: Him188 <Him188@mamoe.net>
Date: Fri, 26 Nov 2021 18:22:22 +0000
Subject: [PATCH] Add AbstractJvmPlugin.save and
 AbstractJvmPlugin.savePluginData, close #408 (#420)

---
 .../src/plugin/jvm/AbstractJvmPlugin.kt       | 36 +++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/backend/mirai-console/src/plugin/jvm/AbstractJvmPlugin.kt b/backend/mirai-console/src/plugin/jvm/AbstractJvmPlugin.kt
index cf9f2390a..635c5635a 100644
--- a/backend/mirai-console/src/plugin/jvm/AbstractJvmPlugin.kt
+++ b/backend/mirai-console/src/plugin/jvm/AbstractJvmPlugin.kt
@@ -57,6 +57,24 @@ public abstract class AbstractJvmPlugin @JvmOverloads constructor(
     @JvmName("reloadPluginConfig")
     public fun <T : PluginConfig> T.reload(): Unit = loader.configStorage.load(this@AbstractJvmPlugin, this)
 
+    /**
+     * 立即保存 [PluginData]
+     *
+     * @see reloadPluginData
+     * @since 2.9
+     */
+    @JvmName("savePluginData")
+    public fun <T : PluginData> T.save(): Unit = loader.dataStorage.store(this@AbstractJvmPlugin, this)
+
+    /**
+     * 立即保存 [PluginConfig]
+     *
+     * @see reloadPluginConfig
+     * @since 2.9
+     */
+    @JvmName("savePluginConfig")
+    public fun <T : PluginConfig> T.save(): Unit = loader.configStorage.store(this@AbstractJvmPlugin, this)
+
     @ConsoleExperimentalApi
     public override val autoSaveIntervalMillis: LongRange = 30.secondsToMillis..10.minutesToMillis
 }
@@ -76,3 +94,21 @@ public inline fun AbstractJvmPlugin.reloadPluginData(instance: PluginData): Unit
  */
 @JvmSynthetic
 public inline fun AbstractJvmPlugin.reloadPluginConfig(instance: PluginConfig): Unit = this.run { instance.reload() }
+
+/**
+ * 立即保存 [PluginData]
+ *
+ * @see AbstractJvmPlugin.save
+ * @since 2.9
+ */
+@JvmSynthetic
+public inline fun AbstractJvmPlugin.savePluginData(instance: PluginData): Unit = this.run { instance.save() }
+
+/**
+ * 立即保存 [PluginConfig]
+ *
+ * @see AbstractJvmPlugin.save
+ * @since 2.9
+ */
+@JvmSynthetic
+public inline fun AbstractJvmPlugin.savePluginConfig(instance: PluginConfig): Unit = this.run { instance.save() }