From: Niki Date: Mon, 29 Sep 2025 17:47:27 +0000 (+0200) Subject: sessions: fixes X-Git-Url: http://git.nikiroo.be/?a=commitdiff_plain;h=e3b6c614ce9990ed6d31ada078faaf2940cb366d;p=gamiki.git sessions: fixes --- diff --git a/gamiki/builder.py b/gamiki/builder.py index 3556c07..fa0c87a 100644 --- a/gamiki/builder.py +++ b/gamiki/builder.py @@ -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 diff --git a/gamiki/session.py b/gamiki/session.py index 42b3d01..24a6619 100644 --- a/gamiki/session.py +++ b/gamiki/session.py @@ -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'): """