Jump to content

New Plugin: Smart Playlists 2.0


ShaneP

Recommended Posts

1 minute ago, Happy2Play said:

Can you post a server log.

I managed to have the plugin working in the browser but not in the windows app.

 

embyserver.txt

Link to comment
Share on other sites

Happy2Play
31 minutes ago, Tangsgod said:

I managed to have the plugin working in the browser but not in the windows app.

 

embyserver.txt 357.16 kB · 1 download

Can confirm plugin will not display in ET Desktop and Store versions.  But think @Lukewill have to comment on this instead of @ShaneP.

Link to comment
Share on other sites

1 hour ago, ShaneP said:

@Tangsgod TBH I've never run it on windows, so not 100% sure. I can check out out though.

Yes, thank you :)

I'm only using Emby Theater, it's more responsive on my pc. 

Also, when you said that it'd possible to have the smart collections on the homescreen I was really excited but it seems that it's not possible 😕

Edited by Tangsgod
Link to comment
Share on other sites

57 minutes ago, Tangsgod said:

Yes, thank you :)

I'm only using Emby Theater, it's more responsive on my pc. 

Also, when you said that it'd possible to have the smart collections on the homescreen I was really excited but it seems that it's not possible 😕

Ahhh, sorry I meant the collection short cut... so one level above the actual collections... But you could add it to your favourites. (Which is like a second dashboard)

image.png.21ec777fcb96139e4443c68427fdc9cb.png

Link to comment
Share on other sites

Hi all, Version 2.1.0.1 is available for testing.

 

  • Version 2.1.0.1
    • Feature
      • Added Sync Count to playlist statistics
      • Added more detailed status messages to playlist statistics
      • Added the ability to turn playlist syncing on or off per playlist
      • Added sort for newly added items
      • Added new source type for playlists
        • Media Items: Use all media items as a base to apply filters on.
        • Playlist: Use an existing playlist as a base to apply filters on.
        • Collection: Use an existing Collection as a base to apply filters on.
      • Added the ability to execute a playlist from the editor.(Pop up is not the actual execution time, you need to check the info to see how the playlist updated)
      • Renamed criteria "Path" to "Path/Filename".  BREAKING CHANGE, please re-select path/filename, save any playlist that uses the criteria
      • Fixed thumbnail image rendering in plugin list.

 

As always code can be found here

 

SmartPlaylist-2.1.0.1.zip

  • Thanks 4
Link to comment
Share on other sites

wordlover
3 hours ago, ShaneP said:

Hi all, Version 2.1.0.1 is available for testing.

 

  • Version 2.1.0.1
    • Feature
      • Added Sync Count to playlist statistics
      • Added more detailed status messages to playlist statistics
      • Added the ability to turn playlist syncing on or off per playlist
      • Added sort for newly added items
      • Added new source type for playlists
        • Media Items: Use all media items as a base to apply filters on.
        • Playlist: Use an existing playlist as a base to apply filters on.
        • Collection: Use an existing Collection as a base to apply filters on.
      • Added the ability to execute a playlist from the editor.(Pop up is not the actual execution time, you need to check the info to see how the playlist updated)
      • Renamed criteria "Path" to "Path/Filename".  BREAKING CHANGE, please re-select path/filename, save any playlist that uses the criteria
      • Fixed thumbnail image rendering in plugin list.

 

As always code can be found here

 

SmartPlaylist-2.1.0.1.zip 169.53 kB · 3 downloads

This is great, @ShaneP. An interesting quirk is with only one sort field it adds all tracks (for example) sorted by Album Artist but in groupings of unsorted tracks from each artist's different albums. And playlist renaming doesn't work. All else is great and useful and very much appreciated. 

Link to comment
Share on other sites

2 hours ago, wordlover said:

This is great, @ShaneP. An interesting quirk is with only one sort field it adds all tracks (for example) sorted by Album Artist but in groupings of unsorted tracks from each artist's different albums. And playlist renaming doesn't work. All else is great and useful and very much appreciated. 

Thanks @wordlover, I just leveraged off of the original sort code, so 1. I’m may not have understood what it was doing correctly or 2. I totally f’d it up. From my understanding when “new items” are detected for a playlist, those are to be sorted and then added to the playlist. Is this not happening? (In my small playlist test it was) If you could give me a bit more detail of what you’re expecting the behaviour to be that would be awesome. Maybe a screen shoot, I understand better with pictures :)

Link to comment
Share on other sites

ginjaninja
6 hours ago, ShaneP said:

