NokiMo
playnite
playnite

patreon


Development update #1

Hello everyone!

I decided to start writing semi-regular (probably once every two weeks) development blogs to keep you up to date with what's happening with Playnite. This one is going to be probably longer then the upcoming ones, since I will be covering the most interesting things I've added since the last Playnite release.

Also to remind you that the backlog for Playnite 8 is available on GitHub, if you want to see what's remaining to be implemented:

https://github.com/JosefNemec/Playnite/milestone/7

I plan to spend more time on Playnite in upcoming weeks, so progress will be faster compared to past two or so months.

Library load and startup time optimizations

Couple people mentioned slow library load times, especially on standard hard drives, so I checked if I can improve it somehow. Turns out, I can, I've made two optimizations:

  1. Changed how Playnite loads and saves library files to and from disk. This should be noticeable mainly on slower (5400 RPM) disk drives. The library should also take up less space since Playnite no longer saves default game field values to disk. I can't give you specific numbers how much improvements this is going to be since it highly depends on how many games you have in Playnite library and how slow your disk is.
  2. I enabled  multi-core JIT. This should see improvements to application startup on multi-core CPUs which have low single-core performance. This shaved of 4 to 5 seconds from startup time on my quad core Intel Atom tablet.

Option to assign game script to execute after game is started

You can now run scripts after game is started without need to create custom extensions. For example if need to start some application only after game is started or if you need to interact with game window somehow.

There's one limitation to this, the script will get executed immediately after game process is spawned. Which means that it can be executed before game window is available. In that case you will need to add some delay or wait for a window to show up if you need to interact with it. 

Option to disable global script execution on per game basis 

In case you don't want global scripts to get executed for some games, you can now turn off global script execution for each game individually.

Use thumbnail if original Google image source is not available

Option to download images from Google Image search turned out to be quite popular. Sadly, Google likes to index images for a long time even if the original source is no longer available. This caused Playnite to download blank files after user chose unavailable image.

Playnite will now download cached image thumbnail if the original image is no longer available. This should work perfectly fine for smaller things like icons, but could produce blurrier images for backgrounds and covers. Still better then no image at all.

Discord Rich Presence support

This turned out to be quite a letdown for me, mainly because of how limited Discord API is (I'm not even going to mention how buggy their official .NET wrapper is). There are two main issues with it:

  1. You can't change name of played game. This means that people will see that you are "Playing Playnite" game and specific game name is only visible after you click on a person to see activity details.
  2. If the game natively supports Discord presence, it may get overwritten by Playnite's presence. There's really nothing I can do about this. The API doesn't give an option to see if some activity is already present and game's activity doesn't always overwrite Playnite's activity, priority seems random.

Sadly both of these are limitations of Discord API and there's nothing I can do about it. For these reasons I chose to have Discord support disabled by default. 

Multi-edit for all fields

You can now edit all game fields in bulk, which includes fields from Links, Installation and Actions tabs.

There are some limitations to this, mainly to game actions and links. You can't specifically pick what items will get assigned to what game, because it would be a nightmare to implement an UI for that. If you make changes to link or actions list, that list will overwrite all links and actions in all edited games.

Game variables can be used in game links

This is mainly for the multi-edit case, because multi-edit changes to links are applied to all games, you can't cherry pick which games will have what links. For that reason you can now use game variables in links, for example:

https://www.pcgamingwiki.com/w/index.php?search={Name}

will open PCGamingWiki search with game's name.

.pthm and .pext extensions can be installed by executing them 

Nothing special really, you can now double click these to install new theme or extension. The installation should now also work properly when running Playnite in Fullscreen mode, which is not the case in Playnite 7.

Option to only display used fields on Explorer/Filter panels 

This was a long time coming, mainly because of a "mess" we create by pre-populating list of platforms. Explorer and filter panels will now only show items that are actually assigned to at least one game (in both Desktop and Fullscreen mode). This is enabled by default and can be turned off if you like the old behavior.

Option to add game to import exclusion list when removing it 

Mainly usefully for games and items we can't currently filter out automatically, like DLCs from Epic or trials/demos from Origin. When removing game, you can choose to add a game into ignore list, which will prevent the game from being imported back next time you update library. List of ignored items can be access in application settings and you can remove items from the list. 

Option to collapse/expand all groups 

Simple enough, right-clicking on group header gives you an option to collapse or expand all groups in the list.

This is not very optimized currently and can freeze the UI for a second or two. I already spent way too much time getting this to work (given how small of a feature it is), so I'll make some optimization in later 8.x updates. 

Grouping by Name (Letter)

New grouping option, which will group games by starting letter.

Better UI for extension/theme management

Since there are now more extensions being done by the community, I figured we needed a better view to manage installed extensions. They are now categorized and I also added an option to uninstall them from the UI. The same view will be used for extension updates and other things like compatibility notices (if extension fails to load for example), in the future.

Side note: I also noticed that quite a few extensions don't do a very good job of handling their errors and can quite often crash the whole application.

I plan to do several things about this, mainly catching all exceptions in all threads and event handlers. Playnite will also disable an extension once it fails with an error for the first time. I will be also adding an option to start Playnite in "safe mode", which will start with all 3rd party extensions and themes disabled in case some theme or extension causes startup issues.

That's all for this development update. As always, thank you very much for continued support!

Josef

Comments

Yes, that's what it means.

Josef Nemec

does the multi-edit feature mean that we'll be able to change the emulator for the emulated games too? 😍 anyway great work!

Bruno B

I wanted to have screenshots for most of the mentioned features, but Patreon's editor is just crap and doesn't save images for some reason. Sorry guys.

Josef Nemec


Related Creators