import it, time, os
from it.It3Command import It3Command
  
class SaveAll(It3Command):
    def __init__(self):
        self.m_menuPath = 'Commands/Save All'
    def Invoke(self):
        self.saveAll()
  
    def saveAll(self, gamma=1.0,quality=100):
        localtime = time.asctime( time.localtime(time.time()) )
        localtime = localtime.replace(' ', '_')
        localtime = localtime.replace(':', '_')    
        outname = 'catalog_%s' % localtime
        cwdpath = os.getcwd()
        if len(cwdpath) < 3:
            it.app.Error('Unable to determine your current working directory.')
            it.app.Error('Unable to save the images.')
            it.app.RaiseLogWindow()
            return
        it.app.Info('Saving images to "%s"' % cwdpath)
            
        out_dirpath = os.path.join(cwdpath,outname)
        if not os.path.exists(out_dirpath):
            os.mkdir(out_dirpath)
        aovDict = {}
        cat = it.app.GetCurrentCatalog()
        img_counter = 1
        for i in range (0, cat.GetChildCount()):
            element = cat.GetChild(i)
            imgname = it.os.path.basename( element.GetFilename() )
            if imgname == '_preview':
                continue
            # Add a padded numeric extension
            imgname = imgname + ('.%04d' % img_counter) + '.jpg'
            out_imgpath = os.path.join(out_dirpath, imgname)
    
            self.saveImage(element, out_imgpath, gamma, quality)
            img_counter += 1
            
            # Save any AOV's
            for j in range (0, element.GetChildCount()):
                aov = element.GetChild(j)
                aovname = it.os.path.basename( aov.GetFilename() )
                # Remove the extension
                aovname = os.path.splitext(aovname)[0]
                # Maintain unique counters for each AOV
                aov_counter = 1
                if aovDict.has_key(aovname):
                    aov_counter = aovDict[aovname]
                    aov_counter += 1;
                aovDict[aovname] = aov_counter
                
                # Add a padded numeric extension
                aovname = aovname + ('.%04d' % aov_counter) + '.jpg'
                out_aovpath = os.path.join(out_dirpath, aovname)
                self.saveImage(aov, out_aovpath, gamma, quality)
  
    def saveImage(self, element,path,gamma,quality):
        image = element.GetImage()
        image = image.Gamma(gamma);
        image.SetMetaDataItem('JPEG_QUALITY', quality)
        image.Save(path, ice.constants.FMT_JPEG)    
it.commands.append(SaveAll)