Hi all, Version 2.1.0.1 is available for testing.

 

  • Version 2.1.0.1
    • Feature
      • Added Sync Count to playlist statistics
      • Added more detailed status messages to playlist statistics
      • Added the ability to turn playlist syncing on or off per playlist
      • Added sort for newly added items
      • Added new source type for playlists
        • Media Items: Use all media items as a base to apply filters on.
        • Playlist: Use an existing playlist as a base to apply filters on.
        • Collection: Use an existing Collection as a base to apply filters on.
      • Added the ability to execute a playlist from the editor.(Pop up is not the actual execution time, you need to check the info to see how the playlist updated)
      • Renamed criteria "Path" to "Path/Filename".  BREAKING CHANGE, please re-select path/filename, save any playlist that uses the criteria
      • Fixed thumbnail image rendering in plugin list.

 

As always code can be found here

 

SmartPlaylist-2.1.0.1.zip 169.53 kB · 6 downloads

new user...

copied dll to plugins folder, restarted server (beta 4.7.0.23). no action when clicking on plugin settings..unable to configure.

2022-02-07 21:16:27.829 Debug Server: http/1.1 GET http://‌‍‍localhost‌:8096/web/configurationpage?name=smartplaylist.2.1.0.1.html&v=4.7.0.23. UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36
2022-02-07 21:16:27.829 Debug Server: http/1.1 GET http://‌‍‍localhost‌:8096/emby/web/configurationpages?Name=smartplaylist.2.1.0.1.html&X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzcyLjAuMzYyNi4xMjEgU2FmYXJpLzUzNy4zNnwxNTUyNzM5MTY1MzY5&X-Emby-Client-Version=4.7.0.23. UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36
2022-02-07 21:16:27.830 Debug Server: http/1.1 Response 200 to ::1. Time: 1ms. http://‌‍‍localhost‌:8096/emby/web/configurationpages?Name=smartplaylist.2.1.0.1.html&X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzcyLjAuMzYyNi4xMjEgU2FmYXJpLzUzNy4zNnwxNTUyNzM5MTY1MzY5&X-Emby-Client-Version=4.7.0.23
2022-02-07 21:16:27.830 Debug Server: http/1.1 Response 304 to ::1. Time: 2ms. http://‌‍‍localhost‌:8096/web/configurationpage?name=smartplaylist.2.1.0.1.html&v=4.7.0.23
2022-02-07 21:16:27.838 Error Server: Error processing request
	*** Error Report ***
	Version: 4.7.0.23
	Command line: C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\system\EmbyServer.dll C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\system\EmbyServer.dll -noautorunwebapp
	Operating system: Microsoft Windows 10.0.19044
	Framework: .NET 6.0.0-rtm.21522.10
	OS/Process: x64/x64
	Runtime: C:/Users/Nicholas Bird/AppData/Roaming/Emby-Server/system/System.Private.CoreLib.dll
	Processor count: 12
	Data path: C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\programdata
	Application path: C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\system
	System.IO.FileNotFoundException: System.IO.FileNotFoundException: Could not find file 'C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\system\dashboard-ui\scrollHelper.js'.
	File name: 'C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\system\dashboard-ui\scrollHelper.js'
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
	   at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
	   at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
	   at System.IO.FileStream..ctor(String path, FileStreamOptions options)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileShareMode share, Int32 bufferSize, FileOpenOptions fileOpenOptions, Int64 preAllocationSize)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileShareMode share, FileOpenOptions fileOpenOptions)
	   at Emby.Server.Implementations.IO.IOManager.GetResponse(HttpRequestOptions options, MediaProtocol protocol)
	   at Emby.Server.Implementations.IO.IOManager.GetResponse(HttpRequestOptions options)
	   at Emby.Server.Implementations.HttpServer.HttpResultFactory.GetContent(StaticFileResultOptions options, Int64 offset, Int64 length, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.FileWriter.SetContentResponseHeaders(Nullable`1 reportedTotalContentLength, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpResultFactory.GetStaticResult(IRequest requestContext, StaticResultOptions options)
	   at Emby.Web.Api.DashboardService.Get(GetDashboardResource request)
	   at Emby.Server.Implementations.Services.ServiceController.GetTaskResult(Task task)
	   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost appHost, IRequest httpReq, IResponse httpRes, RestPath restPath, String responseContentType, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IRequest httpReq, ReadOnlyMemory`1 urlString, ReadOnlyMemory`1 localPath, CancellationToken cancellationToken)
	Source: System.Private.CoreLib
	TargetSite: Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, System.IO.FileOptions)
	
2022-02-07 21:16:30.398 Debug Server: http/1.1 GET http://‌‍‍localhost‌:8096/emby/Plugins/3c96f5bc-4182-4b86-b05d-f730f2611e45/Thumb?maxWidth=200&tag=1. UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36

 

Link to comment
Share on other sites

wordlover
15 minutes ago, ShaneP said:

Thanks @wordlover, I just leveraged off of the original sort code, so 1. I’m may not have understood what it was doing correctly or 2. I totally f’d it up. From my understanding when “new items” are detected for a playlist, those are to be sorted and then added to the playlist. Is this not happening? (In my small playlist test it was) If you could give me a bit more detail of what you’re expecting the behaviour to be that would be awesome. Maybe a screen shoot, I understand better with pictures :)

Aha! Now sorting is working as I expected - my mistake was editing earlier Smart Playlists, rather than just recreating from scratch using the updated plugin. 

  • Like 1
Link to comment
Share on other sites

1 minute ago, ginjaninja said:

new user...

copied dll to plugins folder, restarted server (beta 4.7.0.23). no action when clicking on plugin settings..unable to configure.

2022-02-07 21:16:27.829 Debug Server: http/1.1 GET http://‌‍‍localhost‌:8096/web/configurationpage?name=smartplaylist.2.1.0.1.html&v=4.7.0.23. UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36
2022-02-07 21:16:27.829 Debug Server: http/1.1 GET http://‌‍‍localhost‌:8096/emby/web/configurationpages?Name=smartplaylist.2.1.0.1.html&X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzcyLjAuMzYyNi4xMjEgU2FmYXJpLzUzNy4zNnwxNTUyNzM5MTY1MzY5&X-Emby-Client-Version=4.7.0.23. UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36
2022-02-07 21:16:27.830 Debug Server: http/1.1 Response 200 to ::1. Time: 1ms. http://‌‍‍localhost‌:8096/emby/web/configurationpages?Name=smartplaylist.2.1.0.1.html&X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzcyLjAuMzYyNi4xMjEgU2FmYXJpLzUzNy4zNnwxNTUyNzM5MTY1MzY5&X-Emby-Client-Version=4.7.0.23
2022-02-07 21:16:27.830 Debug Server: http/1.1 Response 304 to ::1. Time: 2ms. http://‌‍‍localhost‌:8096/web/configurationpage?name=smartplaylist.2.1.0.1.html&v=4.7.0.23
2022-02-07 21:16:27.838 Error Server: Error processing request
	*** Error Report ***
	Version: 4.7.0.23
	Command line: C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\system\EmbyServer.dll C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\system\EmbyServer.dll -noautorunwebapp
	Operating system: Microsoft Windows 10.0.19044
	Framework: .NET 6.0.0-rtm.21522.10
	OS/Process: x64/x64
	Runtime: C:/Users/Nicholas Bird/AppData/Roaming/Emby-Server/system/System.Private.CoreLib.dll
	Processor count: 12
	Data path: C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\programdata
	Application path: C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\system
	System.IO.FileNotFoundException: System.IO.FileNotFoundException: Could not find file 'C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\system\dashboard-ui\scrollHelper.js'.
	File name: 'C:\Users\Nicholas Bird\AppData\Roaming\Emby-Server\system\dashboard-ui\scrollHelper.js'
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
	   at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
	   at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
	   at System.IO.FileStream..ctor(String path, FileStreamOptions options)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileShareMode share, Int32 bufferSize, FileOpenOptions fileOpenOptions, Int64 preAllocationSize)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileShareMode share, FileOpenOptions fileOpenOptions)
	   at Emby.Server.Implementations.IO.IOManager.GetResponse(HttpRequestOptions options, MediaProtocol protocol)
	   at Emby.Server.Implementations.IO.IOManager.GetResponse(HttpRequestOptions options)
	   at Emby.Server.Implementations.HttpServer.HttpResultFactory.GetContent(StaticFileResultOptions options, Int64 offset, Int64 length, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.FileWriter.SetContentResponseHeaders(Nullable`1 reportedTotalContentLength, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpResultFactory.GetStaticResult(IRequest requestContext, StaticResultOptions options)
	   at Emby.Web.Api.DashboardService.Get(GetDashboardResource request)
	   at Emby.Server.Implementations.Services.ServiceController.GetTaskResult(Task task)
	   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost appHost, IRequest httpReq, IResponse httpRes, RestPath restPath, String responseContentType, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IRequest httpReq, ReadOnlyMemory`1 urlString, ReadOnlyMemory`1 localPath, CancellationToken cancellationToken)
	Source: System.Private.CoreLib
	TargetSite: Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, System.IO.FileOptions)
	
