Skip to content

Instantly share code, notes, and snippets.

@Fortyseven
Created May 9, 2022 17:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Fortyseven/801251d2c4bfc6e128735d148c7ba1e3 to your computer and use it in GitHub Desktop.
Save Fortyseven/801251d2c4bfc6e128735d148c7ba1e3 to your computer and use it in GitHub Desktop.
Nemo exiftool extension
import subprocess
from urllib.parse import unquote
from gi.repository import Nemo, GObject, Gtk
EXCLUDE_FIELDS = ["ExifTool Version Number"]
class ExifInfo(GObject.GObject, Nemo.PropertyPageProvider):
def get_property_pages(self, files):
if len(files) != 1:
return
file = files[0]
if file.get_uri_scheme() != 'file':
return
if file.is_directory():
return
filename = unquote(file.get_uri()[7:])
self.property_label = Gtk.Label('EXIF')
self.property_label.show()
hbox = Gtk.HBox(homogeneous=False, spacing=0)
hbox.show()
liststore = Gtk.ListStore(str, str)
treeview = Gtk.TreeView()
treeview.set_model(liststore)
cellrenderertext = Gtk.CellRendererText()
treeviewcolumn = Gtk.TreeViewColumn("Field")
treeview.append_column(treeviewcolumn)
treeviewcolumn.pack_start(cellrenderertext, True)
treeviewcolumn.add_attribute(cellrenderertext, "text", 0)
treeviewcolumn = Gtk.TreeViewColumn("Value")
treeview.append_column(treeviewcolumn)
treeviewcolumn.pack_start(cellrenderertext, True)
treeviewcolumn.add_attribute(cellrenderertext, "text", 1)
treeview.show()
hbox.add(treeview)
hbox.show()
res = subprocess.getoutput([f"/usr/bin/env exiftool \"{filename}\""])
lines = str(res).split('\n')
for entry in lines:
cols = entry.split(":")
key = cols[0].strip()
val = cols[1].strip()
if not key in EXCLUDE_FIELDS:
liststore.append([key, val])
# So the panel doesn't grow massive
sw = Gtk.ScrolledWindow()
sw.add_with_viewport(hbox)
sw.show()
return Nemo.PropertyPage(name="NemoPython::exifinfo",
label=self.property_label,
page=sw),
@Fortyseven
Copy link
Author

Stick me in ~/.local/share/nemo-python/extensions...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment