Updates to path, path_raw, uti for RAW+JPEG pairs

This commit is contained in:
Rhet Turnbull
2020-10-09 22:15:47 -07:00
parent 6413342bdb
commit b32f4b8504
11 changed files with 74 additions and 27 deletions

View File

@@ -68,11 +68,9 @@ class PhotoInfo:
@property
def filename(self):
""" filename of the picture """
# sourcery off
if self.has_raw and self.raw_original:
# return name of the RAW file
# TODO: not yet implemented
return self._info["filename"]
if self._db._db_version <= _PHOTOS_4_VERSION and self.has_raw and self.raw_original:
# return the JPEG version as that's what Photos 5+ does
return self._info["raw_pair_info"]["filename"]
else:
return self._info["filename"]
@@ -80,7 +78,11 @@ class PhotoInfo:
def original_filename(self):
""" original filename of the picture
Photos 5 mangles filenames upon import """
return self._info["originalFilename"]
if self._db._db_version <= _PHOTOS_4_VERSION and self.has_raw and self.raw_original:
# return the JPEG version as that's what Photos 5+ does
return self._info["raw_pair_info"]["originalFilename"]
else:
return self._info["originalFilename"]
@property
def date(self):
@@ -117,13 +119,32 @@ class PhotoInfo:
return photopath # path would be meaningless until downloaded
if self._db._db_version <= _PHOTOS_4_VERSION:
vol = self._info["volume"]
if vol is not None:
photopath = os.path.join("/Volumes", vol, self._info["imagePath"])
else:
photopath = os.path.join(
self._db._masters_path, self._info["imagePath"]
if self._info["has_raw"]:
# return the path to JPEG even if RAW is original
vol = (
self._db._dbvolumes[self._info["raw_pair_info"]["volumeId"]]
if self._info["raw_pair_info"]["volumeId"] is not None
else None
)
if vol is not None:
photopath = os.path.join(
"/Volumes", vol, self._info["raw_pair_info"]["imagePath"]
)
else:
photopath = os.path.join(
self._db._masters_path,
self._info["raw_pair_info"]["imagePath"],
)
else:
vol = self._info["volume"]
if vol is not None:
photopath = os.path.join(
"/Volumes", vol, self._info["imagePath"]
)
else:
photopath = os.path.join(
self._db._masters_path, self._info["imagePath"]
)
self._path = photopath
return photopath
@@ -507,9 +528,13 @@ class PhotoInfo:
for example: public.jpeg or com.apple.quicktime-movie
"""
if self._db._db_version <= _PHOTOS_4_VERSION:
return (
self._info["UTI_edited"] if self.hasadjustments else self._info["UTI"]
)
if self.hasadjustments:
return self._info["UTI_edited"]
elif self.has_raw and self.raw_original:
# return UTI of the non-raw image to match Photos 5+ behavior
return self._info["raw_pair_info"]["UTI"]
else:
return self._info["UTI"]
else:
return self._info["UTI"]

View File

@@ -846,7 +846,8 @@ class PhotosDB:
RKMaster.height,
RKMaster.width,
RKMaster.orientation,
RKMaster.fileSize
RKMaster.fileSize,
RKVersion.subType
FROM RKVersion, RKMaster
WHERE RKVersion.masterUuid = RKMaster.uuid"""
)
@@ -873,7 +874,8 @@ class PhotosDB:
RKMaster.height,
RKMaster.width,
RKMaster.orientation,
RKMaster.originalFileSize
RKMaster.originalFileSize,
RKVersion.subType
FROM RKVersion, RKMaster
WHERE RKVersion.masterUuid = RKMaster.uuid"""
)
@@ -919,6 +921,7 @@ class PhotosDB:
# 37 RKMaster.width,
# 38 RKMaster.orientation,
# 39 RKMaster.originalFileSize
# 40 RKVersion.subType
for row in c:
uuid = row[0]
@@ -1062,10 +1065,20 @@ class PhotosDB:
self._dbphotos[uuid]["cloudAvailable"] = None
self._dbphotos[uuid]["incloud"] = None
# TODO: NOT YET USED -- PLACEHOLDER for RAW processing (currently only in _process_database5)
# original resource choice (e.g. RAW or jpeg)
self._dbphotos[uuid]["original_resource_choice"] = None
self._dbphotos[uuid]["raw_is_original"] = None
# In Photos 5+, original_resource_choice set from:
# ZADDITIONALASSETATTRIBUTES.ZORIGINALRESOURCECHOICE
# = 0 if jpeg is selected as "original" in Photos (the default)
# = 1 if RAW is selected as "original" in Photos
# RKVersion.subType, RAW always appears to be 16
# 4 = mov
# 16 = RAW
# 32 = JPEG
# 64 = TIFF
# 2048 = PNG
# 32768 = HIEC
self._dbphotos[uuid]["original_resource_choice"] = 1 if row[40] == 16 else 0
self._dbphotos[uuid]["raw_is_original"] = True if row[40] == 16 else False
# associated RAW image info
self._dbphotos[uuid]["has_raw"] = True if row[25] == 7 else False
@@ -1107,7 +1120,8 @@ class PhotosDB:
RKMaster.modelID,
RKMaster.fileSize,
RKMaster.isTrulyRaw,
RKMaster.alternateMasterUuid
RKMaster.alternateMasterUuid,
RKMaster.filename
FROM RKMaster
"""
)
@@ -1123,6 +1137,7 @@ class PhotosDB:
# 7 RKMaster.fileSize,
# 8 RKMaster.isTrulyRaw,
# 9 RKMaster.alternateMasterUuid
# 10 RKMaster.filename
for row in c:
uuid = row[0]
@@ -1137,6 +1152,7 @@ class PhotosDB:
info["fileSize"] = row[7]
info["isTrulyRAW"] = row[8]
info["alternateMasterUuid"] = row[9]
info["filename"] = row[10]
self._dbphotos_master[uuid] = info
# get details needed to find path of the edited photos
@@ -1336,6 +1352,12 @@ class PhotosDB:
raw_uuid = info["raw_master_uuid"]
info["raw_info"] = self._dbphotos_master[raw_uuid]
info["UTI_raw"] = self._dbphotos_master[raw_uuid]["UTI"]
non_raw_uuid = info["non_raw_master_uuid"]
info["raw_pair_info"] = self._dbphotos_master[non_raw_uuid]
else:
info["raw_info"] = None
info["UTI_raw"] = None
info["raw_pair_info"] = None
# done with the database connection
conn.close()

