This file is indexed.

/usr/bin/hachoir-metadata-qt is in python-hachoir-metadata 1.3.3-2.

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

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
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/usr/bin/python
from hachoir_metadata.qt.dialog_ui import Ui_Form
from PyQt4.QtCore import SIGNAL
from PyQt4.QtCore import Qt
from PyQt4.QtGui import (QApplication, QDialog,
    QTableWidgetItem, QFileDialog, QMessageBox)
from sys import argv, exit
from os.path import basename, dirname
from hachoir_core import config
config.quiet = True

from hachoir_core.error import HACHOIR_ERRORS
from hachoir_core.cmd_line import unicodeFilename
from hachoir_parser import createParser
from hachoir_core.tools import makePrintable
from hachoir_metadata import extractMetadata
from hachoir_metadata.metadata import MultipleMetadata
from hachoir_core.i18n import initLocale, getTerminalCharset
from sys import argv, stderr, exit
from os import walk, getcwd
from os.path import join as path_join
from fnmatch import fnmatch
from datetime import datetime
import codecs

class CustomTableWidgetItem(QTableWidgetItem):
    def __init__(self, parent = None):
        super(CustomTableWidgetItem, self).__init__(parent)
        self.setFlags(Qt.ItemIsSelectable |Qt.ItemIsEnabled)

class MetadataError(Exception):
    def __init__(self, message):
        self.unicode_message = message
        bytes_message = message.encode("ASCII", "replace")
        Exception.__init__(self, bytes_message)

    def __unicode__(self):
        return self.unicode_message

class File:
    def __init__(self, filename, realname):
        self.name = filename
        if realname:
            self.realname = realname
        else:
            self.realname = filename
        try:
            self.parser = createParser(self.name, self.realname)
        except HACHOIR_ERRORS, err:
            raise MetadataError("Parser error: %s" % unicode(err))
        if not self.parser:
            raise MetadataError("Unable to parse the file: %s" % self.name)
        try:
            self.metadata = extractMetadata(self.parser)
        except HACHOIR_ERRORS, err:
            raise MetadataError("Metadata extraction error: %s" % unicode(err))
        if not self.metadata:
            file_type = self.parser.mime_type
            raise MetadataError("Unable to extract metadata from file of type %s" % file_type)

class Metadata(QDialog, Ui_Form):
    def __init__(self, application):
        QDialog.__init__(self)
        self.application = application
        self.files = {}
        self.setupWindow()
        self.current_dir = dirname(getcwd())

    def setupWindow(self):
        self.setupUi(self)
        self.connect(self.open_button, SIGNAL("clicked()"), self.open)
        self.connect(self.quit_button, SIGNAL("clicked()"), self.quit)
        self.connect(
            self.files_combo,
            SIGNAL("currentIndexChanged(const QString&)"),
            self.changeFile)
        self.metadata_table.horizontalHeader().hide()
        self.metadata_table.verticalHeader().hide()

    def open(self):
        filename = QFileDialog.getOpenFileName(
            self, #parent
            "Choose a file to open", #caption
            self.current_dir, #dir name
            "", #filter
            "Any type" #filter set
        )
        if not filename:
            return
        filename = unicode(filename)
        self.current_dir = dirname(filename)
        self.addFile(filename, change=True)

    def quit(self):
        self.application.quit()

    def fillList(self, file):
        table = self.metadata_table
        metadata = file.metadata
        groups = [metadata]
        if isinstance(metadata, MultipleMetadata):
            groups.extend(list(metadata.iterGroups()))
        total = 0
        for index, metadata in enumerate(groups):
            group_name = metadata.header
            metadata = [data for data in metadata if data.values]
            metadata.sort()
            if 0 < index:
                metadata.insert(0, group_name)
            groups[index] = metadata
            total += len(metadata)
        table.clear()
        table.setColumnCount(2)
        table.setRowCount(total)
        row = 0
        for metadata in groups:
            for data in metadata:
                if isinstance(data, (str, unicode)):
                    table.setItem(row, 0, CustomTableWidgetItem("-- group --"))
                    table.setItem(row, 1, CustomTableWidgetItem(data))
                    row += 1
                    continue
                title = data.description
                for item in data.values:
                    value = item.text
                    table.setItem(row, 0, CustomTableWidgetItem(title))
                    table.setItem(row, 1, CustomTableWidgetItem(value))
                    row += 1
        table.resizeColumnsToContents()

    def changeFile(self, name):
        name = unicode(name)
        file = self.files[name]
        self.fillList(file)

    def error(self, message):
        QMessageBox.warning(self, u"Metadata error", message)

    def addFile(self, filename, realname=None, change=False):
        try:
            file = File(filename, realname)
        except MetadataError, err:
            errmsg = unicode(err)
            self.error(errmsg)
            return
        name = basename(file.name)
        self.files[name] = file
        self.files_combo.addItem(name)
        if change:
            index = self.files_combo.count() - 1
            self.files_combo.setCurrentIndex(index)

def main():
    app = QApplication(argv)
    metadata = Metadata(app)
    for filename in argv[1:]:
        realname = filename
        filename = unicodeFilename(filename)
        metadata.addFile(filename, realname)
    metadata.show()
    exitcode = app.exec_()
    exit(exitcode)

if __name__ == "__main__":
    main()