Commit Graph

218 Commits

Author SHA1 Message Date
Thomas Göttgens 87cf84b40a
Merge branch 'libretime:main' into master-me-processing 2025-01-19 12:14:43 +01:00
nosbig 203c927554
feat: add flac support to Web player (#3128)
### Description

Added support for previewing FLAC files in the web interface, provided
in #509 by marmotte32 on Github in the comments for this issue.

I have tested this against a script-installed copy of 4.2.0, and FLAC
preview is working, although auto-play isn't. I haven't tested to
confirm if this behavior matches MP3 and OGG uploads.

**This is a new feature**:

_Do the changes in this PR implement a new feature?_

**I have updated the documentation to reflect these changes**:

No changes needed; this bug is a missing file format in preview, and it
requires no updates to the documentation.

### Testing Notes

**What I did:**

I installed a LibreTime 4.2.0 system using the default installation
script against a fully-updated, brand new Debian 11 system. I logged
into the web interface, uploaded some FLAC files, and attempted to
preview them. They failed to preview.

I then replaced the preview_jplayer.js file with the contents in this PR
and then refreshed the page. I was able to preview the FLAC files and
hear the results in my local browser audio output.

**How you can replicate my testing:**

Perform the same steps above, or replace the same file in the
libretime_legacy_1 docker image to see the same results.

### **Links**

Closes: #509

---------

Co-authored-by: Kyle Robbertze <kyle@paddatrapper.com>
2025-01-10 15:46:18 +00:00
Scott McGrath 644d2b9ce5
fix(legacy): additional specifics added to CSVexport.js for RFC 4180 (#3131)
### Description

The existing implementation for exporting playout logs to a CSV file
incorporates a very simplified CSV format. Some aspects of the complete
[RFC](https://www.rfc-editor.org/rfc/rfc4180) are missing, such as
escaping of quotes, and quoting of fields that contain certain
characters. This is problematic for common office spreadsheet tools, and
practically, anything else. Many radio stations rely on this
functionality to work well for exporting playout data, for example, in
order to compile data for reporting requirements.

**This is a new feature**:

The changes in this PR add quoting of fields containing a comma, as well
as those containing a CR/LF. It also escapes quotes by doubling them.
I'm not sure it makes CSVexport.js completely RFC 4180 compliant, but it
is much closer than it was.

**I have updated the documentation to reflect these changes**:

I don't think there are any documentation changes necessary; this is
probably expected behavior for anyone trying to use the CSV exporter.

### Testing Notes

**What I did:**

To validate this, I did a clean install of Debian, cloned from the
official libretime repo, and applied the code as a patch to the
installer. I then proceeded with the install and then loaded a database
from a running system (so that I had some playout data to test with). I
then performed the playout history export and examined the resulting CSV
file and after seeing previously problematic fields properly quoted, was
convinced it looked the way I expected. I loaded the csv file into
Libreoffice Calc and did not see any errors.

**How you can replicate my testing:**

See "What I did" above, basically run the patch after cloning the
installer from the repo. You could also apply the changes to a running
system by applying the patch to the file:
/usr/share/libretime/legacy/public/js/libs/CSVexport.js
Be sure to clear your browser cache and do a hard reload of the web
interface, before re-testing.

### **Links**

Closes: #2477
2025-01-09 08:34:13 +00:00
Thomas Göttgens 1e761d94ca
Merge branch 'libretime:main' into master-me-processing 2024-12-08 11:20:29 +01:00
dakriy 2985d8554a
feat(legacy): trused header sso auth (#3095)
### Description

Allows LibreTime to support Trusted Header SSO Authentication.

**This is a new feature**:

Yes

**I have updated the documentation to reflect these changes**:

Yes

### Testing Notes

**What I did:**

I spun up an Authelia/Traefik pair and configured them to protect
LibreTime according to Authelia's documentation, I then tested that you
could log in via the trusted headers, and tested that old methods of
authentication were not affected.

**How you can replicate my testing:**

Using the following `docker-compose.yml` file

```yml
services:
  postgres:
    image: postgres:15
    networks:
      - internal
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-libretime}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-libretime} # Change me !
    healthcheck:
      test: pg_isready -U libretime

  rabbitmq:
    image: rabbitmq:3.13-alpine
    networks:
      - internal
    environment:
      RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_DEFAULT_VHOST:-/libretime}
      RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:-libretime}
      RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:-libretime} # Change me !
    healthcheck:
      test: nc -z 127.0.0.1 5672

  playout:
    image: ghcr.io/libretime/libretime-playout:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    init: true
    ulimits:
      nofile: 1024
    depends_on:
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
      - libretime_playout:/app
    environment:
      LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080

  liquidsoap:
    image: ghcr.io/libretime/libretime-playout:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    command: /usr/local/bin/libretime-liquidsoap
    init: true
    ulimits:
      nofile: 1024
    ports:
      - 8001:8001
      - 8002:8002
    depends_on:
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
      - libretime_playout:/app
    environment:
      LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080

  analyzer:
    image: ghcr.io/libretime/libretime-analyzer:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    init: true
    ulimits:
      nofile: 1024
    depends_on:
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
      - libretime_storage:/srv/libretime
    environment:
      LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080

  worker:
    image: ghcr.io/libretime/libretime-worker:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    init: true
    ulimits:
      nofile: 1024
    depends_on:
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
    environment:
      LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080

  api:
    image: ghcr.io/libretime/libretime-api:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    init: true
    ulimits:
      nofile: 1024
    depends_on:
      - postgres
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
      - libretime_storage:/srv/libretime

  legacy:
    image: ghcr.io/libretime/libretime-legacy:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    init: true
    ulimits:
      nofile: 1024
    depends_on:
      - postgres
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
      - libretime_assets:/var/www/html
      - libretime_storage:/srv/libretime

  nginx:
    image: nginx
    networks:
      - internal
      - net
    ports:
      - 8080:8080
    depends_on:
      - legacy
    volumes:
      - libretime_assets:/var/www/html:ro
      - libretime_storage:/srv/libretime:ro
      - ${NGINX_CONFIG_FILEPATH:-./nginx.conf}:/etc/nginx/conf.d/default.conf:ro
    labels:
      - 'traefik.enable=true'
      - 'traefik.docker.network=libretime_net'
      - 'traefik.http.routers.libretime.rule=Host(`libretime.example.com`)'
      - 'traefik.http.routers.libretime.entrypoints=https'
      - 'traefik.http.routers.libretime.tls=true'
      - 'traefik.http.routers.libretime.tls.options=default'
      - 'traefik.http.routers.libretime.middlewares=authelia@docker'
      - 'traefik.http.services.libretime.loadbalancer.server.port=8080'

  icecast:
    image: ghcr.io/libretime/icecast:2.4.4
    networks:
      - internal
    ports:
      - 8000:8000
    environment:
      ICECAST_SOURCE_PASSWORD: ${ICECAST_SOURCE_PASSWORD:-hackme} # Change me !
      ICECAST_ADMIN_PASSWORD: ${ICECAST_ADMIN_PASSWORD:-hackme} # Change me !
      ICECAST_RELAY_PASSWORD: ${ICECAST_RELAY_PASSWORD:-hackme} # Change me !

  traefik:
    image: traefik:v2.11.12
    container_name: traefik
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - net
    labels:
      - 'traefik.enable=true'
      - 'traefik.http.routers.api.rule=Host(`traefik.example.com`)'
      - 'traefik.http.routers.api.entrypoints=https'
      - 'traefik.http.routers.api.service=api@internal'
      - 'traefik.http.routers.api.tls=true'
      - 'traefik.http.routers.api.tls.options=default'
      - 'traefik.http.routers.api.middlewares=authelia@docker'
    ports:
      - '80:80'
      - '443:443'
    command:
      - '--api'
      - '--providers.docker=true'
      - '--providers.docker.exposedByDefault=false'
      - '--entrypoints.http=true'
      - '--entrypoints.http.address=:80'
      - '--entrypoints.http.http.redirections.entrypoint.to=https'
      - '--entrypoints.http.http.redirections.entrypoint.scheme=https'
      - '--entrypoints.https=true'
      - '--entrypoints.https.address=:443'
      - '--log=true'
      - '--log.level=DEBUG'

  authelia:
    image: authelia/authelia
    container_name: authelia
    networks:
      - net
    volumes:
      - ./authelia:/config
    labels:
      - 'traefik.enable=true'
      - 'traefik.http.routers.authelia.rule=Host(`auth.example.com`)'
      - 'traefik.http.routers.authelia.entrypoints=https'
      - 'traefik.http.routers.authelia.tls=true'
      - 'traefik.http.routers.authelia.tls.options=default'
      - 'traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/authz/forward-auth'  # yamllint disable-line rule:line-length
      - 'traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true'
      - 'traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email'  # yamllint disable-line rule:line-length
      - 'traefik.http.services.authelia.loadbalancer.server.port=9091'
    restart: unless-stopped
    environment:
      - TZ=America/Los_Angeles

volumes:
  postgres_data: {}
  libretime_storage: {}
  libretime_assets: {}
  libretime_playout: {}

networks:
  internal:
  net:
```

The following libretime dev config modification:
```yml
general:
  public_url: https://libretime.example.com
  auth: LibreTime_Auth_Adaptor_Header

header_auth:
  group_map:
    host: lt-host
    program_manager: lt-pm
    admin: lt-admin
    superadmin: lt-superadmin
```

And the following authelia config file:

```yml
---
###############################################################
#                   Authelia configuration                    #
###############################################################

server:
  address: 'tcp://:9091'
  buffers:
    read: 16384
    write: 16384

log:
  level: 'debug'

totp:
  issuer: 'authelia.com'

identity_validation:
  reset_password:
    jwt_secret: 'a_very_important_secret'

authentication_backend:
  file:
    path: '/config/users_database.yml'

access_control:
  default_policy: 'deny'
  rules:
    - domain: 'traefik.example.com'
      policy: 'one_factor'
    - domain: 'libretime.example.com'
      policy: 'one_factor'

session:
  secret: 'insecure_session_secret'

  cookies:
    - name: 'authelia_session'
      domain: 'example.com'  # Should match whatever your root protected domain is
      authelia_url: 'https://auth.example.com'
      expiration: '1 hour'  # 1 hour
      inactivity: '5 minutes'  # 5 minutes

regulation:
  max_retries: 3
  find_time: '2 minutes'
  ban_time: '5 minutes'

storage:
  encryption_key: 'you_must_generate_a_random_string_of_more_than_twenty_chars_and_configure_this'
  local:
    path: '/config/db.sqlite3'

notifier:
  filesystem:
    filename: '/config/notification.txt'
...
```

And the following authelia users database:

```yml
---
###############################################################
#                         Users Database                      #
###############################################################

# This file can be used if you do not have an LDAP set up.

# List of users
users:
  test:
    disabled: false
    displayname: "First Last"
    password: "$argon2id$v=19$m=16,t=2,p=1$SWVVVzcySlRLUEFkWWh2eA$qPs1ZmzmDXR/9WckDzIN9Q"
    email: test@example.com
    groups:
      - admins
      - dev
      - lt-admin
...
```

add the following entries to your `hosts` file:

```
127.0.0.1 traefik.example.com
127.0.0.1 auth.example.com
127.0.0.1 libretime.example.com
```

Then visit `libretime.example.com` in your browser, and login as the
user `test` with password of `password`. You should then be taken to the
LibreTime homepage, and when you click on login, you should be
automatically logged in.

### **Links**

https://www.authelia.com/integration/trusted-header-sso/introduction/
https://doc.traefik.io/traefik/middlewares/http/forwardauth/

---------

Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-12-07 10:21:57 +00:00
Thomas Göttgens cda8dae48c
Merge branch 'libretime:main' into master-me-processing 2024-11-02 15:02:09 +01:00
Thomas Göttgens 7992a9be2d
fix: intro/outro playlist unset was impossible (#3101)
this reinstates the boolean fields in the database from the original PR
to work around a foreign key contraint. THE UI remains unchanged
2024-10-21 18:34:39 +01:00
Thomas Göttgens 0b221f4fff
fix(legacy): support Postgresql 12 syntax (#3103)
fixes #3102
2024-10-19 23:20:30 +01:00
Thomas Göttgens 560ba959a6
Merge branch 'libretime:main' into master-me-processing 2024-10-17 13:51:43 +02:00
Thomas Göttgens 7e88e5ea83 master merged locally 2024-10-17 13:50:14 +02:00
Thomas Göttgens 299be3c142
feat: use custom intro/outro playlists per show (#2941)
### Description

Having a global intro and outro playlist in settings is not very
flexible for special programming. This adds an override intro/outro
playlist per show. If it is not set, the global one is used. also it's
ignored if there's no autloading at all.

**I have updated the documentation to reflect these changes**:

Yes

### Testing Notes

**What I did:**
Schedule 2 shows, one without defining custom lists, one with defining
custom lists. one hour before the show starts it should be populated
correctly. If you define a global list it shojuld be replaced with the
per-show list.

---------

Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
2024-10-14 21:07:41 +01:00
dakriy 5b5c68c628
feat(legacy): implement subset sum solution to show scheduling (#3019)
### Description

When running a radio station it is generally a good idea to reduce dead
air time. The current algorithm for adding tracks to a block/show can
leave a lot of dead air time at the end as it doesn't use a very good
algorithm. Adding tracks to a show until it is full while making it as
full as possible is a well known problem in computer science. It is the
[Subset Sum Problem](https://en.wikipedia.org/wiki/Subset_sum_problem).
This PR implements a Randomized Greedy with Local Improvement (RGLI)
approximation solution for the Subset Sum Problem. The new algorithm is
only used when sort type is random and overflow is not enabled and there
is no limit on the number of tracks that can be used.

**This is a new feature**:

Improvement on an existing feature. 

**I have not updated the documentation to reflect these changes**:

I did not update the documentation because the current scheduling
algorithm is not currently documented and its existing features have not
changed.

### Testing Notes

**What I did:**

I first attempted a fully polynomial time approximation scheme solution,
however it is really bad at finding good solutions for high density
values and can kinda slow the more tracks/time you have. So I instead
implemented an RGLI which is O(nlogn) and has been giving much better
results.

I implemented the solution in a separate project and tested it and timed
the values with a normal distribution of 500 songs with a mean of 3
minutes and a standard deviation of 1 minute. With a show size of 1 hour
the algorithm took around 10-15 ms to run. When adjusting the block size
and track size the algorithm still was pretty quick to run. Am going to
be testing on an instance with lots of tracks later, will update PR when
I have done that.

**How you can replicate my testing:**

_How can the reviewer validate this PR?_

### **Links**

Closes #3018
2024-10-13 15:31:08 +02:00
dakriy 16deaf08c6
feat(legacy): show filename and size on edit page and add filename datatable column (#3083)
### Description

Add File Name and Size to the metadata editor screen, and added a File
Name column to the tracks data table.

**This is a new feature**:

Yes

**I have updated the documentation to reflect these changes**:

No, just some simple UI additions so no documentation needed.

### Testing Notes

**What I did:**

I uploaded some tracks, clicked on edit, and saw that the filename and
size showed up at the top. I also went out to the tracks view and added
the File Name column and saw that the filename displayed properly.

**How you can replicate my testing:**

Do what I did

### **Links**

Fixes #3053
2024-10-13 08:45:54 +01:00
Thomas Göttgens a9e558712e
Update checksum 2024-10-08 10:38:07 +02:00
Thomas Göttgens 26516cd818
Merge branch 'main' into master-me-processing 2024-09-23 11:10:18 +02:00
Jonas L. e614fbcf6c
feat: add Norwegian Bokmål locale (#3073)
### Description

Locale was requested on Weblate.
2024-09-06 14:43:40 +01:00
dakriy 8c26505622
feat(legacy): order by filename when lptime is null (#3069)
### Description

It is good to have a deterministic order when doing explicit file
sorting. This sorts by filename when last played time is null. I would
expect filename to be the next sort after last played time in case of a
tie, and was surprised to find it was not explicit. It should not break
any existing use cases.

**This is a new feature**:

Kind of?

**I have updated the documentation to reflect these changes**:

I did not update any documentation as this way seems like the logical
expected way to do the sort.

### Testing Notes

**What I did:**

I loaded up some tracks into a local libretime instance, let some of
them play, and tested that all the old sorts worked as before as well as
tracks getting sorted by filepath in case of a last played time
2024-08-24 07:47:25 +01:00
Thomas Göttgens 78c8ea9741
Merge branch 'libretime:main' into master-me-processing 2024-08-23 10:57:48 +02:00
dakriy c883d0f2d5
fix(legacy): fix filename criteria searching (#3068)
### Description

The filename criteria searched the full file path and as such does not
work as expected.

**This is a new feature**:

No

**I have updated the documentation to reflect these changes**:

No docs changes are required as this is fixing a bug to make things work
as expected and documented.

### Testing Notes

**What I did:**

I uploaded some files, and tested that the file name criteria worked as
expected.

**How you can replicate my testing:**

Spin up the stack, upload some files and make sure the filename criteria
works as expected.
2024-08-20 22:39:53 +01:00
Thomas Göttgens a75be3d4b2
Merge branch 'main' into develop 2024-06-29 10:42:21 +02:00
Jonas L 4e0953d513
refactor: remove non existent asset file (#3042)
The file is non existent.

Added in c669d3cb47

Removed in ea2a6b3f68
2024-06-22 17:18:16 +02:00
dakriy 4642b6c08e
feat(legacy): add filename block criteria (#3015)
### Description

Adds filename block criteria because sometimes you just need the
filename and the ID3 tags won't do.

Closes  #3014
2024-06-22 11:51:59 +02:00
dakriy 451652bc40
feat(legacy): add current date macro to string block criteria (#3013)
### Description

It is useful to be able to automatically filter tracks to a certain date
or day when scheduling tracks for playback. This adds the ability to do
just that in any string filter with the `date{format}` macro.

 
 Closes:  #3012
2024-06-22 11:19:21 +02:00
Rob Hailman 2b43e51ed1
fix: playlist allocates inaccurate time to smartblocks (#3026)
### Description

In the existing logic of `retrieveMediaFiles`, the time remaining in
show is calculated incorrectly in some scenarios. Each time a duration
is subtracted from `showLimit`, it is not the duration of the files just
added, but instead the length of all files scheduled. This can cause
cases where a smart block set to "time remaining in show" fails to
completely fill the program.

For example, given a 30 minute show, and a playlist like follows:

1. a 5 minute track
2. another 5 minute track
3. smart block, set to time remaining in show

When item 1 is added, `showLimit` is reduced by 5 minutes as expected.
When item 2 is added, `showLimit` is reduced by 10 minutes (as both
items 1 and 2 are counted). As a result, the smart block is only run to
fill 15 minutes, leaving 5 minutes unfilled.

This PR resolves this issue, by recalculating `showLimit` from the
original duration rather than subtracting from a running total.

This change not does implement a new feature and should not require any
changes to documentation.

### Testing Notes

**What I did:**

- On a dev environment, set up a playlist as described above.
- Before applying this PR, created a show and scheduled playlist, and
confirmed issue was reproducible
- Applied PR and repeated, and confirmed show was filled completely.

Also repeated this testing with sample data from our production
instance.

Here is a sample schedule of the "before" case with sample data, showing
the issue

![image](https://github.com/libretime/libretime/assets/8541186/f91849fb-606f-410e-bef5-a7abc8e7b7f4)
The smartblock that scheduled the music is set to allow last track to
overflow, but 3m55s was left unscheduled.

Using the same playlist and same track library, here is a sample
schedule after the PR applied:

![image](https://github.com/libretime/libretime/assets/8541186/e9d46fbb-50e6-4859-a3de-f5a90a6021c0)
As expected, the show is fully scheduled with the last track
overflowing.
 
Additionally, I've applied this PR as a hot fix to our production
instance, where it has been running for a week without issue.

Also performed spot tests of playlists without smart blocks, smart
blocks scheduled directly (not in playlists) and autoloading playlists,
with no change in behaviour observed as a result of this change.

**How you can replicate my testing:**

Same test steps as I followed should be able to reproduce issue &
validate fix on any instance.

### **Links**

Not directly related to issue fixed by #3019, but also addresses the
issue of dead air left at end of blocks.

Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-06-05 17:01:57 +01:00
Thomas Göttgens 86da46ee3a
fix(legacy): allow deleting file with api token (#2995)
When calling DELETE "/rest/media/<id>" the call fails with 'unknown error'
if it's not within a GUI session. The StoredFile delete method checks
for user permissions regardless of if a user is even known.
2024-05-05 22:26:27 +02:00
Thomas Göttgens 064c435b09
refactor(legacy): remove unused waveform related code (#3003)
Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-05-05 21:15:11 +02:00
Thomas Göttgens d97ab0d362
Merge pull request #8 from caveman99/cuepoint-editor
* removed unused code and refactored
* correct zoom level on expand
* fix concurrency
2024-04-30 12:42:21 +02:00
Thomas Göttgens 91a98adbc1 fix concurrency 2024-04-28 17:37:19 +00:00
Thomas Göttgens ffe80b981d correct zoom level on expand 2024-04-28 17:11:48 +00:00
Thomas Göttgens 46f03da9ff removed unused code and refactored 2024-04-28 16:42:09 +00:00
Thomas Göttgens 9c12d133d5
Merge branch 'libretime:main' into develop 2024-04-28 14:14:53 +02:00
Jonas L 40b4fc7f66
feat: build schedule events exclusively in playout (#2946)
### Description

Build and use the schedule events only in playout, the events generated
by legacy are not used anymore.

This ensure that we don't have to maintain 2 different implementation in
2 different languages. We still need the php function to run to make
sure the side effects of this function are executed (filling the
schedule in the DB).
2024-04-27 20:09:16 +02:00
Thomas Göttgens da02e74f21
feat(legacy): visual cue point editor (#2947)
A visual cue point editor in the track editor view. This view displays the track as a waveform and allows you to set where the in- and out-cue points are set. These cue points determine the start and end points of the track.

---------

Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-04-21 10:13:43 +01:00
Thomas Göttgens 21cf79a1bf
Apikey rest delete (#7)
* Allow file deletes from V1 REST API call

* Add comment to satisfy CI checks (*sigh*)
2024-04-18 14:06:14 +02:00
Thomas Göttgens a7e4a8d217
Merge branch 'libretime:main' into develop 2024-04-18 11:47:01 +02:00
Jonas L 5ad69bf0b7
fix(legacy): ensure validation is performed on the track type form (#2985)
### Description

Fixes #2939

The zend form validation was not performed, only a custom method to
validate the code was used. This merge both validation, and leverage the
Zend form validation framework.

Also allow updating the track type code from the track type form.
Related to #2955
2024-04-13 15:54:47 +02:00
renovate[bot] 9192aaa2bb
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.53.1 (#2972)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.51.1` -> `<3.53.1` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.51.0/3.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.51.0/3.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.53.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3530)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.52.1...v3.53.0)

- chore: Use `list` over `array` in more places
([#&#8203;7905](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7905))
- CI: allow for self-approvals for maintainers
([#&#8203;7921](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7921))
- CI: Improve Infection setup
([#&#8203;7913](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7913))
- CI: no need to trigger enable auto-merge when self-approve
([#&#8203;7929](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7929))
- DX: reduce `array_filter` function usages
([#&#8203;7923](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7923))
- DX: remove duplicated character from `trim` call
([#&#8203;7930](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7930))
- DX: update actions producing warnings
([#&#8203;7925](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7925))
- DX: update actions producing warnings
([#&#8203;7928](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7928))
- DX: update `phpstan/phpstan-strict-rules`
([#&#8203;7924](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7924))
- feat: Add trailing comma in multiline to PER-CS 2.0
([#&#8203;7916](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7916))
- feat: Introduce `AttributeAnalysis`
([#&#8203;7909](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7909))
- feat: `@PHP84Migration` introduction
([#&#8203;7774](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7774))
- fix: Constant invocation detected in typed constants
([#&#8203;7892](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7892))
- fix: `PhpdocArrayTypeFixer` - JIT stack limit exhausted
([#&#8203;7895](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7895))
- test: Introduce Infection for mutation tests
([#&#8203;7874](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7874))

###
[`v3.52.1`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3521)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.52.0...v3.52.1)

- fix: StatementIndentationFixer - do not crash on ternary operator in
class property
([#&#8203;7899](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7899))
- fix: `PhpCsFixer\Tokenizer\Tokens::setSize` return type
([#&#8203;7900](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7900))

###
[`v3.52.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3520)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.51.0...v3.52.0)

- chore: fix PHP 8.4 deprecations
([#&#8203;7894](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7894))
- chore: fix PHPStan 1.10.60 issues
([#&#8203;7873](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7873))
- chore: list over array in more places
([#&#8203;7876](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7876))
- chore: replace template with variable in Preg class
([#&#8203;7882](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7882))
- chore: update PHPStan
([#&#8203;7871](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7871))
- depr: `nullable_type_declaration_for_default_null_value` - deprecate
option that is against `@PHP84Migration`
([#&#8203;7872](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7872))
- docs: Fix typo
([#&#8203;7889](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7889))
- feat: Add support for callable template in PHPDoc parser
([#&#8203;7084](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7084))
- feat: Add `array_indentation` to `PER-CS2.0` ruleset
([#&#8203;7881](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7881))
- feat: `@Symfony:risky` - add `no_unreachable_default_argument_value`
([#&#8203;7863](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7863))
- feat: `PhpCsFixer` ruleset - enable
`nullable_type_declaration_for_default_null_value`
([#&#8203;7870](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7870))
- fix: Constant invocation detected in DNF types
([#&#8203;7869](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7869))
- fix: Correctly indent multiline constants and properties
([#&#8203;7875](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7875))
- fix: `no_useless_concat_operator` - do not break variable
([#&#8203;7827](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7827))
- fix: `TokensAnalyzer` - handle unary operator in arrow functions
([#&#8203;7862](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7862))
- fix: `TypeExpression` - fix "JIT stack limit exhausted" error
([#&#8203;7843](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7843))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNDUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-04-13 14:36:31 +02:00
Thomas Göttgens ef10b7a247 fix merge error 2024-04-01 21:44:38 +02:00
Thomas Göttgens 63044be7fe
Cuepoint editor (#5)
* fest(legacy): add visual cuepoint editor

* support entering timecode manually

* make editor collapsible and realign

* fix lint errors

* fest(legacy): add visual cuepoint editor

* support entering timecode manually

* make editor collapsible and realign

* fix lint errors

* fix replay gain calculation and display

* remove gain editor, keep waveform controls and zoom

---------

Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
2024-03-29 22:45:47 +01:00
Thomas Göttgens af80a817ca
Merge branch 'libretime:main' into develop 2024-02-18 22:14:49 +01:00
Thomas Göttgens 270aa08ae6
fix(legacy): allow updating track types code (#2955)
Since moving to an indexed track_type model for 3.0, the constraint of the code being immutable is no longer
valid, since it's not used as index anymore. This commit removes the readonly flag from that form field.
2024-02-18 19:10:30 +01:00
Thomas Göttgens 62b1d813a9
Master me processing (#3) 2024-02-13 14:22:04 +01:00
Thomas Göttgens c3d85a4e22
Update assets.json 2024-02-13 14:21:48 +01:00
Thomas Göttgens 3f9c244ab3
Custom auto playlist (#2) 2024-02-13 14:16:51 +01:00
Thomas Göttgens 26fbd1224a
Cuepoint editor (#1)
* fest(legacy): add visual cuepoint editor
2024-02-13 14:15:31 +01:00
Jonas L 37d1a7685e
fix(legacy): replay_gain_modifier should be a system preference (#2943) 2024-02-08 19:48:49 +01:00
Thomas Göttgens f4b260fdf7
fix(legacy): fix hidden fields in edit file form (#2932)
this removes a visual gap between artwork and editor fields. I stumbled
across this while updating the form to include replay gain.


![grafik](https://github.com/libretime/libretime/assets/25002/267f4d7b-e12e-4c86-b37e-420311dc3dec)
2024-02-03 22:31:00 +01:00
renovate[bot] 3e05748d2d
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.49.1 (#2899)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.46.1` -> `<3.49.1` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.46.0/3.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.46.0/3.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.49.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3490)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.48.0...v3.49.0)

- chore(checkbashisms): update to 2.23.7
([#&#8203;7780](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7780))
- chore: add missing key types in PHPDoc types
([#&#8203;7779](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7779))
- chore: Exclude `topic/core` issues/PRs from Stale Bot
([#&#8203;7788](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7788))
- chore: `DescribeCommand` - better handling of deprecations
([#&#8203;7778](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7778))
- docs: docker - use gitlab reporter in GitLab integration example
([#&#8203;7764](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7764))
- docs: docker in CI - don't suggest command that overrides path from
config file
([#&#8203;7763](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7763))
- DX: check deprecations exactly
([#&#8203;7742](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7742))
- feat: Add `ordered_types` to `@Symfony`
([#&#8203;7356](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7356))
- feat: introduce `PhpdocListTypeFixer`
([#&#8203;7796](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7796))
- feat: introduce `string_implicit_backslashes` as
`escape_implicit_backslashes` replacement
([#&#8203;7669](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7669))
- feat: update
`Symfony.nullable_type_declaration_for_default_null_value` config
([#&#8203;7773](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7773))
- feat: `@PhpCsFixer` ruleset - enable `php_unit_data_provider_static`
([#&#8203;7685](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7685))
- fix: Allow using cache when running in Docker distribution
([#&#8203;7769](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7769))
- fix: ClassDefinitionFixer for anonymous class with phpdoc/attribute on
separate line
([#&#8203;7546](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7546))
- fix: `ClassKeywordFixer` must run before
`FullyQualifiedStrictTypesFixer`
([#&#8203;7767](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7767))
- fix: `function_to_constant` `get_class()` replacement
([#&#8203;7770](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7770))
- fix: `LowercaseStaticReferenceFixer` - do not change typed constants
([#&#8203;7775](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7775))
- fix: `PhpdocTypesFixer` - handle more complex types
([#&#8203;7791](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7791))
- fix: `TypeExpression` - do not break type using `walkTypes` method
([#&#8203;7785](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7785))

###
[`v3.48.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3480)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.47.1...v3.48.0)

- chore: `FullyQualifiedStrictTypesFixer` must run before
`OrderedInterfacesFixer`
([#&#8203;7762](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7762))
- docs: Add PHP-CS-Fixer integration in a GitHub Action step
([#&#8203;7757](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7757))
- feat: `PhpdocTypesOrderFixer` Support DNF types
([#&#8203;7732](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7732))
- fix: Support shebang in fixers operating on PHP opening tag
([#&#8203;7687](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7687))
- fix: work correctly for a switch/case with ternary operator
([#&#8203;7756](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7756))
- fix: `NoUselessConcatOperatorFixer` - do not remove new line
([#&#8203;7759](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7759))

###
[`v3.47.1`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3471)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.47.0...v3.47.1)

- fix: Do not override short name with relative reference
([#&#8203;7752](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7752))
- fix: make `BinaryOperatorSpacesFixer` work as pre-v3.47
([#&#8203;7751](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7751))
- fix: Proper Docker image name suffix
([#&#8203;7739](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7739))
- fix: `FullyQualifiedStrictTypesFixer` - do not change case of the
symbol when there's name collision between imported class and imported
function
([#&#8203;7750](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7750))
- fix: `FullyQualifiedStrictTypesFixer` - do not modify statements with
property fetch and `::`
([#&#8203;7749](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7749))

###
[`v3.47.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3470)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.46.0...v3.47.0)

- chore: better identify EXPERIMENTAL rules
([#&#8203;7729](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7729))
- chore: fix issue detected by unlocked PHPStan + upgrade dev-tools
([#&#8203;7678](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7678))
- chore: handle extract()
([#&#8203;7684](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7684))
- chore: Mention contributors in app info
([#&#8203;7668](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7668))
- chore: no need to mark private methods as internal
([#&#8203;7715](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7715))
- chore: ProjectCodeTests - dry for function usage extractions
([#&#8203;7690](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7690))
- chore: reduce PHPStan baseline
([#&#8203;7644](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7644))
- chore: use numeric literal separator for PHP version IDs
([#&#8203;7712](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7712))
- chore: use numeric_literal_separator for project
([#&#8203;7713](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7713))
- chore: Utils::sortElements - better typing
([#&#8203;7646](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7646))
- CI: Allow running Stale Bot on demand
([#&#8203;7711](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7711))
- CI: Fix PHP 8.4
([#&#8203;7702](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7702))
- CI: Give write permissions to Stale Bot
([#&#8203;7716](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7716))
- CI: Use `actions/stale` v9
([#&#8203;7710](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7710))
- docs: Add information about allowing maintainers to update PRs
([#&#8203;7683](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7683))
- docs: CONTRIBUTING.md - update Opening a PR
([#&#8203;7691](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7691))
- docs: Display/include tool info/version by default in commands and
reports
([#&#8203;7733](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7733))
- DX: fix deprecation tests warnings for PHP 7.4
([#&#8203;7725](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7725))
- DX: update `host.docker.internal` in Compose override template
([#&#8203;7661](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7661))
- DX: `NumericLiteralSeparatorFixer` - change default strategy to
`use_separator`
([#&#8203;7730](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7730))
- feat: Add support for official Docker images of Fixer
([#&#8203;7555](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7555))
- feat: Add `spacing` option to `PhpdocAlignFixer`
([#&#8203;6505](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/6505))
- feat: Add `union_types` option to `phpdoc_to_param_type`,
`phpdoc_to_property_type`, and `phpdoc_to_return_type` fixers
([#&#8203;7672](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7672))
- feat: Introduce `heredoc_closing_marker` fixer
([#&#8203;7660](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7660))
- feat: Introduce `multiline_string_to_heredoc` fixer
([#&#8203;7665](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7665))
- feat: Introduce `NumericLiteralSeparatorFixer`
([#&#8203;6761](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/6761))
- feat: no_superfluous_phpdoc_tags - support for arrow function
([#&#8203;7666](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7666))
- feat: Simplify closing marker when possible in
`heredoc_closing_marker` fixer
([#&#8203;7676](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7676))
- feat: Support typed properties and attributes in
`fully_qualified_strict_types`
([#&#8203;7659](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7659))
- feat: `@PhpCsFixer` ruleset - enable
no_whitespace_before_comma_in_array.after_heredoc
([#&#8203;7670](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7670))
- fix: Improve progress bar visual layer
([#&#8203;7708](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7708))
- fix: indentation of control structure body without braces
([#&#8203;7663](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7663))
- fix: make sure all PHP extensions required by PHPUnit are installed
([#&#8203;7727](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7727))
- fix: PhpdocToReturnTypeFixerTest - support for arrow functions
([#&#8203;7645](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7645))
- fix: Several improvements for `fully_qualified_strict_types` (respect
declared symbols, relative imports, leading backslash in global
namespace)
([#&#8203;7679](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7679))
- fix: SimplifiedNullReturnFixer - support array return typehint
([#&#8203;7728](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7728))
- fix: Support numeric values without leading zero in
`numeric_literal_separator`
([#&#8203;7735](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7735))
- fix: `BinaryOperatorSpacesFixer` - align correctly when multiple
shifts occurs in single line
([#&#8203;7593](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7593))
- fix: `ClassReferenceNameCasingFixer` capitalizes the property name
after the nullsafe operator
([#&#8203;7696](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7696))
- fix: `fully_qualified_strict_types` with
`leading_backslash_in_global_namespace` enabled - handle reserved types
in phpDoc
([#&#8203;7648](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7648))
- fix: `NoSpaceAroundDoubleColonFixer` must run before
`MethodChainingIndentationFixer`
([#&#8203;7723](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7723))
- fix: `no_superfluous_phpdoc_tags` must honor multiline docs
([#&#8203;7697](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7697))
- fix: `numeric_literal_separator` - Handle zero-leading floats properly
([#&#8203;7737](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7737))
- refactor: increase performance by ~7% thanks to `Tokens::block*Cache`
hit increased by ~12%
([#&#8203;6176](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/6176))
- refactor: Tokens - fast check for non-block in 'detectBlockType',
evaluate definitions only once in 'getBlockEdgeDefinitions'
([#&#8203;7655](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7655))
- refactor: `Tokens::clearEmptyTokens` - play defensive with cache
clearing
([#&#8203;7658](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7658))
- test: ensure we do not forget to test any short_open_tag test
([#&#8203;7638](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7638))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjcuMCIsInVwZGF0ZWRJblZlciI6IjM3LjE1My4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-02-02 20:39:10 +01:00
Thomas Göttgens a95ce3d229
feat(legacy): trim overbooked shows after autoloading a playlist (#2897)
### Description

Some combination of preload/postload and autoloding playlists with
smartblocks generate massively overbooked shows that clutter up the
interface. This addition performs a 'trim overbooked' after filling up
the autoload list, and does the same as pushing the 'trim overbooked'
button in the UI.


### Testing Notes

Define an autoloading playlist of 2 hours and schedule it for a one hour
show. Without patch, you'll get entries for 2 hours, with the patch, you
only get one hour and a 'overboarding' orange entry at most.

---------

Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-02-02 20:17:23 +01:00
Thomas Göttgens 170d09545e
feat(legacy): disable public radio page and redirect to login (#2903)
### Description

Many people don't need the public page and use libretime purely for
playout management. This adds the ability to have libretime publicly
available but only present the login page to the user.

**I have updated the documentation to reflect these changes**:

no, but i will add documentation if this PR is accepted.

### Testing Notes

**What I did:**

Toggle the new ceckbox on the general settings, log out and back in and
check behaviour.

note: this may have conflicts with the trim overbooked PR since the
toggle sits in the same place. If both are accepted this needs to be
formatted nicely :-)

---------

Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
Co-authored-by: Jonas L. <jooola@users.noreply.github.com>
Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-02-02 19:04:12 +01:00