import os
from calibre.customize import MetadataWriterPlugin
from hashlib import md5

class MD5Sum(MetadataWriterPlugin):
    name = 'MD5 Checksum'
    description = 'Compute MD5 hashes and store them in a custom column'
    supported_platforms =['linux']
    author = 'MWI'
    version = (1, 0, 0)
    file_types = set(['epub', 'mobi', 'pdf', 'djvu'])
    touched_fields = frozenset(['#md5'])

def run(self, path_to_ebook):
    from calibre.ebooks.metadata.meta import get_metadata, set_metadata
    file = open(path_to_ebook, 'r+b')
    ext = os.path.splitext(path_to_ebook)[-1][1:].lower
    mi = get_metadata(file, ext)
    filestream = file.read()
    h = hashlib.md5()
    h.update(filestream)
    mi.md5 = h.hexdigest()
    set_metadata(file, mi, ext)
    return path_to_ebook

