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
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')
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:
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'):
"""