Dionisio Pozo
412e31388d
Merge pull request #347 from abnvle/feat/share-folder-browsing
2026-05-14 00:07:45 +02:00
Edouard Vanbelle
2f49daa4ee
feat(folders): implement copy_folders taking care of ownership
2026-05-12 00:22:51 +02:00
Edouard Vanbelle
85c8c086ac
fix(ui): fix go to parent + refactor types
2026-05-12 00:22:51 +02:00
abnvle
e8399443e9
Merge remote-tracking branch 'origin/main' into feat/share-folder-browsing
...
# Conflicts:
# static/js/views/public/publicShare.js
2026-05-10 20:46:29 +02:00
abnvle
ec55e7ec55
fix(share): tighten public browsing (UUID guard, cache headers, abort race)
2026-05-10 20:43:59 +02:00
Edouard Vanbelle
6e4699ff9c
feat(ui): drop from system available only on files section
...
* prevent dropzone if not on files section
* show a notification to user to use files section
* solve #357
2026-05-09 19:22:15 +02:00
Edouard Vanbelle
7697f3d35b
feat(ui): handle errors on folder creation or folder/file renaming
...
- protect file_management_service::rename_file with validate_storage_name
- remove specific rename modal and use the generic modal class (less duplicate)
- handle errors on modal action: do not close the modal on error and display this error
- hide "Go to parent folder" contextMenu if section is files and folder is the same as current one
2026-05-09 00:06:36 +02:00
Dionisio Pozo
52f4a865a9
Merge pull request #349 from EdouardVanbelle/feat/item-path-tool-tip+go-to-parent
...
show item path on Recent + Favorite, add go to parent folder, fix Folder browsing in Favorites
2026-05-08 01:22:08 +02:00
Dionisio Pozo
71fd84dd9d
Merge pull request #350 from EdouardVanbelle/fix/blank-section-on-token-expired
...
fix(ui): handle any session expired and trigger transparently a refresh token
2026-05-08 01:21:42 +02:00
Edouard Vanbelle
93d9a21013
fix(ui): admin panel, profile: restore missing icons library
2026-05-07 22:43:02 +02:00
Edouard Vanbelle
a69dde35ce
fix(ui): handle any session expired and trigger transparently a refresh token
...
this change replace original window.fetch by a wrapper that check any 401 response, is so it will request a refresh token
this solve current issue with Favorites & Recent sections that give blank page when token is expired
- exclusion of requests to other domain (401 will not be handled here)
- security with shares /api/s is not handled
- check with CSRF, no risk
2026-05-07 00:55:21 +02:00
Edouard Vanbelle
8e1e9fe201
show item path on Recent + Favorites, add go to parent folder, fix Folder browsing in Favorites
2026-05-06 23:36:05 +02:00
abnvle
cb454d8aa2
feat(share-public): folder gallery UI in share.html
...
Replaces the placeholder with a gallery rendered by publicShare.js
against the new public endpoints.
- Grid / list view toggle (localStorage)
- Image thumbs and lazy-loaded video posters
- Click-to-open lightbox with Esc / arrow nav
- ZIP download for the current folder
- Subfolder navigation via URL hash, History API for back
Adds five overlay-related tokens to base/variables.css for the
lightbox surface (on-overlay text, translucent button, drop shadow).
share.html itself only adds an icons.js module import and empties
#share-folder for JS to populate.
2026-05-06 00:01:08 +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