Edouard Vanbelle
93d9a21013
fix(ui): admin panel, profile: restore missing icons library
2026-05-07 22:43:02 +02:00
Edouard Vanbelle
05037e7491
feat(ui): permit drag&drop to the operating system
...
a drop outside of the browser will:
- upload the file if only 1 file selected
- upload a .zip of the directory or multiple selection (browsers do not permit multiple upload yet)
note: I had to create a new handler because a post request to /api/batch/download is possible via JS but it will create a memory blob in the browser, during the drag action.
This may exhaust the browser's memory if heavy files
This will initiate zip creation from the server even if drop is canceled
The best approach is to add a handler supporting GET calls, this call will be triggered by the browser on drop action outside of it's window
2026-05-04 22:32:31 +02:00
Edouard Vanbelle
e802cdb268
improvement(ui): thumbnail generaiton uses now mime_type (ex: for .ogg containers can be music or video)
...
- improve also error handling (shows reason of thumbnail generation failure)
2026-05-04 21:16:50 +02:00
Edouard Vanbelle
1d2085457e
feath(ui): photo lib now using thumbnail library
2026-05-04 21:08:19 +02:00
Edouard Vanbelle
f6cd18e5e9
feat: generate thumbnail from client is not found on server
...
- supported thumbnail filetype: image, pdf, video
- add play character if video's thumbnail is loaded
2026-05-04 21:04:15 +02:00
Dionisio Pozo
c6b1b14444
Merge pull request #340 from abnvle/feat/polish-translation
...
add polish (pl) translation
2026-05-04 20:29:13 +02:00
abnvle
e0a3578ee2
add polish (pl) translation
2026-05-04 00:20:41 +02:00
Edouard Vanbelle
3050556dc0
style(ui): request that all types defined
...
- check in more restrictive mode = request types
- define main types in static/js/core/types.js
2026-05-03 23:04:27 +02:00
Edouard Vanbelle
08cbf3a423
style(ui): apply biome recos
2026-04-26 00:22:49 +02:00
Edouard Vanbelle
5c19564102
refactor(ui): i18n: add missing + correct keys
2026-04-26 00:13:39 +02:00
Edouard Vanbelle
75d3984b8f
refactor(ui): i18n: remove unnecessary wrappers
2026-04-26 00:13:12 +02:00
Edouard Vanbelle
4e2029969e
refactor(ui): remove unnecessary checks (i18n is always defined)
2026-04-26 00:12:44 +02:00
Edouard Vanbelle
7b56b518d8
notification: remove dead code (notification class always present)
2026-04-25 21:10:04 +02:00
Edouard Vanbelle
e148a92f5d
refactor(ui): use hidden class for upload + menu
2026-04-25 21:10:04 +02:00
Edouard Vanbelle
35fc9a0619
improve(ui): share-dialog: click outside of dialog closes the window
2026-04-25 21:10:04 +02:00
Edouard Vanbelle
fc8e529e7d
refactor(ui): modal: use hidden class
2026-04-25 21:10:04 +02:00
Edouard Vanbelle
a38bcc01de
refactor(ui): normalize about modal with hidden class
2026-04-25 21:09:55 +02:00
Edouard Vanbelle
832c9ab577
improve(ui): dialog: add escape key on shared dialog + perfer hidden class
2026-04-25 21:09:41 +02:00
Edouard Vanbelle
24967489e1
improve(ui) favorite star: remove duplicate information on item + badge-shared: click on it to open share dialog
2026-04-25 21:09:05 +02:00
Edouard Vanbelle
bdb5a6c7a9
fix(ui): correct close button on shared dialog
...
- close is more appropriate rather cancel
- translate shared dialog
2026-04-25 21:09:05 +02:00
Edouard Vanbelle
1fd92f9efa
fix(ui): update shared badge on change
2026-04-25 21:08:38 +02:00
Edouard Vanbelle
1d8da579cc
refactor(ui): keep badges order (favorite, shared)
2026-04-24 23:07:33 +02:00
Edouard Vanbelle
e2f8e8513f
fix(navigation): correct recent section
2026-04-17 13:46:24 +02:00
Edouard Vanbelle
ceff552736
feat(shared): show in classic view if an item is shared
2026-04-16 23:13:08 +02:00
Edouard Vanbelle
9073274e69
fix(list-view/select-all-checkbox): avoid multiple listener on select all checkbox
2026-04-16 01:06:09 +02:00
Edouard Vanbelle
8e18e0c848
fix(section/favorite): ensure select-all-checkbox is wired
2026-04-16 00:57:01 +02:00
Dionisio Pozo
3276da366c
Merge pull request #298 from EdouardVanbelle/feat/buttons
2026-04-16 00:46:39 +02:00
Dionisio Pozo
2a1e771355
Merge pull request #294 from EdouardVanbelle/chore/add-script-to-populate-icons
2026-04-16 00:13:21 +02:00
Edouard Vanbelle
7bb4ed0940
refactor(frontend/sections): remove app.is{Xxx}View and use only app.currentSection
2026-04-16 00:01:50 +02:00
Edouard Vanbelle
33165c6d5a
feat(frontand/buttons): move multiselect into buttons = keep visible card/list selector
2026-04-15 23:49:20 +02:00
Edouard Vanbelle
4c327b3fe1
fix(icons): add missing referenced icons
...
- icons added via tools/check-icons.py
2026-04-15 08:49:17 +02:00
Dionisio Pozo
4d0ad666bd
Merge pull request #296 from EdouardVanbelle/fix/music
2026-04-15 06:01:56 +02:00
Edouard Vanbelle
0b27c3b400
fix(navigation): correct hash url and navigation to music
2026-04-15 00:39:37 +02:00
Edouard Vanbelle
6e3d87c27e
style(front): correct format
2026-04-15 00:15:53 +02:00
Diocrafts
cd3733b459
feat: pluggable storage backends (S3, Azure, local) with admin UI
...
Implement 4-phase external storage backends architecture:
Phase 1 - Foundation:
- BlobStorageBackend trait (application/ports/blob_storage_ports.rs)
- LocalBlobBackend: extracted all tokio::fs ops from DedupService
- S3BlobBackend: AWS SDK with custom endpoint support (MinIO, R2, B2)
- DedupService refactored to use Arc<dyn BlobStorageBackend>
Phase 2 - Admin Panel:
- StorageSettingsService with DB persistence + env override
- Storage tab in admin panel (backend selector, S3 form, provider presets)
- GET/PUT/POST endpoints for storage settings + connection test
- i18n keys (en/es) and BEM CSS
Phase 3 - Migration:
- MigrationBlobBackend decorator (dual-read: target-first + source fallback)
- Background migration job with parallel transfers + progress tracking
- Migration UI (progress bar, ETA, pause/resume/verify/complete)
- 6 admin API endpoints for migration lifecycle
Phase 4 - Enterprise Extras:
- CachedBlobBackend: LRU disk cache for remote backends
- EncryptedBlobBackend: AES-256-GCM at-rest encryption
- AzureBlobBackend: Azure Blob Storage support
- RetryBlobBackend: exponential backoff for transient errors
- Decorator composition in DI: retry → encryption → cache
All 223 tests passing, clippy clean, fmt verified.
2026-04-14 21:33:38 +02:00
Edouard Vanbelle
6f4abfcec4
refactor(js): avoid use of window.XXX and move to import/export
...
- change worker: do not cache html pages (not necessary)
- remove use of window.XXX and maximize import/export,
this will provide more clarety,
show circular dependencies + you will benefit IDE help
2026-04-14 19:05:01 +02:00
Dionisio Pozo
65c8fc7f5e
Merge pull request #288 from EdouardVanbelle/fix/frontend-search-view
2026-04-13 14:42:24 +02:00
Edouard Vanbelle
26ce794090
fix(SharedSection): hide files list header, shared view has it's own view
2026-04-13 13:25:48 +02:00
Edouard Vanbelle
28963965a1
fix(searchResult): move search result into sticky header
2026-04-13 13:24:58 +02:00
Diocrafts
1dbe7e4553
fix: resolve all biome ci errors and warnings
...
- Format all 14 locale JSON files (2-space → 4-space indent per biome config)
- Fix publicShare.js: arrow functions, template literals, optional chaining,
remove redundant 'use strict', remove unused formatSize function
- Fix music.js: template literal, unused _trackId parameter
- Fix contextMenus.js, fileOperations.js, fileSharing.js: unused parameters
- Fix auth.js, music.css, share-public.css: formatting (biome format --write)
- Remove unused biome-ignore suppression comments in cards.css and reset.css
- Remove empty .share-state block in share-public.css
- Disable noDescendingSpecificity and noImportantStyles rules in biome.json
(intentional CSS patterns for utility classes and theme overrides)
2026-04-12 02:13:08 +02:00
Diocrafts
edf1e66989
feat: add public share page with download support ( #253 )
...
Share links now point to /s/{token} (was /api/s/{token}) and render a
proper HTML page instead of raw JSON.
Changes:
- static/share.html: standalone public share page
- static/css/views/share-public.css: share page styles
- static/js/views/public/publicShare.js: client-side logic that fetches
share metadata via /api/s/{token}, handles password-protected shares,
and renders file download / folder info
- build.rs: include share.html in the HTML embed pipeline
- web/mod.rs: serve /s/{token} route (unauthenticated)
- share_dto.rs: generate URLs as /s/{token} instead of /api/s/{token}
- share_handler.rs: new download_shared_file() handler that validates the
share token and streams file content without requiring authentication
- routes.rs: mount GET /api/s/{token}/download (public, uses AppState)
2026-04-12 01:51:30 +02:00
Diocrafts
c512534bfa
fix: session_expired after login on HTTP deployments ( #241 )
...
Three changes to fix the immediate-logout issue reported by multiple
Docker users:
1. Add explicit `credentials: 'same-origin'` to the login fetch call.
This was the only fetch in the entire codebase missing it. While
modern browsers default to 'same-origin', some privacy configs or
older engines may default to 'omit', silently dropping Set-Cookie
headers from the login response.
2. Post-login cookie verification: after a successful login, the
frontend now checks that the CSRF cookie (non-HttpOnly, readable
by JS) was actually stored before redirecting. If the browser
rejected the cookies, a clear error message is shown explaining
the OXICLOUD_COOKIE_SECURE / HTTP mismatch.
3. Server-side diagnostic: the login handler now warns in logs when
Secure cookies are set on a request that didn't arrive via HTTPS
(no X-Forwarded-Proto: https header), pointing admins to the
OXICLOUD_COOKIE_SECURE=false fix.
Root cause: users who set OXICLOUD_BASE_URL=https://... (or have
OXICLOUD_COOKIE_SECURE=true) but access via plain HTTP get cookies
with the Secure flag, which browsers silently reject over HTTP.
2026-04-12 01:38:19 +02:00
Diocrafts
e91dcee0ea
fix: scale folder upload timeout by file size ( fixes #249 )
...
The folder upload path (uploadFolderEntries) used a flat 10s fetch
timeout for all files regardless of size. Large files like .CR2 RAW
images (~25MB) on slower networks (e.g. Raspberry Pi) exceeded this
timeout, causing the AbortController to kill the request before the
server received the full body — hence no server logs and 'unknown
error' on the frontend.
Changed to size-scaled timeout: 30s base + 2s per MB (min 10s).
A 25MB CR2 now gets ~80s instead of 10s.
2026-04-12 00:29:34 +02:00
Diocrafts
f08cffc0e8
feat: add VitePress docs site, music file picker modal, Dockerfile optimization, i18n keys for 14 locales
...
- Add docs/ with VitePress site (19 pages): guide, config, architecture, FAQ
- Add GitHub Actions workflow for auto-deploy to GitHub Pages
- Replace music 'Add Tracks' upload picker with in-app audio file browser modal
- Add music picker CSS styles with dark theme support
- Add missing i18n keys (search_audio, no_audio_files, etc.) to all 14 locales
- Optimize Dockerfile: shared base stage, COPY --chmod, consolidated RUN, HEALTHCHECK
- Improve README: docs links, updated stats (222+ tests, 14 languages), feature status
2026-04-11 20:58:34 +02:00
Edouard Vanbelle
13aa90cf3c
style(js): correct linter main warnings
2026-04-11 18:27:54 +02:00
Edouard Vanbelle
c7eeb734d7
style(css+js): apply biome formatter
2026-04-11 18:20:43 +02:00
Diocrafts
3ce8ec25d6
feat(music): complete music UI overhaul - bugs, UX, missing features & styling
...
- Fix dead buttons (fa-edit/fa-share → fa-pen/fa-share-alt matching icon registry)
- Fix volume icon, shuffle bias, queue removal, repeat-one CSS
- Replace native prompt/confirm/alert with Modal system
- Add click-to-select, dblclick-to-play, playback error notifications
- Add loading indicators, success toasts, close player button
- Implement remove track from playlist (DELETE endpoint)
- Implement drag & drop track reorder (PUT reorder endpoint)
- Implement manage shares dialog (GET/DELETE shares endpoints)
- Implement cover art upload & display (cover_file_id in UpdatePlaylistDto)
- Implement public/private toggle (is_public in UpdatePlaylistDto)
- Mount get_audio_metadata route in backend routes.rs
- Redesign empty state: full-width centered onboarding when 0 playlists
- Move create button into sidebar header as compact + button
- Add music.css to build.rs production CSS bundle
- Add 16+ i18n keys in en.json and es.json
- Add CSS for drag handles, track remove, cover overlay, shares dialog, public badge
2026-04-11 10:59:01 +02:00
Dionisio Pozo
d4da43ebe0
Merge pull request #273 from EdouardVanbelle/fix/photo-section
2026-04-08 14:29:01 +02:00
Andrey Tkachenko
da066f47fa
Music Player & Playlist Manager
2026-04-08 15:14:03 +03:00
Edouard Vanbelle
2c33eeb74c
fix(section): hide list view header in photos' section
2026-04-08 13:51:25 +02:00