From bc6fd1e41c3e362c42414b4f582f5ebd2613a8a4 Mon Sep 17 00:00:00 2001 From: zlg Date: Sun, 2 Aug 2020 16:57:26 -0700 Subject: vgstash_cli: Show what happens to note data The 'notes -e' command used to always tell the user that the notes had been updated. This was incorrect. Now 'notes -e' will detect three states: * The note has been changed * The note has not been changed * The editor can't be loaded (set via EDITOR) ZLG-Bug: 3 --- src/vgstash_cli.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/vgstash_cli.py b/src/vgstash_cli.py index d00f339..1967458 100755 --- a/src/vgstash_cli.py +++ b/src/vgstash_cli.py @@ -194,18 +194,35 @@ def notes(title, system, edit): with tempfile.NamedTemporaryFile() as tmpfile: tmpfile.write(target_game.notes.encode("UTF-8")) tmpfile.flush() - process = subprocess.run([os.getenv("EDITOR", "vim"), tmpfile.name]) + pre_stat = os.stat(tmpfile.name) + o_mtime = pre_stat.st_mtime + o_size = pre_stat.st_size + try: + process = subprocess.run([os.getenv("EDITOR", "vim"), tmpfile.name]) + except: + click.echo("Could not run editor. Is it set correctly?") + return tmpfile.flush() tmpfile.seek(0) + post_stat = os.stat(tmpfile.name) + n_mtime = post_stat.st_mtime + n_size = post_stat.st_size note_arr = [] for line in tmpfile: note_arr.append(line.decode("UTF-8").rstrip("\r\n")) target_game.notes = "\n".join(note_arr) db.update_game(target_game, target_game) - if process.returncode == 0: - click.echo("Notes for {} on {} have been updated!".format(target_game.title, target_game.system)) - else: - click.echo("Couldn't find an editor for notes. Check the EDITOR environment variable and try again.") + if process.returncode == 0: + # determine what actually happened + if o_mtime == n_mtime: + if o_size == n_size: + click.echo("Notes for {} on {} left unchanged.".format(target_game.title, target_game.system)) + elif n_mtime > o_mtime and o_size != n_size: + click.echo("Notes for {} on {} have been updated!".format(target_game.title, target_game.system)) + return + else: + click.echo("The editor crashed. Please try again.") + return else: if len(target_game.notes) > 0: click.echo("Notes for {} on {}:".format(target_game.title, target_game.system)) -- cgit v1.2.3-54-g00ecf