Changeset 1039


Ignore:
Timestamp:
12/03/11 12:20:00 (18 months ago)
Author:
tal
Message:
Avoid duplicate image writing when possible. Post added notifications.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • packages/defcon/branches/ufo3/Lib/defcon/objects/imageSet.py

    r1022 r1039  
    2222    ImageSet.FileNamesChanged 
    2323    ImageSet.ImageChanged 
     24    ImageSet.ImageWillBeAdded 
     25    ImageSet.ImageAdded 
    2426    ImageSet.ImageWillBeDeleted 
    2527    ImageSet.ImageDeleted 
     
    124126            assert fileName == self.makeFileName(fileName) 
    125127        assert data.startswith(pngSignature) 
    126         # preserve exsiting stamping 
     128        isNewImage = fileName not in self._data 
    127129        onDisk = False 
    128130        onDiskModTime = None 
    129131        if fileName in self._scheduledForDeletion: 
     132            # preserve exsiting stamping 
    130133            assert fileName not in self._data 
    131134            self._data[fileName] = self._scheduledForDeletion.pop(fileName) 
     135        digest = _makeDigest(data) 
    132136        if fileName in self._data: 
    133137            n = self[fileName] # force it to load so that the stamping is correct 
     138            if self._data[fileName]["digest"] == digest: 
     139                return 
    134140            onDisk = self._data[fileName]["onDisk"] 
    135141            onDiskModTime = self._data[fileName]["onDiskModTime"] 
    136142            del self._data[fileName] # now remove it 
    137         self._data[fileName] = _imageDict(data=data, dirty=True, digest=_makeDigest(data), onDisk=onDisk, onDiskModTime=onDiskModTime) 
    138         self.postNotification("ImageSet.ImageChanged", data=dict(name=fileName)) 
     143        if isNewImage: 
     144            self.postNotification("ImageSet.ImageWillBeAdded", data=dict(name=fileName)) 
     145        self._data[fileName] = _imageDict(data=data, dirty=True, digest=digest, onDisk=onDisk, onDiskModTime=onDiskModTime) 
     146        if isNewImage: 
     147            self.postNotification("ImageSet.ImageAdded", data=dict(name=fileName)) 
     148        else: 
     149            self.postNotification("ImageSet.ImageChanged", data=dict(name=fileName)) 
    139150        self.dirty = True 
    140151 
Note: See TracChangeset for help on using the changeset viewer.