Fix Photo thumbnail paths to be relative to the PDB's thumb dir.
Previously they were relative to the directory from which the client was launched, meaning it usually started with ./_etiquette. Now it should be more portable and less tight.
This commit is contained in:
parent
f3eb6345f7
commit
ffe0be21f5
5 changed files with 34 additions and 8 deletions
|
@ -61,7 +61,6 @@ If you are interested in helping, please raise an issue before making any pull r
|
||||||
- Currently, the Jinja templates are having a tangling influence on the backend objects, because Jinja cannot import my other modules like bytestring, but it can access the methods of the objects I pass into the template. As a result, the objects have excess helper methods. Consider making them into Jinja filters instead. Which is also kind of ugly but will move that pollution out of the backend at least.
|
- Currently, the Jinja templates are having a tangling influence on the backend objects, because Jinja cannot import my other modules like bytestring, but it can access the methods of the objects I pass into the template. As a result, the objects have excess helper methods. Consider making them into Jinja filters instead. Which is also kind of ugly but will move that pollution out of the backend at least.
|
||||||
- Perhaps instead of actually deleting objects, they should just have a `deleted` flag, to make easy restoration possible. Also consider regrouping the children of restored Groupables if those children haven't already been reassigned somewhere else.
|
- Perhaps instead of actually deleting objects, they should just have a `deleted` flag, to make easy restoration possible. Also consider regrouping the children of restored Groupables if those children haven't already been reassigned somewhere else.
|
||||||
- Add a new table to store permanent history of add/remove of tags on photos, so that accidents or trolling can be reversed.
|
- Add a new table to store permanent history of add/remove of tags on photos, so that accidents or trolling can be reversed.
|
||||||
- Photo thumbnail paths should be relative to the data_dir, they are currently one level up. Or maybe should remove the paths entirely and just recalculate it by the ID. Can't think of any reason to have a thumbnail point elsewhere.
|
|
||||||
- Fix album size cache when photo reload metadata and generally improve that validation.
|
- Fix album size cache when photo reload metadata and generally improve that validation.
|
||||||
- Better bookmark url validation.
|
- Better bookmark url validation.
|
||||||
- Create a textbox which gives autocomplete tag names.
|
- Create a textbox which gives autocomplete tag names.
|
||||||
|
|
|
@ -21,7 +21,7 @@ FILENAME_BADCHARS = '\\/:*?<>|"'
|
||||||
# Note: Setting user_version pragma in init sequence is safe because it only
|
# Note: Setting user_version pragma in init sequence is safe because it only
|
||||||
# happens after the out-of-date check occurs, so no chance of accidentally
|
# happens after the out-of-date check occurs, so no chance of accidentally
|
||||||
# overwriting it.
|
# overwriting it.
|
||||||
DATABASE_VERSION = 9
|
DATABASE_VERSION = 10
|
||||||
DB_INIT = '''
|
DB_INIT = '''
|
||||||
PRAGMA count_changes = OFF;
|
PRAGMA count_changes = OFF;
|
||||||
PRAGMA cache_size = 10000;
|
PRAGMA cache_size = 10000;
|
||||||
|
@ -266,7 +266,9 @@ DEFAULT_CONFIGURATION = {
|
||||||
'thumbs.db',
|
'thumbs.db',
|
||||||
],
|
],
|
||||||
'digest_exclude_dirs': [
|
'digest_exclude_dirs': [
|
||||||
|
'_etiquette',
|
||||||
'_site_thumbnails',
|
'_site_thumbnails',
|
||||||
|
'site_thumbnails',
|
||||||
],
|
],
|
||||||
|
|
||||||
'file_read_chunk': 2 ** 20,
|
'file_read_chunk': 2 ** 20,
|
||||||
|
|
|
@ -570,7 +570,12 @@ class Photo(ObjectBase):
|
||||||
self.width = db_row['width']
|
self.width = db_row['width']
|
||||||
self.height = db_row['height']
|
self.height = db_row['height']
|
||||||
self.ratio = db_row['ratio']
|
self.ratio = db_row['ratio']
|
||||||
self.thumbnail = db_row['thumbnail']
|
|
||||||
|
if db_row['thumbnail'] is not None:
|
||||||
|
self.thumbnail = self.photodb.thumbnail_directory.join(db_row['thumbnail'])
|
||||||
|
else:
|
||||||
|
self.thumbnail = None
|
||||||
|
|
||||||
self.searchhidden = db_row['searchhidden']
|
self.searchhidden = db_row['searchhidden']
|
||||||
|
|
||||||
if self.duration and self.bytes is not None:
|
if self.duration and self.bytes is not None:
|
||||||
|
@ -697,8 +702,6 @@ class Photo(ObjectBase):
|
||||||
For videos, you can provide a `timestamp` to take the thumbnail at.
|
For videos, you can provide a `timestamp` to take the thumbnail at.
|
||||||
'''
|
'''
|
||||||
hopeful_filepath = self.make_thumbnail_filepath()
|
hopeful_filepath = self.make_thumbnail_filepath()
|
||||||
hopeful_filepath = hopeful_filepath.relative_path
|
|
||||||
#print(hopeful_filepath)
|
|
||||||
return_filepath = None
|
return_filepath = None
|
||||||
|
|
||||||
if self.simple_mimetype == 'image':
|
if self.simple_mimetype == 'image':
|
||||||
|
@ -731,7 +734,7 @@ class Photo(ObjectBase):
|
||||||
image = background
|
image = background
|
||||||
|
|
||||||
image = image.convert('RGB')
|
image = image.convert('RGB')
|
||||||
image.save(hopeful_filepath, quality=50)
|
image.save(hopeful_filepath.absolute_path, quality=50)
|
||||||
return_filepath = hopeful_filepath
|
return_filepath = hopeful_filepath
|
||||||
|
|
||||||
elif self.simple_mimetype == 'video' and constants.ffmpeg:
|
elif self.simple_mimetype == 'video' and constants.ffmpeg:
|
||||||
|
@ -757,7 +760,7 @@ class Photo(ObjectBase):
|
||||||
timestamp = 2
|
timestamp = 2
|
||||||
constants.ffmpeg.thumbnail(
|
constants.ffmpeg.thumbnail(
|
||||||
self.real_path.absolute_path,
|
self.real_path.absolute_path,
|
||||||
outfile=hopeful_filepath,
|
outfile=hopeful_filepath.absolute_path,
|
||||||
quality=2,
|
quality=2,
|
||||||
size=size,
|
size=size,
|
||||||
time=timestamp,
|
time=timestamp,
|
||||||
|
@ -770,7 +773,7 @@ class Photo(ObjectBase):
|
||||||
if return_filepath != self.thumbnail:
|
if return_filepath != self.thumbnail:
|
||||||
data = {
|
data = {
|
||||||
'id': self.id,
|
'id': self.id,
|
||||||
'thumbnail': return_filepath,
|
'thumbnail': return_filepath.relative_to(self.photodb.thumbnail_directory),
|
||||||
}
|
}
|
||||||
self.photodb.sql_update(table='photos', pairs=data, where_key='id')
|
self.photodb.sql_update(table='photos', pairs=data, where_key='id')
|
||||||
self.thumbnail = return_filepath
|
self.thumbnail = return_filepath
|
||||||
|
|
|
@ -95,6 +95,9 @@ def send_file(filepath, override_mimetype=None):
|
||||||
'''
|
'''
|
||||||
Range-enabled file sending.
|
Range-enabled file sending.
|
||||||
'''
|
'''
|
||||||
|
if isinstance(filepath, pathclass.Path):
|
||||||
|
filepath = filepath.absolute_path
|
||||||
|
|
||||||
try:
|
try:
|
||||||
file_size = os.path.getsize(filepath)
|
file_size = os.path.getsize(filepath)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
|
|
|
@ -155,6 +155,25 @@ def upgrade_8_to_9(photodb):
|
||||||
cur.execute('UPDATE photos SET searchhidden = 0')
|
cur.execute('UPDATE photos SET searchhidden = 0')
|
||||||
cur.execute('CREATE INDEX index_photos_searchhidden on photos(searchhidden)')
|
cur.execute('CREATE INDEX index_photos_searchhidden on photos(searchhidden)')
|
||||||
|
|
||||||
|
def upgrade_9_to_10(photodb):
|
||||||
|
'''
|
||||||
|
From now on, the filepath stored in Photo's thumbnail column should be a
|
||||||
|
relative path where . is the PhotoDB's thumbnail_directory.
|
||||||
|
Previously, the stored path was unnecessarily high and contained the PDB's
|
||||||
|
data_directory, reducing portability.
|
||||||
|
'''
|
||||||
|
cur = photodb.sql.cursor()
|
||||||
|
photos = list(photodb.search(has_thumbnail=True, is_searchhidden=None))
|
||||||
|
|
||||||
|
# Since we're doing it all at once, I'm going to cheat and skip the
|
||||||
|
# relative_to() calculation.
|
||||||
|
thumbnail_dir = photodb.thumbnail_directory.absolute_path
|
||||||
|
for photo in photos:
|
||||||
|
new_thumbnail_path = photo.make_thumbnail_filepath()
|
||||||
|
new_thumbnail_path = new_thumbnail_path.absolute_path
|
||||||
|
new_thumbnail_path = '.' + new_thumbnail_path.replace(thumbnail_dir, '')
|
||||||
|
cur.execute('UPDATE photos SET thumbnail = ? WHERE id == ?', [new_thumbnail_path, photo.id])
|
||||||
|
|
||||||
def upgrade_all(data_directory):
|
def upgrade_all(data_directory):
|
||||||
'''
|
'''
|
||||||
Given the directory containing a phototagger database, apply all of the
|
Given the directory containing a phototagger database, apply all of the
|
||||||
|
|
Loading…
Reference in a new issue