sessions: fixes
authorNiki <niki@nikiroo.be>
Mon, 29 Sep 2025 17:47:27 +0000 (19:47 +0200)
committerNiki <niki@nikiroo.be>
Mon, 29 Sep 2025 17:47:27 +0000 (19:47 +0200)
gamiki/builder.py
gamiki/session.py

index 3556c07e50a17ef59a6d33612c6a50b6680881d2..fa0c87af2ebded04ef9a37d9d95c577efacee54e 100644 (file)
@@ -75,52 +75,44 @@ class Builder:
             for game in lib:
                 game.read_sessions()
                 if (len(game.sessions)):
-                    print(">", lib.name + "/" + game.code)            
+                    print(f"> {lib.name}/{game.code}")
                     for sess in game.sessions:
                         print(sess)
     
     def import_sessions(self):
-        sgam = ""
-        slib = ""
-        curr_lib = None
-        curr_gam = None
-        sss = None
+        cache = {}
+        for lib in self.libraries:
+            for game in lib:
+                cache[f"> {lib.name}/{game.code}"] = game
+        
+        game = None
+        sss  = None
         
         for ln in stdin:
             ln = ln.strip()
             if (ln and ln[0] == ">"):
-                slib = ln.split("/")[0][2:]
-                sgam = ln.split("/", maxsplit=1)[1]
+                if (game):
+                    Session.rewrite_sessions(game.dir, list(sss.values()))
                 
-                # TODO fix speed
-                if (curr_lib and curr_lib.name != slib):
-                    curr_lib = None
-                if (not curr_lib):
-                    for lib in self.libraries:
-                        if (lib.name == slib):
-                            curr_lib = lib
-                if (curr_gam and curr_gam.code != sgam):
-                    Session.rewrite_sessions(curr_gam.dir, list(sss.values()))
-                    curr_gam = None
-                if (curr_lib and not curr_gam):
-                    for gam in curr_lib:
-                        if (gam.code == sgam):
-                            curr_gam = gam
-            else:
-                if (curr_gam):
-                    if (sss == None):
-                        curr_gam.read_sessions()
-                        sss = {}
-                        for sess in curr_gam.sessions:
-                            sss[sess.when] = sess
-                    
-                    new_sess = Session.from_str(ln)
-                    sss[new_sess.when] = new_sess
+                game = None
+                sss  = None
+                
+                if (ln in cache):
+                    game = cache[ln]
                 else:
-                    print("Ignoring unknown game:", slib + "/" + sgam, file=stderr)
+                    print(f"Ignoring unknown game: {ln[2:]}", file=stderr)
+            elif (game):
+                if (sss == None):
+                    game.read_sessions()
+                    sss = {}
+                    for sess in game.sessions:
+                        sss[sess.when] = sess
+                
+                new_sess = Session.from_str(ln)
+                sss[new_sess.when] = new_sess
             
-        if (curr_gam):
-            Session.rewrite_sessions(curr_gam.dir, list(sss.values()))
+        if (game):
+            Session.rewrite_sessions(game.dir, list(sss.values()))
     
     def find(self, key: str) -> Game:
         game: Game = None
index 42b3d01cc7e39a7aa211ab688d27102eb6f93416..24a6619bd4c678f5c9b85edce14a27ada328ae67 100644 (file)
@@ -42,7 +42,7 @@ class Session():
     def __str__(self) -> str:
         oopt = ""
         if (self.opt):
-            oopt = f" - {opt}"
+            oopt = f" - {self.opt}"
 
         dat  = self.when.strftime('%Y-%m-%d')
         hour = self.when.strftime('%H:%M')
@@ -117,11 +117,16 @@ class Session():
 
     def write_total(dir: PurePath, sessions: list):
         total = 0
-        opts = []
+        total_noop = 0;
+        opts = {}
         for sess in sessions:
             total += sess.elapsed
-            if not sess.opt in opts:
-                opts.append(sess.opt)
+            if not sess.opt:
+                total_noop += sess.elapsed
+            else:
+                if not sess.opt in opts:
+                    opts[sess.opt] = 0
+                opts[sess.opt] += sess.elapsed
 
         file = dir.joinpath("sessions.total")
         with open(file, "w", encoding="utf-8") as data:
@@ -130,18 +135,9 @@ class Session():
 
             if (len(opts) > 1):
                 data.write("\nTotal per option:\n")
-                total = 0
-                for session in sessions:
-                    if (session[3] == None or session[3] == ""):
-                        total += session[2]
-                data.write(f"* {_human(total)}\n");
-                for opt in opts:
-                    total = 0
-                    for session in sessions:
-                        if (len(session) > 3):
-                            if (session[3] == opt):
-                                total += session[2]
-                    data.write(f"* {Session._human(total)} - {opt}\n");
+                data.write(f"* {Session._human(total_noop)}\n");
+                for opt in opts.keys():
+                    data.write(f"* {Session._human(opts[opt])} - {opt}\n");
 
     def write_new_session(dir: PurePath, sessions: list, new_sess: 'Session'):
         """