Track whether loading is underway
[mudpy.git] / mudpy / misc.py
index 59bef18..4e32ccc 100644 (file)
@@ -1,6 +1,6 @@
 """Miscellaneous functions for the mudpy engine."""
 
-# Copyright (c) 2004-2016 Jeremy Stanley <fungi@yuggoth.org>. Permission
+# Copyright (c) 2004-2017 Jeremy Stanley <fungi@yuggoth.org>. Permission
 # to use, copy, modify, and distribute this software is granted under
 # terms provided in the LICENSE file distributed with this software.
 
@@ -164,7 +164,7 @@ class Element:
             else:
                 node = ".".join((self.key, facet))
                 self.origin.data[node] = value
-                self.facethash[node] = self.origin.data[node]
+                self.facethash[facet] = self.origin.data[node]
             self.origin.modified = True
 
     def append(self, facet, value):
@@ -347,6 +347,7 @@ class Universe:
         self.contents = {}
         self.default_origins = {}
         self.directions = set()
+        self.loading = False
         self.loglines = []
         self.private_files = []
         self.reload_flag = False
@@ -375,6 +376,9 @@ class Universe:
     def load(self):
         """Load universe data from persistent storage."""
 
+        # while loading, it's safe to update elements from read-only files
+        self.loading = True
+
         # it's possible for this to enter before logging configuration is read
         pending_loglines = []
 
@@ -425,6 +429,10 @@ class Universe:
         for element in self.contents.values():
             element.update_location()
             element.clean_contents()
+
+        # done loading, so disallow updating elements from read-only files
+        self.loading = False
+
         return pending_loglines
 
     def new(self):
@@ -536,9 +544,8 @@ class User:
     def check_idle(self):
         """Warn or disconnect idle users as appropriate."""
         idletime = universe.get_time() - self.last_input
-        linkdead_dict = universe.categories["internal"]["time"].get(
-            "linkdead"
-        )
+        linkdead_dict = universe.contents[
+            "mudpy.timing.idle.disconnect"].facets()
         if self.state in linkdead_dict:
             linkdead_state = self.state
         else:
@@ -560,7 +567,7 @@ class User:
             log(logline, 2)
             self.state = "disconnecting"
             self.menu_seen = False
-        idle_dict = universe.categories["internal"]["time"].get("idle")
+        idle_dict = universe.contents["mudpy.timing.idle.warn"].facets()
         if self.state in idle_dict:
             idle_state = self.state
         else:
@@ -1308,7 +1315,7 @@ def replace_macros(user, text, is_input=False):
                 replacement = replacement[:-2]
             else:
                 replacement = ""
-                log("Couldn't read included " + incfile + " file.", 6)
+                log("Couldn't read included " + incfile + " file.", 7)
 
         # if we get here, log and replace it with null
         else:
@@ -1371,9 +1378,7 @@ def on_pulse():
     if not universe.categories["internal"]["counters"].get("mark"):
         log(str(len(universe.userlist)) + " connection(s)")
         universe.categories["internal"]["counters"].set(
-            "mark", universe.categories["internal"]["time"].get(
-                "frequency_log"
-            )
+            "mark", universe.contents["mudpy.timing"].get("status")
         )
     else:
         universe.categories["internal"]["counters"].set(
@@ -1386,9 +1391,7 @@ def on_pulse():
     if not universe.categories["internal"]["counters"].get("save"):
         universe.save()
         universe.categories["internal"]["counters"].set(
-            "save", universe.categories["internal"]["time"].get(
-                "frequency_save"
-            )
+            "save", universe.contents["mudpy.timing"].get("save")
         )
     else:
         universe.categories["internal"]["counters"].set(
@@ -1398,8 +1401,7 @@ def on_pulse():
         )
 
     # pause for a configurable amount of time (decimal seconds)
-    time.sleep(universe.categories["internal"]
-               ["time"].get("increment"))
+    time.sleep(universe.contents["mudpy.timing"].get("increment"))
 
     # increase the elapsed increment counter
     universe.categories["internal"]["counters"].set(
@@ -1892,7 +1894,7 @@ def command_reload(actor):
         log(
             "User " +
             actor.owner.account.get("name") + " reloaded the world.",
-            8
+            6
         )
 
         # set a flag to reload