View File

@@ -3,8 +3,8 @@
<plist version="1.0">
<dict>
<key>PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate</key>
<date>2020-10-04T23:43:21Z</date>
<date>2020-10-09T16:14:42Z</date>
<key>PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate</key>
<date>2020-10-05T04:14:45Z</date>
<date>2020-10-09T19:48:34Z</date>
</dict>
</plist>

View File

@@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>LastHistoryRowId</key>
<integer>947</integer>
<integer>948</integer>
<key>LibraryBuildTag</key>
<string>D8C4AAA1-3AB6-4A65-BEBD-99CC3E5D433E</string>
<key>LibrarySchemaVersion</key>

View File

@@ -9,7 +9,7 @@
<key>HistoricalMarker</key>
<dict>
<key>LastHistoryRowId</key>
<integer>947</integer>
<integer>948</integer>
<key>LibraryBuildTag</key>
<string>D8C4AAA1-3AB6-4A65-BEBD-99CC3E5D433E</string>
<key>LibrarySchemaVersion</key>
@@ -24,7 +24,7 @@
<key>SnapshotCompletedDate</key>
<date>2019-07-27T13:16:43Z</date>
<key>SnapshotLastValidated</key>
<date>2020-10-04T23:49:39Z</date>
<date>2020-10-09T16:16:27Z</date>
<key>SnapshotTables</key>
<dict/>
</dict>

View File

@@ -76,7 +76,7 @@ UUID_UTI_DICT = {
None,
],
"oTiMG6OfSP6d%nUTEOfvMg": [
"com.canon.cr2-raw-image",
"public.jpeg",
"com.canon.cr2-raw-image",
"com.canon.cr2-raw-image",
None,