Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 70 additions & 74 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 ⚠️
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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

Expand All @@ -176,106 +173,105 @@ 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

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
Expand Down
6 changes: 4 additions & 2 deletions backend/beets_flask/server/websocket/terminal.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down