sparrowbrain / playnite.playnext Goto Github PK
View Code? Open in Web Editor NEWPlay Next addon for Playnite (similar to Steam Play Next).
License: MIT License
Play Next addon for Playnite (similar to Steam Play Next).
License: MIT License
Since the extension can be used in multiple ways (sidebar item, start page) users should be able to switch of the sidebar item, if they don't intent to use it.
It would be really nice if there was a way to have the extension function at the same time in different shelves.
For example, I use 3 shelves on my StartPage, one is "Play Next", the other is "Beat Next" and the last one is "Complete Next".
The 3 can be run through PlayNext, but not at the same time.
I'd imagine this was possible if one either could (in the shelf settings, separate for each one) choose completion status filters, or, have multiple instances of PlayNext with different settings for each.
Series would make sense to include as a calculation factor. For example, playing a lot of Half-Life 1 would then recommend Half-Life: Opposing Force or Half-Life 2 if they're unplayed.
It would be nice if it was able to weight up the 'next' game in the series (perhaps by release year), but I suspect this would be complicated and might not work as expected for some series.
Some more documentation of the various weighting options in the settings would be helpful.
In specific:
I have no idea what Attribute Calculation Weights > Recent Order does,
I only have a vague idea of Game Score Calculation Weights > Release Year, except that it changes the games to different ones.
Thanks in advance!
Hi! I was wondering if it would be possible to be able to exclude tags. For instance, I have VR games in my libraries which I am unable to play right now, so it would be nice if they would not be taken into account for the recommendations.
26-01 19:51:11.478|INFO |PlayNext#GameActivityExtension:6 games with recent activity found
26-01 19:51:11.746|INFO |PlayNext#HowLongToBeatExtension:1145 games with HowLongToBeat data found
26-01 19:51:11.758|DEBUG|PlayNext#GameActivityExtension:Games with playtime: 6
26-01 19:51:11.801|INFO |PlayNext#HowLongToBeatExtension:1145 games with HowLongToBeat data found
26-01 19:51:11.801|DEBUG|PlayNext#GameActivityExtension:Games with playtime: 6
26-01 19:51:12.097|ERROR|PlayNext#PlayNext:Failure while parsing activities
System.InvalidOperationException: Sequence contains no matching element
at System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2 predicate)
at PlayNext.Model.Score.TotalScoreCalculator.<>c__DisplayClass14_0.<Calculate>b__0(KeyValuePair`2 score) in C:\Users\Qwx\Documents\src\Playnite.PlayNext\PlayNext\Model\Score\TotalScoreCalculator.cs:line 78
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at PlayNext.Model.Score.TotalScoreCalculator.Calculate(PlayNextSettings savedSettings) in C:\Users\Qwx\Documents\src\Playnite.PlayNext\PlayNext\Model\Score\TotalScoreCalculator.cs:line 76
at PlayNext.PlayNext.<<RefreshPlayNextData>b__39_0>d.MoveNext() in C:\Users\Qwx\Documents\src\Playnite.PlayNext\PlayNext\PlayNext.cs:line 212
26-01 19:51:12.138|ERROR|PlayNext#PlayNext:Failure while parsing activities
System.InvalidOperationException: Sequence contains no matching element
at System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2 predicate)
at PlayNext.Model.Score.TotalScoreCalculator.<>c__DisplayClass14_0.<Calculate>b__0(KeyValuePair`2 score) in C:\Users\Qwx\Documents\src\Playnite.PlayNext\PlayNext\Model\Score\TotalScoreCalculator.cs:line 78
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at PlayNext.Model.Score.TotalScoreCalculator.Calculate(PlayNextSettings savedSettings) in C:\Users\Qwx\Documents\src\Playnite.PlayNext\PlayNext\Model\Score\TotalScoreCalculator.cs:line 76
at PlayNext.PlayNext.<<RefreshPlayNextData>b__39_0>d.MoveNext() in C:\Users\Qwx\Documents\src\Playnite.PlayNext\PlayNext\PlayNext.cs:line 212
Right now StartPage settings have a section in PlayNext settings.
They should be moved to StartPageView settings (the cogwheel in start page editing mode) to reduce clutter and not bother people who are not using StartPage.
From this comment where we were discussing other issue: #20 (comment)
I believe it would be a great implementation :)
I would like to request an option so we have custom columns in list view, for example HLTB duration, critic/community score, or others.
I find the extension useful but sometimes I see the same games there forever and some kind of help would be helpful without going back and forth to details view.
Thanks :) Loving the extension
Changing alignment from the StartPage edit mode > Right click on Play Next > horizontal alignment > left (for example) crashes Playnite. The alignment persists, but so do the crashes.
Only disabling the extension, changing the shelf out to something new, setting the alignment back to "stretch" on both, then re-enabling and changing back the shelf solves the issue.
I don't know if this'd be a hard fix, but disallowing the re-alignment of the shelf should fix it. Or what's probably more work than its worth, making re-alignment possible.
the last line of extensions.log was 28-07 09:30:34.421|DEBUG|Extras#Extras:Popped "Start Page" from backwards stack.
, I assume that means everything initialized fine.
however, in the last lines of playnite.log:
28-07 09:30:50.405|ERROR|PlayniteApplication:Unhandled exception occured.
System.ArgumentException: '-196' is not a valid value for property 'Width'.
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at PlayNext.StartPage.StartPagePlayNextView.Dock_OnSizeChanged(Object sender, SizeChangedEventArgs e) in C:\Users\Qwx\Documents\src\Playnite.PlayNext\PlayNext\StartPage\StartPagePlayNextView.xaml.cs:line 52
at System.Windows.SizeChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
at System.Windows.FrameworkElement.OnRenderSizeChanged(SizeChangedInfo sizeInfo)
at System.Windows.ContextLayoutManager.fireSizeChangedEvents()
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
at Playnite.DesktopApp.ProgramEntry.Main(String[] args) in C:\projects\playnite\source\Playnite.DesktopApp\ProgramEntry.cs:line 61
28-07 09:30:50.474|DEBUG|WindowFactory:Show dialog window Playnite.Windows.ExtensionCrashHandlerWindowFactory: cb385baf-e770-42c3-9805-50e619a8690d
Want to request an option to exclude games by tag or category. or to add some to exclude list right from the extension
also would be nice to have the option to hide extension icon from sidebar.
The addon looks very promising, but it unfortunately has one big flaw: It shows games, that I already have beaten. At the moment at least 60% of the suggested games are already beaten games for me. It would be great if you could filter the completion state to only show games that have specific states or at least filter out certain states like "beaten", "abandoned" or "completed".
It also would be great if you could put different weights on different completion states. For example I have one with games I really want to play and another with games, that I'll maybe play sometime. It would be great if the games from the first list could be weighted higher than the second.
I'd like an option to either whitelist, excluding everything else, or blacklist by both library and platform if possible.
On application start PlayNext Start Page part caused Playnite crash.
There are new games in the list.
02-06 10:16:39.753|ERROR|PlayniteApplication:Unhandled exception occured.
System.NullReferenceException: Object reference not set to an instance of an object.
at PlayNext.Extensions.StartPage.StartPagePlayNextView.UpdateCoversColumnWidth(FrameworkElement dock) in C:\Users\Qwx\Documents\src\Playnite.PlayNext\PlayNext\Extensions\StartPage\StartPagePlayNextView.xaml.cs:line 100
at PlayNext.Extensions.StartPage.StartPagePlayNextView.Dock_OnSizeChanged(Object sender, SizeChangedEventArgs e) in C:\Users\Qwx\Documents\src\Playnite.PlayNext\PlayNext\Extensions\StartPage\StartPagePlayNextView.xaml.cs:line 49
at System.Windows.SizeChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
at System.Windows.FrameworkElement.OnRenderSizeChanged(SizeChangedInfo sizeInfo)
at System.Windows.ContextLayoutManager.fireSizeChangedEvents()
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
at Playnite.DesktopApp.ProgramEntry.Main(String[] args) in C:\projects\playnite\source\Playnite.DesktopApp\ProgramEntry.cs:line 71
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.