Home Artists Posts Import Register
The Offical Matrix Groupchat is online! >>CLICK HERE<<

Content

Hello everyone!

This is sum up of what's been happening with Playnite 11 since my last update post.

Emulation support rework

I originally started completely separating emulation features from P11, basically making it as a completely independent emulation library plugin. Mainly because this would be most flexible way of updating and maintaining emulation support in future and it would make Playnite's core code base way less complicated (we have so many special cases and branches for emulated games that it's not funny). However, loss of direct access to Playnite's code base proved problematic in some areas. Mainly giving other plugins reliable access to emulation data and features like per scanner metadata settings not being feasible.

So in the end I went back to the drawing board and decided to add extension support to the whole emulation system. Basically, functionality directly tied to specific emulators, for example built-in emulator profile definitions, will be now provided as "emulation extensions" installable and updatable separate to the core app, similarly to standard extensions.

Current "emulation profiles" will now transform to "emulation extensions" and will be way more customizable. For example, current emulation profiles can define limited game import scripts, but with new version this will be extended to launch and "setup" scripts as well. I'm saying "scripts" but in reality the final version will probably require advanced functionality to be written in C#, mainly due to UI interaction issues.

PowerShell extension support removal

Due to various changes to the SDK (for example method signatures using async pattern now) and persistent issues with UI interaction from PS scripts (which are already present in P10), I decided to remove PowerShell extension support in P11.

Practically speaking, the only advantage of script extensions was low friction when it comes to making an extension, simple text editor was the only thing needed. With move to modern .NET runtime in P11, making C# extensions will be way easier than before, making this advantage not matter that much. You will no longer need full fat Visual Studio for extension development. Installing VS Code editor with C# plugin will be enough for development and debugging. This will also solve big issues with script extensions, mainly type safety, code completion and reasonable debugging experience. You will now get all of these in VS Code (or any other text editor that supports modern C# LSP).

This doesn't mean that scripting support is going away completely. Things like game scripts, script play actions etc. will still be supported and actually extended. For example, what's currently called "software tools" will allow execution of scripts instead of just running specific exe.

I also don't think this deprecation will impact extension developers too much because looking at the addon database, most extensions are C# extensions already.

New addons database

I also started doing some research and design on new addon database. I looked into using some existing solution like mod.io or thunderstore.io, but for various reasons none of them turned out to be viable options.

I will most likely end up doing something similar to how packagecontrol.io (SublimeText's addon database) works. This will be one of the last things I will end up actually implementing before P11 release so I don't have more details right now.

Plugin performance tracking

I mostly finished implementing performance tracking of plugins. It should be now way easier to detect slowdowns caused by plugins. I don't have user friendly UI for this yet (only perf dump into logs right now) and there are some edge cases which I'm currently unable to track (extensions switching from background tasks to blocking UI updates) but it's already way more insight that we currently have in P10.

Plugin SDK progress

I changed how plugin types works and there's no longer hard divide between library and metadata plugins. One plugin can implement both library integration functionality and metadata provider. This will be very helpful in cases like my current Steam plugins where there's one Steam library plugin and universal Steam metadata plugin. These will now combine into one plugin that will act as Steam game importer as well as Steam metadata provider for non-Steam games.

UI rework progress and issues

I'm slowly progressing on UI rework from WPF to Avalonia and it's not going as smoothly as I originally expected. Some big issues popped up:

No list grouping support in Avalonia

In WPF there's a built-in easy way to do list grouping that we currently heavily utilize for all game views. To my surprise, this feature is almost entirely missing in Avalonia (only implemented for data grid, which we will be able to use only for List game view).

So sadly I'm going to have to implement this myself almost from scratch. There's a 3rd party package for non-UI part that I could use but it's fairly large dependency I don't want to add and porting WPF grouping would not be a good idea because it has a lot of small bugs (like the one that causes Playnite to not properly change game order when sorting by last activity after starting a game).

On the plus side, having custom made solution for list grouping/sorting will have an advantage in that it will be way easier to provide things like custom grouping order, natural sorting and Steam like favorite ordering in future.

Web views

While Playnite itself is not a web (Elector) app, having an option to display web views is very important, mainly for library integrations because that's how they show login forms and sometimes do actual library data fetching.

While WPF has fantastic 3d party package for web views called CefSharp, there are no similar (quality/maturity wise) packages available right now for Avalonia. One of the biggest issues with available packages is that practically none of more mature ones support Linux. P11 will be still Windows only on launch, but I'm trying to avoid introducing any dependencies that would not be cross platforms, since Linux port is likely to happen in future (at least experimental one). With critical part of Playnite like web views, changing web view library in future could be very problematic, mainly from SDK breaking point of view.

Honestly, I'm not sure what to do with this right now. I may end up using Windows only web view for now and try to wrap it in generic enough layer that future library switch would not result in breaking SDK change. One of the advantages of using something like WebView2 (Microsoft's web view library) is that it would slash install and update size by roughly 80% since it's built into Windows and we wouldn't have to ship web view libraries with Playnite.

Layout editor

One of the features I'm adding to P11 to solve issue with themes having to explicitly support plugin elements is built-in game view layout editor. I originally started implementing full drag and drop editor for this (similar to how various UI WYSIWYG editors work), but it turned out to be bigger challenge than I expected. I can say for sure that there won't be drag and drop style editor in initial P11 release. It will be instead built-in XAML editor with some extra features like list of available elements and support for real time changes update without need to restart Playnite. Full drag and drop editor will come sometime in future P11 updates.

Btw, themes will still be able to provide custom layouts but users will be able to edit these independently of theme to add/remove both standard elements that Playnite provides and plugin elements.

Fullscreen mode

I only dipped my toes into porting Fullscreen mode but it looks like there will be some extra work needed that I originally didn't expect. Mainly, Avalonia's keyboard navigation is less than ideal, looking even less reliable that what WPF provides (which already forced me to do multiple "hacks" in P10 to have more reliable keyboard/controller navigation). It looks like they are aware of these issues so I'm hoping they will be fixed before I fully start porting Fullscreen mode.

Release date

Primarily due to various setbacks I mentioned in previous paragraphs, originally planned beta release before end of 2023 is not possible anymore. I'm sorry for disappointing you, I'm trying to make P11 good base to build upon into the future (the plan is still for P11 to be last extension breaking releases for years to come) and I will need more time to do it right.

However, since there's quite a lot of functionality done already in P11 that will just sit there unused until P11 is ready, I decided to port some of these finished features into P10 and release slightly bigger P10 update in the meantime. Unfortunately, there are some features that I can't port because P10 is running on old .NET runtime (and updating runtime would break extensions), but it should be useful release despite that anyways. I'm currently aiming to have this update out before end of the year.

As always, thank you very much for continued support!

Josef

Comments

Magnus

no disappointment here. take the time you need!