This file is indexed.

/usr/share/nautilus-python/extensions/nautilus-mat.py is in mat 0.4.2-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#! /usr/bin/python

''' This file is an extension for the Nautilus
    file manager, to provide a contextual menu to
    clean metadata
'''

import logging
import urllib
try:
    import gettext
    gettext.install("mat")
except:
    logging.warning("Failed to initialise gettext")
    _ = lambda x: x

from gi.repository import Nautilus, GObject, Gtk

import MAT.mat
import MAT.strippers


class MatExtension(GObject.GObject, Nautilus.MenuProvider):
    def __init__(self):
        logging.debug("nautilus-mat: initialising")
        pass

    def get_file_items(self, window, files):
        if len(files) != 1:  # no multi-files support
            return

        file = files.pop()

        # We're only going to put ourselves on supported mimetypes' context menus
        if not (file.get_mime_type()
                in [i["mimetype"] for i in MAT.mat.list_supported_formats()]):
            logging.debug("%s is not supported by MAT" % file.get_mime_type())
            return

        # MAT can only handle local file:
        if file.get_uri_scheme() != 'file':
            logging.debug("%s files not supported by MAT" % file.get_uri_scheme())
            return

        # MAT can not clean non-writable files
        if not file.can_write():
            logging.debug("%s is not writable by MAT" % file.get_uri_scheme())
            return

        item = Nautilus.MenuItem(name="Nautilus::clean_metadata",
                                 label=_("Clean metadata"),
                                 tip=_("Clean file's metadata with MAT"),
                                 icon="gtk-clear")
        item.connect('activate', self.menu_activate_cb, file)
        return item,

    def show_message(self, message, type=Gtk.MessageType.INFO):
        dialog = Gtk.MessageDialog(parent=None,
                                   flags=Gtk.DialogFlags.MODAL,
                                   type=type,
                                   buttons=Gtk.ButtonsType.OK,
                                   message_format=message)
        ret = dialog.run()
        dialog.destroy()
        return ret

    def menu_activate_cb(self, menu, file):
        if file.is_gone():
            return

        file_path = urllib.unquote(file.get_uri()[7:])

        class_file = MAT.mat.create_class_file(file_path,
                                           backup=True,
                                           add2archive=False)
        if class_file:
            if class_file.is_clean():
                self.show_message(_("%s is already clean") % file_path)
            else:
                if not class_file.remove_all():
                    self.show_message(_("Unable to clean %s") % file_path, Gtk.MessageType.ERROR)
        else:
            self.show_message(_("Unable to process %s") % file_path, Gtk.MessageType.ERROR)