mirror of
https://github.com/TagStudioDev/TagStudio.git
synced 2026-01-29 06:10:51 +00:00
feat: add thumbnail generation toggle (#1057)
This commit is contained in:
@@ -44,6 +44,7 @@ class Theme(Enum):
|
||||
class GlobalSettings(BaseModel):
|
||||
language: str = Field(default="en")
|
||||
open_last_loaded_on_startup: bool = Field(default=True)
|
||||
generate_thumbs: bool = Field(default=False)
|
||||
autoplay: bool = Field(default=True)
|
||||
loop: bool = Field(default=True)
|
||||
show_filenames_in_grid: bool = Field(default=True)
|
||||
|
||||
@@ -135,6 +135,10 @@ class SettingsPanel(PanelWidget):
|
||||
Translations["settings.open_library_on_start"], self.open_last_lib_checkbox
|
||||
)
|
||||
|
||||
self.generate_thumbs = QCheckBox()
|
||||
self.generate_thumbs.setChecked(self.driver.settings.generate_thumbs)
|
||||
form_layout.addRow(Translations["settings.generate_thumbs"], self.generate_thumbs)
|
||||
|
||||
# Autoplay
|
||||
self.autoplay_checkbox = QCheckBox()
|
||||
self.autoplay_checkbox.setChecked(self.driver.settings.autoplay)
|
||||
@@ -232,6 +236,7 @@ class SettingsPanel(PanelWidget):
|
||||
return {
|
||||
"language": self.__get_language(),
|
||||
"open_last_loaded_on_startup": self.open_last_lib_checkbox.isChecked(),
|
||||
"generate_thumbs": self.generate_thumbs.isChecked(),
|
||||
"autoplay": self.autoplay_checkbox.isChecked(),
|
||||
"show_filenames_in_grid": self.show_filenames_checkbox.isChecked(),
|
||||
"page_size": int(self.page_size_line_edit.text()),
|
||||
@@ -249,6 +254,7 @@ class SettingsPanel(PanelWidget):
|
||||
driver.settings.language = settings["language"]
|
||||
driver.settings.open_last_loaded_on_startup = settings["open_last_loaded_on_startup"]
|
||||
driver.settings.autoplay = settings["autoplay"]
|
||||
driver.settings.generate_thumbs = settings["generate_thumbs"]
|
||||
driver.settings.show_filenames_in_grid = settings["show_filenames_in_grid"]
|
||||
driver.settings.page_size = settings["page_size"]
|
||||
driver.settings.show_filepath = settings["show_filepath"]
|
||||
|
||||
@@ -98,7 +98,7 @@ class PreviewThumbView(QWidget):
|
||||
self.__media_player_page = QWidget()
|
||||
self.__stacked_page_setup(self.__media_player_page, self.__media_player)
|
||||
|
||||
self.__thumb_renderer = ThumbRenderer(library)
|
||||
self.__thumb_renderer = ThumbRenderer(library, driver)
|
||||
self.__thumb_renderer.updated.connect(self.__thumb_renderer_updated_callback)
|
||||
self.__thumb_renderer.updated_ratio.connect(self.__thumb_renderer_updated_ratio_callback)
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@ class ItemThumb(FlowWidget):
|
||||
self.thumb_layout.addWidget(self.bottom_container)
|
||||
|
||||
self.thumb_button = ThumbButton(self.thumb_container, thumb_size)
|
||||
self.renderer = ThumbRenderer(self.lib)
|
||||
self.renderer = ThumbRenderer(self.lib, self.driver)
|
||||
self.renderer.updated.connect(
|
||||
lambda timestamp, image, size, filename: (
|
||||
self.update_thumb(image, timestamp),
|
||||
|
||||
@@ -11,7 +11,7 @@ import zipfile
|
||||
from copy import deepcopy
|
||||
from io import BytesIO
|
||||
from pathlib import Path
|
||||
from typing import cast
|
||||
from typing import TYPE_CHECKING, cast
|
||||
from warnings import catch_warnings
|
||||
|
||||
import cv2
|
||||
@@ -72,6 +72,9 @@ from tagstudio.qt.helpers.vendored.pydub.audio_segment import (
|
||||
)
|
||||
from tagstudio.qt.resource_manager import ResourceManager
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from tagstudio.qt.ts_qt import QtDriver
|
||||
|
||||
ImageFile.LOAD_TRUNCATED_IMAGES = True
|
||||
os.environ["OPENCV_IO_ENABLE_OPENEXR"] = "1"
|
||||
|
||||
@@ -99,10 +102,11 @@ class ThumbRenderer(QObject):
|
||||
|
||||
last_cache_folder: Path | None = None
|
||||
|
||||
def __init__(self, library) -> None:
|
||||
def __init__(self, library, driver: "QtDriver") -> None:
|
||||
"""Initialize the class."""
|
||||
super().__init__()
|
||||
self.lib = library
|
||||
self.driver = driver
|
||||
ThumbRenderer.cache.set_library(self.lib)
|
||||
|
||||
# Cached thumbnail elements.
|
||||
@@ -1437,7 +1441,8 @@ class ThumbRenderer(QObject):
|
||||
if image:
|
||||
ThumbRenderer.last_cache_folder = folder
|
||||
break
|
||||
if not image:
|
||||
|
||||
if not image and self.driver.settings.generate_thumbs:
|
||||
# Render from file, return result, and try to save a cached version.
|
||||
# TODO: Audio waveforms are dynamically sized based on the base_size, so hardcoding
|
||||
# the resolution breaks that.
|
||||
@@ -1449,15 +1454,16 @@ class ThumbRenderer(QObject):
|
||||
is_grid_thumb,
|
||||
save_to_file=Path(f"{hash_value}{ThumbRenderer.cached_img_ext}"),
|
||||
)
|
||||
# If the normal renderer failed, fallback the the defaults
|
||||
# (with native non-cached sizing!)
|
||||
if not image:
|
||||
image = (
|
||||
render_unlinked((adj_size, adj_size), pixel_ratio)
|
||||
if not filepath.exists() or filepath.is_dir()
|
||||
else render_default((adj_size, adj_size), pixel_ratio)
|
||||
)
|
||||
render_mask_and_edge = False
|
||||
|
||||
# If the normal renderer failed, fallback the the defaults
|
||||
# (with native non-cached sizing!)
|
||||
if not image:
|
||||
image = (
|
||||
render_unlinked((adj_size, adj_size), pixel_ratio)
|
||||
if not filepath.exists() or filepath.is_dir()
|
||||
else render_default((adj_size, adj_size), pixel_ratio)
|
||||
)
|
||||
render_mask_and_edge = False
|
||||
|
||||
# Apply the mask and edge
|
||||
if image:
|
||||
|
||||
@@ -243,6 +243,7 @@
|
||||
"settings.language": "Language",
|
||||
"settings.library": "Library Settings",
|
||||
"settings.open_library_on_start": "Open Library on Start",
|
||||
"settings.generate_thumbs": "Thumbnail Generation",
|
||||
"settings.page_size": "Page Size",
|
||||
"settings.restart_required": "Please restart TagStudio for changes to take effect.",
|
||||
"settings.show_filenames_in_grid": "Show Filenames in Grid",
|
||||
|
||||
Reference in New Issue
Block a user