0.4.0
· 4838 words
Excalibur 0.4 mainly brings performance improvements and bugfixes. Minor quality-of-life improvements to the application, such as the count of items uploaded en masse, have also been added.
There are no breaking changes made in Excalibur 0.4, but please still follow the 0.4 upgrade guide to upgrade your Excalibur instance to version 0.4.
Read all about the changes to Excalibur below. Enjoy!
App
✨ Additions
- Show skeleton items to directory list when waiting for directory to load
- Added check for update button to settings page
- Added a file count to the snackbar when uploading multiple files
✏️ Changes
- Adjusted directory list height to accommodate floating action button
- Made
refreshContents()calllistdir()three times before giving up - Changed sorting algorithm for names from lexicographical sorting to "natural" sorting (using
natural-compare-lite) - Slightly modified look of the sidebar menu
- Modified folder navigation to add a small delay before navigating to allow UI updates and show tap animations
- Modified check for update dialog slightly:
- Title of dialog changed
- Link to changelog page changed to Excalibur documentation website
🚄 Performance Improvements
- Use new server info endpoint to reduce requests made to the server during server selection
- Use maximum upload size returned in server info query to check file sizes before upload (instead of querying server for each file)
🔧 Fixes
- Fixed issue where the file list does not update when the current directory changes
- This occurred especially when the server connection was unstable
- Fixed an issue where, when clicking into a subfolder, the current folder's file list would be requested in addition to the subfolder's file list
- Fixed
listdir()failing badly when timeout occurs - Fixed ugliness involved with Android edge-to-edge rendering
- Fixed inconsistency of URL path encoding, especially with
(and), by following Python'surllib.quote()andurllib.quotePlus()implementations - Fixed incorrect parent directory button row highlighting
📦 Dependencies
- Updated ESLint dependencies:
eslint-plugin-cypressfrom5.2.0to5.2.1typescript-eslintfrom8.51.0to8.52.0
- Updated Electron dependencies:
electron-builderfrom26.3.1to26.4.0electron-builder-squirrel-windowsfrom26.3.1to26.4.0dmg-builderfrom26.3.1to26.4.0electron-updaterfrom6.6.2to6.7.3
- Updated
@trivago/prettier-plugin-sort-importsfrom6.0.1to6.0.2 - Updated
cypressfrom15.8.1to15.8.2 - Updated
vitefrom7.3.0to7.3.1 - Updated various type dependencies:
@types/nodefrom25.0.3to25.0.6@types/reactfrom19.2.7to19.2.8
⚙️ Internal
- Added more tests:
- Added
validateURL()tests tourl.test.ts
- Added
- Fixed redundant
console.log()/console.debug()calls - Restructured workspace
- Split tests in
files.cy.tsinto multiple files for better organization and maintainability
Server
✨ Additions
- Added a new server info endpoint at
/api/well-known/infowhich returns the following information:version: SemVer of the servermax_upload_size: Maximum allowed file size in bytestime: ISO 8601 string of the server's current time
- Added persistence to communications via a file-based communications cache, so that when the server restarts they will not be disconnected
- This unfortunately does not apply to WebSocket sessions
🔧 Fixes
- Fixed issue with file listener communications failing to be encrypted/decrypted correctly, causing issues with folder updates
- Fixed incorrect check for configuration values that needed to be positive
- The check used to check if they were negative only. Now it checks if they are less than or equal to 0
🗑️ Removals
- Removed
/api/files/check/sizeendpoint in favour of the new server info endpoint - Removed
/api/well-known/clockendpoint in favour of the new server info endpoint - Removed debug endpoint for listening to file updates (i.e.,
/api/files/listen/debugwas removed)
📦 Dependencies
- Removed
cachetoolsdependency - Updated
alembicfrom1.17.2to1.18.0 - Updated
typerfrom0.21.0to0.21.1 - Updated
websocketsfrom15.0.1to16.0 - Updated
ruffdevelopment dependency from0.14.10to0.14.11 - Added
pytest-timeoutdevelopment dependency as a last-resort method to catch any tests that are hanging
⚙️ Internal
- Created own implementation of
TTLCacheto replacecachetoolsdependency - Added new internal
_add_new_field()to config updater CLI to promote code reuse - Removed old
staticfolder