2022-02-07 21:16:30.398 Debug Server: http/1.1 GET http://‌‍‍localhost‌:8096/emby/Plugins/3c96f5bc-4182-4b86-b05d-f730f2611e45/Thumb?maxWidth=200&tag=1. UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36

 

If i good anderstood, the plugin doesn't work yet with the beta, to try it you should have the last stable server version.

  • Thanks 1
Link to comment
Share on other sites

20 minutes ago, Tangsgod said:

If i good anderstood, the plugin doesn't work yet with the beta, to try it you should have the last stable server version.

Hey @gingerninja, @Tangsgodis correct. I’ll be working on the beta branch next.

  • Like 2
Link to comment
Share on other sites

26 minutes ago, wordlover said:

Aha! Now sorting is working as I expected - my mistake was editing earlier Smart Playlists, rather than just recreating from scratch using the updated plugin. 

Thanks @wordlover, I have it on my list to create a new process that will sort already created lists, but this will be a different process entirely, for perf reasons. Then you could even change the sorting once it’s already been created…. Added bonus :)

  • Like 2
Link to comment
Share on other sites

20 minutes ago, ShaneP said:

Thanks @wordlover, I have it on my list to create a new process that will sort already created lists, but this will be a different process entirely, for perf reasons. Then you could even change the sorting once it’s already been created…. Added bonus :)

