From 1cf3e4b9540c15f8bda2545deb183912bcda40a7 Mon Sep 17 00:00:00 2001 From: Rhet Turnbull Date: Sat, 7 Dec 2019 10:29:09 -0800 Subject: [PATCH] Updated album code in process_database4 and process_database5 to use album uuid --- osxphotos/__init__.py | 109 +++++++++++++++--- .../database/photos.db | Bin 5832704 -> 5832704 bytes .../PhotoAnalysisServicePreferences.plist | 4 +- .../PhotosGraph/photosgraph-tmp.graphdb-shm | Bin 32768 -> 32768 bytes .../PhotosGraph/photosgraph.graphdb | Bin 69632 -> 61440 bytes .../resources/moments/analysismetadata.plist | 2 +- .../resources/recovery/Info.plist | 2 +- .../recovery/RKVersion/0000000000.lij | Bin 154594 -> 155138 bytes 8 files changed, 96 insertions(+), 21 deletions(-) diff --git a/osxphotos/__init__.py b/osxphotos/__init__.py index 7d156256..d54af977 100644 --- a/osxphotos/__init__.py +++ b/osxphotos/__init__.py @@ -28,6 +28,7 @@ from . import _applescript # TODO: standardize _ and __ as leading char for private variables # TODO: fix docstrings # TODO: handle Null person for Photos 5 +# TODO: Add special albums and magic albums # which Photos library database versions have been tested # Photos 2.0 (10.12.6) == 2622 @@ -142,6 +143,8 @@ class PhotosDB: self._dbalbums_uuid = {} # Dict with information about all albums/photos by album self._dbalbums_album = {} + # Dict with information about album details + self._dbalbum_details = {} # Dict with information about all the volumes/photos by uuid self._dbvolumes = {} @@ -230,7 +233,8 @@ class PhotosDB: """ return albums as dict of albums, count in reverse sorted order (descending) """ albums = {} for k in self._dbalbums_album.keys(): - albums[k] = len(self._dbalbums_album[k]) + title = self._dbalbum_details[k]["title"] + albums[title] = len(self._dbalbums_album[k]) albums = dict(sorted(albums.items(), key=lambda kv: kv[1], reverse=True)) return albums @@ -246,8 +250,12 @@ class PhotosDB: def albums(self): """ return list of albums found in photos database """ - albums = self._dbalbums_album.keys() - return list(albums) + albums = [] + for album in self._dbalbums_album.keys(): + albums.append(self._dbalbum_details[album]["title"]) + return albums + # albums = self._dbalbums_album.keys() + # return list(albums) def _setup_applescript(self): """ setup various applescripts used internally (e.g. to close Photos) """ @@ -457,7 +465,7 @@ class PhotosDB: ) # c.execute("select RKPerson.name, RKFace.imageID from RKFace, RKPerson where RKFace.personID = RKperson.modelID") c.execute( - "select RKAlbum.name, RKVersion.uuid from RKAlbum, RKVersion, RKAlbumVersion " + "select RKAlbum.uuid, RKVersion.uuid from RKAlbum, RKVersion, RKAlbumVersion " + "where RKAlbum.modelID = RKAlbumVersion.albumId and " + "RKAlbumVersion.versionID = RKVersion.modelId and RKVersion.type = 2 and " + "RKVersion.filename not like '%.pdf' and RKVersion.isInTrash = 0" @@ -472,6 +480,33 @@ class PhotosDB: self._dbalbums_album[album[0]].append(album[1]) i = i + 1 + # now get additional details about albums + c.execute( + "SELECT " + "uuid, " # 0 + "name, " # 1 + "cloudLibraryState, " # 2 + "cloudIdentifier " # 3 + "FROM RKAlbum " + "WHERE isInTrash = 0" + ) + + for album in c: + self._dbalbum_details[album[0]] = { + "title": album[1], + "cloudlibrarystate": album[2], + "cloudidentifier": album[3], + "cloudlocalstate": None, # Photos 5 + "cloudownerfirstname": None, # Photos 5 + "cloudownderlastname": None, # Photos 5 + "cloudownerhashedpersonid": None, # Photos 5 + } + + logging.debug(f"Finished walking through albums") + logging.debug(pformat(self._dbalbums_album)) + logging.debug(pformat(self._dbalbums_uuid)) + logging.debug(pformat(self._dbalbum_details)) + c.execute( "select count(*) from RKKeyword, RKKeywordForVersion,RKVersion, RKMaster " + "where RKKeyword.modelId = RKKeyWordForVersion.keywordID and " @@ -628,18 +663,20 @@ class PhotosDB: self._dbphotos[uuid]["edit_resource_id"] = row[2] # get details on external edits - c.execute( "SELECT RKVersion.uuid, " - "RKVersion.adjustmentUuid, " - "RKAdjustmentData.originator, " - "RKAdjustmentData.format " - "FROM RKVersion, RKAdjustmentData " - "WHERE RKVersion.adjustmentUuid = RKAdjustmentData.uuid " - "AND RKVersion.isInTrash = 0") - + c.execute( + "SELECT RKVersion.uuid, " + "RKVersion.adjustmentUuid, " + "RKAdjustmentData.originator, " + "RKAdjustmentData.format " + "FROM RKVersion, RKAdjustmentData " + "WHERE RKVersion.adjustmentUuid = RKAdjustmentData.uuid " + "AND RKVersion.isInTrash = 0" + ) + for row in c: uuid = row[0] if uuid in self._dbphotos: - self._dbphotos[uuid]["adjustmentFormatID"] = row[3] + self._dbphotos[uuid]["adjustmentFormatID"] = row[3] # init any uuids that had no edits for uuid in self._dbphotos: @@ -756,7 +793,7 @@ class PhotosDB: "WHERE ZGENERICASSET.ZTRASHEDSTATE = 0 AND ZGENERICASSET.ZKIND = 0 " ) c.execute( - "SELECT ZGENERICALBUM.ZTITLE, ZGENERICASSET.ZUUID " + "SELECT ZGENERICALBUM.ZUUID, ZGENERICASSET.ZUUID " "FROM ZGENERICASSET " "JOIN Z_26ASSETS ON Z_26ASSETS.Z_34ASSETS = ZGENERICASSET.Z_PK " "JOIN ZGENERICALBUM ON ZGENERICALBUM.Z_PK = Z_26ASSETS.Z_26ALBUMS " @@ -771,9 +808,33 @@ class PhotosDB: self._dbalbums_uuid[album[1]].append(album[0]) self._dbalbums_album[album[0]].append(album[1]) i = i + 1 + + # now get additional details about albums + c.execute( + "SELECT " + "ZUUID, " # 0 + "ZTITLE, " # 1 + "ZCLOUDLOCALSTATE, " # 2 + "ZCLOUDOWNERFIRSTNAME, " # 3 + "ZCLOUDOWNERLASTNAME, " # 4 + "ZCLOUDOWNERHASHEDPERSONID " # 5 + "FROM ZGENERICALBUM" + ) + for album in c: + self._dbalbum_details[album[0]] = { + "title": album[1], + "cloudlocalstate": album[2], + "cloudownerfirstname": album[3], + "cloudownderlastname": album[4], + "cloudownerhashedpersonid": album[5], + "cloudlibrarystate": None, # Photos 4 + "cloudidentifier": None, # Photos4 + } + logging.debug(f"Finished walking through albums") logging.debug(pformat(self._dbalbums_album)) logging.debug(pformat(self._dbalbums_uuid)) + logging.debug(pformat(self._dbalbum_details)) c.execute( "SELECT COUNT(*) " @@ -1038,9 +1099,20 @@ class PhotosDB: photos_sets.append(set(self._dbphotos.keys())) else: if albums: + album_titles = {} + for album_id in self._dbalbum_details: + title = self._dbalbum_details[album_id]["title"] + if title in album_titles: + album_titles[title].append(album_id) + else: + album_titles[title] = [album_id] for album in albums: - if album in self._dbalbums_album: - photos_sets.append(set(self._dbalbums_album[album])) + # TODO: can have >1 album with same name. This globs them together. + # Need a way to select with album + # TODO: document this in docs and add test + if album in album_titles: + for album_id in album_titles[album]: + photos_sets.append(set(self._dbalbums_album[album_id])) else: logging.debug(f"Could not find album '{album}' in database") @@ -1233,7 +1305,10 @@ class PhotoInfo: def albums(self): """ list of albums picture is contained in """ - return self.__info["albums"] + albums = [] + for album in self.__info["albums"]: + albums.append(self.__db._dbalbum_details[album]["title"]) + return albums def keywords(self): """ list of keywords for picture """ diff --git a/tests/Test-10.12.6.photoslibrary/database/photos.db b/tests/Test-10.12.6.photoslibrary/database/photos.db index 3f05fbaf30a09958471b4aef9631c864f32dfdf7..c3b177f52e74d104313e9bc962d503732617ec5a 100644 GIT binary patch delta 396 zcmX}bIZxAZ0D$5C{-D+a5InKqt#}kXIOGs5r7eZ3;Mw2c@Fqft&JqWglJwmn4D}oM z3C!P>58!OVLQG89m>qTUNuEaIchdNGBiEhHWWsXhzvSa)emG>;ksyh*NxK}7gK|i+ za#)VYQ8^|Z(kWeXT)L%4PRL0)C8y<#oRwZVCpqbpemO4}0W>xLF9*bbqZr7TVWGn{%yvF@6t~^w+2Q+t9YwEVoLf z_$QQF)8)7uW?TK0xD$$7pF8)H=FHZIuAfP>kZxDw*IcNj@0a7d5EjxOE3p>BeA>Gj H_rClEu=a`Q delta 396 zcmX}byH1l~0D$3sKWJ41LKss{d~0+OnBUSjqgCEN|rpLv{lRl1PIz$_Y6sSve)A z<%~4RS!tFQX_a%*Cg6JdYE;r<++>+aJNAAi! z>6g6RmjQVo59N_OmO&Ykf)r&~Mr2gRWLzesB$F~F)AB@SWxiFP}UWuPVm`wLp<3b3fv}-LM G?feCA)rmd; diff --git a/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist b/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist index 82f8638a..9f33ea62 100644 --- a/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist +++ b/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist @@ -3,8 +3,8 @@ PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate - 2019-08-24T02:51:33Z + 2019-12-07T16:40:40Z PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate - 2019-08-24T13:19:30Z + 2019-12-07T16:40:41Z diff --git a/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb-shm b/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb-shm index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..ca5a3e0161935b8d90903afe67d1ec68143a5841 100644 GIT binary patch delta 13 UcmZo@U}|V!n%JPRQR7BE03%%mZU6uP delta 13 UcmZo@U}|V!nrL9K(cnTo03odfCIA2c diff --git a/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb b/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb index 323eccdc9fdf4b8d7ff3b3b3c6317259a3342c35..de2fb5288a929144c1ee663147aa1dd417426b20 100644 GIT binary patch literal 61440 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 1 PLLastRevGeoVerFileFetchDateKey - 2019-08-24T02:51:30Z + 2019-12-07T16:40:32Z diff --git a/tests/Test-10.12.6.photoslibrary/resources/recovery/Info.plist b/tests/Test-10.12.6.photoslibrary/resources/recovery/Info.plist index afe288ff..040c1396 100644 --- a/tests/Test-10.12.6.photoslibrary/resources/recovery/Info.plist +++ b/tests/Test-10.12.6.photoslibrary/resources/recovery/Info.plist @@ -9,7 +9,7 @@ HistoricalMarker LastHistoryRowId - 403 + 414 LibraryBuildTag E3E46F2A-7168-4973-AB3E-5848F80BFC7D LibrarySchemaVersion diff --git a/tests/Test-10.12.6.photoslibrary/resources/recovery/RKVersion/0000000000.lij b/tests/Test-10.12.6.photoslibrary/resources/recovery/RKVersion/0000000000.lij index e57ff789a801e259100c138cf8a0c8d346fdc443..6ec9187c4a0970d7e19e6dba58162b63103461f1 100644 GIT binary patch delta 389 zcmaE~owI2VXG06)7N$qhq74iT3`qq!nZ+dr23HuFm|0la*g2*vMl#6=M&;(`rskD| zmS(01FbOaVFig)2XOeOh6qnbvu(GiOY6JpCMhMNo38i6F_*9)f?*<@`DAQR47^!JG bKdReVr%#M#l6K;tiPPByn7~fgA;ok61zbbV delta 13 UcmZqL!}(}CXG06)7N$qh04nzd;s5{u