Added support for classic skin loading to look for cursors in a 'Cursors' sub-folder within the skin (folder or archive format) so it's a bit cleaner for skinners who want to use it instead of dumping everything in the root of the skin folder / archive
Added resetting of the 3rd party lyricsplugin window settings to the /RESETCLASSICSKINPOS & /REPAIR command-line actions
Added an option on the general tab of the modern skin preferences page so it's possible to disable the timer.w5s related crash workaround for those that it doesn't crash & find it breaks some skin features
Added an option on the playlist preferences page so it's possible to disable the behavioural change to prevent the currently playing item being always scrolled into view when there's now an item selected
Added Ctrl+Shift+A as a playlist window shortcut to quickly remove the selection from any of the playlist items (this is applied in both the main playlist editor window as well as library playlist views)
Added Ctrl + double-click on the classic skin playlist editor's 'selection' button to trigger the invert selection action
Added support to the button skinning to now handle the split style (hadn't gotten around to implementing that in my replacement skinning core) which should also be more legible as it's using the filled down unicode arrow character from the font instead of a fixed small image as Winamp's media library implementation was doing which wasn't scaled to fit unlike this new implementation :)
Added support to the /enableplugin & /disableplugin command-line options so that specifying gen_ml or gen_ml.dll or library will allow for WACUP's media library core to be controlled with this option in a comparable manner to what the earlier builds which used the separate Winamp plug-in required for it to be controlled
Added better plug-in support for those shipped with WACUP that can be forced to output mono audio if the playback option to force mono playback is enabled (this is still incomplete & a post-processing step will most likely be implemented so there's not a reliance on plug-ins to be updated to support this playback mode)
Changed how classic skin loading is done to now attempt to support older style skins created for the likes of XMMS where the Windows LoadImage(..) method doesn't like the extended bitmap format used (this is not a 100% solution as colour profiles & a few other things are not being handled but it should suffice based on what's been provided for testing so far)
Changed some of the NDE failure handling & command-line diagnostic reporting to hopefully prevent massively corrupted db files from looping on processing
Changed how some aspects of the classic skin eq window are updated to try to workaround a deadlock that's been seen for a while now from an install where NVDA is being used (am not 100% this will resolve the issue but it's the best that can be done for now)
Changed how the embedded windows are handled to better ensure the linked list is less likely to be something invalid being accessed based on some modern skin enginge related crashes seen
Changed how some of the internal metadata queries are handled to better avoid the input plug-ins being queried for values that are not going to be responded to as part of helping avoid dual file access for the currently playing item vs things that some of the modern skins might be trying to request which can in some causes cause a hang/crash
Changed the in_mp4 input plug-in to try & make better use of the information from the currently playing file if that's also being queried for metadata instead of trying to keep things separate (based on a recent crash report where the action of trying to re-open the currently file & it not going well)
Changed the modern skin loading error message to make it clearer why it cannot be loaded with the 64-bit build
Changed some of the handling in the win10shell plug-in to avoid a crash seen when the winrt reference unexpectedly goes away during an SMTC related update
Changed the ML_MSG_PLAYING_FILE api so the param2 now provides a media library core managed copy of the currently playing filepath string so the media library plug-ins don't also have to make a duplicate copy (unless how they work means it makes more sense) for a small saving on memory usage & keeping the plug-ins somewhat cleaner in their implementation
Changed the Songticker Text ATF option to allow for the playback_time* ATF values to trigger timed updates so it's possible to have the current playing position as part of the string being shown (based on a request via Discord) though if this is active it can cause increased CPU & lag in the updating of modern style skins (not applicable to this build) due to how the songticker update trigger has to be done (not a clean solution as I'd like) with the ATF string to achieve this is %playlist_position%. [%artist% - ]$if2(%title%,$filepart(%filename%)) '('$if2([%playback_time% / ]%length%,%length%)')'
Changed how the Streaming Url plug-in handles updating it's cache to delay it until a while after playback has started to help avoid too much contention & potentially causing a deadlock on song change / start
Changed some more of the NDE handling to better ensure that it's not going to fail when there's unrelated machine stability issues during it's multi-threaded saving of a database & it's index file to storage
Changed the history handling again to try to resolve an occassional deadlock that can occur when a database save is already in progress when ML_MSG_PLAYING_FILE is then received & it's necessary to query the database for the playback position to attempt to restore
Changed the local library handling again to make use of a similar handling change like with the history plug-in above though due to it being on a slower update cadence this was less likely to deadlock on itself
Changed how the settings cache is implemented to split out the external file modification watching to now be done as a shared internal service instead of specific to just this (e.g. for ml_ll watch folders)
Changed the handling of the patched call that relates to the modern skin engine's getSongInfoText(..) script call so it'll offer up some of the information about what's playing instead of requiring everything to be present (e.g. for MOD files where the bitrate is not known) so the skins can at least still show the appropriate channel & sample rate values which was not happening previously
Changed the send-to menu handling with all of the native WACUP plug-ins so they no longer rely on the SendMessage(..) based api that Winamp required the plug-ins to use (that api still exists for compatibility purposes but this makes things cleaner in less duplicate code & also minimises hitting things on the main ui thread which can be slow for some actions & incorrectly trigger the crash reporter)
Changed the ReplayGain processing plug-in to now prompt if there are files being processed when WACUP is attempted to be closed so it doesn't immediately close & lose any processing results not yet saved
Changed the restart WACUP handling to no longer attempt to do it if the reason for it closing is due to an in-progress system shutdown
Changed how the closing for WACUP is handled to better consolidate everything into a common handler instead of having to do things to keep the Winamp core happy as the code had evolved to do which makes it simpler for me to maintain going forward & should resolve some inconsistencies seen between normal closing & a quick close as the OS shutting down triggers which wasn't always being handled correctly
Changed some of the skinned control handling (mostly affecting listview & their headers) to reduce some of the overhead involved in applying skinning to them which may help with some lower spec systems
Changed some of the WACUP library plug-in initialisation to remove some duplicate processing that technically reduces load times but is probably not going to be noticeable outside of the profiling support
Changed how the WACUP provided media library plug-ins handle LVN_GETDISPINFO messages from their virtual listviews to now try to avoid processing requests for column information that cannot be seen (this is something that Windows seems to do where all of the columns are queried even if they're not within the visible area which especially for the local library results if many columns are set to be shown can make the scrolling & some interactions with them slow which this change helps reduce at the expense of doing some more processing to figure things out)
Changed the settings cachce to avoid milkdrop presets being loaded into it which could cause problems with long running instances & a never ending set of presets being added into the cache along with some loading & closing related issues due to lock contention
Changed the loading & closing profiling handling to reduce it's impact when enabled & to output some additional information for closing as well as trying to align the information so it's easier to read
Changed the vgmstream input plug-in to avoid doing additional processing in it's isourfile(..) method unless the plug-in configuration requires it (i.e. for the non-standard / additional file extensions)
Changed a bunch of the input plug-ins to drop their isourfile(..) when it's just a return 0 anyway which makes things a bit simpler so only those needing it (or are older 3rd party plug-ins) provide it
Changed how the notification area icon is removed to lessen the delay doing it causes to the overall closing of the WACUP process (aka more threads)
Changed the ordering of the initial files needed from within the installer to help reduce the time to get it to initially run however this doesn't really help if any A/V solutions are doing live scanning which is what led me to look into why I was seeing a long delay the first time the installer was run after being built but was ok on repeated runs with the same installer file (I know it's needed but A/V just causes too many issues at times)
Changed how the Streaming Source plug-in responds to being unloaded to make it much quicker instead of waiting for a fixed time before being able to react
Changed the playlist core to now be built into the WACUP core dll instead of being done as a w5s component which is a legacy from how WACUP was started & having this part of the core just makes things simpler to manage & ensure it's going to be there plus there's an ~59KB saving from merging things (the standalone dll size was 91KB so that's the fun that monolithic can sometimes bring!)
Changed the podcast downloads cache loading to minimise the impact of trying to obtain the length for downloads that were incompletely stored in the cache file
Changed how the core determines if there are video capable input plug-ins being used to reduce the impact on loading by having to query them via the metadata api with it now using either a reported flag for WACUP specific plug-ins or by looking for known input plug-ins with the older behaviour used where needed
Changed the DS Sound Format (in_2sf.dll) & Game Boy Advance Sound Format (in_gsf.dll) input plug-ins to minimise their initial loading impact which between them were approaching trying to allocate around 100MB of statically initialised buffers causing much longer dll loading times than was expected (this reduces the overall time for my dev install to load all of the input plug-ins by ~20% before the change)
Changed the Alt+3 File Info dialog handling to better reflect when it's viewing an item that does not have known write support & those changes either cannot be made at all (effectively treating it as read-only) or will only go to the local library database assuming it's even a valid file to start with) as it was otherwise less obvious for some formats where it's expected there is metadata write support but due to the file / format / supporting library it doesn't yet exist
Changed how the skinning component handles initialisation to minimise it's impact to help reduce loading time slightly
Changed the first load handling of the podcast view to better ensure the help message appears (the web control sometimes wouldn't or would incorrectly get cleared out) along with how the add / delete handling works to make it more reliable in ensuring the podcast view will update in an expected manner
Changed the option added to the prior build to prevent the currently playing item being always scrolled into view when there's an item selected to now be opt-in instead of opt-out due to most not liking the behavioural change
Changed the styling of the podcast information pane area links so they better match with the current skin colours instead of using the often jarring default OS colours
Changed around some of the NDE file handling on saving to better prevent against the idx & dat files getting mis-matched when an asynchronous save is being processed
Changed the autoplay preferences page to just be a single one instead of a dual tab page (will likely move some options of it later on as it's not the best of layouts)
Changed how file extensions are matched for initial playback to better deal with some of the weirder formats that can exist where pseudo metadata is part of the path
Fixed a crash when LVN_GETDISPINFO is received but there's not a valid buffer provided &/or size of the buffer to use in combination with a workaround for a WINE listview display issue (seen with the local library plug-in but this fix has been applied across any plug-ins where this listview notification message is being directly handled)
Fixed the skin specific taskbar icon look-up not working (someone forgot to type 'taskbar' in the string that's used to look for them)
Fixed a regression with the Win7Shell handling that prevented it correctly updating the taskbar preview's playing / paused icon states
Fixed the Alt+3 dialog sometimes making a double request for metadata from the input plug-in(s) when it should only be doing it the once
Fixed a regression that caused the podcast downloads to be resaved even if there were no actual changes due to not correctly checking if missing information for files was done but nothing was then found
Fixed an issue when using WINE & the classic skin playlist editor window would not be redrawn as expected when resizing it (fixed by setting a flag on the OS method used to not have it reuse the prior OS cached image of the window's contents)
Fixed the ml_pmp plug-in title string on the media library plug-ins list wrapping onto the second line of the plug-in description
Fixed a regression from a few builds back where the skinned menu inside of the OS provided edit control menus would show without the inner menu item contents being drawn
Fixed a number of on closing related crashes & also an up to 1 second delay to complete closing down found during splitting out the external file modification watching from the settings cache implementation (this might explain some of the long running reports of WACUP not correctly closing along with some of the weirder crashes seen during closing)
Fixed a performance issue with inverting the current selection within a library playlist view so it should now be much quicker with much larger playlists
Fixed the embedded browser (if enabled) on the podcasts view not being destroyed in all instances which could keep it using resources beyond it's wanted use
Fixed the metadata from SPC files not working due to the change in the prior beta build to look for APEv2 metadata tags but not correctly handling the issue when those files don't have such a tag which would prevent it then trying to query the ID666 metadata tag from an appropriate input plug-in (if one is present) or for some setups will cause SPC playback to fail in a number of seemingly weird ways
Fixed some issues with the attempt to live update the current local library view cache when the metadata of a file has been changed via the Alt+3/File Info dialog & not within the local library view
Fixed the current main playlist item not having the songticker text for it updated if a metadata change happens (this would update on changing the playback state but not for all possible ways of change)
Fixed the colour theme editor component allowing the user to enter characters that it doesn't then correctly escape them when it's saving out the colour theme edits via it's custom xml writer (this might be something for that component which has always been the case & could be a Winamp3 era related bug & is something that WACUP is luckily able to live patch to correct what is trying to saved out otherwise loading WACUP with the saved file will either crash or throw an error on loading from the modern skin engine)
Fixed some issues seen with the live loading of disabled plug-ins that are part of the known install which could either trigger a crash or prevent some of the functionality working until WACUP was restarted
Fixed restoring the last selected child playlist in the playlist root view not working due to not using the correct guid for the playlist (aka consolidating code many months back & not paying full attention)
Fixed the import button on the playlists root view not working as the submenu it was trying to load was not at the position it expected due to changes a few builds back
Fixed the positioning of the send-to menu in the playlists root view, child playlist views & local library views so it doesn't overlap the button & instead is aligned to the top of the button (this is an annoying issue with skinned menus vs how things correct to dynamically inserted menu items when set to have the menu bottom be aligned to the top of the associated window element)
Fixed the version in the loader manifest not always being correct (have now changed to a fully automated solution so I don't need to remember to update files)
Fixed a slew of crashing & multi-threading related issues with the ReplayGain processing plug-in which should make this a lot more reliable to work with
Fixed a resource leak related to the handling of the taskbar preview / status icons which became more of an issue after the addition of custom icons in the last beta build, doh!
Fixed the media library core not correctly handling quick closing events as is triggered by the OS trying to close which depending on the library plug-in could cause a hang/crash on closing
Fixed the media library core incorrectly trying to create a new library view due to the navigation tree selection changing which is not appropriate behaviour when we're in the process of closing
Fixed a number of issues related to the closing handling especially when WACUP is running & the OS is trying to shutdown which could cause settings / playback states to not be correctly saved
Fixed the skinned listview header flickering &/or disappearing issues by re-working the scrollbar handling to minimise the number of updates as well as by double-buffering the header drawing
Fixed the library bookmark category views not being loaded correctly due to a bug with the handling of the ML_IPC_NAVITEM_GETINFO api in the replacement media library core that prevented it from returning the required param value
Fixed the bigclock plug-in crashing if the spectrum visualisation mode is enabled & the core is not able to provide any data for it to process (e.g. when waiting for a youtube video to be prepared to play)
Fixed a small memory leak when attempting to play urls via the MP4 input plug-in (this is what led to finding the above crash)
Fixed some handling inconsistencies which could make closing take than it should to process through the quit(..) plug-in calls
Fixed the MSXplug based input plug-in (in_msx) incorrectly being initialised when there's no need for it (responding to isourfile(..) calls isn't something it needed to do which indirectly was causing more processing to be done during playback with the plug-in installed as well as it triggering a configuration related save on close that wasn't needed)
Fixed the probable cause of the podcast plug-in causing a hang on loading for some setups due to the OS api used for getting some of the default folder locations just not returning in a quick enough time
Fixed the probable cause of some of the self restarts (e.g. when toggling from legacy to non-legacy mode) not always working as due to the timings of things running it was possible for the new instance to still see the instance that spawned it & would then try to maintain the multi-instance limitations (if enabled) even though that instance is going away
Fixed some issues with the artwork cache handling that could either cause an item to be cached twice or for it to not correctly handle corrupted filepaths in the cache index file preventing new items to be added into the cache
Fixed a number of visual glitches during the initial loading of the media library & the first view to be restored (e.g. seeing it incorrectly sized briefly before it's then adjusted to the actual window size) though there's still more I'd like to do as I'm not happy with the way the media library window initialisation is done as it drags down the load time by quite a lot
Fixed the skinned button text flickering by moving away from using WADlg_handleDialogMsgs(..) as well as by double-buffering the button drawing (this still needs to be done for static controls but it's been far less obvious afaict)
Fixed a metadata handling quirk related to playlist separator entries that could cause a performance issue
Fixed some dll export/import related issues specific to the non-x86 builds
Fixed some of the library view buttons not showing a pressed state if there's a menu open in relation to them
Fixed some performance issues with the handling of the skinned listview & treeview controls & drawing messages
Fixed the podcast downloads & library playlist views triggering more view paint updates on loading than needed
Fixed the web information area on the podcast view sometimes flashing as a white block when it's initially loading (aka having to hook things that shouldn't have to be hooked to get them to behave nicely)
Fixed some right-click / button menu items throughout various parts of the media library not being correctly disabled as expected
Fixed some buttons in the media library views not being hidden as expected despite being flagged to be hidden (e.g. on the library playlists root view & the 'save as' button depending on the vertical sizer position)
Fixed the skinned static text controls sometimes flickering on update &/or being resized by taking full control of the painting & using double-buffering
Fixed the podcast plug-in not always waiting for it's main background thread to close if it's running & WACUP is closing which could cause some hangs on closing
Fixed a playlist loading issue when there's incomplete / non-relative but looks like relative path items causing the path handling to fail but end up trying to enumerate all files on the drive (hopefully this won't break any of the existing wanted instances of relative path handling that some rely on)
Fixed some quirks with the podcast view handling on WINE where the episode list may not be sized correctly & images might be shown on the sub-items when its only intended on the main item
Fixed the playlist separator drawing popping in a while after WACUP has been loaded instead of it being styled as expected when the main playlist editor window appears during loading as well as reducing some of the forced window refreshes that could happen during loading
Fixed an issue where some files may not be heard despite visually showing as playing due to their reported track or album gain effectively being 0dB when the ReplayGain mode is set to normalise due to the internal calculation incorrectly handling what is meant to be a pass through without messing with the audio data
Fixed a large proportion of the flickering issues that exist when resizing the preferences window however this is not a 100% fix due to how some of the controls work (mainly static controls & group headers)
Fixed a handle leak related to the handling of the taskbar preview jump list which depending on how many items were played during a WACUP session may or may not become an issue
Fixed the tracking of small files (i.e. around 1 second or lower) with the history plug-in either not being tracked (subject to configuration) or would inconsistently be tracked
Fixed playback of long MP3s failing &/or aspects of the UI not working as expected due to Winamp's in_mp3 plug-in mis-reporting the track length so a different approach is now used that should be more reliable irrespective of the input plug-in being used & allows for in this case a 2 GiB MP3 to play correctly
Fixed an intermittent crash when trying to process the available file extensions which could manifest as an unexpected failure across multiple actions but was more likely to occur when a local library scan was triggered
Fixed the move after current action in the jump to file window not always working due to a lifetime issue with the playlist item filepath string it was trying to use not always being valid by the time the reinsert is attempted to be processed
Fixed the local library plug-in getting stuck in a loop on closing if something has gone wrong with the database which prevent a valid opening of the files when trying to save the current play count info
Other misc small changes as part of trying to resolve some of the inconclusive crash reports seen
Removed the option & usable handling related to trying to skin the preferences & about window in the same style as the skin (it just never works well especially when using modern skins vs needing a fixed width & other aspects of those dialogs so for the time being it's now gone which I doubt many will miss since it was opt-in to start with & marked as 'beta')
Updated cacert.pem to latest (26 Apr 2022)
Updated libcurl (libcurl.dll) to 7.83.1 (11 May 2022)
Updated libopenmpt (in_mod.dll) to 0.6.3.17274 (24 Apr 2022)
Updated minizip-ng (zlib.dll) to 3.0.6 (27 Apr 2022)
Updated Monkey's Audio (in_ape.dll) to 7.79 (30 May 2022)
Updated OpenSSL (libcurl.dll) to 1.1.1o (3 May 2022)
Updated Patreon list (31 May 2022)
Updated unrar (unrar.dll) to 6.1.7 (4 May 2022)
Updated vgmstream (in_vgmstream.dll) to the latest Git commit from 15 May 2022
Updated zlib-ng (zlib.dll) to 2.1.0-devel (25 May 2022)