And to make the plugin editor work window Emby Theater? And make the collection available for the homescreen? 😋

Link to comment
Share on other sites

14 minutes ago, Tangsgod said:

And to make the plugin editor work window Emby Theater? And make the collection available for the homescreen? 😋

Haha, I’ll look into the editor part. Home Screen unfortunately is native Emby. But I’m sure there must be a way.

  • Like 1
Link to comment
Share on other sites

Do you think that when making a playlist or a collection, when we want to add a genre filter, we could have the list of the genre instead of having to write it?
It would be very practical and better to avoid typing mistake :)

  • Like 1
Link to comment
Share on other sites

Strange, making a Collection just made me lose 1694 posters.....

Refreshing metadatas and restarted the server didn't change a thing, still no poster

lost poster.JPG

embyserver.txt

Edited by Tangsgod
Link to comment
Share on other sites

18 minutes ago, Tangsgod said:

Strange, making a Collection just made me lose 1694 posters.....

Refreshing metadatas and restarted the server didn't change a thing, still no poster

lost poster.JPG

embyserver.txt 3.42 MB · 1 download

Will investigate, but the plug-in does not do anything to the actual media item itself, it merely links it to a play list. I have seen this happen on non related playlists and collections . But after a short while it seems to load them again. I’ll try to get the root cause.

  • Thanks 1
Link to comment
Share on other sites

Hello,
First of all, thank you for the development of this plugin.
I have installed it but I don't really understand how it works.
For example. I want to create a smart collection for all series whose studio is netflix. Could you explain me if this is possible and if so how to do it?
 

Link to comment
Share on other sites

InaudibleDirge

It appears that the item limit isn't restricting properly in the latest release. I have two smart collections, Bottom 100 and Top 250, whose rules are only to include every movie but are limited in count and sorted by community rating desc/asc. Both playlists now include every movie regardless of the limit. I've deleted and rebuilt them, and changed to playlists instead of collections, but none of that worked.

  • Thanks 1
Link to comment
Share on other sites

6 hours ago, InaudibleDirge said:

It appears that the item limit isn't restricting properly in the latest release. I have two smart collections, Bottom 100 and Top 250, whose rules are only to include every movie but are limited in count and sorted by community rating desc/asc. Both playlists now include every movie regardless of the limit. I've deleted and rebuilt them, and changed to playlists instead of collections, but none of that worked.

Thanks for finding this bug @InaudibleDirge Small fix, will push out a fix in a day or two, and all will be good again :D

  • Like 1
Link to comment
Share on other sites

7 hours ago, Bagul said:

Hello,
First of all, thank you for the development of this plugin.
I have installed it but I don't really understand how it works.
For example. I want to create a smart collection for all series whose studio is netflix. Could you explain me if this is possible and if so how to do it?
 

Thanks @Bagul, but I can't take credit for this :D most of the heavy lifting was already done by ppankiewicz.

So if I understand you correctly, you could do this. (Will scan for Netflix movies once a day, when the scheduled task runs), Let me know if that works for you.

image.thumb.png.5fde5e5734c8b11d041c32ffbddd452e.png

Link to comment
Share on other sites

Hey All, Release 2.1.0.2 is available. Just with a few bug fixes.

Version 2.1.0.2

  • Performance
    • Optimized addition and removal of items to a playlist or collection.
  • Bugs
    • Fixed a bug where images could be removed under certain circumstances.
    • Fixed bug where it sometimes would not remove the related playlist when deleting or converting to collection.
    • Fixed when limiting results to 'X' number of items, was not being applied correctly.

As always code is here

 

And thanks to everyone for testing and finding these :D

SmartPlaylist-2.1.0.2.zip

  • Thanks 1
Link to comment
Share on other sites

hi, could you include filter by country?

 

btw, still struggling to find a way to keep collection/playlist after I remove it in plugin. any ideas?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...