mirror of
https://github.com/arsenetar/dupeguru.git
synced 2024-11-04 23:39:02 +00:00
f8686ffb55
These apps don't exist anymore.
91 lines
2.9 KiB
Python
91 lines
2.9 KiB
Python
# Copyright 2016 Hardcoded Software (http://www.hardcoded.net)
|
|
#
|
|
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
|
|
# which should be included with this package. The terms are also available at
|
|
# http://www.gnu.org/licenses/gpl-3.0.html
|
|
|
|
from cocoa import proxy
|
|
|
|
from core.scanner import ScanType
|
|
from core_pe import _block_osx
|
|
from core_pe.photo import Photo as PhotoBase
|
|
from core_pe.app import DupeGuru as DupeGuruBase
|
|
from .app import PyDupeGuruBase
|
|
|
|
|
|
class Photo(PhotoBase):
|
|
HANDLED_EXTS = PhotoBase.HANDLED_EXTS.copy()
|
|
HANDLED_EXTS.update({'psd', 'nef', 'cr2', 'orf'})
|
|
|
|
def _plat_get_dimensions(self):
|
|
return _block_osx.get_image_size(str(self.path))
|
|
|
|
def _plat_get_blocks(self, block_count_per_side, orientation):
|
|
try:
|
|
blocks = _block_osx.getblocks(str(self.path), block_count_per_side, orientation)
|
|
except Exception as e:
|
|
raise IOError('The reading of "%s" failed with "%s"' % (str(self.path), str(e)))
|
|
if not blocks:
|
|
raise IOError('The picture %s could not be read' % str(self.path))
|
|
return blocks
|
|
|
|
def _get_exif_timestamp(self):
|
|
exifdata = proxy.readExifData_(str(self.path))
|
|
if exifdata:
|
|
try:
|
|
return exifdata['{Exif}']['DateTimeOriginal']
|
|
except KeyError:
|
|
return ''
|
|
else:
|
|
return ''
|
|
|
|
|
|
class DupeGuruPE(DupeGuruBase):
|
|
def __init__(self, view):
|
|
DupeGuruBase.__init__(self, view)
|
|
self.fileclasses = [Photo]
|
|
|
|
def selected_dupe_path(self):
|
|
if not self.selected_dupes:
|
|
return None
|
|
return self.selected_dupes[0].path
|
|
|
|
def selected_dupe_ref_path(self):
|
|
if not self.selected_dupes:
|
|
return None
|
|
ref = self.results.get_group_of_duplicate(self.selected_dupes[0]).ref
|
|
if ref is self.selected_dupes[0]: # we don't want the same pic to be displayed on both sides
|
|
return None
|
|
return ref.path
|
|
|
|
|
|
class PyDupeGuru(PyDupeGuruBase):
|
|
def __init__(self):
|
|
self._init(DupeGuruPE)
|
|
|
|
def clearPictureCache(self):
|
|
self.model.clear_picture_cache()
|
|
|
|
#---Information
|
|
def getSelectedDupePath(self) -> str:
|
|
return str(self.model.selected_dupe_path())
|
|
|
|
def getSelectedDupeRefPath(self) -> str:
|
|
return str(self.model.selected_dupe_ref_path())
|
|
|
|
#---Properties
|
|
def setScanType_(self, scan_type: int):
|
|
try:
|
|
self.model.options['scan_type'] = [
|
|
ScanType.FuzzyBlock,
|
|
ScanType.ExifTimestamp,
|
|
][scan_type]
|
|
except IndexError:
|
|
pass
|
|
|
|
def setMatchScaled_(self, match_scaled: bool):
|
|
self.model.options['match_scaled'] = match_scaled
|
|
|
|
def setMinMatchPercentage_(self, percentage: int):
|
|
self.model.options['threshold'] = percentage
|