Edouard Vanbelle
30fffbdd33
refactor(music): use music icon rather svg
2026-04-15 08:49:17 +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
Edouard Vanbelle
2061f8808b
style(front): apply biome recos
2026-04-14 13:33:55 +02:00
Edouard Vanbelle
d01b2c6ec4
refactor(css): use variable rather direct color
2026-04-14 13:33:51 +02:00
Dionisio Pozo
65c8fc7f5e
Merge pull request #288 from EdouardVanbelle/fix/frontend-search-view
2026-04-13 14:42:24 +02:00
Dionisio Pozo
f74cf4d9b5
Merge pull request #287 from EdouardVanbelle/fix/frontend-shared-view
2026-04-13 14:41:48 +02:00
Edouard Vanbelle
2733542bce
refactor(css): dark theme: remove and merge specific cases
2026-04-13 13:26:38 +02:00
Edouard Vanbelle
e6a815a03c
refactor(css): dark theme: merge photos
2026-04-13 13:26:38 +02:00
Edouard Vanbelle
f7c7136149
refactor(css): dark theme: merge notfication + dropzone
2026-04-13 13:26:38 +02:00
Edouard Vanbelle
260eb4d4c8
refactor(css): merge context menu for dark theme
2026-04-13 13:26:38 +02:00
Edouard Vanbelle
4dff552299
refactor(css): use 1 global declaration for scrollbar
2026-04-13 13:26:38 +02:00
Edouard Vanbelle
ce207ebad1
refactor(css): merge profile + admin dark style
2026-04-13 13:26:38 +02:00
Edouard Vanbelle
413832d1a2
refactor(css): remove use generic colors for language-selector + correct item selection color
2026-04-13 13:26:38 +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
Edouard Vanbelle
54c736a8b1
refactor(css): removed unnecessary dark theme override
2026-04-12 02:58:24 +02:00
Edouard Vanbelle
4862c17e11
refactor(css): change css grouping fileType & filesView
...
- fileType.css for filetype to icons representation
- filesViews.css for grid and list view (merge of previous cards.css & fileList.css)
2026-04-12 02:53:35 +02:00
Edouard Vanbelle
b95cf8dee9
refactor(css/icons): centralize icon folder to card.css
2026-04-12 02:22:57 +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
37975afb39
fix(i18n): sync all 14 locale files to 575 keys each
...
- Move 38 misplaced root-level shared_* keys into shared.shared_* in
de, es, fr, pt (values preserved, just re-nested correctly)
- Add 17 missing music.* keys to all non-en languages (en fallback)
- Add missing dialogs.*, actions.*, shared.*, notifications.* keys to
fa (33), zh (71), de (20), fr (22), it (22), nl (20), pt (22)
- Sync language_selector.languages across all 14 locales (was missing
ar, hi, it, ja, ko, nl, ru in most files)
All 14 languages now have exactly 575 keys matching en.json.
2026-04-12 02:02:21 +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
Dionisio Pozo
1bb65e6448
Merge pull request #275 from EdouardVanbelle/refactor/css-variables
...
refactor(css): maximize usage of variables (1st part)
2026-04-11 20:49:52 +02:00
Edouard Vanbelle
8d6964a0ff
POC: use FontAwesome / svg on card view to simplify code
2026-04-11 20:24:43 +02:00
Dionisio Pozo
3dc4e6a68b
Merge pull request #280 from EdouardVanbelle/style/apply-biome-formatter-linter-recos
...
style(js/css): apply biome formatter & linter recos
2026-04-11 19:06:43 +02:00
Edouard Vanbelle
5f87dbf612
fix(device-verify): includes main.css + rename class to avoid collision
2026-04-11 18:58:38 +02:00
Edouard Vanbelle
3ab219f77d
refactor(css): reduce css icons
2026-04-11 18:39:03 +02:00
Edouard Vanbelle
49c3406e4b
refacor(css): reduce dependency of theme=dark
2026-04-11 18:39:03 +02:00
Edouard Vanbelle
56a067ee96
refactor(css): apply biome format on css
2026-04-11 18:39:03 +02:00
Edouard Vanbelle
94b36e41e0
refactor(css): maximize usage of variables (1st part, to simplify CSS & style)
...
note: there is still work to do, but has there are risks to conflict I prefer to commit this first part now
2026-04-11 18:39:03 +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
Edouard Vanbelle
21a551b836
fix(style): correct file list display (was overlapped by header)
2026-04-11 18:10:50 +02:00
Diocrafts
57b99f962e
fix(reset.css): use important on .hidden to override display styles
2026-04-11 11:18:05 +02:00
Dionisio Pozo
06cb9b7ba5
Merge pull request #278 from kabakaev/fix-blank-login-page
...
fix blank login page regression
2026-04-11 11:00:03 +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
Alexander Kabakaev
cb8e74375f
fix(reset.css): blank login page regression
2026-04-11 10:11:47 +02:00
Dionisio Pozo
d4da43ebe0
Merge pull request #273 from EdouardVanbelle/fix/photo-section
2026-04-08 14:29:01 +02:00
Dionisio Pozo
46fbcc6f0f
Merge pull request #272 from EdouardVanbelle/feat/sticky-action-bar
2026-04-08 14:28:32 +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
Edouard Vanbelle
669623adbe
feat(layout): add a sticky page header
...
- keep action bar, breadcrumb, dropzone visible even during scroll down
2026-04-08 10:41:42 +02:00
Edouard Vanbelle
a4266a6e93
style: apply linter suggestions
2026-04-08 00:09:27 +02:00