From bc6fd1e41c3e362c42414b4f582f5ebd2613a8a4 Mon Sep 17 00:00:00 2001
From: zlg <zlg@zlg.space>
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