Releases: clangen/musikcube
Releases · clangen/musikcube
musikcube 0.94.0
this is probably the largest update since the initial public release a couple years ago. there are detailed notes below, but the main take away is that it's now possible to connect to (and stream from) other musikcube (or musikcubed) instances over the network using the terminal client.
full set of changes:
- added support for remote libraries (i.e connecting to a musikcube app or daemon running on a different machine) to the terminal client:
- updated nearly all queries against the database in the app to be asynchronous. this was not necessary before because most local DB queries are extremely fast; however, when queries are sent over the network that may not be the case. there are still a small handful of queries made on the UI thread, but all of the really egregious ones have been fixed.
- added a new
ISerializableQuery
interface that defines how a query can be serialized and deserialized. all queries now implement this interface. - defined a new
SendRawQuery
method toIMetadataProxy
that is used by the server to send serialized queries tomusikcore
, and then respond with serialized results to the calling client. - added
WebSocketClient
that is used to connect to amusikcube
server and authenticate. it takes serialized queries from the client and sends them to the server, then parses responses and unpacks the serialized results. - added a new
RemoteLibrary
implementation ofILibrary
. it serializes queries and sends them to the server viaWebSocketClient
. once complete,WebSocketClient
hands the serialized result back toRemoteLibrary
, which then deserializes the result into the original query and notifies the caller. - added
MasterLibrary
in the same vein asMasterTransport
. it's more a less apimpl
that allows us to switch the selected library under the hood without a majority of the app knowing or caring. - revamped the settings screen to allow selecting between local and remote libraries.
- added a new screen that is displayed when a remote library is disconnected, and shows some diagnostic information.
- added a new banner on the top of the app when connected to a remote library.
- added buffering states to Stream/Transport/PlaybackService and friends.
- updated the transport window to display buffering status when appropriate.
- fixed a number of bugs in
cursespp
related to nested layout focusing. - fixed buggy visibility change events in
cursespp::Window
and removed old hacked-up code that was working around the problems in the app layer. - fixed a handful of
KeyPress()
propagation bugs across the app. - found and fixed a handful of bugs in
HttpDataStream
that have been laying dormant, waiting to be exercised. - fixed bugs related to
LruDiskCache
parsing and pruning. - fixed potential memory leaks in GmeDataStream and OpenMptDataStream
- fixed some weird edge-case command bar focus issues.
- finally renamed
src/core
tosrc/musikcore
- added a ja_JP locale (trackiss)
- updated ru_RU locale (adem4ik)
- fixed a bug where on-demand mp3 transcoding wasn't working properly. (other formats were fine)
- rearranged the settings window to ensure everything fits properly in an 80x24 terminal
- fixed some bugs in
MessageQueue
by now requiring explicitIMessageTarget
registration and unregistration for all messages. there was a small time window (read: race condition) where it was possible to attempt to dispatch messages to a destroyed target. - fixed a handful of components that were running their initial queries twice or more as they were being initialized.
- updated copyright date across all source files
- upgraded a number of tools and dependencies:
- migrated to VS2019 for Windows musikcube builds
- migrated to Android Studio 4.1 for musikdroid builds
- upgraded
websocketpp
andjson.hpp
and moved them out ofsrc/plugins
and intosrc/3rdparty
so they can be used by the main app. - upgraded to boost 1.74.0
- upgraded to openssl 1.1.1h
- upgraded to sqlite 3.33.0
- fixed a bug in the indexer that could prevent custom sources from getting interrupted correctly.
- fixed a bug in libmicrothttpd version detection.
- fixed a bug where switching to a different output device while paused would cause playback to resume.
- moved all shell scripts to their own subdirectory so they don't pollute the root.
- fixed an old bug in
LocalLibrary
that could cause query result callbacks to fire twice. - added the ability to limit the number of simultaneous audio transcoders in the server.
- added support for Ubuntu Groovy
- various other minor fixes that were exposed by making queries asynchronous by default.
musikcube 0.93.1
musikcube:
- added a new decoder based on
libopenmpt
to support playing mod/tracker files. - fixed a bug when browsing directories that contain entries from custom
IndexerSource
plugins. - fixed directory scanning bugs related to
NFS
(and potentially other filesystem) volumes. - fixed a nasty race condition in the
MPRIS
plugin that could cause the app to crash on certain events. - compile against the source version of
taglib
to get a number of important bug fixes that haven't been released yet. - fixed a memory leak in the
gmedecoder
plugin when aborting a directory scan - fixed a bug that could cause advanced setting integer values to not save properly.
- reduced
Indexer
log spew. - removed more unnecessary boost cruft in the
Indexer
. - fixed an
Indexer
bug that could result in tracks not getting added to the library. - fixed a bug where the Indexer couldn't always be interrupted while scanning.
- upgraded snap from
core18
tocore20
.
musikdroid:
- upgrade to
Android Studio 4.0
and related tooling
musikcube 0.92.1
server:
- fixed a bug where HTTP authentication was not functioning properly and could allow unauthenticated clients to download tracks.
musikcube 0.92.0
musikcube:
- fixed bug in the
ffmpeg
decoder where - added three new hotkeys:
M-P
: start playback from the top of the current list of tracks]
: jump to the next group in the current track list[
: jump to the previous group in the current track list
- added the ability to disable terminal title upgrades in
advanced settings
- updated
ru_RU
localization (adem4ik) - optimized png files (adem4ik)
- added
zn_CN
localization (Siheyuan98) - fixed a bug where binary stripping was broken for out of tree builds
- added the ability to disable binary stripping via
DISABLE_STRIP=true
flag - fixed
archive-win.sh
to use unix line endings
musikdroid:
- fixed a bug when downloading tracks without metadata, or metadata that contains invalid path characters.
- fixed a bug where track downloads may get corrupted, and/or assigned an incorrect file extension
- fixed a bug where
flac
decoding would crash the app - upgraded to the latest version of Android Studio
- upgraded various dependencies
server:
- added new
X-musikcube-File-Extension
HTTP response header that clients can use as a hint when naming downloaded files.
musikcube 0.90.1
(windows-only release)
musikcube:
- fixed crash in
win32
server caused by an incorrectly-compiledzlib
musikcube 0.90.0
musikcube:
- included a new
musikcube-cmd.exe
binary that can be run from a standard command-line session in Windows, including cmd.exe, PowerShell, Windows Terminal, or ConEmu. - added an OpenBSD port (castagnini)
- added the ability to build as a
snap
package. - fixed build issues for platforms with ncurses and tinfo split (tobbez)
- fixed an issue where percent signs in the transport weren't getting properly escaped (the-eater)
- fixed an issue where we may not properly detect UTF8 terminals in some cases
- added true color support for macOS Terminal.app (previously was only supported in iTerm)
- fixed a handful of directory browsing bugs reported by (pcapiod)
- fixed a bug where we weren't always properly reporting track metadata in the MPRIS plugin.
- added a way to add an
audd.io
API key, if you have one, to fetch lyrics - updated session data to be stored in its own config file
- merged upstream PDCurses changes to fix a handful of minor bugs and better support Windows Terminal
- fixed a couple null pointer dereferences, and a couple instances where we
were using variables before they were initialized (detected with valgrind) - fixed some weird redraw issues on some platforms with ncurses 6.2
- fixed some bugs where we weren't always compiling the MPRIS plugin for our binary packages
- fixed a number of ALSA and PulseAudio bugs when devices are not available or there is resource contention
- added Ubuntu Focal (20.04) and Fedora 31 support
musikcore:
- added a C API wrapper around the SDK so
musikcore
can be used from other languages easily. seemusikcore_c.h
and the companion projectcore_c_demo
. - fixed an old bug in the
indexer
that would report an incorrect updated file count. - added the ability to build a standalone
musikcore.dll
on Windows that can be used with the new C API for easy integration with other languages or environments. - fixed a bug where we may crash when playing 0-length files.
- fixed an old bug where playback state would get out of sync if the user seeked while paused.
- cleaned up SDK constants
musikdroid:
- updated crash report tracking to use Firebase Crashlytics
- upgraded ExoPlayer
- upgrade to Android Studio 3.6
server:
- tweaked the threading model to better support multiple concurrent connections
- fixed a bug where we may attempt to transcode the same file multiple times simultaneously; now if there's a transcode for a shared resource in progress we'll just wait until the original operation completes
musikcube 0.83.0
0.83.0 changes:
- #309: fixed a minor CMake configuration bug that could cause some formats (e.g.
opus
) to not get recognized on some platforms (e.g.linux
).
0.82.0 changes:
- Fixed a small bug that could cause dialogs to get partially obscured on certain versions of curses.
0.81.0 changes:
- #308: audio decoding doesn't work with older versions of
ffmpeg
- #307: database initialization issue (hectorm)
- #304: Updated
ru_RU
localization (adem4ik) - Added an
advanced setting
to hide the star rating column
0.80.0 changes:
musikcube
- Added
zh_CN
localization (Siheyuan98) - Fixed #287: Window size not properly restored in Windows build
- Fixed #276: Added the ability to rate tracks via
r
shortcut in all track list views. - Fixed #260: Added the ability to sort track list results via
^S"
in search and browse views - Fixed #173: Show song artist and title in the terminal titlebar
- Fixed #299: Windows drives disappear in directory browser after checking/unchecking "show dotfiles" option.
- Fixed #257: Added an option to hide the command bar when not in command mode
- Backported
SchemaOverlay
from upstreamcursespp
and use it inPluginsOverlay
. - Added an
advanced settings
to the settings view and re-arranged things a bit.
musikcore
- Fixed #290: A brand new transcoder implementation powered by ffmpeg that supports
ogg
,opus
,aac
,flac
,wavepack
, andwma
files.mp3
transcoding is still handled bylibmp3lame
. - Fixed a bug in
FfmpegDecoder
that could result in a pre-mature / incorrectEOF
error. - Fixed #294: we weren't properly querying the local DB for lyrics.
- Fixed #293: bug parsing disc number in AAC files.
- FIxed #298: bug decoding APE files. changes also include a complete refactor and overhaul of the
FfmpegDecoder
plugin to use modern, non-deprecated ffmpeg APIs. - Fixed #160: added support for WAV and AIF files.
- Fixed #133: properly label and sort blank / empty category names as
[unknown]
and ensure they are returned at the bottom of their respective lists.
musikdroid
- Allow for transcoder format selection in
musikdroid
's settings screen. (Part of #290) - Upgraded
musikdroid
to use the latest stable Android Studio and other dependencies (ExoPlayer, AndroidX, etc), plus a bunch of compiler warning fixes. - Fixed #296: notification not dismissed on stopping playback on some devices running Android 10
musikcube 0.70.0
musikcube:
- new
MPRIS
plugin for controlling playback on Linux (brunosmmm) - 64-bit binaries for Windows (note:
Milkdrop
only supports 32-bit) - ru_RU update (adem4ik)
- it_IT update (alexpovel)
chocolately
install instructions (majkinetor)- FreeBSD install instructions (0mp)
- Dependency upgrades on Windows (
libcurl
,PDCurses
,libogg
,LAME
,ffmpeg
) - A couple small tweaks / fixes to widget focus behavior
- Raspberry Pi 4 support
- Debian
Buster
support - Ubuntu
Eoan
support - Ensure release binaries are stripped on macOS and Linux
musikdroid:
- Code cleanup and refactors with clearer names for major subsystems
- Dependency upgrades, including
ExoPlayer
andAndroidX
libraries
musikcube 0.65.1
musikcube:
- manually patched
websocketpp
to fixboost 1.70
compatibility. this allows us to compile on macOS again. for more information, see here: zaphoyd/websocketpp#814
musikcube 0.65.0
musikcube:
- removed vcredist runtime requirement on windows
- added support for Ubuntu Disco
- added support for Fedora 30
- prepared for lyrics integration, but still waiting for an
audd.io
key.
musikdroid:
- added a new "offline" tab to the browse screen
- moved settings and other overflow options to the left side of the main screen's toolbar.
- added settings > advanced > diagnostics screen to show app runtime, wakelock acquisition time and status, and service status.
- added a "download" option for song rows -- this can be used to download songs for ringtones, or for playback in offline players.
- added the ability to seek playback on secondary screens
- removed some old settings that are no longer useful
- updated to AndroidX