#if 0
# -----------------------------------------------------------------------
# $Id: ImageInfo.py 404 2005-04-16 15:01:53Z dischi $
# -----------------------------------------------------------------------
# $Log$
# Revision 1.2  2005/04/16 15:01:53  dischi
# read gthumb comment files
#
# Revision 1.1  2004/05/20 15:56:31  dischi
# use Python Imaging for more info and gif/bmp support
#
#
# -----------------------------------------------------------------------
# MMPython - Media Metadata for Python
# Copyright (C) 2003 Thomas Schueppel
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MER-
# CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# 
# -----------------------------------------------------------------------
#endif

import mmpython
from mmpython import mediainfo

import os
import gzip
from xml.utils import qp_xml

DEBUG = mediainfo.DEBUG

try:
    import Image
except:
    if DEBUG:
        print 'Python Imaging not found'

import bins

def add(filename, object):
    if os.path.isfile(filename + '.xml'):
        try:
            binsinfo = bins.get_bins_desc(filename)
            # get needed keys from exif infos
            for key in mediainfo.IMAGECORE + mediainfo.MEDIACORE:
                if not object[key] and binsinfo['exif'].has_key(key):
                    object[key] = binsinfo['exif'][key]
            # get _all_ infos from description
            for key in binsinfo['desc']:
                object[key] = binsinfo['desc'][key]
                if not key in mediainfo.IMAGECORE + mediainfo.MEDIACORE:
                    # if it's in desc it must be important
                    object.keys.append(key)
        except Exception, e:
            if DEBUG:
                print e
            pass

    comment_file = os.path.join(os.path.dirname(filename),
                                '.comments',
                                os.path.basename(filename) + '.xml')
    if os.path.isfile(comment_file):
        try:
            f = gzip.open(comment_file)
            p = qp_xml.Parser()
            tree = p.parse(f)
            f.close()
            for c in tree.children:
                if c.name == 'Place':
                    object.location = c.textof()
                if c.name == 'Note':
                    object.description = c.textof()
        except:
            pass
    try:
        i = Image.open(filename)
    except:
        return 0

    if not object.mime:
        object.mime = 'image/%s' % i.format.lower()
        
    object.type = i.format_description

    if i.info.has_key('dpi'):
        object['dpi'] = '%sx%s' % i.info['dpi']

    if DEBUG:
        for info in i.info:
            if not info == 'exif':
                print '%s: %s' % (info, i.info[info])

    object.mode = i.mode
    if not object.height:
        object.width, object.height = i.size

    return 1





class ImageInfo(mediainfo.ImageInfo):

    def __init__(self,file):
        mediainfo.ImageInfo.__init__(self)
        self.mime  = ''
        self.type  = ''
        self.valid = add(file.name, self)
        
mmpython.registertype( 'image/gif', ('gif',), mediainfo.TYPE_IMAGE, ImageInfo )
mmpython.registertype( 'image/bmp', ('bmp',), mediainfo.TYPE_IMAGE, ImageInfo )
