fixed PhotoInfo

This commit is contained in:
Rhet Turnbull
2019-07-25 22:45:11 -04:00
parent 5788d2430d
commit 1c1ebed491

View File

@@ -495,12 +495,12 @@ class PhotosDB:
def photos(self, keywords=[], uuid=[], persons=[], albums=[]): def photos(self, keywords=[], uuid=[], persons=[], albums=[]):
#TODO: combine photos and photos_sets, I think only one needed #TODO: combine photos and photos_sets, I think only one needed
photos = [] # list of photos (PhotoInfo objects) that will be returned # photos = [] # list of photos (PhotoInfo objects) that will be returned
photos_sets = [] # list of sets to perform intersection of photos_sets = [] # list of sets to perform intersection of
if not keywords and not uuid and not persons and not albums: if not keywords and not uuid and not persons and not albums:
# return all the photos # return all the photos
logger.debug("return all photos") logger.debug("return all photos")
photos = list(self._dbphotos.keys()) photos_sets.append(set(self._dbphotos.keys()))
else: else:
if albums: if albums:
for album in albums: for album in albums:
@@ -549,6 +549,7 @@ class PhotosDB:
for p in set.intersection(*photos_sets): for p in set.intersection(*photos_sets):
logger.debug(f"p={p}") logger.debug(f"p={p}")
info = PhotoInfo(db=self, uuid=p, info=self._dbphotos[p]) info = PhotoInfo(db=self, uuid=p, info=self._dbphotos[p])
logger.debug(f"info={info}")
photoinfo.append(info) photoinfo.append(info)
return photoinfo return photoinfo
@@ -561,15 +562,15 @@ including keywords, persons, albums, uuid, path, etc.
class PhotoInfo: class PhotoInfo:
def __init__(self, db=None, uuid=None, info=None): def __init__(self, db=None, uuid=None, info=None):
self.uuid = uuid self.__uuid = uuid
self.info = info self.__info = info
self.db = db self.__db = db
def filename(self): def filename(self):
return self.info["filename"] return self.__info["filename"]
def date(self): def date(self):
return self.info["imageDate"] return self.__info["imageDate"]
""" returns true if photo is missing from disk (which means it's not been downloaded from iCloud) """ returns true if photo is missing from disk (which means it's not been downloaded from iCloud)
NOTE: the photos.db database uses an asynchrounous write-ahead log so changes in Photos NOTE: the photos.db database uses an asynchrounous write-ahead log so changes in Photos
@@ -582,41 +583,44 @@ class PhotoInfo:
""" """
def ismissing(self): def ismissing(self):
return self.info["isMissing"] return self.__info["isMissing"]
def path(self): def path(self):
photopath = "" photopath = ""
vol = self.info["volume"] vol = self.__info["volume"]
if vol is not None: if vol is not None:
photopath = os.path.join("/Volumes", vol, self.info["imagePath"]) photopath = os.path.join("/Volumes", vol, self.__info["imagePath"])
else: else:
photopath = os.path.join(self.db._masters_path, self.info["imagePath"]) photopath = os.path.join(self.__db._masters_path, self.__info["imagePath"])
if self.info["isMissing"] == 1: if self.__info["isMissing"] == 1:
logger.warning( logger.warning(
f"Skipping photo, not yet downloaded from iCloud: {photopath}" f"Skipping photo, not yet downloaded from iCloud: {photopath}"
) )
print(self.info) logger.debug(self.__info)
photopath = None # path would be meaningless until downloaded photopath = None # path would be meaningless until downloaded
# TODO: Is there a way to use applescript to force the download in this # TODO: Is there a way to use applescript to force the download in this
return photopath return photopath
def description(self): def description(self):
return self.info["extendedDescription"] return self.__info["extendedDescription"]
def persons(self): def persons(self):
return self.info["persons"] return self.__info["persons"]
def albums(self): def albums(self):
return self.info["albums"] return self.__info["albums"]
def keywords(self): def keywords(self):
return self.info["keywords"] return self.__info["keywords"]
def name(self): def name(self):
return self.info["name"] return self.__info["name"]
def uuid(self):
return self.__uuid
# compare two PhotoInfo objects for equality # compare two PhotoInfo objects for equality
def __eq__(self, other): def __eq__(self, other):