mirror of https://github.com/watcha-fr/synapse
Include method in thumbnail media name (#7124)
This fixes an issue where different methods (crop/scale) overwrite each other. This first tries the new path. If that fails and we are looking for a remote thumbnail, it tries the old path. If that still isn't found, it continues as normal. This should probably be removed in the future, after some of the newer thumbnails were generated with the new path on most deployments. Then the overhead should be minimal if the other thumbnails need to be regenerated. Signed-off-by: Nicolas Werner <nicolas.werner@hotmail.de>code_spécifique_watcha
parent
63c0e9e195
commit
560f3b8609
@ -0,0 +1 @@ |
||||
Fix a bug in the media repository where remote thumbnails with the same size but different crop methods would overwrite each other. Contributed by @deepbluev7. |
@ -0,0 +1,33 @@ |
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
/* |
||||
* This adds the method to the unique key constraint of the thumbnail databases. |
||||
* Otherwise you can't have a scaled and a cropped thumbnail with the same |
||||
* resolution, which happens quite often with dynamic thumbnailing. |
||||
* This is the postgres specific migration modifying the table with a background |
||||
* migration. |
||||
*/ |
||||
|
||||
-- add new index that includes method to local media |
||||
INSERT INTO background_updates (update_name, progress_json) VALUES |
||||
('local_media_repository_thumbnails_method_idx', '{}'); |
||||
|
||||
-- add new index that includes method to remote media |
||||
INSERT INTO background_updates (update_name, progress_json, depends_on) VALUES |
||||
('remote_media_repository_thumbnails_method_idx', '{}', 'local_media_repository_thumbnails_method_idx'); |
||||
|
||||
-- drop old index |
||||
INSERT INTO background_updates (update_name, progress_json, depends_on) VALUES |
||||
('media_repository_drop_index_wo_method', '{}', 'remote_media_repository_thumbnails_method_idx'); |
||||
|
@ -0,0 +1,44 @@ |
||||
/* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
/* |
||||
* This adds the method to the unique key constraint of the thumbnail databases. |
||||
* Otherwise you can't have a scaled and a cropped thumbnail with the same |
||||
* resolution, which happens quite often with dynamic thumbnailing. |
||||
* This is a sqlite specific migration, since sqlite can't modify the unique |
||||
* constraint of a table without recreating it. |
||||
*/ |
||||
|
||||
CREATE TABLE local_media_repository_thumbnails_new ( media_id TEXT, thumbnail_width INTEGER, thumbnail_height INTEGER, thumbnail_type TEXT, thumbnail_method TEXT, thumbnail_length INTEGER, UNIQUE ( media_id, thumbnail_width, thumbnail_height, thumbnail_type, thumbnail_method ) ); |
||||
|
||||
INSERT INTO local_media_repository_thumbnails_new |
||||
SELECT media_id, thumbnail_width, thumbnail_height, thumbnail_type, thumbnail_method, thumbnail_length |
||||
FROM local_media_repository_thumbnails; |
||||
|
||||
DROP TABLE local_media_repository_thumbnails; |
||||
|
||||
ALTER TABLE local_media_repository_thumbnails_new RENAME TO local_media_repository_thumbnails; |
||||
|
||||
CREATE INDEX local_media_repository_thumbnails_media_id ON local_media_repository_thumbnails (media_id); |
||||
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS remote_media_cache_thumbnails_new ( media_origin TEXT, media_id TEXT, thumbnail_width INTEGER, thumbnail_height INTEGER, thumbnail_method TEXT, thumbnail_type TEXT, thumbnail_length INTEGER, filesystem_id TEXT, UNIQUE ( media_origin, media_id, thumbnail_width, thumbnail_height, thumbnail_type, thumbnail_method ) ); |
||||
|
||||
INSERT INTO remote_media_cache_thumbnails_new |
||||
SELECT media_origin, media_id, thumbnail_width, thumbnail_height, thumbnail_method, thumbnail_type, thumbnail_length, filesystem_id |
||||
FROM remote_media_cache_thumbnails; |
||||
|
||||
DROP TABLE remote_media_cache_thumbnails; |
||||
|
||||
ALTER TABLE remote_media_cache_thumbnails_new RENAME TO remote_media_cache_thumbnails; |
Loading…
Reference in new issue