All noticeable changes in the project are documented in this file.
Format is based on Keep a Changelog.
This project uses semantic versions.
Update dependencies
Adapt to dependencies' changes
- Adapt to rtcycler changes
- Rework middleware code
- Update dependencies, cleanup comments
Twenty percent
- Fix segfaults
- Opening supported playlist files
- Read-only queries
- Task to generate deb package
- Handling images generation
- Display proper duration from cli
- Collecion name's index must be unique
- Use rtcycler
- Inject playback events into services
- Refactoring, misc. tweaks
- Rearrange some packages and fix tests
- Update .golanci.yml and fix new issues
Misc. changes
- Panic on subscription-related enum
- Race conditions
- Resizable playlist columns
- Updated protoc-gen-go version
- Updated Go version and dependencies
- Increased isolation of concerns
- Improved unloader performance
- Improved thread safety and performance
- Cleaned up subscriptions and PlaybackChanged channel
- Simplified Taskfile tasks
- Improved logrus.Entry usage
- Made init() the topmost function
New and improved features
- Exporting playlist from context menu
- Multiple selection in playlists
- Toggle selection in query results
- Removing a playlist group
- Collection hierarchy switch
- The playlist merge task
- Perspective activation
- Playback seek
- Keyboard events for the delete key.
- Rework collection settings implementation
- Progress bar seek cleanup
- Improve/complete collection management features
- Refactor store.values in terms of gtk.TreeModel.
- Implement a better column renderer generator
- Lock selected tree-view values until consumed or reset.
- Further separate
store
from calls (a.k.a.dialer
)- Create a gtk/utils package
Features and fixes
- Handling of deleted item returned by
poser.DeleteAt
- Ensure MPRIS updates are exclusive
- Ensure queue and playlists are ordered before calling poser
- Status bar digest context
- Track duration discovery
- Config file for golangci-lint
- MPPRIS' Player.CanGoNext
- Emit proper MPRIS signal when playback changes
- Ensure proper playback unload
- Update protoc-gen-go-grpc version
- Handle deprecations
- Ignore playlist.setFocused error
- Pick a better icon for dynamic mode
Fixes and dependencies
sanityCheck
on GTK's side- Ensure treview selection values are valid
- Upgrade Go version
- Update dependencies
- Refactor/complete MPRIS implementation
- Simplify handling of pointer slices
- Abstract list handler out
- Make opening query as playlist the default
- Refactor Taskfile
- Rename web directory to mobile
- Defer deletion of transient playlists
- Embed GTK resources
Papercuts
- Latency issue when stopping playback
- Focus request for GUI playlists
- GtkApplication, to ensure there's only one GTK instance running
- Played threshold when previousEvent is issued
- If track position is below threshold, restart current playback
- Disable video and text in playback
- Reduce the number of IdleAdd calls for playbar-related updates
- Don't rebuild playlists from scratch after every update
- Use a separate db session for scanning tracks
- Update tests
Features, fixes and improvements
- Segfault when finishing playback
- Crash related to query_parse_seeking
- Query dialog limit and rating
- Implement PLS import/export
- GUI validations on unique names
- Playlist export task
- Adding a ollection from the GUI
- Creating playlist groups
- Adjustments to icon
- Switch GStreamer bindings
- Disable items not yet implemented
- Add default playlist groups
- There should be one default playlist group per perspective
Transient
should be a property of the playlist
- Truncate duration for display purposes
- Improve database cleanup
- Split large source files
- Add some consistency to naming
Playlists and context menus
- Playlist closing issue, by not relying upon GtkNotebook's page number
- Trim playlist name when importing M3U file
- Appending to playlist/queue from query
- Creating playlist from query
- Unimplemented MPRIS properties
- Playback list task
- New icon
- Unify context menus common code
- Conditionally disable menu items
- Reduced the number of IdleAdd calls
- Allow editing closed playlists
- Do not send tracks for closed open-playlists
M3U playlists and MPRIS support
- Importing M3U playlists
- Partial MPRIS support
- Move application interfaces out of internal
- Conditionally update playbar model from playback
Implement playbars
UI improvements and updated dependencies
- Query tree not refreshing properly after delete
- Play previous
- Issues with TreeView selections
- Display logo as cover
- Set application's subtitle to current playback
- Updated dependencies
- Issue initial event after any collection change
- Reimplement collection tree
Features, fixes and improvements, again
- The task
serve off --force
not woring while the GTK client is active
- Own Interceptors
- Progress bar
- Context menu to collections
- Context menu to music queue
- Settings menu
- Collections manager
- Quit all
- Queries tab
- Show cover if available
- The
noWait
option to serve off - A hack to allow exiting the server while stream is paused
- Improved Idler encapsulation
- The
Off
method shold be exempted from going to the idle stack - Simplify client connections
- Refactorings
- Client connections should be handled from gtk/store
- Obtaining values from GtkTreeModel should be handled in just one place
- Anticipate gtk/pane becoming way too big to handle
- Unloaders should be handled in a specific order. In particular:
- Engine must not be unloaded while server requests are possible;
- Database should still be available when unloading engine
- Deduplicate covers during scanning
- Minimize db interaction during playback
- Allow non-printable characters in qparams
- Use Label for title, artist, source in gtk, instead of TextView
- CollectionTrack (since it was one-to-one)
- Debug channel
Even more features, fixes and improvements
- Compilation warnings
- Testing
- Playback, Queue and Collection subscriptions
- GTK playback, music queue and collections treeview
- Interrupt signal
- Misc. changes to queue and collections treeviews
- Database-related tweaks
- Allow explicitly forcing application's exit
- Get rid of oneof in playback proto message
- Use incerceptors for logging and idle handling
More features and improvements
- Issue when stopping engine with pending queue
- Some testing
- Random column to query lists
- Showing track info from queue when available
- Some interfaces for the future
- Query boundaries should always apply
- Refactor base
- Move location and id sanity checks to the API level
Fixes, features, improvements
- Multiple idle requests and playback stop issues
- Id-as-location issue
- Pointer-in-stack issue
- Implemented queue move
- Added configurable query limit
- Simplified query by
- Reduced log pollution by debug
- Added missing seed
- Query task for searching tracks in collections
- Display related enhancements to the playback and query tasks
- Reimplemented base.Idle by cancellable context
Implement collection
Complete queue implementation
Implement basic playback
- Unloader and idle stuff
- Database layer
- Logger middleware
- Perspectives
- Basic playback, including queue capabilities
- Renamed protobuf generated package
- This is to avoid confusion with the playback's short name and prefix
Initial release