diff --git a/scanner/PhotoAlbum.py b/scanner/PhotoAlbum.py index 8ad5f89..00ebcb9 100644 --- a/scanner/PhotoAlbum.py +++ b/scanner/PhotoAlbum.py @@ -153,9 +153,9 @@ class Photo(object): exif = {} for tag, value in info.items(): decoded = TAGS.get(tag, tag) - if isinstance(value, str): + if isinstance(value, str) or isinstance(value, unicode): value = value.strip().partition("\x00")[0] - if isinstance(decoded, str) and decoded.startswith("DateTime"): + if (isinstance(decoded, str) or isinstance(decoded, unicode)) and decoded.startswith("DateTime"): try: value = datetime.strptime(value, '%Y:%m:%d %H:%M:%S') except KeyboardInterrupt: @@ -302,11 +302,17 @@ class Photo(object): try: image.save(thumb_path, "JPEG", quality=88) except KeyboardInterrupt: - os.unlink(thumb_path) + try: + os.unlink(thumb_path) + except: + pass raise except: message("save failure", os.path.basename(thumb_path)) - os.unlink(thumb_path) + try: + os.unlink(thumb_path) + except: + pass def _thumbnails(self, original_path, thumb_path): # get number of cores on the system, and use all minus one @@ -330,14 +336,17 @@ class Photo(object): return [image_cache(self._path, size[0], size[1]) for size in Photo.thumb_sizes] @property def date(self): + correct_date = None; if not self.is_valid: - return datetime(1900, 1, 1) + correct_date = datetime(1900, 1, 1) if "dateTimeOriginal" in self._attributes: - return self._attributes["dateTimeOriginal"] + correct_date = self._attributes["dateTimeOriginal"] elif "dateTime" in self._attributes: - return self._attributes["dateTime"] + correct_date = self._attributes["dateTime"] else: - return self._attributes["dateTimeFile"] + correct_date = self._attributes["dateTimeFile"] + return correct_date + def __cmp__(self, other): date_compare = cmp(self.date, other.date) if date_compare == 0: diff --git a/scanner/TreeWalker.py b/scanner/TreeWalker.py index 191b187..f52873b 100644 --- a/scanner/TreeWalker.py +++ b/scanner/TreeWalker.py @@ -49,7 +49,10 @@ class TreeWalker: except KeyboardInterrupt: raise except: - pass + next_level() + message("unicode error", entry.decode(sys.getfilesystemencoding(), "replace")) + back_level() + continue entry = os.path.join(path, entry) if os.path.isdir(entry): album.add_album(self.walk(entry)) diff --git a/web/js/010-libphotofloat.js b/web/js/010-libphotofloat.js index 0a84014..f8a1107 100644 --- a/web/js/010-libphotofloat.js +++ b/web/js/010-libphotofloat.js @@ -137,12 +137,15 @@ return PhotoFloat.cachePath(album.parent.path + "/" + album.path); }; PhotoFloat.photoPath = function(album, photo, size, square) { - var suffix; + var suffix, hash; if (square) suffix = size.toString() + "s"; else suffix = size.toString(); - return "cache/" + PhotoFloat.cachePath(PhotoFloat.photoHash(album, photo) + "_" + suffix + ".jpg"); + hash = PhotoFloat.cachePath(PhotoFloat.photoHash(album, photo) + "_" + suffix + ".jpg"); + if (hash.indexOf("root-") === 0) + hash = hash.substring(5); + return "cache/" + hash; }; PhotoFloat.originalPhotoPath = function(album, photo) { return "albums/" + album.path + "/" + photo.name;