This header type was missing, causing some Fraunhofer VBR MP3 files to
decode the wrong length information.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
There was a slight bug with handling Xing/LAME headers with main data
pointers indicating data preceding the header frame. This should allow
decoding their information properly.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Metadata notifier should have been reformatted to use the properties as
dotted members, and also check for empty strings.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Remember last play position in the playlist, rather than using an index
variable to store its position and play time. Still store whether the
player was last playing in a configuration variable, though.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Remove or rename obsolete English.lproj files, renaming where
en.lproj does not already exist, or removing if en.lproj has
already replaced it.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
The strings are now part of the localized strings storage, which is
still awaiting a volunteer to add more translations to the app.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This code turned out to be somewhat of a mistake to employ, so it's now
being removed, and shall not be re-added, as it doesn't really work.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Add play count data collection, including first seen times for every
file first added to the playlist. Data is indexed by album, artist, and
title, or by filename, whichever matches first. Add interfaces to
AppleScript automation definition as well.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Handle missing track items in the databse more gracefully, by deleting
the track entries before passing them on to the caller, so problems do
not occur later.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Prevent the notification balloons from displaying empty hyphens or tags
if either album or artist is empty but not nil.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Device name logging is essential in determining if crashes are on
specific device models that haven't been blocklisted.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Invalid files may include nil URLs, which should be skipped or stop
playback altogether. Invalid files will be marked as an error, and
stop playback.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
As it doesn't seem to work properly on Intel machines, anyway. It just
leads to pointless crashes, and doesn't seem to serve any purpose.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Restrict the use of workgroup joining and workgroup intervals to macOS
Monterey or newer, as it seems the way I use it, it's completely broken
on macOS Big Sur, which was the original minimum target for the API.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
The SceneKit visualizer now has a crash check, which will trigger if an
exception is thrown by the app.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Apply changes to exit the thread if workgroup initialization or joining
fails, instead of attempting to continue executing the thread.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Make the album match predicate an exact match, rather than using the
"like" operator, in case there's a speed up from doing so.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Apply the index sort to the fetch request itself, rather than applying
it to the resulting array afterward.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
The list generator now selects only a list of unique album names, which
may include empty string as well as NSNull, so filter those as well.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Rewrite the album filter function to apply the filter predicate against
Core Data directly, which also requires filtering out deLeted entries so
they don't end up in the results, and also requires sorting the results.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Add an extra step to the workgroup exit call, so that it only calls to
leave if the join token is valid, or at least initialized.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Sending reports is now handled synchronously on the startup path, so
that unsent reports can be sent before a startup crash causes further
crashes to occur. This is apparently needed to help one particular user
catch whatever is causing the app to crash for them.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Fix streaming metadata titles being overridden by the Icecast stream
strings. Now the Icy metadata only overrides missing strings, so Vorbis
Comments take priority.
Fixes#275
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Fix a potential bug where the device enumerator would return a nil
device name string, which would result in a crash. Instead, report an
unknown numbered device.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Move the initializer to a function that will be called earlier in the
startup stage. Mainly to catch crashes in the playlist importer for
legacy playlist formats.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Reject system identifier numbers that aren't supported, outright, rather
than waiting until the decoder is initialized.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
The new Core Data interface is especially stringent with receiving
NSNumber for the numeric types rather than NSString as was mistakenly
allowed before. Fix that to prevent exceptions.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>