felixkmh / startpage-for-playnite Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
Text can be difficult to read if the video is displaying certain colors
Personally I'm not a fan of overlapping the video for this reason and also because the video is cropped to fit the popup
As a proposal, here is a mockup of a vertical popup, which is similar to what Playnite uses for the GridView details:
Here are some examples of other software using a vertical layout in popups:
Steam library:
Steam store:
SteamDB:
I'd recently Genshin Impact achievements and your plugin crash Playnite because it don't find the local image.
When I disabled your plugin, I've not any crash.
System.Windows.Markup.XamlParseException: L'initialisation de 'System.Windows.Media.Imaging.BitmapImage' a levé une exception. ---> System.IO.IOException: Impossible de trouver la ressource 'views/genshinimpact/ac.png'.
à MS.Internal.AppModel.ResourcePart.GetStreamCore(FileMode mode, FileAccess access)
à System.IO.Packaging.PackagePart.GetStream(FileMode mode, FileAccess access)
à System.IO.Packaging.PackWebResponse.CachedResponse.GetResponseStream()
à System.IO.Packaging.PackWebResponse.GetResponseStream()
à System.IO.Packaging.PackWebResponse.get_ContentType()
à System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(Uri uri, Stream stream, BitmapCacheOption cacheOption, Guid& clsId, Boolean& isOriginalWritable, Stream& uriStream, UnmanagedMemoryStream& unmanagedMemoryStream, SafeFileHandle& safeFilehandle)
à System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy, Boolean insertInDecoderCache)
à System.Windows.Media.Imaging.BitmapImage.FinalizeCreation()
à System.Windows.Media.Imaging.BitmapImage.EndInit()
à MS.Internal.Xaml.Runtime.ClrObjectRuntime.InitializationGuard(XamlType xamlType, Object obj, Boolean begin)```
The gear Icon that lets you tweak panels only appears on the game shelves, it will not appear on anything else.
16-11 14:51:34.723|ERROR|PlayniteApplication:Unhandled exception occured. System.Windows.Markup.XamlParseException: Beim Festlegen der Eigenschaft "System.Windows.FrameworkElement.Style" wurde eine Ausnahme ausgelöst. ---> System.InvalidOperationException: Nicht alle Eigenschaftsverweise im Eigenschaftspfad "RenderTransform.Y" können aufgelöst werden. Stellen Sie sicher, dass geeignete Objekte die Eigenschaften unterstützen. bei System.Windows.Media.Animation.Storyboard.VerifyPathIsAnimatable(PropertyPath path) bei System.Windows.Media.Animation.Storyboard.ClockTreeWalkRecursive(Clock currentClock, DependencyObject containingObject, INameScope nameScope, DependencyObject parentObject, String parentObjectName, PropertyPath parentPropertyPath, HandoffBehavior handoffBehavior, HybridDictionary clockMappings, Int64 layer) bei System.Windows.Media.Animation.Storyboard.ClockTreeWalkRecursive(Clock currentClock, DependencyObject containingObject, INameScope nameScope, DependencyObject parentObject, String parentObjectName, PropertyPath parentPropertyPath, HandoffBehavior handoffBehavior, HybridDictionary clockMappings, Int64 layer) bei System.Windows.Media.Animation.Storyboard.BeginCommon(DependencyObject containingObject, INameScope nameScope, HandoffBehavior handoffBehavior, Boolean isControllable, Int64 layer) bei System.Windows.Media.Animation.BeginStoryboard.Begin(DependencyObject targetObject, INameScope nameScope, Int64 layer) bei System.Windows.Media.Animation.BeginStoryboard.Invoke(FrameworkElement fe, FrameworkContentElement fce, Style targetStyle, FrameworkTemplate frameworkTemplate, Int64 layer) bei System.Windows.StyleHelper.InvokeActions(TriggerBase triggerBase, DependencyObject triggerContainer, TriggerActionCollection actions, Style style, FrameworkTemplate frameworkTemplate) bei System.Windows.StyleHelper.InvokeEnterOrExitActions(TriggerBase triggerBase, Boolean oldState, Boolean newState, DependencyObject triggerContainer, Style style, FrameworkTemplate frameworkTemplate) bei System.Windows.StyleHelper.InvokePropertyTriggerActions(TriggerBase triggerBase, DependencyObject triggerContainer, DependencyProperty changedProperty, DependencyPropertyChangedEventArgs changedArgs, Int32 sourceChildIndex, Style style, FrameworkTemplate frameworkTemplate) bei System.Windows.StyleHelper.OnTriggerSourcePropertyInvalidated(Style ownerStyle, FrameworkTemplate frameworkTemplate, DependencyObject container, DependencyProperty dp, DependencyPropertyChangedEventArgs changedArgs, Boolean invalidateOnlyContainer, FrugalStructList
1& triggerSourceRecordFromChildIndex, FrugalMap& propertyTriggersWithActions, Int32 sourceChildIndex)
bei System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
bei System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
bei System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
bei System.Windows.StyleHelper.ApplyStyleOrTemplateValue(FrameworkObject fo, DependencyProperty dp)
bei System.Windows.StyleHelper.InvalidateContainerDependents(DependencyObject container, FrugalStructList1& exclusionContainerDependents, FrugalStructList
1& oldContainerDependents, FrugalStructList1& newContainerDependents) bei System.Windows.StyleHelper.DoStyleInvalidations(FrameworkElement fe, FrameworkContentElement fce, Style oldStyle, Style newStyle) bei System.Windows.StyleHelper.UpdateStyleCache(FrameworkElement fe, FrameworkContentElement fce, Style oldStyle, Style newStyle, Style& styleCache) bei System.Windows.FrameworkElement.OnStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) bei System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) bei System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) bei System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) bei System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) bei System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal) bei System.Windows.Baml2006.WpfKnownMemberInvoker.SetValue(Object instance, Object value) bei MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(XamlMember member, Object obj, Object value) bei MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value) --- Ende der internen Ausnahmestapelüberwachung --- bei System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) bei System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri) bei System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) bei System.Windows.Application.LoadComponent(Object component, Uri resourceLocator) bei LandingPage.Views.LandingPageView.InitializeComponent() in D:\Programmierung\playnite-dev\LandingPage\source\Views\LandingPageView.xaml:Zeile 1. bei LandingPage.Views.LandingPageView..ctor(LandingPageViewModel model) in D:\Programmierung\playnite-dev\LandingPage\source\Views\LandingPageView.xaml.cs:Zeile 37. bei LandingPage.LandingPageExtension.get_View() in D:\Programmierung\playnite-dev\LandingPage\source\LandingPageExtension.cs:Zeile 44. bei LandingPage.LandingPageExtension.ViewOpened() in D:\Programmierung\playnite-dev\LandingPage\source\LandingPageExtension.cs:Zeile 103. bei Playnite.DesktopApp.ViewModels.SidebarWrapperItem.Activation(Object arg) in C:\projects\playnite\source\Playnite.DesktopApp\ViewModels\DesktopAppViewModel_Sidebar.cs:Zeile 130. bei Playnite.SDK.RelayCommand
1.Execute(Object parameter) in C:\projects\playnite\source\PlayniteSDK\RelayCommand.cs:Zeile 199.
bei MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
bei System.Windows.Controls.Primitives.ButtonBase.OnClick()
bei System.Windows.Controls.Button.OnClick()
bei System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
bei System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
bei System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
bei System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
bei System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
bei System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
bei System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
bei System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
bei System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
bei System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
bei System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
bei System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
bei System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
bei System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
bei System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
bei System.Windows.Input.InputManager.ProcessStagingArea()
bei System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
bei System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
bei System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
bei System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
bei System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
bei MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
bei MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
bei System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
bei System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
bei MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
bei System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
bei System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
bei System.Windows.Application.RunDispatcher(Object ignore)
bei System.Windows.Application.RunInternal(Window window)
bei System.Windows.Application.Run(Window window)
bei Playnite.DesktopApp.ProgramEntry.Main(String[] args) in C:\projects\playnite\source\Playnite.DesktopApp\ProgramEntry.cs:Zeile 61.
16-11 14:51:34.749|DEBUG|WindowFactory:Show dialog window Playnite.Windows.ExtensionCrashHandlerWindowFactory
`
I'd like to add headers for the 'most played' and 'achievements' views, same as they're displayed for the shelves. Perhaps an option to toggle a header for any view would work (along with the horizontal/vertical option).
It would nice to be able to change the clock from military to a 12 hour clock
I have an extension that hides games. After invoking the function to hide the games, Playnite freezed for several second. This doesn't happen if the current view is Playnite library.
I'm not familiar with how the extension works and was wondering if perhaps the extension updates the shelves on each game update event. As a possible fix, a timer could be used to only update after no new events are being received. Something like this:
Game update event 1 -> timer.Stop(); Timer.Start();
-> Game update event 2 -> timer.Stop(); Timer.Start();
->Timer_Tick (Updates shelves)
System.ArgumentNullException: La valeur ne peut pas être null.
Nom du paramètre : source
à System.Linq.Enumerable.All[TSource](IEnumerable1 source, Func
2 predicate)
à LandingPage.ViewModels.LandingPageViewModel.IsRelevantUpdate(ItemUpdateEvent1 update) dans D:\Programmierung\playnite-dev\LandingPage\source\ViewModels\LandingPageViewModel.cs:ligne 507 à LandingPage.ViewModels.LandingPageViewModel.<>c.<Games_ItemUpdated>b__73_0(ItemUpdateEvent
1 u) dans D:\Programmierung\playnite-dev\LandingPage\source\ViewModels\LandingPageViewModel.cs:ligne 487
I've had this issue two times already where the configured views don't show as I've previously configured. The two times it has happened has been right after updating to a new StartPage version.
This is how it looks after updating:
The view that is on the upper left, was in the panel below like this before the bug. This is after moving it to the previous place.
Notice that even after moving, there is another Game Shelve in that same panel. So it seems that for some reason, the plugin placed two different ``Game Shelves `views in the same Panel:
This is the the configured panels before the bug happened:
After the bug, the configuration I had for the Game Shelves panel below got reverted to a configuration I had before and not the latest one so some shelves went missing, filters got reverted, etc.. This happened the previous time too:
There's nothing in the logs about the StartPage extension.
As a suggestion, the view could use some padding to improve the layout and to make sure elements don't overlap with the window buttons with certain alignment options. Maybe it could be a setting, with a minimum padding (20 is what I usually use for views, so maybe that could work?) and have a setting to configure this value to the user preference.
A few ideas that I think would make it more useful; take or leave as you will.
Thanks.
This suggestion is for the people with game cover size in square or horizontal rather than vertical
Or at least as high as it can go, might be something that needs to be supported by the original creator of playnite.
StartPage (1.9.2) seems to be incompatible with the most recent update of GameActivity (2.4). If both are enabled, and if StartPage is set to show GameActivity data, Playnite will crash immediately upon loading.
I just updated to the newest StartPage version and it crashes instantly when I press the StartPage button on the left sidebar. I don't know exactly if it worked before as I didn't try it yet. Log is attached:
Playnite Version: 9.18
Startpage Version: 2.7.0
Hi there,
just recently I found that the Startpage date string ('Today','Yesterday',etc.) are not correctly updated. It all works fine when Playnite is started, but when it runs 24h+ the day changed and it should update the labels. The update process worked correctly in previous versions, but I cannot say in which one(s), but now I may have multiple 'Today' strings shown. Interesting the games shown are sorted correctly, only the label is incorrect.
I'll append some screenshots when I have the time. (Did updates this morning so everything's ok right now)
I'm hoping it would be possible to add an option to change the Most Played game to show the Most Played Recently instead.
The game I've played the most is not a game I'm playing these days, and it's not a play time I'm likely to beat any time soon.
It would be more useful for me to see the game I've played the most during the last week, month or even year instead. (Different options for time inteval would be even more welcome here).
Currently the settings apply globally to all Game Shelves instance. I think it could be better if it applied individually. To provide an example, I have set a maximum width so the covers use the width for my screen for the panel in the lower side but since the setting applies globally, it also affects the panel on the upper left side:
This is what I could achieve if settings were instance specific:
These are the settings that I think could be made instance specific:
I'd suggest having the option to remove all the elements at the top and adding more shelves along the page. Each one could have filter, sorting and grouping settings with the option to limit how many games are there if you want to (in addition an option to expand the shelve into a grid perhaps).
Currently the extension view will use the height of the window. This can cause the area to be quite limited when:
As an option, it could use a scrollviewer that allows to use more height than what the window has
Hi,
Since a couple of weeks, StartPage began crashing my Playnite. Unfortunately this means I have to disable the extension for the time being.
Hope you find some time to look into it!
Kind regard.
Unfortunately my igpu really struggles with blur and certain effects in WPF. My igpu is an intel HD4600.
I don't know what could be done about this, maybe allow to reduce or disable the blur or the more complicated option to implement a faster blur method.
If you don't care about being able to see certain details of the game background image and just want the colors, I use a custom background blur solution made by Fuene in a theme that doesn't cause any performance impact and is pretty fast: https://github.com/darklinkpower/Helium/blob/master/source/Views/DetailsViewGameOverview.xaml#L18-L82
It looks like this but could be tuned up to produce different results by changing the opacity or other properties
As of 2.8.0, the Unsupported options 'Sidebaritem activated on launch' and 'Move Sidebar Item to Top of Sidebar on Launch' both fail for me.
I tried deactivating and reactivating them both individually.
Can anyone else confirm?
I have an incremental/clicker game that I often like to leave running in the background. Unfortunately, this results in it dominating the most-played game slots on the start page. I'd appreciate an option to specifically ignore that game so it can show something different there.
It would also let me get rid of Windows Solitaire for the most-played of all-time, lol.
Thank you.
Version 2.1.0
All bars are at minimum even though there is playtime to show.
Version 2.1.0
Stretch horizontal alignment works fine.
Aligning the games other than Stretch probably makes them very small, or something like that. They appear to move in the alignment direction and then disappear.
Hey! First of all, thanks for this really awesome extension! I was thinking that a good option would be to be able to lock the resizing only to the edit mode, this way we can't accidentally change anything.
I just installed it from add-on browser and clicked the button, crashes every time.
System.NullReferenceException: Object reference not set to an instance of an object.
at LandingPage.ViewModels.LandingPageViewModel.Update() in D:\Programmierung\playnite-dev\LandingPage\source\ViewModels\LandingPageViewModel.cs:line 73
at LandingPage.LandingPageExtension.get_ViewModel() in D:\Programmierung\playnite-dev\LandingPage\source\LandingPageExtension.cs:line 67
at LandingPage.LandingPageExtension.<GetSidebarItems>b__21_0() in D:\Programmierung\playnite-dev\LandingPage\source\LandingPageExtension.cs:line 90
at Playnite.DesktopApp.ViewModels.SidebarWrapperItem.Activation(Object arg) in C:\projects\playnite\source\Playnite.DesktopApp\ViewModels\DesktopAppViewModel_Sidebar.cs:line 130
at Playnite.SDK.RelayCommand`1.Execute(Object parameter) in C:\projects\playnite\source\PlayniteSDK\RelayCommand.cs:line 199
at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
The Most Played view has an option for "Last 6 Month." I think that should be 'Months' instead.
Thanks!
TLDR: The "Most Played" widget is displaying the same game for all time periods except "All Time".
In my current configuration, I have Borderlands 3 displaying as the most played in the "Last Month", "Last Year" and "Last 5 Years", and Final Fantasy XIV in "All Time".
But what I would expect to see is;
This was working before the update that allowed us to choose the displayed time periods, and stopped working as soon as that update was applied (before changing the display settings).
I've tried multiple combinations since but it always displays Borderlands 3 for everything except "All Time".
If I tag Borderlands 3 as "[SPG] Most Played Hadden" and restart Playnite, the bug persists but with the next most played game of the month appearing in all panels (except "All Time") - in my example this is Just Cause 4 (last played 16/05/2022, total playtime 20h) - removing this tag puts Borderlands 3 back in them all.
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.