PR #58224 introduced a raster→SVG conversion path in ImageManager::getImage()
that breaks display of custom theming images. The root cause is a three-part
bug chain:
1. getImage() attempted to convert raster images (PNG/JPEG) to SVG format,
which Imagick cannot do meaningfully and produces broken output.
2. getMimeType() returns 'application/octet-stream' for extensionless stored
files, so the Content-Type response header was wrong.
3. Stale .svg cache files persisted after image replacement, causing
subsequent requests to serve the wrong format.
Fix by:
- Restricting the Imagick conversion to SVG→PNG only (not raster→SVG)
- Reading the stored MIME type from IAppConfig for extensionless files in
ThemingController::getImage()
- Deleting .svg cache files in ImageManager::delete()
- Injecting IAppConfig into ImageManager and reading the cachebuster via
IAppConfig::getAppValueInt() so the URL returned after upload always
carries the freshly-incremented value (IConfig::getAppValue() can return
a stale cached value within the same request)
- Updating the FileInputField Vue component to use a reactive cacheKey ref
that increments on every upload, so the thumbnail refreshes even when the
MIME type of the new image is the same as the old one
AI-Assisted-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Anna Larch <anna@nextcloud.com>
- replace renamed `word-wrap` with new name `overflow-wrap` (CSS3)
- use extensions for `@use`
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
- migrate all components to Typescript
- use script setup where feasible
- migrate to Vue 3
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
In Nextcloud Vue v8 some props for dialog buttons were deprecated (type
for e.g. primary or nativeType) those are replaced with `variant` and
`type`.
In v9 the deprecated props are removed - thus this breaks with
nextcloud-dialogs v7 which is based on Vue 3.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
To correctly extract the translations we only can have plain strings
within the `t` method.
Also applied new l10n feature to move link code into translation
function cleaning up a bit.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
The color extraction is handled by the backend nowadays, this was not
used by the backend anymore.
Reduce depdencies + compiled size + security warning on that dependency.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Nevertheless this causes a huge amount of new warnings.
Previously the shell script for directories to lint was wrong it was generating all app names to lint,
but was missing the `apps/` prefix. Causing only `core` to be linted.
Co-authored-by: Grigorii K. Shartsev <me@shgk.me>
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
When pressing a button for changing the app order that button should keep the focus after reordering the list.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
* Also add API for setting the value using ajax.
* Add cypress tests for app order and defaul apps
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>