+class metadata_monitor(object):
+ def __init__(self, session, meta):
+ self.session = session
+ self.meta = meta
+
+ def __enter__(self):
+ self.old = {}
+ for (k, v) in self.meta.items():
+ self.old[k] = v
+
+ def __exit__(self, type, value, traceback):
+ d = self.session['dialog']
+
+ altered = {}
+ added = {}
+
+ for (k, v) in self.meta.items():
+ if k not in self.old:
+ added[k] = v
+ elif self.old[k] != v:
+ altered[k] = v
+
+ if not (len(added) or len(altered)):
+ return
+
+ msg = "The last action has changed some image properties:\n\n"
+ if len(added):
+ msg += "New image properties:\n"
+ for (k, v) in added.items():
+ msg += ' %s: "%s"\n' % (k, v)
+ msg += "\n"
+ if len(altered):
+ msg += "Updated image properties:\n"
+ for (k, v) in altered.items():
+ msg += ' %s: "%s" -> "%s"\n' % (k, self.old[k], v)
+ msg += "\n"
+
+ self.session['metadata'].update(added)
+ self.session['metadata'].update(altered)
+ d.msgbox(msg, title="Image Property Changes", width=MSGBOX_WIDTH)
+
+