Commit Graph
128 Commits
Author SHA1 Message Date
Leo Vasanko dff95c414b frontend: trim document formats, simplify type getters, use FILE_TYPES consistently
- Trim document extension list to common office formats only
  (doc/docx/xls/xlsx/ppt/pptx/odt/ods/odp/rtf), removing txt/md/csv/html/xml/etc.
- Simplify Doc getters: merge guard clauses into single returns
  (img, previewable, previewurl, ext).
- Simplify MediaPreview.preview() into single boolean expression.
- Use global FILE_TYPES instead of inline extension lists.
2026-05-01 23:17:40 +00:00
Leo Vasanko 49cb4a8255 Separate OnlyOffice async handling, add office_previews WS flag, framed worker protocol
- Move OnlyOffice conversion out of worker subprocesses into async event loop
  using httpx.AsyncClient with shared client and clean shutdown hook
- Add OOConversionManager with in-flight deduplication (asyncio.Future) and
  configurable concurrency limit (OO_MAX_CONCURRENT=2)
- Add 10s total timeout for office previews via asyncio.wait_for
- Return 503 when OnlyOffice is unavailable, 504 on timeout
- Remove office handling from worker dispatch(); workers now only do
  images, video, and PDFs
- Replace PNG tempfile bridge with framed binary input protocol on worker
  stdin: (json_size)(data_size)(json)(raw_data)
- Add process_image_buffer() for in-memory AVIF conversion via pyvips
- Add office_previews to WS server message, cached every 30s from OO
  availability check
- Frontend gates only office document previews on office_previews flag;
  images, video, PDFs remain unconditional
- Change default OnlyOffice port from 8080 to 8988
2026-05-01 03:42:03 +00:00
Leo Vasanko 4a66d2749c Add sort-order keycap hints next to search bar
Show 'Order [1] [2] [3]' keycaps to the right of the search bar
when the viewport is at least 800px wide. These visual hints
match the existing '/' search keycap style and correspond to
the existing keyboard shortcuts for sorting:
  1 = name (alphabetical)
  2 = modified (newest first)
  3 = size (largest first)

Hints are hidden on narrow viewports and when text input fields are focused.
2026-04-27 04:10:13 +00:00
Leo Vasanko 1e75763f77 Add share token support with virtual filesystem and selection toolbar button 2026-04-26 07:46:14 +00:00
Leo Vasanko fb0ddd20e0 Add OnlyOffice-based preview for office documents
Replace Aspose.Words with OnlyOffice Document Server for generating
bitmap previews of office documents (Word, Excel, PowerPoint, etc.).

Backend:
- Add cista/onlyoffice.py conversion client
- Convert office docs directly to PNG via OnlyOffice, then AVIF via pyvips
- Make office previews optional based on OnlyOffice availability
- Remove Aspose.Words dependency and all related code
- Add spreadsheet and presentation format support

Frontend:
- Mark office files as previewable in Document.ts
- Add office extensions to MediaPreview.vue preview list
- Fix pre-existing @ts-ignore in HeaderMain.vue

Tests:
- Fix test_lrucache.py parameter name (open -> opener)

