From 9cd5363a800dd85f333219788c661745b2ce88ad Mon Sep 17 00:00:00 2001 From: Rhet Turnbull Date: Sun, 29 Dec 2019 08:37:38 -0800 Subject: [PATCH] Added support for filtering only movies or photos to CLI; added search for UTI to CLI --- osxphotos/__main__.py | 186 ++++++++++++++---- osxphotos/_version.py | 2 +- osxphotos/photoinfo.py | 6 + .../database/Photos.sqlite | Bin 2093056 -> 2093056 bytes .../database/Photos.sqlite-wal | Bin 12392 -> 0 bytes .../database/search/psi.sqlite | Bin 139264 -> 139264 bytes .../database/search/psi.sqlite-shm | Bin 32768 -> 32768 bytes .../MediaAnalysis/mediaanalysis.db | Bin 69632 -> 69632 bytes .../MediaAnalysis/mediaanalysis.db-shm | Bin 32768 -> 32768 bytes .../CLSBusinessCategoryCache.AOI.sqlite-shm | Bin 32768 -> 32768 bytes .../CLSBusinessCategoryCache.AOI.sqlite-wal | Bin 568592 -> 589192 bytes ...CLSBusinessCategoryCache.Nature.sqlite-shm | Bin 32768 -> 32768 bytes ...CLSBusinessCategoryCache.Nature.sqlite-wal | Bin 543872 -> 564472 bytes .../CLSBusinessCategoryCache.POI.sqlite-shm | Bin 32768 -> 32768 bytes .../CLSBusinessCategoryCache.POI.sqlite-wal | Bin 473832 -> 494432 bytes .../CLSBusinessCategoryCache.ROI.sqlite-shm | Bin 32768 -> 32768 bytes .../CLSBusinessCategoryCache.ROI.sqlite-wal | Bin 626272 -> 646872 bytes .../graph/CLSPublicEventCache.sqlite-shm | Bin 32768 -> 32768 bytes .../graph/CLSPublicEventCache.sqlite-wal | Bin 2055912 -> 2072392 bytes .../PhotoAnalysisServicePreferences.plist | 14 +- .../caches/graph/PhotosGraph/photosgraph.kgdb | Bin 512000 -> 512000 bytes 21 files changed, 165 insertions(+), 43 deletions(-) diff --git a/osxphotos/__main__.py b/osxphotos/__main__.py index 2cc76e52..27ad9750 100644 --- a/osxphotos/__main__.py +++ b/osxphotos/__main__.py @@ -18,6 +18,7 @@ from .utils import create_path_by_date # TODO: add "--any" to search any field (e.g. keyword, description, title contains "wedding") (add case insensitive option) # TODO: add search for filename + class CLI_Obj: def __init__(self, db=None, json=False, debug=False): if debug: @@ -78,7 +79,6 @@ def albums(cli_obj): click.echo(yaml.dump(albums, sort_keys=False)) - @cli.command() @click.pass_obj def persons(cli_obj): @@ -112,7 +112,6 @@ def info(cli_obj): shared_movies = [p for p in movies if p.shared] info["shared_movie_count"] = len(shared_movies) - keywords = pdb.keywords_as_dict info["keywords_count"] = len(keywords) @@ -214,6 +213,12 @@ def list_libraries(cli_obj): @click.option( "--no-description", is_flag=True, help="Search for photos with no description." ) +@click.option( + "--uti", + default=None, + multiple=False, + help="Search for photos whose uniform type identifier (UTI) matches TEXT", +) @click.option( "-i", "--ignore-case", @@ -237,10 +242,24 @@ def list_libraries(cli_obj): help="Search for photos present on disk (e.g. not missing).", ) @click.option( - "--shared", is_flag=True, help="Search for photos in shared iCloud album (Photos 5 only)." + "--shared", + is_flag=True, + help="Search for photos in shared iCloud album (Photos 5 only).", ) @click.option( - "--not-shared", is_flag=True, help="Search for photos not in shared iCloud album (Photos 5 only)." + "--not-shared", + is_flag=True, + help="Search for photos not in shared iCloud album (Photos 5 only).", +) +@click.option( + "--only-movies", + is_flag=True, + help="Search only for movies (default searches both images and movies)", +) +@click.option( + "--only-photos", + is_flag=True, + help="Search only for photos/images (default searches both images and movies)", ) @click.option( "--json", @@ -274,6 +293,9 @@ def query( not_missing, shared, not_shared, + only_movies, + only_photos, + uti, ): """ Query the Photos database using 1 or more search options; if more than one option is provided, they are treated as "AND" @@ -301,6 +323,9 @@ def query( not_missing, shared, not_shared, + only_movies, + only_photos, + uti, ] ): click.echo(cli.commands["query"].get_help(ctx)) @@ -325,31 +350,45 @@ def query( # can't search for both description and no_description click.echo(cli.commands["query"].get_help(ctx)) return - else: - photos = _query( - cli_obj, - keyword, - person, - album, - uuid, - title, - no_title, - description, - no_description, - ignore_case, - json, - edited, - external_edit, - favorite, - not_favorite, - hidden, - not_hidden, - missing, - not_missing, - shared, - not_shared, - ) - print_photo_info(photos, cli_obj.json or json) + elif only_photos and only_movies: + # can't have only photos and only movies + click.echo(cli.commands["query"].get_help(ctx)) + return + + # actually have something to query + isphoto = ismovie = True # default searches for everything + if only_movies: + isphoto = False + if only_photos: + ismovie = False + + photos = _query( + cli_obj, + keyword, + person, + album, + uuid, + title, + no_title, + description, + no_description, + ignore_case, + json, + edited, + external_edit, + favorite, + not_favorite, + hidden, + not_hidden, + missing, + not_missing, + shared, + not_shared, + isphoto, + ismovie, + uti, + ) + print_photo_info(photos, cli_obj.json or json) @cli.command() @@ -370,6 +409,12 @@ def query( @click.option( "--no-description", is_flag=True, help="Search for photos with no description." ) +@click.option( + "--uti", + default=None, + multiple=False, + help="Search for photos whose uniform type identifier (UTI) matches TEXT", +) @click.option( "-i", "--ignore-case", @@ -387,10 +432,14 @@ def query( @click.option("--hidden", is_flag=True, help="Search for photos marked hidden.") @click.option("--not-hidden", is_flag=True, help="Search for photos not marked hidden.") @click.option( - "--shared", is_flag=True, help="Search for photos in shared iCloud album (Photos 5 only)." + "--shared", + is_flag=True, + help="Search for photos in shared iCloud album (Photos 5 only).", ) @click.option( - "--not-shared", is_flag=True, help="Search for photos not in shared iCloud album (Photos 5 only)." + "--not-shared", + is_flag=True, + help="Search for photos not in shared iCloud album (Photos 5 only).", ) @click.option("--verbose", is_flag=True, help="Print verbose output.") @click.option( @@ -427,6 +476,16 @@ def query( '"exiftool -j=photoname.jpg.json photoname.jpg" ' "The sidecar file is named in format photoname.ext.json where ext is extension of the photo (e.g. jpg).", ) +@click.option( + "--only-movies", + is_flag=True, + help="Search only for movies (default searches both images and movies)", +) +@click.option( + "--only-photos", + is_flag=True, + help="Search only for photos/images (default searches both images and movies)", +) @click.argument("dest", nargs=1) @click.pass_obj @click.pass_context @@ -441,6 +500,7 @@ def export( no_title, description, no_description, + uti, ignore_case, edited, external_edit, @@ -456,6 +516,8 @@ def export( export_edited, original_name, sidecar, + only_photos, + only_movies, dest, ): """ Export photos from the Photos database. @@ -471,7 +533,34 @@ def export( if not os.path.isdir(dest): sys.exit("DEST must be valid path") - # if no query terms, show help and return + # sanity check input args + if favorite and not_favorite: + # can't search for both favorite and notfavorite + click.echo(cli.commands["export"].get_help(ctx)) + return + elif hidden and not_hidden: + # can't search for both hidden and nothidden + click.echo(cli.commands["export"].get_help(ctx)) + return + elif title and no_title: + # can't search for both title and no_title + click.echo(cli.commands["export"].get_help(ctx)) + return + elif description and no_description: + # can't search for both description and no_description + click.echo(cli.commands["export"].get_help(ctx)) + return + elif only_photos and only_movies: + # can't have only photos and only movies + click.echo(cli.commands["export"].get_help(ctx)) + return + + isphoto = ismovie = True # default searches for everything + if only_movies: + isphoto = False + if only_photos: + ismovie = False + photos = _query( cli_obj, keyword, @@ -494,6 +583,9 @@ def export( None, # not-missing shared, not_shared, + isphoto, + ismovie, + uti, ) if photos: @@ -579,6 +671,9 @@ def print_photo_info(photos, json=False): "latitude", "longitude", "path_edited", + "isphoto", + "ismovie", + "uti", ] ) for p in photos: @@ -587,7 +682,7 @@ def print_photo_info(photos, json=False): p.uuid, p.filename, p.original_filename, - str(p.date), + p.date.isoformat(), p.description, p.title, ", ".join(p.keywords), @@ -603,6 +698,9 @@ def print_photo_info(photos, json=False): p._latitude, p._longitude, p.path_edited, + p.isphoto, + p.ismovie, + p.uti, ] ) for row in dump: @@ -631,6 +729,9 @@ def _query( not_missing, shared, not_shared, + isphoto, + ismovie, + uti, ): """ run a query against PhotosDB to extract the photos based on user supply criteria """ """ used by query and export commands """ @@ -638,7 +739,14 @@ def _query( """ if either is modified, need to ensure all three functions are updated """ photosdb = osxphotos.PhotosDB(dbfile=cli_obj.db) - photos = photosdb.photos(keywords=keyword, persons=person, albums=album, uuid=uuid, movies=True) + photos = photosdb.photos( + keywords=keyword, + persons=person, + albums=album, + uuid=uuid, + images=isphoto, + movies=ismovie, + ) if title: # search title field for text @@ -656,7 +764,7 @@ def _query( if description: # search description field for text - # if more than one, find photos with all name values in in description + # if more than one, find photos with all name values in description if ignore_case: # case-insensitive for d in description: @@ -696,6 +804,14 @@ def _query( elif not_shared: photos = [p for p in photos if not p.shared] + if shared: + photos = [p for p in photos if p.shared] + elif not_shared: + photos = [p for p in photos if not p.shared] + + if uti: + photos = [p for p in photos if uti in p.uti] + return photos diff --git a/osxphotos/_version.py b/osxphotos/_version.py index 35187c0e..c5c03cd4 100644 --- a/osxphotos/_version.py +++ b/osxphotos/_version.py @@ -1,3 +1,3 @@ """ version info """ -__version__ = "0.19.00" +__version__ = "0.19.01" diff --git a/osxphotos/photoinfo.py b/osxphotos/photoinfo.py index b6b96a01..b2f83d8b 100644 --- a/osxphotos/photoinfo.py +++ b/osxphotos/photoinfo.py @@ -536,6 +536,9 @@ class PhotoInfo: "longitude": self._longitude, "path_edited": self.path_edited, "shared": self.shared, + "isphoto": self.isphoto, + "ismovie": self.ismovie, + "uti": self.uti, } return yaml.dump(info, sort_keys=False) @@ -561,6 +564,9 @@ class PhotoInfo: "longitude": self._longitude, "path_edited": self.path_edited, "shared": self.shared, + "isphoto": self.isphoto, + "ismovie": self.ismovie, + "uti": self.uti, } return json.dumps(pic) diff --git a/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite b/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite index 9de2ca338469b0d61ed91782c1f7903891ee1a89..3f1f8920d77cac5f74fea4ad09d10e17d8a25237 100644 GIT binary patch delta 197 zcmWN^DGtIw7(n3+{OtP8fW?g@2ttq~q(wAXP`ySC=@GDm;4r-hh9|zf zyf6#GEVyaq-OWmQ7aLg>*<57v4=Zm+&EtiZr<%q;Eqk&vav)zLXR>kSq-N>Im91iz vz8ux`n)reOiYTFs3aY4~js}`&p^Xl@=%J4Rh8SUt2^?q`xbV`%_t&pKpc_Gu delta 197 zcmWN^DGtIw7(n3+{OtPUD|@ojav)zVXRX diff --git a/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite-wal b/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite-wal index 383bdba39fe26d0f83aa6683c9632c68e2dd1cde..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 GIT binary patch literal 0 HcmV?d00001 literal 12392 zcmeI2U1%It6vt;~C;OF;8^NHVSeK4zZSMxXqy^awW59TMQuHImQBpIl8PmTc<++` z+?k!3|GmF+?vUL*&Wp)m0ngno2#o?Xao_yG*VSzI#K67_2WE~Q-3iAC9KKRHzW%B9 zxA#BxYNoz+NXTY0Vr>eIqFZWD)Z_ZYbr04}WJj|Zb|c<60ZxDu-~>1UPJk2O1Xd}5 zq3qp)C}z^oB-o1Sv?yiLBK*$?f6zcvsg%&%DYVs0P0EtgI5n9_C^i23`pB_bsjmI> zG1fk=?E3?QIn5#@bPS)E*bTG*o1Sf9Hw*|iLgJbMp@tV(wM8MryumW|W}~>KcMEtY z6U;mzb%491r2WZ>$1e|0&$pj5;s*O&*_Rr-xAqL=bobtzu4=9kkWlk|16wv51Mz(r z1C6jsBI-KSC!w$B#bswNr)1$a7(r`1dl~#wN^0Hl*Uq+2ms5iEH|^e)GgV3gH3|Z( z6Vn4jYG9v&zhMU<(MY6P)M_w=ZRN{usP@Th9tn(bSq6|@Nf_dBpF_h$# z5>KHjc!15*95V=2C&HE*SlHBEiv1{Zu;)Z34XNRHRL`fX?Be{1?I4~aOB%q|v|tCs z6uFuiGXrjW0#lDdLMSGd?qE~3159+y!J6t=egxT~8us()Wep)qo9B{AKEl2GKzf~Z~~ zY}&9$dUsKSQdf^695B45t2&rOo(|mINONr(gt}YICYkke%d@$qv$<_!LnDN?qoFa8 zR3v}$om;aVxeqHzTG`*6@86N{e`I?hry1pCVpBEpEf@w32>?)GnfM{KF|}0RgHgbN zuzVF{)9hkKt+L)TiK-Z1y@J?ta3Q7Tq*7s8{SadL6-5w5&!E_*R=kSf;X~XI6L>Uu zI(4ZZY0pVjmRGMLmegx1X_ZuxEUB*@SY`@g%|l9CAq{MmI+zkiV~OQqVpsvDs%L06 z41<^vL@!>hmG1@K-TBI?ae4p9)-9WR3q83f^Mid)6mkZ9s~|~2M=l5FuVvpOEJj^6 zpf8vA#Y3=-@AtQD`K_h8R=Cg1)xfd!XahTS3jL0LLzmD+bRNy2Su}%AqT}cz^Z|Mg z9YJrQH_<_K03AXvqYcPI2Eu3@713U_8|6_i+K#%=Hnasjj6&3o-at+4wbYRBaRQtG zC%_4C0-OLRzzJ{yoB$`l32*|}O#oq`u5vQ;ldLcPIPxs$xzZZYv!m-kPmRJm;^{H? z0bQIMgHO5Q{1|*F7EhL506kyY1Nw8R0QyrY4|=imH0bxG9iV4QU7+8VIzhiFZ36wF zWP)B8Nq~Mftboo8XFjnP9^ZQ@a R3zRc#Me7A(%NtoQ@E1AxStkGh diff --git a/tests/Test-10.15.1.photoslibrary/database/search/psi.sqlite b/tests/Test-10.15.1.photoslibrary/database/search/psi.sqlite index 33d086f00b12f73f0d3aa6d6faf916b79ddb4385..68334f5cbc7f9b634a3e0eec03926c6f0e86dc94 100644 GIT binary patch delta 1390 zcmbW$%}-QU7{_rA&zyn7bnZ2=6RTCA$dpn#1%?i`6cTYOUtmqstGtc<_ z`tkeq3tzAK-9{fFrMiqB1^Lq9wYOEF{Nq}es`rfk9(#W2+WJX-%KOQmEDb#GPi4Hc zx5LYM+AEZgKR=Of?>1v~2^D|F5jJl|*J8?cNTd*94@4%QA5{KnQYEh#(3yH%bggrAm1E4& z6^^5h<~Rl|{l>A!(pip-qjFus;9a!H8$*t6aEv-y;23mtog;KK&tV;1HE`adelX#nBy(1CEwC_B*=G(d?+g(d6hBN28-94svwUm$Gz$ zqt?=SKE0*cW4tqLX@+B;rD={KOH=%d&gpbb4R3W=`kiC5rOO;iOP4sbrHdR50sYEh z0-EH=2Q2JafvQ^iO#G-WyZrWy{l>wxmxlt*GzXyJhxFm&~5Y%j}t6 znLX1Zvu6sGzN(6+PlnIFrMSRC3sal*h1~(>L6|M+#G5ApkXJxZ2 zEDAS-1>w3d9~085P!(2$doiv^cUih4EDN`Vif~I<5^l!eYK8N{tS}=?3sb^59nS@B h6%X0DEL=*`&iJD)%04C|-p7p!lfp#h-*xrYz<=Hr4rBlT delta 1390 zcmbW$&uUT!f@vD5cQo#e*?so@YW^N=Rs- z^e3GaaHkX~&?#-?BpNR!663~fI8eEm7%y;84#c$l1!{~}sGs?MFP`0G^Ljr|IcmMcU8Q)Cs(yM>*XQ!va zr5rtjhA_SgQ|2Zi6)3co#j;AD63tq;F? zbK~%r8_(mH#jRz#p7^Ry1&v>Q_0)@M7jW)kpyMnYb~+|F1~c%C)3uAR-|E^VJZgO% z??4d#pa{z@8yCnZEDe?eFb_vzGwg>sI07|1h5Ma@-T1vW*cnDTegjbqbzFuWa3|ag zTj3Bcd>!tAufdbB1)hLD+zmb04oh$se&7-$9C#jPY_>Ls^IE&IzDg89#t7CmX;Y(S%#F4Qy&!@LEcb0bsEzNQqw=}~sU}>7)=q_DqYT~W^mOkZZwN&NES&BHc zr3H>cK<7D3KocC5fW|qx13K6Et6P0uE#LE3{3Y**_n)crI_mdZ+Dhv`JW`+R>y_Cv z2W0k4kIbGqB(rA@%Iuj+%x+7O;{At*}~0gDIu*3Yrne0Z*SQKC)94q8z=G-fBViF&XJTo~SS(j5q$-Qak$o1xvC4ga7~l diff --git a/tests/Test-10.15.1.photoslibrary/database/search/psi.sqlite-shm b/tests/Test-10.15.1.photoslibrary/database/search/psi.sqlite-shm index c029a43f9f8722821b391b4253966d6eb6da4425..33bbfc22a5eadae83c3c6f1030a7a750f0ec42f6 100644 GIT binary patch delta 64 vcmZo@U}|V!njj&OqY=fEd0FFTj^%IvojwWm3sXNFUt%@A0gu$iga!2gYg`>I delta 64 wcmZo@U}|V!njj%jzgcGD>P!8LA}r1>Sg|KR@@wU~*EXJgXYfdEOjuA40Pk8L?EnA( diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db b/tests/Test-10.15.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db index 0a4131abd50a12e1c2d2b00a313ad2875204982f..64b773a1bdc0e1e44ad7033a23554e6b8f69abd4 100644 GIT binary patch delta 22 dcmZozz|ydQWr8$g_e2?I#_q<1tqF_^_yJm72ciG~ delta 22 dcmZozz|ydQWr8$g%S0Jx#+Jr}tqF_^_yJkU2b2H+ diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-shm index 078c7da79e8ea69a865d4bea1f708848e707a086..6531da6cde9a04cd2c0e9f3816acee8e39615610 100644 GIT binary patch delta 64 vcmZo@U}|V!njj(3;n!^^!rKkc?nx7*b>Yp=XhJ07Wx2@C20>+m2w delta 64 wcmZo@U}|V!njj&uXy&ham)m_D<&Ha8{olPystFI7a@%dfWjs<{9 diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm index 87ad1dd1d221f422545c57b58f56fe5b74062fe0..2ea5db732adbd92dab7dbef413577119916ceb73 100644 GIT binary patch delta 174 zcmZo@U}|V!s+V}A%K!q55G>FSqy>Oj(fXP7EMpzPP3A&QlXiymo_nnn_;#T$$?Abd zfdRQu~DCCvH+vV<_%0%4wL^mJ>u+U=waw(=ws;Lypc(eb@ML|Hgf<4 C=QUaY delta 164 zcmZo@U}|V!s+V}A%K!q55G>FIqy>O@-KVHmA0(wEH<=4LP1+gKtLpfBtHjjKS){55 u8U+R*bN?d&s4x>l=f*~Trp-r~tQ;m^U=o@9&*{Exb^ z&Wxqo11>Xe;O9u)F0^2u!^IY`R2f*R3@Vkv{qDH>goSNjsdBJX`F4eE%p3XHga16r jy0Ya4Sf&CjQvuav{mfcXP{(){SgH~%Rk``X#RdETFP%g^ delta 25 gcmeD9tvunDQbP-43sVbo3rh=Y3tJ2O77l^60D^f4FMq=kU^?rZ+#wU+O1hs9o9pu$WH9UB|PnI=9E**t?O$YJt7rx%>93~dbU3>^%en-?FFq=kTZQ{ddX?LFR`L*_JXciA%IY~3}5cMra$I+Cg$ uXcQQL%>9o9pu$WH%^MrVnKrLs3UZiyfJtQXKc^R)H!+DZZT{oRVg&%8i#fOe diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal index 21f0cef7a9e4c4442f692071fcc670a4db7a2f43..d8537442d33dd1f823244491e4143cf924dd749a 100644 GIT binary patch delta 171 zcmZpesrX~3QbP-43sVbo3rh=Y3tJ2O7LEp==>eK-g6xqGBHMmRuui`q$SBQNKK+d# zqcdaq_5>rw4g4JH$-E*jB0ma4Br71272CctZRBUqG!SNGKY9=%RSA)*+#Yb55h!=% n_OZ!!Z{I`YsvvSzP&1eFzrK6>y=5&#vKk^;z1={FaREO7BKJKy delta 25 gcmeydQ>kI5VnYjK3sVbo3rh=Y3tJ2O7LEoV0D#yC&Hw-a diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm index 2919f3ced99717d8bce42ee76cbdd6cb83746867..d7d50c851ac6fe49a9f785ed184fc0b7dd498424 100644 GIT binary patch delta 173 zcmZo@U}|V!s+V}A%K!q55G+suqy>Ojbw@ysW#byFb=FbWPp;j!`k&c>f=#RK#Yt5U zGzttr=KeQZ*S?bJ%#n-i)>%hgKe=|_>PVS?r{?BQUqGsQ tpiy7|GWS0cfC@7)6m4w0%(yv&X_~|21}2fo|D2vIE@IN${3u6G7yu_xIT8Q> diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal index 4fb2653494c678437c97f67106e032a077c37332..1d5b069a4c8f5515c76139964da1adaa3c4a8cf0 100644 GIT binary patch delta 156 zcmaFyRp!AoxrP?T7N!>F7M2#)7Pc+yFRUgDEEHt7Ilj>2!TZL^4F=MTWs~O^I5U=Q ze_+P4k)M6rx;tmMMeD&bF7M2#)7Pc+yFRTE0{s|ZW diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm index f3212eb1731d66f5221372713538b59a6282ae23..50705cbcb9d3530f1491f5c5c326ce7d7757f738 100644 GIT binary patch delta 174 zcmZo@U}|V!s+V}A%K!q55G*hkNQ(e*AZO3LfOFP1zHuR!woQH1bkXxbppL7aGpXu< zMu7py-2X@bD$K+%XJcbJ(_{likeemb9%!$lVKLaY=$`ub2oov;$+(V$Cbqj E0I$n8R{#J2 delta 164 zcmZo@U}|V!s+V}A%K!q55G*hQNQ(gRIUil`JZnX9-?)%V+onEhx?uZ)b^FUZcBHBY s8U+R*bN?d&s4x@5^o@<_Oq>5OF*!^YU>2GD&*{x(CT1a^h%1W~0Q~(l#sB~S diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal index 700f3c01dc1a2c89a3ce836a90530df7673bb2d6..e172c860a823c389b0f60fff479aae88d2068b2d 100644 GIT binary patch delta 177 zcmaDbNA1R5^@bM47N!>F7M2#)7Pc1l7LF~P34PNaG&2cs@Lcf9bq@ROF?~ZYlQd(+ z^fSRs&Wsh?9ZHxs@N>wtUrl&*sB{uUvJxU$36*?pIyZc$+toJ^$ts9s6;$%QzJ$}W j9}V9ilGPB&YN+JB9?n1;>vI7R$r^}c&31thrUm=}ehWgm delta 27 icmcbySN*{pwT2eP7N!>F7M2#)7Pc1l7LF~P34H*W;R((F diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm index 44c14f17bd95c9762b5a2ae8d639399a53fba0b5..f94f5fae3025843b2d71cec4e9ebf07c537411d3 100644 GIT binary patch delta 172 zcmZo@U}|V!s+V}A%K!q55G?Q=$Pfau>vmk=|9Q3K{OTNsyL%TN_Ih_DFUX+X`U0uy zL1u#h$lU)(03yo3#PDrn<7M`V8w56oaLlsW{LkqgGy50DuZ-Uqzi$rU;1%5bAzVNM E0D?+DF8}}l delta 165 zcmZo@U}|V!s+V}A%K!q55G?Q+$PfauFJ0SvpmD~#Q>$|v?(SW9*o*7Pq4hH9-)@qs x9%MEMfXw}m1R$aeObnkkHeP1moWe27YH|UGz~+BW_n0>)a)=0S{tzyp0RWqyK8pYV diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal index 3a29cf021fd3f18b63a22cbc88d9556579136a86..8dbf6ba58f85873d265328cd419626be8f8f6b79 100644 GIT binary patch delta 187 zcmaE{xAw%ox`r0U7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~7QPn#7J(MQ7NHj57LgXw z7O@ub7Ks+g7O58L7MT{=7P&3*FXARYXb|9Fo1os!w3fqt`i2YvX~xgf&twQVGk)Ie zP`H7gL#a`CLfmVPScu#gh}@U$2Z|Us^0VK5w^3@lvNA;OD@5+=_68{#pxlKWb>~a2 Q{)EVVgUEdYnz?`<02Ka6r2qf` delta 71 zcmV~$K@vg$006*=A{8oysQk=N7>9k5YtEkH8SSpixc!F7P9U^*5Q!ZnPR=e;ncUUQ TUE$%WRH?l*T5liUx!d|bjGY(> diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist index 3a80739c..6224d5fa 100644 --- a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist +++ b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist @@ -3,23 +3,23 @@ BackgroundHighlightCollection - 2019-12-29T06:18:40Z + 2019-12-29T09:24:37Z BackgroundHighlightEnrichment - 2019-12-29T06:18:40Z + 2019-12-29T09:24:37Z BackgroundJobAssetRevGeocode - 2019-12-29T06:18:40Z + 2019-12-29T10:47:44Z BackgroundJobSearch - 2019-12-29T06:18:40Z + 2019-12-29T09:24:37Z BackgroundPeopleSuggestion - 2019-12-29T06:18:40Z + 2019-12-29T09:24:36Z BackgroundUserBehaviorProcessor 2019-12-28T23:29:58Z PhotoAnalysisGraphLastBackgroundGraphConsistencyUpdateJobDateKey - 2019-12-29T06:18:45Z + 2019-12-29T10:47:45Z PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate 2019-12-28T23:29:57Z PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate - 2019-12-29T06:18:40Z + 2019-12-29T09:24:37Z SiriPortraitDonation 2019-12-28T23:29:58Z diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb index 22f252036240bb802d14ba747ba7577a0dc31a36..907a8f0e618fa1eb27fe6125db934648ac736859 100644 GIT binary patch delta 567 zcmZozAm6Y+egmU|F53cz7&a3t{&W0q*t&TY*qJ$P+1|00^H;JZa7pv^^IG!7bCvRQ zv-$9RV>8*Tr@+QmFDA^&ATJ@{l33}V7M_}#&BVebAjikVASB4jASosgoSImipU1?^ zDImwhAj-wcAS)pNQWlw-Sj5D_E+EGbRLa51ATA-`o1a&b!NkHUAP*E1W(H~piRGr| zl`yd|fd$!h8AKUS0VBiYEov67?Cb*UtPH|ncQCQAKvc7{3$n5@h=K%5Qkhto!J?wk ztPF}mLMi#ViJ5uvCI*H~jL}StDeUD85)&ImHoK}nXJq1Hovf#MRg8N!_iPLc88%C5 zePt4w&mfHI5QfQf)Fd}s>IyJ2E}rbA7s=za^Utt0UiH{v7^(=8DN84jN3%DUuuSs|kM?=e6XE=PKpr zW@qC0#