pianod2 ChangeLog
=================

For project status check the homepage: http://deviousfish.com/pianod2

A list of major milestones since the project's inception can be found at:
http://deviousfish.com/pianod2/milestones.html

Detailed records of recent changes, as reported in SVN logs,
are available at: http://deviousfish.com/pianod2/status.html#recentprogress

r343 (2020-06-08):
- Fix Pandora items reporting as queueable when they aren't
- Fix occasional Pandora search failures

r336 (2020-05-05):
- Merge Parsnip and m4/autconf changes from Proximmon
- Update configure.ac to use new macros
- Refactor MusicLibrary to reduce template use.

r323 (2020-04-27):
- Proximity: Add level checks aroung all logging.
- Read configuration presence/departure parameters.
- Better critical error handling.
- Refactor to allow compilation without libdnet.
- Add bluetooth support for OS X.

r320 (2020-04-26):
- Write man page for proximmon & proximmon-config

r319 (2020-04-26):
- configure: Improve ease of build with manually-installed ffmpeg
- proximity: Implement IPv4 detection, bluetooth on Linux
- proximity: General refactoring and architecture cleanup, fix thread safety

r317 (2020-04-17):
- Client, search pane: Fix search type request
- Include utility to provide proximity tracking

r316 (2020-04-15):
- Store library/cache to disk, restore on startup, implement replay.
- Fixes and improvements to Pandora source.
- Filesystem source: Added genre aggregation.

r312 (2020-04-11):
- Fix session expiration timer bug.
- Reimplement proxy support for Pandora
- Update Pandora startup protocol documentation
- Make copy of song before changing its station association.
- Implement Pandora pause and resume notifications
- Client: add to support for cache size setting, remove Pandora Plus checkbox
- Audio engine: Set and lock queue mode in stopped upon shutdown notification

r310 (2020-04-10):
- Move to the Pandora REST API.
- Replace the JSON library in Pandora.

r309 (2020-03-24):
- Parsnip: Rework asType() method.
- Remove problematic assert in Pandora source triggered by refactoring in r307.

r307 (2020-03-20):
- Update config file to be able to detect other C++ standards flags.
- Modify library chooser algorithm to not bias album selecton by track count.
- Create Retainer <MusicThingie *>, refactor a few bits to use it.
- Add asArtist, asAlbum, AsPlaylist & asSong to avoid some dynamic_cast penalties.
- Parsnip: Fixes to avoid unnecessary copying.
- Rename media to media_manager, Users to user_manager, UsersType to UserManager.
- Convert global objects into pointers, Conductor initializes/destructs in required order.

r306 (2020-03-17):
- Move Parsnip range exceptions from JSON parsing to when accessed.
- Remove XML reading code.
- Refactor user data storage somewhat.
- Fix race condition with flushing and global destruction sequence at shutdown.

r304 (2020-03-15):
- Replace XML datastores with JSON.  XML reading remains, allowing conversion
  of existing data.

r301:
- Fix Pandora crash.

r300:
- Fix portability bug: missing #include in threadedmediaplayer.cpp.

r299:
- Updates for FFmpeg 4.0 compatibility.

r298:
- Fixes for gzstream header-and-library detection

r296:
- libavdevices output: add flush timing controls to prevent audio cut-off or deadlock.
- piano: do not include spurious output in data responses.
- configure: check if explicit libc++ linking is required.

r292:
- Update piano script to reflect changes for pianod2 and add TLS.
- Add TLS testing to test script.

r291:
- Football: Check file-serve pathname for symbolic links to other areas
  outside path.
- Fixed some minor memory leaks.

r289:
- Football: respect system hosts.allow, hosts.deny files (hosts_access(5)).

r288:
- Client internationalization: Link en_us files as en (no locale).
  Include en, en_us in distribution.

r286:
- man page: document what happens when shadowing disabled.
- Ignore SIGPIPE if we don't have SO_NOSIGPIPE, regardless of having
  MSG_NOSIGNAL.  Fixes abort on TLS connections on Linux/mbedtls.
- Football: OpenSSL: Use better SSL/TLS choices/ ideally TLS_server_method,
  when available.
- Client login: Fix broken guest/visitor login.

r269 .. 277:
- Adjust timing issue in test script.
- LibreSSL support.
- Add Dejay privilege (allows requests/cancellations)
- Refactor bidirectional coupling out of service manager/media manager.
- Fix bug in filter generator for item matching on artist name.
  Resolves seeding "Invalid parameter" and frequent "ambiguous match" issues.
- Remove dead code.
- Improvements to configure: check for header files, not just libraries.


