Browse Source

feat(lib/storage): 增加 storage.Set/GetGlobal API

dzp 3 years ago
parent
commit
8e1352a082
1 changed files with 38 additions and 0 deletions
  1. 38 0
      plugins/lib/storage.tin

+ 38 - 0
plugins/lib/storage.tin

@@ -18,6 +18,10 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
 /////
 ///// 各模块可以通过 API storage.Save 按需创建自己的存储文件,在其中存储一个或多个
 ///// 变量,并在需要时通过 API storage.Load 提取这些变量。
+/////
+///// 另外,storage 模块自行维护了一个全局存储文件。再简单使用场景下,其它模块
+///// 可以通过 API storage.SetGlobal 和 storage.GetGlobal 来读写这个全局存储文件。
+///// 这对读写少量的数据显得更加方便。
 ///// };
 
 #var lib_storage[META] {
@@ -84,3 +88,37 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
     };
     #class comm-store-tmp kill;
 };
+
+///=== {
+// ## storage.SetGlobal <KEY> [<值>]
+//    将值关联到 KEY 上,并存储到全局存储文件中。
+//    参见 storage.GetGlobal
+// };
+#alias {storage.SetGlobal} {
+    #local key      {%1};
+    #local value    {%2};
+
+    #if { "$key" == "" } {
+        xtt.Usage storage.SetGlobal;
+        #return;
+    };
+
+    #var storage-globals[$key] {$value};
+    storage.Save {storage} {storage-globals};
+};
+
+///=== {
+// #@ storage.GetGlobal <KEY>
+//    从全局存储文件中根据 KEY 提取值。
+//    参见 storage.SetGlobal
+// };
+#func {storage.GetGlobal} {
+    #local key  {%1};
+
+    #if { "$key" == "" } {
+        xtt.Usage storage.SetGlobal;
+        #return {};
+    };
+
+    #return {$storage-globals[$key]};
+};