Added an initial input plug-in for playing local Opus audio files (streaming support will follow later once the base plug-in including it's handling of metadata editing has been confirmed as working ok)
Added 4 input plug-ins to the installer which add support for DS Sound Format (in_2sf.dll), Game Boy Advance Sound Format (in_gsf.dll), DS Nitro Composer Sound Format (in_ncsf.dll) & SNES Sound Format (in_snsf.dll) which increases the out of the box support for video game related format (these are modified from https://github.com/CyberBotX/in_xsf/ to improve WACUP the integration & resolve some issues)
Added reporting of the overall initial loading time (more might be happening after this time) & the time for the main aspects of the core to load into the load profiling output (some might find it useful if your WACUP install seems to take an unreasonable amount of time as a means of confirming if that is the case)
Added options onto the equaliser window 'auto' button right-click menu & the appropriate equaliser under modern skins to control additional equaliser preset handling to auto-select based on the reported genre of the playing item (this is the merging of the old 'Auto EQ' plug-in into the WACUP core to make things a bit quicker & more seemless with this feature that many had wanted over the years)
Added the helper IPC_TOGGLE_MUTE & IPC_IS_MUTED api for plug-ins to use to be able to toggle the current playback volume between muted & the previous level (if the user hasn't changed it since the api was called) & to check if the muted state is currently set (please note that this does not relate to the self managed mute option that modern skins offer)
Added a .beat time (Swatch Internet Time) mode to the Big Clock plug-in base on a request from the Discord server (niche player gets a niche feature so it somewhat makes sense)
Added compatibility changes to allow the old (circa 2003) Bouncing Cube visualisation plug-in to work under WACUP (this helps resolve it needing to be run as an administrator for the configuration options to be applied as well as resolving issues with the window size & position due to a conflict with OS DPI scaling vs a non-DPI based API that the plug-in uses with it's window position handling)
Added /REMOVEPLAYLIST which accepts a playlist guid (such as from /ENUMPLAYLISTS) to complement the existing playlist command-line actions
Added an 'Appearance' preferences page under the 'General' preferences node where the playlist editor font controls now reside (this has applied to everything instead of just the playlist editor which is why it's been moved from the 'Playlist' preferences page) along with using skinned preferences & skinned menus as well as some other non-skin specific options (more will be moved / added to this preference page in later builds)
Added options on the 'Appearance' preferences page to make it possible to adjust the font used for the skinned menus (new addition which Winamp didn't offer which should make them less jarring to use)
Added a new IPC_WACUP_HAS_LOADED notification to know that loading should have completed enough
Added an OS compatibility check for the 'FaultTolerantHeap' being enabled which can occur due to the OS being helpful if there are too many crashes (e.g. during development) but it can cause more problems such as modern skin loading issues & more crashes on closing (hence the need to make it more obvious if this has been enabled as it's caught me out a few times)
Added support to the appropriate WACUP provided media library plug-ins to allow for type to find to work (e.g. with the list focused it'll jump to the item that matches based on what's entered which Explorer & other instances of listview controls do & something I'd missed compared to the Winamp versions of the plug-ins)
Changed the classic skin main & equaliser windows to now be drawn & handled just by the WACUP core instead of letting the Winamp core do it - this is a MASSIVE change & there's likely to be some minor issues with things maybe not reacting like Winamp did though it's also allowed for refining some actions (e.g. easier access to the known equaliser presets via the menus instead of going into a dialog)
Changed the skinned menu handling implementation to not be provided via Winamp which is a bit visual different but should improve consistency to the OS menu handling & when WACUP is on high-dpi displays
Changed how the WACUP loader is managed so it will now only remain running to do the update check (if applicable) before closing instead of just sitting there waiting for the spawned Winamp process to close (this is in response to an issue with Stereo Tool DSP v9.70 where it causes WACUP to hang on loading until the waiting loader process exits - not sure what that DSP changed from v9.63 but this change was going to happen eventually as part of the work to remove the use of winamp.original so why not do it now :) )
Changed some of the metadata handling to avoid some more non-metadata specific values being queried from the taglib based handling (seen in a waveform seeker crash when the 'type' was being queried)
Changed how some of the internal main playlist title sanitisation is done in response to a crash report seen within that handling
Changed how the reading in of the configuration is done to hopefully work around an odd runtime handling issue seen in some crash reports which prevents WACUP from being able to complete its loading
Changed libvorbis.dll to export some more methods that are needed by the recent updates below (the downside of trying to size optimise dlls at times)
Changed the handling of plug-in unloading to try to deal with some odd crashes seen when trying to determine the validity of the plug-in information (e.g. related to stacked plug-ins)
Changed the media library plug-ins to be able to directly indicate they want their preferences to be placed under the 'media library' node so the media library core doesn't need to figure it out (that behaviour is still maintained for compatibility with older media library plug-ins)
Changed ml_wire.dll to now be named as ml_podcast.dll since this makes more sense when browsing the plug-ins & because I no longer need to maintain compatibility with the legacy media library core plug-in
Changed the Waveform Seeker plug-in to not process any files supported by the newly added in_xsf plug-ins (see top) due to it triggering thread-safety issues within the plug-ins (not ideal but it's better than it crashing until something can hopefully be done to the upstream copies of the plug-ins to fully resolve this issue)
Changed the media library plug-ins provided with WACUP to use a newer revision of the media library plug-in interface (this won't prevent older media library plug-ins from being used & like has been done with other plug-ins under WACUP offers better integration for the native WACUP plug-ins)
Changed the media library plug-ins to use more shared code for a small saving whilst changing them to use some direct library api calls instead of the slower SendMessage(..) based calls
Changed how the export menu on the library button & window menu (if using a modern skin) are handled to better ensure they update if there's changes with the library views available (this also removes the plug-in trying to pre-populate on loading for a small performance improvement on loading)
Changed how the album art plug-in works to use a simple cache to help minimise its overall impact on WACUP's load time as well as reducing how often it re-queries metadata
Changed the references to use of the spacebar in the milkdrop window to better reflect that shift+spacebar is the preferred soft-cut to next preset action from trying to better ensure that spacebar works uniformly for toggling the playback state)
Changed how the Win7shell plug-in & related DWM (desktop window manager) methods are handled when attempting to use WACUP on some esoteric setups where the DWM methods needed aren't available
Changed how the main playlist editor drawing is handled to minimise the chances with some modern skins on loading / change from another skin (e.g. Big Bento) for it to show the items using the classic base skin colour with a fallback system font (this also offers a small reduction on loading times but the main thing is to avoid the jarring mixed look whilst the skin engine is still doing it's initial loading)
Changed how playlist entries are handled when read to minimise associated drive activity (especially when using HDDs over SSDs) & to avoid offline UNC based paths triggering validity checks to help resolve reported issues with excessively long initial loading times (e.g. a 1200 entry test playlist went from 33ms to 6ms be loaded on my development machine - 6ms is how long a 300 entry playlist before the changes would take for comparison - the change also meant a 4.6s wait with a playlist containing an UNC path went away)
Changed how the library bookmark & podcast download views work to reduce their impact on initial loading time if they were the last view prior to closing (is more work that needs to be done for the other library plug-ins)
Changed how the classic skin oscilloscope is handled to have it better fill the available area it's drawn into whilst making it less likely to appear as top heavy when using the solid drawing mode
Changed some of the handling around the Alt+3 File Info dialog to better deal with edits failing to be saved (e.g. if it cannot be applied on the currently playing file)
Changed some of the handling around trying to update the metadata of the currently playing file (still more to do but this should help with some of the reported issues)
Changed the plug-in profiling support to release its log file where possible once loading has finished
Changed the skinned preferences handling to prevent trying to override the winamp.ini setting to manually enable it when running WACUP on WINE
Changed the write ratings option to be disabled if the replacement local library plug-in is being used (still need to sort out a better shared handling for this so it's not reliant on a local library plug-in though it will still remain as a default option when re-implemented - we can all thank a certain singer user for that)
Changed how the splash screen on start-up action is handled so it will now be cancelled just after it's loaded instead of waiting for a generic time (also from testing, the splash screen seems to add around 10% to the initial loading time so keep that in mind if you want WACUP to load as fast as possible)
Changed how the oscilloscope data is rendered in the main window visualisation & related plug-in api calls so it should now be oriented in the correct way compared to other software
Changed how Milkdrop deals with running on a monitor in portrait mode to now by default attempt to fill the monitor instead of only filling half of it (this can be manually done via the 'dualhead' options)
Changed how the library playlists root & child playlist views (if enabled) are managed to reduce the delay / impact of them upon the initial load time of WACUP if they're the last view being restored
Changed how the classic skin equaliser window is handled compared to Winamp to better ensure that it's not going to appear as can sometimes happen (this change replaces a prior WACUP patch for this issue)
Changed the /RESETCLASSICSKINPOS to also reset the double-size mode to off & better ensure that the classic skin main window will be in a visible non-windowshaded state when using this command-line option
Changed the /STARTMIN & /STARTMAX command-line actions to now be handled by the WACUP loader which makes loading cleaner & also prevents it being applied to an existing running instance (which Winamp is incorrectly doing e.g. starting with /STARTMIN & then calling it again will trigger the already started instance to come into view when that's not the right behaviour for a loading only related option)
Changed some of the paramater validation of the volume & panning apis to make them more robust to bad input (to prevent values wrapping around oddly) along with having the new value returned in the api calls (this might be helpful for some to check what was actually set, etc)
Changed the library playlist view handling to now save any metadata information obtained when viewing playlist items that didn't already have that information stored (this reduces duplicate processing when viewing the playlist & also can improve loading times due to not needing to trigger an immediate loading of the local library database)
Changed to have WACUP provide the base services manager & callbacks implementations instead of Winamp (this isn't the final implementation as there's patching & hooking required to get it working but it's enough to help test that it works as this took a few days to get it to a seemingly stable solution)
Changed how the child process determines the path of the WACUP loader (e.g. wacup.exe or winamp.exe) to resolve some issues now that the loader program isn't kept around after starting
Changed to have WACUP now provide the 'PE_Info' & 'VID_Info' implementation (the video support has been broken for a while) once I finally figured out the 3 files from the Winamp3/Wasabi SDK that were needing to be used directly or slightly modified or provided enough information to be able to create the definition for the dispatchable class that needed to be interacted with (aka it took months of on/off work to figure this out)
Changed how the Win7shell plug-in handles its rendering to now be done in it's own thread which should help resolve some of the hang related crashes seen with some setups (e.g. due to the OS fonts folder containing lots of fonts which can be slow to enumerate &/or triggering a font parsing crash)
Changed some of the core & plug-in menu handling (e.g. the exporter plug-in menu insertion) to resolve some issues found as part of replacing the skinned menu handling
Changed some of the preference pages to now have an obvious ATF help link if ATF is used on it (e.g. the Discord preferences now make it more obvious what is used to be able to refine what's shown to others)
Changed the podcast view's edit action to now support changing the feed url without having to manually add a new feed & remove the existing feed (there might be some more work required to refine this)
Changed the installer to no longer rely on the helper findwinamp.dll by using the equivalent handling from the WACUP core dll instead (this also saves ~50KB from the installer size)
Changed the album artwork & lyrics plug-ins to respond to a new IPC_PLAYLIST_ITEM_REMOVED api to better ensure they update as expected if the item they are showing has been deleted from the main playlist
Changed the autoplay handling so it now waits until WACUP is known to be in a loaded position which should help to avoid some issues experienced with modern skins not receiving some notification messages (this removes the need for the delay load option)
Changed how the vgmstream input plug-in handles file conversion to make it more compatible with the common formats (e.g. to MP3 which only supports mono or stereo input) - there's more to do for this but it'll do as a workaround for the time being
Changed how the WACUP files are compiled to better leverage the build machine's capabilities to save around 1min 30sec
Changed the main implementation of the Three Mode Repeat plug-in (gen_3mode.dll) to now be done directly within the WACUP core as part of taking over the classic skin's main window handling
Fixed importing some files into the replacement local library database causing a crash due to an issue with processing some of the associated artwork information for the file
Fixed the probable cause of the Waveform Wrapper plug-in sometimes causing a crash when attempting to process the redirected 'isourfile' check by in_mp3
Fixed the probable cause of the WINE detection check in the crash reporter causing the crash reporter to crash (this change based on a recent crash report seen showing this weirdness)
Fixed the GetLanguageIdentifier(..) localisation stub to return a hard-coded 'en-US' response to resolve a modern skin compatibility issue
Fixed some font handling related issues with the Big Clock plug-in such as when it's already in double-size mode or if the font selection dialog is cancelled which would reset the font back to generic one until restarting WACUP
Fixed a random issue that could affect some setups causing them to hard-crash early on during loading
Fixed the main notification area icon tooltip text not updating as expected if it's been set to show the currently playing position
Fixed the main context menu on the classic skin video window frame not being correctly initialised (e.g. skins sub-menus not being populated)
Fixed a GDI object leak when triggering a classic skin refresh
Fixed some crashes related to loading of the Alt+3 File Info dialog & the mis-handling of the raw metadata dumping tab (e.g. doing so when a background ml_local library scan is active or if no information can be provided which could cause a cyclic querying & eventual crash)
Fixed the classic skin main window song ticker jumping oddly / showing a blank space at times (this was something I'd patched out but had managed to mess up some of the calculations due to using the wrong font which skewed things - was worse the longer the song title to be shown got)
Fixed the main window playback position not showing for the first second or so when playback is started under a classic skin (this was an issue caused by some of the live patching I'd been doing previously)
Fixed some of the Winamp core configuration options not being correctly read in & applied from a WACUP handling (e.g. the option to disable window snapping)
Fixed video playback output 'stopping' (it still happens but can't be seen) when moving the video window from the initial monitor that playback was started on to another one (was due to mis-understanding of an api parameter whilst trying to resolve a different issue)
Fixed (completely I hope) a flickering that can be seen when resizing the classic skin video window whilst a video is playing (was an odd directx vs normal window weirdness)
Fixed Not So Yasapi not allowing in_mp3 (Winamp's main stream handling plug-in) to play most streams given to it with it showing an error about not being able to save streams
Fixed the saving of M3U8 / M3U / PLS playlists to correctly handle titles with line breaks in to not break the subsequent reading of the playlist (this was found from an internet radio station which had line breaks as part of it's station name)
Fixed the equaliser window tooltip appearing being behind the equaliser window at times
Fixed the equaliser auto loading mode not working for some time due to the Winamp core method not being called (no longer an issue as it's all done natively by WACUP now)
Fixed the IPC_REGISTER_LOWORD_COMMAND handling so it will return the pre-incremented number which helps fix a conflict found with the batch allocation (e.g. toggle an option & something else also reacts)
Fixed the podcast downloads window sometimes not updating the status of the currently downloading items due to a timing issue with the view initialisation
Fixed the handling of some of the core windows when using a classic skin not being saved / restored in an expected manner when the monitor those windows were on are deemed to be to the left of the main monitor position (aka not handling negative window positions correctly)
Fixed the scrollbar handling when using the replacement media library core not reacting correctly if the window showing the scrollbar was to the left of the main monitor position (see above)
Fixed the library history plug-in not always updating the playback state if the option to wait is unchecked or the internal timer manages to fire before the reported playback position is valid
Fixed the current playback time position in the classic skin playlist editor window (bottom right) not using the xx:xx style of time formatting when not using the skinned font for improved consistency
Fixed clicking the current playback time position in the classic skin playlist editor window (bottom right) not toggling the time elapsed / remaining mode as Winamp does
Fixed the classic skin window docking not working correctly when video support is disabled (either by de-selecting video support during installation or by later disabling the appropriate input plug-ins)
Fixed the video menu items incorrectly showing in the main right-click & modern skin windows menu when there's no applicable video support enabled in the current WACUP instance
Fixed the classic skin main window songticker & all other parts of the playlist editor window to use the appropriate defined font from the skin or via the the custom font selection on the Playlist preferences page (this may not be ideal for some of the fonts that can be specified vs the available area to be drawn into but it should make things a bit more consistent with the look of the classic skin where it's used - this also marks a deviation away from Winamp which only used Arial for the selection / playback state in the bottom right-corner of the playlist editor window)
Fixed the vertical divider on the library playlists root view not always being positioned correctly on the first loading of the view
Fixed selecting no playlist in the library playlists root view not being remembered the next time the library playlists view is loaded
Fixed changing the long time formatting option on the General preferences page not live updating the classic skin playlist editor window selection area immediately to match
Fixed a memory leak in the settings cache related to the reading of already cached strings (oops)
Fixed a crash seen with some visualisation plug-ins when trying to access it's config when the plug-in is already running
Fixed the playlist manager service not always loading the existing playlists prior to attempting to add a new playlist to it (found during the command-line handling changes)
Fixed removing a library playlist tiggering the library to switch to the current root library view instead of just updating the library playlists list
Fixed some inconsistencies with the installer & how it is setting the version in some of the files along with the build year (there were some 2020 references still which shouldn't happen now its auto-filling at the time of building)
Fixed the video handling not supporting updating the 'VID_Info' text feed element when using modern skins (this was 'broken' as I didn't have a way until now to be able to provide the information in a manner that the modern skin required)
Fixed trying to inspect added playlist urls with /;listen.pls on them as a playlist which would cause WACUP to download the stream (not sure why these sorts of urls are being provided to some as they should be either /listen.pls or /; but that's the mess of internet streaming at times!)
Fixed the plug-in description for the dsp_compwide plug-in to suggest using the newer dsp_1by1enh plug-in which works better compared to the older one (it might be a different filename but it's the continuation of the older plug-in)
Fixed the library playlist view not showing the stars on the rating submenu with the nice unicode stars
Fixed the playlists submenu on the modern skin playlist editor file menu not working as expected (this was also causing some issues with the new skinned menu handling)
Fixed the double-size & manual playlist advance options in the main right-click menu not being checked on the menu if enabled but the setting hasn't been changed during that instance
Fixed vgmstream based playback not updating the visualisations as expected due to too many samples being provided by the plug-in to the core (not helped that the decode thread code wasn't sync'd correctly with the upstream repository)
Fixed an issue with the skin preview in the setup skin selection dialog where it could cause the skin previews to fail to load despite the files it's trying to show being there
Fixed the jump forward / back by 10 items not scrolling the new current playlist item into view as expected for those actions
Fixed drag + dropping items into the main playlist either on or before the current playlist item incorrectly updating the new position of the current item
Fixed trying to convert OGG files via the format converter often reporting not being able to find an encoder or producing an empty / no audio file due to a decoder initialisation issue (a pebkac moment)
Fixed the Ctrl+Alt+End global hotkey (or any global hotkey which specified the Alt key for the stop action) to no longer incorrectly toggle the next on stop action
Fixed issues with multi-queued files in the main playlist editor showing the final position of the queued item instead of the first queued item (this brings things into line with the JTF dialog & was due to some of the integration changes which meant it kept iterating over the queued items instead of just reporting the first occurance within the queue)
Removed the use of the Winamp 5.666 media library core plug-in (gen_ml.dll) to now be an all WACUP provided implementation as part of the WACUP core (there's an easy option on the Media Library preferences page to enable or disable the whole media library feature) though there will be some issues / missing features with this for the interim (mostly due to a lack of skinned menus) but now is the time to use it :)
Updated cacert.pem to latest (25 May 2021)
Updated libcurl (libcurl.dll) to 7.77.0 (26 May 2021)
Updated libexpat (xml.w5s) to 2.4.1 (23 May 2021)
Updated libjpeg-turbo (image.w5s) to 2.1.0 (23 Apr 2021)
Updated in_xsf to the latest Git commit from 21 Mar 2021
Updated libogg (libvorbis.dll) to 1.3.5 (3 Jun 2021)
Updated libopenmpt (in_mod.dll) to 0.5.9.15019 (16 May 2021)
Updated libsidplayfp (in_sidious.dll) to 2.1.2 (19 Apr 2021)
Updated libsndfile (libsndfile.dll) to 1.1.0 beta 1 (13 Jun 2021)
Updated lzma (lzma.dll) to 21.02 (6 May 2021)
Updated minizip-ng (zlib.dll) to 3.0.2 (10 May 2021)
Updated mpg123 (mpg123.dll) to 1.28.0 (5 Jun 2021)
Updated Monkey's Audio (in_ape.dll) to 6.30 (29 Jun 2021)
Updated OpenSSL (libcurl.dll) to 1.1.1k (25 Mar 2021)
Updated Patreon list (30 Jun 2021)
Updated rapidjson to the current github commit (25 Mar 2021)
Updated unrar (unrar.dll) to 6.2 (11 Jun 2021)
Updated vorbis-tools (in_vorbis.dll) to 1.4.7 (21 Jan 2021)
Updated vgmstream (in_vgmstream.dll) to the latest Git commit from 25 Jun 2021