#!/usr/bin/python
#                      /usr/local/bin/apt-find-browserplug-for-mimetype
# http://crystalfaeries.net/posix/bin/apt-find-browserplug-for-mimetype
# celeste:crystalfaery 2016-06-09 21:43:35+00:00

# From: Petter Reinholdtsen
# Subject: How to find a browser plugin supporting a given MIME type
# Date: Thu, 17 Jan 2013 23:40:00 -1000
# 
# Some times I try to figure out which FireFox browser plugin
# to install to get support for a given MIME type.
# Thanks to specifications done by Ubuntu and Mozilla,
# it is possible to do this in Debian.
# Unfortunately, not very many packages provide the needed meta information.
# Anyway, here is a small script to look up all browser plugin packages
# announcing their MIME support using this specification:
# 
# % apt-find-browserplug-for-mimetype audio/ogg
# Browser plugin packages supporting audio/ogg:
#   gecko-mediaplayer
# % apt-find-browserplug-for-mimetype application/x-shockwave-flash
# Browser plugin packages supporting application/x-shockwave-flash:
#   browser-plugin-gnash
# %
# 
# In Ubuntu this mechanism is combined with support in the browser itself
# to query for plugins and propose to install the needed packages.
# It would be great if Debian supported such feature too.
# Is anyone working on adding it?
# 
# Update 2013-01-18 14:20:
# The Debian BTS request for FireFox support for this feature
# is #484010 from 2008 (and #698426 from today).
# Lack of manpower and wish for a different design
# is the reason this feature is not yet in firefox from Debian.

import sys
import apt
def pkgs_handling_mimetype(mimetype):
    cache = apt.Cache()
    cache.open(None)
    thepkgs = []
    for pkg in cache:
        version = pkg.candidate
        if version is None:
            version = pkg.installed
        if version is None:
            continue
        record = version.record
        if not record.has_key('Npp-MimeType'):
            continue
        mime_types = record['Npp-MimeType'].split(',')
        for t in mime_types:
            t = t.rstrip().strip()
            if t == mimetype:
                thepkgs.append(pkg.name)
    return thepkgs
mimetype = "audio/ogg"
if 1 < len(sys.argv):
    mimetype = sys.argv[1]
print "Browser plugin packages supporting %s:" % mimetype
for pkg in pkgs_handling_mimetype(mimetype):
    print "  %s" %pkg

