Jann Stute
7176908274
docs: Add QT MVC structure to style guide ( #950 )
...
* doc: first draft
* doc: highlight key aspects of example
* doc: address feedback
* doc: add comment on making methods private by default
* doc: fix typo
* doc: fix typos
2025-07-05 11:26:14 -07:00
VasigaranAndAngel
29154babf8
refactor: type improvements to landing.py and panel.py ( #960 )
...
* landing.py
* panel.py and a method's name change
* remove # noqa
* remove set_title method and pass title to the PanelModal constructor
Co-Authored-By: Jann Stute <46534683+Computerdores@users.noreply.github.com >
* send keyPressEvent only if it's not used
* pass window_title to constructor
use `title` if `window_title` is `None`
Co-Authored-By: Jann Stute <46534683+Computerdores@users.noreply.github.com >
---------
Co-authored-by: Jann Stute <46534683+Computerdores@users.noreply.github.com >
2025-07-03 11:10:20 -07:00
VasigaranAndAngel
001ff14799
recator: fixes to preview_panel.py, progress.py, tag.py and tag_box.py ( #961 )
...
* preview_panel.py
* progress.py
* tag.py
* tag_box.py
* Revert "preview_panel.py"
This reverts commit bcb4515834 .
2025-07-03 09:03:22 -07:00
VasigaranAndAngel
57ab919d1b
refactor: type fixes to folders_to_tags.py, collage_icon.py and item_thumb.py ( #959 )
...
* folders_to_tags.py type fixes
* collage_icon.py
* item_thumb.py
* fix test and mypy errors
* naming fix
Co-authored-by: Jann Stute <46534683+Computerdores@users.noreply.github.com >
---------
Co-authored-by: Jann Stute <46534683+Computerdores@users.noreply.github.com >
2025-07-03 08:39:33 -07:00
VasigaranAndAngel
4e722278d8
refactor: resource_manager.py ( #958 )
...
* refactor
* describe return types in get method
* make ResourceManager singleton
* match case statement
2025-06-27 14:11:29 -07:00
Travis Abendshien
b8313c3f15
ui: enable Chinese (Simplified) and Viossa language options
2025-06-07 14:49:00 -07:00
Jann Stute
c100babd9f
feat(ui): option to change tag primary click behavior ( #945 )
...
* feat: add settings field
* feat: change click behaviour based on settings value
* fix: make ignore comment pyright specific to shut up mypy
* fix: add german and english translations for new strings
* fix: settings dropdowns were always english not matter the selected language
2025-06-06 12:45:30 -07:00
Jann Stute
3999d5d39b
feat(ui): improved datetime field modal using QDateTimeEdit ( #946 )
...
* feat: custom modal making use of QDateTimeEdit
* fix: add back license notice
* refactor: remove unnecessary line
* feat: use date and hour format from settings for date time picker
2025-06-06 12:41:52 -07:00
Jann Stute
14d1c2b618
refactor: split QtDriver into View and Controller to follow MVC model ( #935 )
...
* fix: incorrect qt enum accesses
* refactor: clean up main_window.py and reenable ruff checks for it
* refactor: completely reorganise main_window.py
* refactor: factor out regions into separate methods
* refactor: move preview_panel to MainWindow
* refactor: move file menu construction to MainMenuBar
* refactor: move edit menu construction to MainMenuBar
* refactor: move view menu construction to MainMenuBar
* refactor: move tools menu construction to MainMenuBar
* refactor: move macros menu construction to MainMenuBar
* refactor: move help menu construction to MainMenuBar
* refactor: move ui construction code out of QtDriver and into MainWindow
* fix: remove unnecessary imports
* fix: tests were failing
2025-06-05 16:02:03 -07:00
Weblate (bot)
da18bd0dd5
translations: update from Hosted Weblate ( #907 )
...
* Translated using Weblate (Filipino)
Currently translated at 100.0% (313 of 313 strings)
Translated using Weblate (Filipino)
Currently translated at 100.0% (313 of 313 strings)
Translated using Weblate (Filipino)
Currently translated at 74.7% (234 of 313 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com >
Co-authored-by: searinminecraft <kitakita@disroot.org >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/fil/
Translation: TagStudio/Strings
* Translated using Weblate (Tamil)
Currently translated at 100.0% (313 of 313 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/ta/
Translation: TagStudio/Strings
* Translated using Weblate (German)
Currently translated at 100.0% (313 of 313 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: Liveside <livesi5e@gmail.com >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/de/
Translation: TagStudio/Strings
* Translated using Weblate (Russian)
Currently translated at 91.3% (286 of 313 strings)
Translated using Weblate (Russian)
Currently translated at 91.3% (286 of 313 strings)
Translated using Weblate (Russian)
Currently translated at 89.1% (279 of 313 strings)
Translated using Weblate (Russian)
Currently translated at 88.8% (278 of 313 strings)
Co-authored-by: Dott-rus <antonamelin8@gmail.com >
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: Utof <vip.ilyabondar@gmail.com >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/ru/
Translation: TagStudio/Strings
* Translated using Weblate (Japanese)
Currently translated at 100.0% (313 of 313 strings)
Translated using Weblate (Japanese)
Currently translated at 63.2% (198 of 313 strings)
Translated using Weblate (Japanese)
Currently translated at 52.3% (164 of 313 strings)
Update translation files
Updated by "Remove blank strings" add-on in Weblate.
Translated using Weblate (Japanese)
Currently translated at 52.0% (163 of 313 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: wany-oh <wany-oh@users.noreply.hosted.weblate.org >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/ja/
Translation: TagStudio/Strings
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (313 of 313 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: Szíjártó Levente Pál <szijartoleventepal@gmail.com >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/hu/
Translation: TagStudio/Strings
* Translated using Weblate (Polish)
Currently translated at 92.6% (290 of 313 strings)
Co-authored-by: Feather <featherprinceyt@gmail.com >
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/pl/
Translation: TagStudio/Strings
* Translated using Weblate (Spanish)
Currently translated at 99.3% (311 of 313 strings)
Translated using Weblate (Spanish)
Currently translated at 96.4% (302 of 313 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: Joan <joancanalscrehuet@gmail.com >
Co-authored-by: Sunny <0t2sruto@pwall.anonaddy.com >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/es/
Translation: TagStudio/Strings
* Translated using Weblate (French)
Currently translated at 100.0% (313 of 313 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: Med <45147847+kitsumed@users.noreply.github.com >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/fr/
Translation: TagStudio/Strings
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (313 of 313 strings)
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (312 of 312 strings)
Added translation using Weblate (Chinese (Simplified Han script))
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: Luoyu <rainluoyu@outlook.com >
Co-authored-by: Luoyu <tkiuvvv2333@gmail.com >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/zh_Hans/
Translation: TagStudio/Strings
* Translated using Weblate (Toki Pona)
Currently translated at 95.8% (300 of 313 strings)
Translated using Weblate (Toki Pona)
Currently translated at 94.8% (297 of 313 strings)
Translated using Weblate (Toki Pona)
Currently translated at 90.4% (283 of 313 strings)
Translated using Weblate (Toki Pona)
Currently translated at 90.0% (282 of 313 strings)
Translated using Weblate (Toki Pona)
Currently translated at 83.0% (260 of 313 strings)
Translated using Weblate (Toki Pona)
Currently translated at 80.7% (252 of 312 strings)
Translated using Weblate (Toki Pona)
Currently translated at 80.7% (252 of 312 strings)
Translated using Weblate (Toki Pona)
Currently translated at 80.7% (252 of 312 strings)
Co-authored-by: Bee Crankson <ProfB.crankson@gmail.com >
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/tok/
Translation: TagStudio/Strings
* Translated using Weblate (Viossa)
Currently translated at 96.1% (301 of 313 strings)
Translated using Weblate (Viossa)
Currently translated at 96.1% (301 of 313 strings)
Translated using Weblate (Viossa)
Currently translated at 96.1% (301 of 313 strings)
Translated using Weblate (Viossa)
Currently translated at 46.3% (145 of 313 strings)
Translated using Weblate (Viossa)
Currently translated at 45.0% (141 of 313 strings)
Translated using Weblate (Viossa)
Currently translated at 45.1% (141 of 312 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: Nginearing <142851004+Nginearing@users.noreply.github.com >
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/qpv/
Translation: TagStudio/Strings
---------
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com >
Co-authored-by: searinminecraft <kitakita@disroot.org >
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com >
Co-authored-by: Liveside <livesi5e@gmail.com >
Co-authored-by: Dott-rus <antonamelin8@gmail.com >
Co-authored-by: Utof <vip.ilyabondar@gmail.com >
Co-authored-by: wany-oh <wany-oh@users.noreply.hosted.weblate.org >
Co-authored-by: Szíjártó Levente Pál <szijartoleventepal@gmail.com >
Co-authored-by: Feather <featherprinceyt@gmail.com >
Co-authored-by: Joan <joancanalscrehuet@gmail.com >
Co-authored-by: Sunny <0t2sruto@pwall.anonaddy.com >
Co-authored-by: Med <45147847+kitsumed@users.noreply.github.com >
Co-authored-by: Luoyu <rainluoyu@outlook.com >
Co-authored-by: Luoyu <tkiuvvv2333@gmail.com >
Co-authored-by: Bee Crankson <ProfB.crankson@gmail.com >
Co-authored-by: Nginearing <142851004+Nginearing@users.noreply.github.com >
2025-06-04 02:14:32 -07:00
Travis Abendshien
9b0eb90d06
Merge branch 'Alpha-v9.5.3'
2025-06-04 01:35:25 -07:00
rsazra
e4bb07e852
fix: add parent tags to folders_to_tags macro and start tagging at root folder ( #940 )
...
* start tagging from root and add parent tags
* update snapshot to pass test
2025-06-04 01:22:17 -07:00
purpletennisball
e1117bf1a1
fix: creating new tag now refreshes the menu using the current search text ( #939 )
2025-06-04 00:43:09 -07:00
rsazra
c21e2d657d
fix(ui): add selected field on return ( #941 )
2025-06-04 00:36:27 -07:00
Jann Stute
25fb6883c1
fix: proper error on unterminated quoted string ( #936 )
...
* fix: minor warnings
* fix: return ParsingError on unterminated quoted string
2025-06-04 00:33:33 -07:00
Jann Stute
cf6c56c9d2
fix: restore page navigation state ( #933 )
...
* refactor: store browsing history for navigation purposes
* refactor: remove page_size from FilterState
* refactor: move on from the term "filter" in favor of "BrowsingState"
* fix: refactors didn't propagate to the tests
* fix: ruff complaints
* fix: remaing refactoring errors
* fix: navigation works again
* fix: also store and restore query
2025-06-04 00:29:07 -07:00
Bee
b0a9d045fd
docs: update CHANGELOG.md ( #914 )
...
* Update CHANGELOG.md
* Update CHANGELOG.md again
add the more recent changelog parts
2025-06-03 23:32:03 -07:00
Xarvex
1e783a5e3c
fix(nix/package): override PySide6 if later version is being used ( #917 )
2025-05-06 16:42:21 -05:00
Travis Abendshien
6517ef560f
Merge branch 'main' into Alpha-v9.5.3
2025-05-05 14:25:38 -07:00
Jann Stute
d061e2e866
fix: tests were overwriting the settings.toml ( #928 )
...
* fix: tests were overwriting the settings.toml
* fix(GlobalSettings): add default value for _loaded_from
* fix: a case in read_settings didn't set loaded_from correctly
* fix(GlobalSettings): proper serialisation
2025-05-05 14:04:48 -07:00
Travis Abendshien
ee56f3e2bc
feat(ui): show stems for extension-less files ( #899 )
...
* feat(ui): show stems for extension-less files
* chore: remove unnecessary call and comment
* fix: only access filepath if not none
2025-05-05 13:09:26 -07:00
Xarvex
702ecd4118
chore(pyproject): version bumping/relaxing ( #886 )
...
* chore(pyproject): version bumping/relaxing
* fix(pyproject): remove imaging extra for mkdocs-material
* fix: ruff formatting
* fix: mypy
* fix(pyproject): PySide violates SemVer
* chore(pyproject): set Python version, bump pydantic
* fix(ci): up Ruff to consistent version
* fix(pyproject): fixup requires-python
* fix: ruff checks
* chore(pyproject): bump dependencies
* fix(ci): up Ruff to consistent version
* fix(tests): strip out non-reproducible tests
2025-05-05 12:47:57 -07:00
Travis Abendshien
c14734d25e
chore: remove unused "dev/null" check
2025-05-04 17:29:07 -07:00
Tony
36f3b45e66
fix(tests): fix tests failing on Windows ( #903 )
...
* create and delete tmp directory for tests
* Update tests/conftest.py
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com >
* Update tests/conftest.py
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com >
* remove unused import
* cleanup and added type hints
* fix mypy assignment error
* swap gettempdir() with TemporaryDirectory()
* reuse temp library for more tests + cleanup
---------
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com >
2025-05-04 17:23:36 -07:00
VasigaranAndAngel
efb062034d
refactor: remove placeholder video, fix type hints in preview_thumb.py ( #906 )
...
* type fixes
* remove `stop_file_use()` method and release the file properly.
* remove "placeholder_mp4" from resources.json
2025-05-04 15:13:34 -07:00
Jann Stute
6598630984
feat: datetime fields settings integration ( #926 )
...
* refactor: move datetime formatting to global settings
* feat: datetime fields settings integration
2025-05-04 11:49:52 -07:00
Jann Stute
98c4b1c359
feat(ui): temporary modal to edit datetime fields and small refactors ( #921 )
...
* refactor: simplify datetime widget creation
* refactor: fix warnings
* feat: text modal to enter date
* chore: change ignore comment to only apply to pyright not mypy
2025-05-04 11:13:58 -07:00
Travis Abendshien
525b382803
chore: remove unused import
2025-05-04 10:50:57 -07:00
JCC1998
f770614c4e
feat: add date_format and hour_format settings ( #904 )
...
* feat: add date_format and hour_format settings
* fix: fix ruff validation errors
* fix: use ruff format command
* fix: Refactor code and improve some logic
* fix: remove unused import
* Added zero padding setting and implement some comments
* Add test assert property
* fix: Unclutter selector and clarify zero-padding literal
* fix: Use static strings
Co-authored-by: Tony <1414927+zfbx@users.noreply.github.com >
---------
Co-authored-by: Tony <1414927+zfbx@users.noreply.github.com >
2025-05-04 10:46:26 -07:00
Tony
97ee43c875
feat: add ability to invert selection ( #909 )
...
* implement selection inversing
* Rename Select Inverse to Invert Selection
2025-04-05 19:59:44 -05:00
Xarvex
a72c2c4ba8
docs(develop): use double quotes for pip
...
Some shells, notably Zsh, try parsing the brackets.
Fixes : #910
2025-04-05 19:11:46 -05:00
Xarvex
29d3d64a32
nix(nix/package): ignore incompatible tests
2025-03-31 23:53:46 -05:00
Travis Abendshien
b0bfc10a67
docs: update roadmap
2025-03-31 20:36:08 -07:00
Travis Abendshien
7c5b8e51e6
chore: bump version to v9.5.2
v9.5.2
2025-03-31 15:39:46 -07:00
Weblate (bot)
efb4c4a6ed
translations: update Hungarian, French, Toki Pona ( #891 )
...
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (312 of 312 strings)
Translated using Weblate (Hungarian)
Currently translated at 100.0% (309 of 309 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: Szíjártó Levente Pál <szijartoleventepal@gmail.com >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/hu/
Translation: TagStudio/Strings
* Translated using Weblate (French)
Currently translated at 100.0% (312 of 312 strings)
Translated using Weblate (French)
Currently translated at 100.0% (309 of 309 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: Med <45147847+kitsumed@users.noreply.github.com >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/fr/
Translation: TagStudio/Strings
* Translated using Weblate (Toki Pona)
Currently translated at 80.9% (250 of 309 strings)
Co-authored-by: Bee Crankson <ProfB.crankson@gmail.com >
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Translate-URL: https://hosted.weblate.org/projects/tagstudio/strings/tok/
Translation: TagStudio/Strings
---------
Co-authored-by: Szíjártó Levente Pál <szijartoleventepal@gmail.com >
Co-authored-by: Med <45147847+kitsumed@users.noreply.github.com >
Co-authored-by: Bee Crankson <ProfB.crankson@gmail.com >
2025-03-31 15:33:17 -07:00
Travis Abendshien
f88200f38e
fix(ui): seamlessly loop videos ( #902 )
2025-03-31 15:28:08 -07:00
VasigaranAndAngel
7f7d861800
refactor: fix type hints and overrides in flowlayout.py ( #880 )
...
* refactor and fixes
* type annotations and parameter name changes
* Update src/tagstudio/qt/flowlayout.py
Co-authored-by: Jann Stute <46534683+Computerdores@users.noreply.github.com >
* Update src/tagstudio/qt/flowlayout.py
Co-authored-by: Jann Stute <46534683+Computerdores@users.noreply.github.com >
* ruff format
---------
Co-authored-by: Jann Stute <46534683+Computerdores@users.noreply.github.com >
2025-03-31 11:51:36 -07:00
Tony
cccd858078
fix(ui): remove media player border ( #900 )
2025-03-31 11:45:26 -07:00
VasigaranAndAngel
46996d50e5
refactor: fix various missing and broken type hints ( #901 )
...
* fix type hints
* text_wrapper.py type fix and minor improvements
* fields.py fixes
2025-03-31 11:14:15 -07:00
Travis Abendshien
1939f118f1
ci: add reportUnknownLambdaType = false to pyproject.toml
2025-03-31 09:49:32 -07:00
Travis Abendshien
3b5a9605d1
fix: use proper not check against MatLike type
...
Fixes video thumbnails not rendering.
2025-03-31 02:13:06 -07:00
Travis Abendshien
7dd1905b6e
translations: add Japanese to settings, catch FileNotFound error
2025-03-30 23:37:22 -07:00
Travis Abendshien
9c24272caf
settings: update default settings values
2025-03-30 21:28:09 -07:00
Travis Abendshien
d7d7e21d13
feat(ui): add more default icons and file type equivalencies ( #882 )
...
* feat(ui): expand file and thumbnail support
* feat: add iwork and powerpoint thumb support
Note: a lot of the zip-based code is becoming duplicated - this should be consolidated in the future.
* fix: remove decompression bomb check and catch others
* feat: add .aiff file equivalencies
* ui: update database icon
* feat: add .effect and .shader to shader set
* fix: correct malformed or missing media types
* feat: add misc code/plaintext types to media types
* fix: catch BadZipFile error for iWork thumbs
* chore: add type hints to thumb_renderer dicts
* refactor: change most internal render methods to static
2025-03-30 19:24:10 -07:00
Travis Abendshien
33e6bc180d
ui: recent libraries list improvements ( #881 )
...
* ui: improve missing library message
* ui: update recent library max to 10
2025-03-30 19:23:52 -07:00
csponge
13afb0f664
feat(ui): merge media controls ( #805 )
...
* feat: merge media controls.
Initial commit to merge audio/video files. There are
still a few bugs around widget sizing that need fixing.
* fix: center widgets in preview area
Add widgets to a sublayout to allow for centering
in a QStackedLayout.
Remove references to the legacy video player in
the thumb preview.
* fix: resolve commit suggestions.
Subclass QSlider to handle click events
and allow for easier seeking.
Implement context menu along with autoplay
setting for the media widget.
Pause video when media player is clicked
instead of opening file.
* fix: start media muted
Start video/audio muted on initial load of
the media player.
Remove code causing mypy issue.
Add new method for getting slider click state.
* refactor: use layouts instead of manual positioning.
Add various layouts for positioning widgets instead
of manually moving widgets.
Change the volume slider orientation at smaller
media sizes.
* fix: color position label white
Fix position label color to white so it stays visible
regardless of theme.
* fix: allow dragging slider after click
* Apply suggestions from code review
fix: apply suggestions from code review.
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com >
* fix: remove references to legacy video player.
Combine the stats logic for video/audio into one method.
Fix several issues after incorrectly implementing suggestions.
* fix: add loop setting and other actions.
* refactor: simplify widget state management.
Make a single method to control widget state.
Works with the main QStackLayout and cleans up
widget state if it is needed (i.e., stopping the media
player when switching to a different preview).
* fix: add pages to QStackLayout to fix widget position.
Fixes a regression in commit 4c6934. We need the pages
to properly center the widgets in the QStackLayout.
* fix: ensure media_player doesn't exceed maximum size if thumbnail.
Fix and issue where the media_player would expand past the
thumbnail on resize.
* refactor: move settings to new system
2025-03-30 19:23:24 -07:00
Leonard2
27fb54ed65
build: update spec file to use proper pathex and datas paths ( #895 )
...
* build: add "src" to pathex.
Instead of having to pre-install tagstudio, this will have PyInstaller directly build it from source.
* build: be more selective about the data files.
Since PyInstaller builds from source now there is no need to manually add it.
---------
Co-authored-by: Léonard <Leeooonaard@gmail.com >
2025-03-30 17:34:01 -07:00
Jann Stute
e3b2eaf96a
perf: improve responsiveness of GIF entries ( #894 )
...
* feat: create QMovie with file path instead of copying image around
* fix: make ignore pyright specific so mypy doesn't complain
* fix: restore ability to delete file while viewing it
2025-03-30 17:21:46 -07:00
Jann Stute
33dd330c73
fix: close pdf file object in thumb renderer ( #893 )
2025-03-30 16:36:04 -07:00
Emmanuel Ferdman
1c02e75dd9
docs: update ThumbRenderer source ( #896 )
...
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com >
2025-03-30 09:18:37 -07:00