Clementine

Ircus

Bardzo aktywny
Ekspert
Dołączył
26 Maj 2010
Posty
22436
Reakcje/Polubienia
69548
Clementine 1.4.1-177
Merge the ccache env into the Fedora jobs' existing block

The Fedora jobs already set RPM_BUILD_NCPUS at job level, so adding a
second env: made the file invalid and GitHub refused to run it. Python's
yaml.safe_load takes the last of two duplicate keys rather than
complaining, which is why this got past me - and quietly dropped
RPM_BUILD_NCPUS in the process.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Zaloguj lub Zarejestruj się aby zobaczyć!
 

Camel1965

Bardzo aktywny
Zasłużony
Dołączył
8 Wrzesień 2010
Posty
56185
Reakcje/Polubienia
41116

Clementine 1.4.1-190​

Format C++ files as Claude Code edits them (#7510)

PRs kept failing the clang-format lint job because edited files were never
formatted locally. Add a Claude Code PostToolUse hook that runs clang-format
on each C++ file under src/ after it's edited, with the same version, style
and scope as CI. If clang-format is missing or the wrong version, it leaves
the file alone and tells Claude how to install the right one.

dist/format.py now holds the version, style and extensions as constants so
the hook can share them, and its install hint suggests uv instead of
Homebrew, which ships a version that formats differently from CI. The
README says how to install clang-format 23.1.0.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Zaloguj lub Zarejestruj się aby zobaczyć!
 

Ircus

Bardzo aktywny
Ekspert
Dołączył
26 Maj 2010
Posty
22436
Reakcje/Polubienia
69548

Clementine 1.4.1-193​

Keep the Mac and Windows ccache dir out of runner.temp

The runner context isn't available in a job's env, so GitHub rejected
the whole workflow file and ran none of it - on this PR's first push,
not just after the rebase. Use the workspace instead, which the github
context can reach there. actionlint flags this; the YAML-level checks I
had been using couldn't.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zaloguj lub Zarejestruj się aby zobaczyć!
 

Ircus

Bardzo aktywny
Ekspert
Dołączył
26 Maj 2010
Posty
22436
Reakcje/Polubienia
69548

Clementine 1.4.1-210​

Don't touch the Plex event stream after its manager is gone

Quitting while connected crashed: the service's QNetworkAccessManager is
its first child, so it is destroyed - taking the event-stream reply with
it - before the notification listener, whose destructor then aborted the
dangling reply. Hold the reply in a QPointer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Clementine 1.4.1-204​

Fix the compiler warnings left in CI

Two of these were bugs:

- On TagLib 1, ReadCloudFile passed AudioProperties::Accurate where
MPEG::File takes bool readProperties, so the read style fell back to
Average. Fedora 43 flagged it (-Wint-in-bool-context); Bookworm and
Jammy compile the same call without warning. The call a few lines
down already had the right order.
- libmygpo's "not set" sentinel was (2^64)-1, and ^ is XOR, so it came
to 65: a genuine position, start or total of 65 was dropped from
episode actions sent to gpodder.net. Vendored, but upstream has no
Qt 6 build.

The rest: a missing override on AlbumCoverManagerList::dropEvent, and
PlaylistItem's deprecated QVariant(QVariant::String), replaced with the
QMetaType constructor - the same null QString-typed value. In the tests,
unchecked open() and load() results are now asserted, so a missing file
fails where it happens, and deprecated QVariant::type() and
QSqlDatabase::exec() calls are updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Clementine 1.4.1-196​

Render the playlist drag cache at device pixel resolution (#7517)

The cached_tree_ pixmap used while dragging over the playlist was
allocated at the logical widget size, so on HiDPI screens the whole
playlist went blurry for the duration of the drag.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

Zaloguj lub Zarejestruj się aby zobaczyć!
 
Ostatnia edycja:

Ircus

Bardzo aktywny
Ekspert
Dołączył
26 Maj 2010
Posty
22436
Reakcje/Polubienia
69548

Clementine 1.4.1-214​

Pass the translation sources to xgettext in a file

add_pot put every source file on xgettext's command line. On Windows
that line is limited to 32767 characters and is now close to full: a
branch adding about fifteen files failed the Windows build while
generating translations.pot, with "The system cannot execute the
specified program". The list now goes in a file read with --files-from,
which shrinks the command to under 1000 characters on every platform.

The generated .pot is identical, and the file list is written with
file(GENERATE) so it only changes, and the .pot is only rebuilt, when
the sources do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Clementine 1.4.1-213​

Accept IPv4 localhost on a dual-stack network remote

With "only allow connections from the local network" on, the remote
refused 127.0.0.1: listening on Any is dual-stack, so the client
arrives as ::ffff:127.0.0.1, which none of the checked subnets covered.
QHostAddress::isLoopback() covers both forms.

IpIsPrivate becomes static and public so it can be tested.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zaloguj lub Zarejestruj się aby zobaczyć!
 
Ostatnia edycja:

Camel1965

Bardzo aktywny
Zasłużony
Dołączył
8 Wrzesień 2010
Posty
56185
Reakcje/Polubienia
41116

Clementine 1.4.1-229​

Address the security review of remote streaming

From a static review of the streaming server. None of the findings was
remotely exploitable for code execution; these fix or mitigate the
denial-of-service and nuisance issues it found.

- Limits on media responses: 4 per renderer, of which 2 may be
pipelines, 32 in all, and 32 requests still being sent. Requests over
a limit get 429 or 503. A client that stops reading for 30 seconds is
disconnected.
- Responders share a StreamResponder base and belong to the
MediaHttpServer, so they're counted, and stopped when the server is,
such as when streaming is turned off.
- A renderer id can only be taken over from the same address, so
another device can't evict a renderer and receive SET_OUTPUT meant for
it. Ids and display names are length-limited.
- Renderer capabilities are bounded when converted from the protobuf:
at most 32 formats of 32 sample rates, out-of-range rates, channel
counts and bitrates dropped, and a format whose rates were all invalid
dropped rather than widened to any rate.
- The t= start position is parsed and clamped to the item's length
before it's converted to nanoseconds, so it can't overflow.
- An oversized request head is answered once.

New smoke tests cover the pipeline limit, clamped start positions, the
renderer id rule and the oversized head, and a unit test the bounds on
capabilities. The idle timeout was checked by hand.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zaloguj lub Zarejestruj się aby zobaczyć!
 

Camel1965

Bardzo aktywny
Zasłużony
Dołączył
8 Wrzesień 2010
Posty
56185
Reakcje/Polubienia
41116

Clementine 1.4.1-231​

Advertise the network remote through Windows' own mDNS responder (#7526)

* Advertise the remote through Windows' own mDNS responder

On Windows 10 1809 and later the built-in mDNS responder (dnscache) owns
UDP 5353, and tinysvcmdns's socket, bound to the interface's unicast
address, never receives the multicast queries remotes browse with. The
remote could only be reached by typing in its IP address.

Register the service with DnsServiceRegister instead, loaded at runtime
so older Windows still starts, and fall back to tinysvcmdns where the
API is missing or registration fails.

For that fallback, bind tinysvcmdns to the wildcard address, join the
multicast group and send on the responder's own interface, and answer
questions that ask for a unicast response (by multicast).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Note Clementine's changes to its copy of tinysvcmdns

It isn't synced from upstream, so list what a re-import has to carry
over.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Zaloguj lub Zarejestruj się aby zobaczyć!
 

Ircus

Bardzo aktywny
Ekspert
Dołączył
26 Maj 2010
Posty
22436
Reakcje/Polubienia
69548

Clementine 1.4.1-233​

Test the parallel library scan

LibraryTagPrefetcher moves to its own file behind a small Reader
interface, TagReaderClient in the app and a fake in tests.
librarytagprefetcher_test checks the window of requests, reading in
order, cancelling files the loop skips so they don't hold the window
up, reading unexpected files directly, and cancelling leftovers.

They found that up to kMaxInFlight + 1 requests could be open, because
the window was refilled before the request being read was finished.
It's now finished first.

librarywatcher_test scans real directories with real
clementine-tagreader workers into an in-memory library: MP3, FLAC and
Ogg files, more files than the window holds, and a cue sheet. It checks
the first scan, an incremental rescan after a file is retagged, one
deleted and one added, and a full rescan that rereads a file whose
directory didn't change. The watcher stays on the test's thread and the
TagReaderClient gets its own, which keeps to one connection to the
in-memory database.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zaloguj lub Zarejestruj się aby zobaczyć!
 

Camel1965

Bardzo aktywny
Zasłużony
Dołączył
8 Wrzesień 2010
Posty
56185
Reakcje/Polubienia
41116

Clementine 1.4.1-235​

Test the parallel library scan

LibraryTagPrefetcher moves to its own file behind a small Reader
interface, TagReaderClient in the app and a fake in tests.
librarytagprefetcher_test checks the window of requests, reading in
order, cancelling files the loop skips so they don't hold the window
up, reading unexpected files directly, and cancelling leftovers.

They found that up to kMaxInFlight + 1 requests could be open, because
the window was refilled before the request being read was finished.
It's now finished first.

librarywatcher_test scans real directories with real
clementine-tagreader workers into an in-memory library: MP3, FLAC and
Ogg files, more files than the window holds, and a cue sheet. It checks
the first scan, an incremental rescan after a file is retagged, one
deleted and one added, and a full rescan that rereads a file whose
directory didn't change. The watcher stays on the test's thread and the
TagReaderClient gets its own, which keeps to one connection to the
in-memory database.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zaloguj lub Zarejestruj się aby zobaczyć!
 

Ircus

Bardzo aktywny
Ekspert
Dołączył
26 Maj 2010
Posty
22436
Reakcje/Polubienia
69548

Clementine 1.4.1-237​

Fix songs a network remote adds to another playlist (#7531)

* Add a remote's songs to the playlist it asked to create

When a remote sent songs with metadata and asked for a new playlist,
InsertUrls created the playlist but then added the songs to the
request's original playlist_id instead of the new one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Rewrap the InsertSongs call for clang-format

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Play a song added with play_now in the playlist it was added to

MainWindow::playIndex, which handles a playlist's PlayRequested, made
the playlist shown in the window the active one and played the index's
row there. When a network remote added songs to another playlist with
play_now, Clementine played whatever song was at that row of the shown
playlist instead. RunPlayAndExit did the same.

PlaylistManager::SetActiveToPlaylistOf finds the playlist the index is
in, by its model or its proxy, makes it the active one, and returns the
row, and both now use it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Zaloguj lub Zarejestruj się aby zobaczyć!
 

Camel1965

Bardzo aktywny
Zasłużony
Dołączył
8 Wrzesień 2010
Posty
56185
Reakcje/Polubienia
41116

Clementine 1.4.1-238​

Remove --experimental-remote-streaming, enabling it by default

Remote streaming is now always available. The Player always runs its
GstEngine behind an EngineRouter, new network remote connections are
sniffed by their first byte, and the "Allow playing on remote devices"
setting is always shown. That setting alone now controls whether
renderers are advertised and HTTP media requests are served.

The smoke test that checked Clementine without the flag now checks it
with the setting off instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session:
Zaloguj lub Zarejestruj się aby zobaczyć!
Zaloguj lub Zarejestruj się aby zobaczyć!
 
Do góry