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.