r262 .. r268:
- Improvements to tonegenerator left/right channel support
- Fixes to history display in client
- Enhancements to filter-to-query converter from aborted Spotify integration.
- Fix queue management bug when cancelling upcoming songs.
- Fixes for finding json.h header file.

r257 ... r261:

- Fix unchecked exception thrown by GstreamerPlayer, improve reliability,
  and avoid deadlocking Gstreamer with rapid state changes.
- Increase Z-index of status/error messages to ensure they display.
- Fix translation string for CONFIRM_ADDED_TO
- Fix translate() function for multiple substitutions
- Fix status reporting from track seed add/new playlist pop-up
- Refactor TrackView to utilize data from QueueView, fix intermittent
  end-of-track assertion from QueueView.
- Strip assertions from client for release.

r254:

- pianod: Add transient playlist
- Make ratings into enum class, refactor.  Update filter & autotuning to remove rounding/accept precise values.
- filter: add toString() function, refactor
- Football: accept apostrophe as quote to match filter grammar.
- Football, filter: use double quote within quoted string to embed quote character.
- Update client quote handling.
- Add setting for preroll duration to audio options.  Added code to detect and complain when this applies.

r253:

- pianod: Add additional checks for requestable sources when expanding thingies to their songs, which could be weaseled past earlier checks using an ID predicate.
- Trackview: add Feedback indicating autotuning enabled
- Client: troubleshoot diagnostic reporting.

r252:

- Add a predicate form to select a different source
- Added ways to forget & rename sources
- Client: Corresponding changes to Source View.
- Protocol: SOURCE DISCONNECT deprecates SOURCE DELETE.

r251:

- Display sort field indicators in table headings
- Access to sort controls on small screens.
- Rename playlists via Seed view
- Check client for instances of "Pandora One" --> Pandora Plus

r250:

- Write langlint/internationalization checker tool.
- Update translations.

r249:

- Enhance & rework internationalization.

r248:

- Refactor TableView out of seed & source views.
- Implement queue view: Show history, current, and upcoming songs as list
  in queue view.
- QueueView: Dequeue/skip/repeat actions on each song.

r247:

- Playlist view: Correct display of "Play" activator, which was intermittent.
- Trackview: Disable play/pause button when idle.
- Trackview: album/artist names trigger search in searchview; song does
  so when it's not being used for more information.
- SourceView: Add success message on source removal.
- SourceView: Corrections to field hiding.

r246:

- Seed view: clear results table when removing a playlist.
- Search view: Implement create playlist from result set, both smart
  and standard.
- Pianod: Exit with error if -S (shadow) option given when build without support.
- Console: Add privileges to player action buttons.  Add tooltip with
  column name to numeric toggles.
- Replace “X Remove seed” in seedview with button stylings for consistency

r245:

- Fix error/status to accept response and translate code.
- Flash errors on-screen, so you know something went wrong even if the
  status line is scrolled out of view.
- Update showView() to accept a list of views, and use it to display most
  useful views on client startup.
- Refactor Comm.execute
- Fixed scrolling within seedview.
- Console: Allow hiding any field by number.

r244:

- Improved autoconf checks for shadowing mechanism and report decision in
  summary.
- Pianod: Remove overly tight assertion in authentication checks.
- Fix trackview actions processing (prevented rating & seeding)

r243:

Track view additional actions pop-up:
- [x] Skip current song, dequeue displayed future song, replay historical song
- [x] Clear all requests
- [x] Randomization algorithm selector
- [x] Crossfade level & duration settings
- [x] Room chooser
- [x] Remove admin pane altogether.  Stop is in playlist selector,
       play/pause on trackview, and shutdown becomes a console function.
- [x] Update Pandora One —> Pandora Plus

r242:

- Replace JavaScript with TypeScript
- Change pop-up vertical location to fixed to put it on screen when needed.



r211
----
Bugfixes: source restore, filter by genres, correct application quit.
Improve reliability of OS X metadata reader.

r208
----
As of r208, all 4 SSL libraries have been hand-tested on my Mac with `openssl s_client` and a few browsers; all work, although Chrome rejects SecureTransport’s TLS version.  On Raspbian, OpenSSL gives a warning about `SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:359`, while GnuTLS tries but browsers reject SSL3.  Since both work fine on my Mac, I’m blaming the library and/or configuration.  I didn’t test mbed TLS on Linux.


r208
----
New dependency on cURL/libcurl for Pandora.  Football can now use
GnuTLS, mbed TLS, OpenSSL or Apple’s SecureTransport.  Configure
will choose one that's available; use `configure --with-tls=package`
to force.  See INSTALL.