Also run ruff format across the codebase to satisfy linter checks.
2026-04-26 06:59:01 +00:00
Leo Vasanko c49e66323f frontend: add biome checks and pre-commit integration (excluding preview files) 2026-04-26 06:43:06 +00:00
LeoVasanko 123cb45daa WebDAV sync support, access tokens, REST control endpoints (#10)
Implement complete WebDAV file serving compatible with various clients from Windows File Explorer to more specialized sync tools. The old control WebSocket has been updated to part-DAV, part REST API instead. Implemented user:pass BASIC auth. Added UI and backend for creating tokens that avoid the need to use actual username and password for requests from CLI or DAV.

Reviewed-on: #10
2026-04-26 06:22:52 +01:00
LeoVasanko 91e07d61b6 Uploads by PUT range requests rather than WS, remove dead code WS handlers (#9)
Increases block size to 16 MiB and adjusts progress display to work smoothly with that. Also removes download WS that was already unused. Provides faster upload speed than over WS.

Reviewed-on: #9
2026-04-25 03:55:52 +01:00
Leo Vasanko 48112dec26 Frontend: don't show img preview for video/audio/doc files
- MediaPreview.vue: only render <img> for non-video, non-audio items
  (video/audio already have their own player containers)
- Document.ts: limit previewurl to previewable files (was checking only .complete)
2026-04-24 23:54:02 +00:00
Leo Vasanko 53b3835ba2 Upload end of file first for large files (for preview to function). 2026-04-24 00:02:17 +00:00
Leo Vasanko bb25d8db74 Avoid showing previews while file upload is in progress or the file is incomplete. This avoids 500 errors on server trying to generate the preview. 2026-04-23 19:34:16 +00:00
Leo Vasanko a2e2cccebe Don't show broken media previews during uploads, instead show a spinner indicating completion. 2026-04-23 17:40:03 +00:00
Leo Vasanko 314422c96c Allow duplicate selected entries of the same name from different paths. 2026-04-23 17:01:03 +00:00
Leo Vasanko 0b08acdcc3 Intl support for search hotkey (where US keyboard has it). 2026-02-05 00:57:42 +00:00
Leo Vasanko 298f389dad Keyboard navigation fixes (still not perfect but better). 2026-02-05 00:54:15 +00:00
Leo Vasanko a163798178 Fix search bar losing focus under specific conditions, mainly that when the search takes more than 50ms, causing results to be emptied, with a file priorly focused, was causing breadcrumbs to get focused. (reactivity is hard) 2026-02-05 00:07:45 +00:00
Leo Vasanko 204a308396 Pass the new allocated field through search filtering. Fixes issue where 0 allocated was reported in search results. 2026-02-04 23:55:05 +00:00
Leo Vasanko ad37a48df9 Brighter low free space colors. 2026-02-04 20:40:59 +00:00
Leo Vasanko 84d80518a6 Auth restricted endpoint is picky about the trailing slash, use it consistently. 2026-02-04 20:35:29 +00:00
Leo Vasanko 5b4be95ace Correctly handle customized server name in admin settings dialog. 2026-02-04 20:15:56 +00:00
Leo Vasanko 69c26ff85b Space usage widget show full name if possible, allow longer names. 2026-02-04 20:12:49 +00:00
Leo Vasanko 84fcf25cc5 Rename HeaderSelected to SelectionToolbar. 2026-02-04 20:01:05 +00:00
Leo Vasanko 09ef869d7e Improved selection toolbar UX. 2026-02-04 19:57:31 +00:00
Leo Vasanko 1f757ef335 Consistent header and footer sizing. 2026-02-04 19:19:41 +00:00
Leo Vasanko b3df715e25 Fix free/used disk space handling. Implement file disk usage tracking. Display indicators on FileExplorer for incomplete files (sparse allocation, upload in progress). 2026-02-04 19:15:09 +00:00
Leo Vasanko 0656a027f4 Implement server name config to override the default of using share folder name. 2026-02-04 18:00:21 +00:00
Leo Vasanko aab1c59022 Punch a hole in the pie to make a donut. 2026-02-04 17:27:56 +00:00
Leo Vasanko 395d6c3cce Unused imports 2026-02-04 17:09:14 +00:00
Leo Vasanko c698f74319 Don't allow header scale larger with the window above 1000px, while the rest of the app keeps scaling by root font size. 2026-02-04 17:08:32 +00:00
Leo Vasanko 56aacb8f87 Revisited diskspace widget animations and styling. 2026-02-04 17:01:22 +00:00
Leo Vasanko 78890347cc More consistent and properly scaling header layout and positioning. Search keyboard tooltip hidden for mobile users. 2026-02-04 16:13:03 +00:00
Leo Vasanko 598c63278a New much prettier disk space widget. 2026-02-04 15:14:06 +00:00
Leo Vasanko 0b8462d0dc Refactor to make full file list completely non-reactive because pinia persistence was causing long delays especially while searching when there were a lot of files. Implement better ghosts that do not alter the file list. 2026-02-04 02:03:41 +00:00
Leo Vasanko d7aae07af0 Prebuild lookup structures to reduce UI lag on very large file lists. 2026-02-04 00:18:28 +00:00
Leo Vasanko 510a908841 Disk space pie chart. 2026-02-01 06:59:15 +00:00
Leo Vasanko 15d227fda2 Implement a larger set of file menu options. 2026-02-01 06:34:50 +00:00
Leo Vasanko 5c530652fa Change default port to 8989 like Droppy. Using 8999 for backend in dev mode. 2026-02-01 06:09:56 +00:00
Leo Vasanko e8517c75e2 Better UI feedback on search order changes. 2026-02-01 05:48:15 +00:00
Leo Vasanko b1fae56c86 Fix a search caching issue. 2026-02-01 05:38:48 +00:00
Leo Vasanko 098febec99 New header/footer layout and styles. Use cursorTooltip in more places, make it prettier. Fix tooltip still sometimes activating with touch (now only with mouse). 2026-02-01 05:22:48 +00:00
Leo Vasanko 6264f9624f Remove download to folder, just download zip or single file. The folder download is still accessible by Alt+Click on the download button (in the few browsers that support it). 2026-02-01 03:47:14 +00:00
Leo Vasanko e0937ed233 Automatically navigate into newly uploaded folders. 2026-02-01 03:27:13 +00:00
Leo Vasanko 51bf029d2a Implement ghost items reflecting pending changes from frontend (e.g. files being uploaded) until the server acknowledges them. This gives immediate UI feedback and is clearer in cases. 2026-02-01 03:23:43 +00:00
Leo Vasanko abe967de1b Remove dead code. 2026-02-01 02:49:50 +00:00
Leo Vasanko 5ead0f4deb Debouncing to avoid UI flicker while typing in search. 2026-01-31 22:45:27 +00:00
Leo Vasanko 9828597e6b Search optimizations and fixes. Prevent re-renders on hash change (redux). Clear previous search results at the start of a new search. 2026-01-31 22:37:47 +00:00
Leo Vasanko d1440f539b Optimizing the search faster; don't trigger full re render by URL changes. 2026-01-31 22:17:05 +00:00
Leo Vasanko 40fb7bf398 Implement background worker to make search response faster and avoid hanging the UI when there are a lot of files. Implement better toast messages for transitional events that automatically disappear. 2026-01-31 21:02:16 +00:00
Leo Vasanko 1e74245721 Smarter ZIP download naming. 2026-01-31 20:59:43 +00:00
Leo Vasanko 61e59c9b45 Fixes for public mode authentication flows. 2026-01-31 04:48:44 +00:00