diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d417d9b..a9a28ccd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,15 +20,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - You can now alternatively use `PUID` and `PGID` instead of `GROUP_ID` and `USER_ID` environment variables. Good for [yaml anchors](https://docs.docker.com/reference/compose-file/fragments/). [#260](https://github.com/pSpitzner/beets-flask/issues/260) ### Fixed + - Missing library stats dont cause a crash on first launch anymore [#264](https://github.com/pSpitzner/beets-flask/issues/264) - Fixed a potential memory leak when checking if files are archives. We now only check the file extension instead of trying to open the file, which should avoid the issue with `tarfile.is_tarfile` [#258](https://github.com/pSpitzner/beets-flask/issues/258) +- Fixed tmux terminal could not start in some environments if `SHELL` was not set currently. We now always start a bash shell [#282](https://github.com/pSpitzner/beets-flask/issues/282) ### Other (dev) - We now use `uv` (Universal Virtualenv) to manage python dependencies and run scripts in CI/CD. This should improve dependency resolution and installation times. - We now ship a static ffmpeg binary instead of installing ffmpeg via apt. This should reduce image size and improve compatibility across different host systems. - ## [1.2.0] - 25-12-17 ### ⚠️ Important ⚠️ @@ -70,8 +71,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Dependencies -- Updated `uvicorn` to `0.36.0`. -- Updated `beets` from `2.3.1` over [`2.4.0`](https://github.com/beetbox/beets/releases/tag/v2.4.0) to [`2.5.0`](https://github.com/beetbox/beets/releases/tag/v2.5.0). See the two changelogs! +- Updated `uvicorn` to `0.36.0`. +- Updated `beets` from `2.3.1` over [`2.4.0`](https://github.com/beetbox/beets/releases/tag/v2.4.0) to [`2.5.0`](https://github.com/beetbox/beets/releases/tag/v2.5.0). See the two changelogs! - Updated a number of frontend dependencies, including `react-query`, `react-router`, `vite`, `typescript`, `eslint`, `prettier` and others. This partially required code changes due to breaking changes in these libraries. Should not affect normal usage tho. ## [1.1.3] - 25-09-18 @@ -88,20 +89,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Trailing slashes in configured inbox paths no longer cause crashes. [#182](https://github.com/pSpitzner/beets-flask/issues/182) - The container now sets the `EDITOR` environment variable to `vi` so that `beet edit` and `beet config -e` work out of the box. - ### Dependencies - Updated `beets` to version `2.3.1` - Updated `py2ts` to version `0.6.1`, now uses pypi distribution instead of github repo. - ## [1.1.2] - 25-08-29 ### Fixed - Updated refresh_config to scan all modules for config references and overwrite them as needed to ensure consistency [#188](https://github.com/pSpitzner/beets-flask/issues/188) - ## [1.1.1] - 25-08-15 ### Fixed @@ -122,49 +120,48 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Support for importing archives `zip` and `tar` files. Support for `rar` and `7z` files can be added via custom startup and requirements files. See the [FAQ](https://beets-flask.readthedocs.io/latest/faq.html) for more information. +- Support for importing archives `zip` and `tar` files. Support for `rar` and `7z` files can be added via custom startup and requirements files. See the [FAQ](https://beets-flask.readthedocs.io/latest/faq.html) for more information. ### Dependencies -- Updated `py2ts` to version `0.4.1` +- Updated `py2ts` to version `0.4.1` ## [1.0.3] - 25-07-29 ### Fixed -- Fixed search results not showing [#161](https://github.com/pSpitzner/beets-flask/issues/161)) -- Fixed search box not clickable on small screens [#162](https://github.com/pSpitzner/beets-flask/issues/162) +- Fixed search results not showing [#161](https://github.com/pSpitzner/beets-flask/issues/161)) +- Fixed search box not clickable on small screens [#162](https://github.com/pSpitzner/beets-flask/issues/162) ## [1.0.2] - 25-07-21 ### Fixed -- Artists separators were not regex escaped correctly, leading to issues with artists containing special characters. Additionally an empty list of separators was not handled correctly. [#159](https://github.com/pSpitzner/beets-flask/issues/159) - +- Artists separators were not regex escaped correctly, leading to issues with artists containing special characters. Additionally an empty list of separators was not handled correctly. [#159](https://github.com/pSpitzner/beets-flask/issues/159) ## [1.0.1] - 25-07-17 ### Added -- Configuration option for artist separator characters `gui.library.artist_separator` -- Docs subpage for configuration (including content) -- `typing_extensions` is now a dependency, to allow for more typing features -- The model api routes now allows for `DELETE` requests to delete resources by id. Not used yet but will be helpful for future features. +- Configuration option for artist separator characters `gui.library.artist_separator` +- Docs subpage for configuration (including content) +- `typing_extensions` is now a dependency, to allow for more typing features +- The model api routes now allows for `DELETE` requests to delete resources by id. Not used yet but will be helpful for future features. ### Fixed -- Styling of candidate overview (major changes were not colored) -- For bootlegs, display of track changes after import no longer broken -- Navigating from inbox into folder details no longer toggles selection. -- Padding issue where navbar could block content on mobile. -- Cache invalidation now triggers on delete folder in frontend [#138](https://github.com/pSpitzner/beets-flask/issues/138) -- In albums and items view the clicking on artists does not return any results if the contained a separator character (e.g. `&`) [#132](https://github.com/pSpitzner/beets-flask/issues/138) -- Cleanup old actions.tsx file, which included old unused code [#134](https://github.com/pSpitzner/beets-flask/issues/134) -- The `cli_exit` event is now triggered after the import task is finished. This adds compatibility with some plugins which expected this event to be triggered after the import task is done. [#154](https://github.com/pSpitzner/beets-flask/issues/154). +- Styling of candidate overview (major changes were not colored) +- For bootlegs, display of track changes after import no longer broken +- Navigating from inbox into folder details no longer toggles selection. +- Padding issue where navbar could block content on mobile. +- Cache invalidation now triggers on delete folder in frontend [#138](https://github.com/pSpitzner/beets-flask/issues/138) +- In albums and items view the clicking on artists does not return any results if the contained a separator character (e.g. `&`) [#132](https://github.com/pSpitzner/beets-flask/issues/138) +- Cleanup old actions.tsx file, which included old unused code [#134](https://github.com/pSpitzner/beets-flask/issues/134) +- The `cli_exit` event is now triggered after the import task is finished. This adds compatibility with some plugins which expected this event to be triggered after the import task is done. [#154](https://github.com/pSpitzner/beets-flask/issues/154). ### Changed -- Created `types.py` file to hold custom sqlalchemy types, and moved `IntDictType` there. +- Created `types.py` file to hold custom sqlalchemy types, and moved `IntDictType` there. ## [1.0.0] - 25-07-06 @@ -176,18 +173,18 @@ and the overall architecture. ### Changed -- Migrated backend to quart (the async version of flask) -- Reworked most of the frontend -- Removed interactive imports. We now store states for _any_ preview and import that is generated. Thus, sessions are resumable, and we can go back and forth seemlessly, to e.g. undo an import and pick a better candidate. -- Inbox types have changed. For now we only have `preview`, `auto` and `bootleg`. -- beets updated to version 2.2.0 -- Implemented our own async pipeline for beets, that is typed and handles our custom sessions (should become obsolete once upstream PRs are merged). -- Improved library view, and track preview / streaming. -- Improved candidate preview, including cover art and asis details (current metadata). -- Terminal now has a bit of scroll-back and history. -- Much better test coverage. -- Now using [py2ts](https://github.com/semohr/py2ts) to automatically generate frontend (typescript) types from their backend (python) equivalents. -- New and improved logo. +- Migrated backend to quart (the async version of flask) +- Reworked most of the frontend +- Removed interactive imports. We now store states for _any_ preview and import that is generated. Thus, sessions are resumable, and we can go back and forth seemlessly, to e.g. undo an import and pick a better candidate. +- Inbox types have changed. For now we only have `preview`, `auto` and `bootleg`. +- beets updated to version 2.2.0 +- Implemented our own async pipeline for beets, that is typed and handles our custom sessions (should become obsolete once upstream PRs are merged). +- Improved library view, and track preview / streaming. +- Improved candidate preview, including cover art and asis details (current metadata). +- Terminal now has a bit of scroll-back and history. +- Much better test coverage. +- Now using [py2ts](https://github.com/semohr/py2ts) to automatically generate frontend (typescript) types from their backend (python) equivalents. +- New and improved logo. ## [0.1.1] - 25-06-08 @@ -195,87 +192,86 @@ Small version bump with fixes before jumping to 1.0.0. ### Added -- Option to install beets plugins by placing either `requirements.txt` or `startup.sh` in /`config`. cf. [Readthedocs](https://beets-flask.readthedocs.io/en/latest/plugins.html) -- [Documentation](https://beets-flask.readthedocs.io/en/latest/?badge=latest) on readthedocs. -- Option to import Asis via right-click, or as inbox type. Good for Bootlegs that do not - have online meta data and you curate manually. Currently also applies `--group-albums`. +- Option to install beets plugins by placing either `requirements.txt` or `startup.sh` in /`config`. cf. [Readthedocs](https://beets-flask.readthedocs.io/en/latest/plugins.html) +- [Documentation](https://beets-flask.readthedocs.io/en/latest/?badge=latest) on readthedocs. +- Option to import Asis via right-click, or as inbox type. Good for Bootlegs that do not + have online meta data and you curate manually. Currently also applies `--group-albums`. ### Fixed -- Path escaping for right-click import via cli (#51) +- Path escaping for right-click import via cli (#51) ## [0.1.0] - 24-11-13 ### Fixed -- Renamed `kind` to `type` in search frontend code to be consistent with backend. - Using kind for tags (preview, import, auto), and types for search (album, track). +- Renamed `kind` to `type` in search frontend code to be consistent with backend. + Using kind for tags (preview, import, auto), and types for search (album, track). ### Changed -- Improved readme and onboarding experience -- Mountpoint to persist config files and databases changed to `/config` (was `/home/beetle/.config/beets/`) - We create the `/config/beets` and `/config/beets-flask` folders on startup if they do not exist. - Library files are placed there, and you can drop a `config.yaml` either or both of these folders. Settings in `/config/beets-flask/config.yaml` take precedence over `/config/beets/config.yaml`. - **You will need to update your docker-compose!** +- Improved readme and onboarding experience +- Mountpoint to persist config files and databases changed to `/config` (was `/home/beetle/.config/beets/`) + We create the `/config/beets` and `/config/beets-flask` folders on startup if they do not exist. + Library files are placed there, and you can drop a `config.yaml` either or both of these folders. Settings in `/config/beets-flask/config.yaml` take precedence over `/config/beets/config.yaml`. + **You will need to update your docker-compose!** ### Added -- Logo and favicon -- Image now on docker hub: `pspitzner/beets-flask:stable` -- Auto-import: automatically import folders that are added to the inbox if the match is good enough. - After a preview, import will start if the match quality is above the configured. - Enable via the config.yaml, set the `autotag` field of a configred inbox folders to `"auto"`. +- Logo and favicon +- Image now on docker hub: `pspitzner/beets-flask:stable` +- Auto-import: automatically import folders that are added to the inbox if the match is good enough. + After a preview, import will start if the match quality is above the configured. + Enable via the config.yaml, set the `autotag` field of a configred inbox folders to `"auto"`. ## [0.0.4] - 24-10-04 ### Fixed -- Config parsing should now work +- Config parsing should now work ### Added -- multi-disc albums are now supported -- Interactive import using a custom beets pipeline +- multi-disc albums are now supported +- Interactive import using a custom beets pipeline ### Changed -- Moved terminal to its own page, had to temporarily remove keyboard trigger -- Reworked the album folder detection algorithm, now uses more native beets code and is a bit faster -- Navbar styling and items overhaul +- Moved terminal to its own page, had to temporarily remove keyboard trigger +- Reworked the album folder detection algorithm, now uses more native beets code and is a bit faster +- Navbar styling and items overhaul ## [0.0.3] - 24-08-01 ### Fixed -- default config: mandatory fields cannot be set in the yaml, or they - might persist although the user sets them. moved to config loading in python. -- tmux session now restarts on page load if it is not alive. -- navbar, tags, inbox are now more friendly for mobile -- folder paths are now better escaped for terminal imports +- default config: mandatory fields cannot be set in the yaml, or they + might persist although the user sets them. moved to config loading in python. +- tmux session now restarts on page load if it is not alive. +- navbar, tags, inbox are now more friendly for mobile +- folder paths are now better escaped for terminal imports ### Added -- Backend to get cover art from metadata of music files. -- Impoved library view (mobile friendly, and a browser header component) -- Library search +- Backend to get cover art from metadata of music files. +- Impoved library view (mobile friendly, and a browser header component) +- Library search ### Changed -- Simplified folder structure of frontend -- Removed `include_paths` option from config and library backend (most of the frontend needs some form of file paths. thus, the option was not / could not be respected consistently) +- Simplified folder structure of frontend +- Removed `include_paths` option from config and library backend (most of the frontend needs some form of file paths. thus, the option was not / could not be respected consistently) ## [0.0.2] - 24-07-16 ### Fixed -- ESLint errors and Github action -- Now loading the default config +- ESLint errors and Github action +- Now loading the default config ## 0.0.1 - 24-05-22 -- initial commit - +- initial commit [Unreleased]: https://github.com/pSpitzner/beets-flask/compare/v1.2.0...HEAD [1.2.0]: https://github.com/pSpitzner/beets-flask/compare/v1.1.3...v1.2.0 diff --git a/backend/beets_flask/server/websocket/terminal.py b/backend/beets_flask/server/websocket/terminal.py index 80186d09..b7b62165 100644 --- a/backend/beets_flask/server/websocket/terminal.py +++ b/backend/beets_flask/server/websocket/terminal.py @@ -42,7 +42,7 @@ def register_tmux(): global session, window, pane, server if server is None: - server = libtmux.Server() + server = libtmux.Server(socket_name="beets-flask") try: abs_path_lib = get_config().data.gui.terminal.start_path @@ -51,7 +51,9 @@ def register_tmux(): try: session = server.new_session( - session_name="beets-socket-term", start_directory=abs_path_lib + session_name="beets-socket-term", + start_directory=abs_path_lib, + window_command="/usr/bin/bash", ) except LibTmuxException: # DuplicateSessionName session = server.sessions.get(session_name="beets-socket-term") # type: ignore