Jump to content

Recommended Posts

I got around to building the ApiClient from the repo and everything seems to be working, though I'm not sure if I'm using the newer API properly.

 

@@Luke I've still got a quick question regarding playback resume though. I've noticed that UserItemDataDto contains the information I need but looking at the ApiClient there doesn't seem to be a method which simply gets the data without updating anything server-side. Am I missing something? Which method am I supposed to be calling?

Link to post
Share on other sites

Yeah I see, I incorrectly assumed all the information returned would be user-specific since the method takes a user ID. I'm getting the right value now, thanks!

Link to post
Share on other sites

I've decided to release a version with PlayPause support, though I've noticed mostly by accident (restarted my server) that the client doesn't automatically reconnect anymore. I'll have a look at that and do something about it in a future release, but for now there's v1.0.5.0 on GitHub.

Link to post
Share on other sites

If you're referring to web socket, it's not a good pattern that we were using before to automatically reconnect with a timer. if you really want that then you can just add a timer in your app that calls the EnsureWebSocket method. But instead you should look to do it after user interaction, e.g. app resume, navigation, etc.

Link to post
Share on other sites

I was thinking of adding a timer outside of the client, yeah.

 

I would just do that on user interaction if I could, but nobody interacts with E2PL directly at all. It just waits in the background until it gets a Play command from the server, so if the connection is interrupted it has to be re-established automatically. I'll probably add some sort of periodic connection check so the user doesn't have to restart the app manually if the server goes down.

Link to post
Share on other sites

I've decided to release a version with PlayPause support, though I've noticed mostly by accident (restarted my server) that the client doesn't automatically reconnect anymore. I'll have a look at that and do something about it in a future release, but for now there's v1.0.5.0 on GitHub.

Appreciate the quick response!  Thanks!

Link to post
Share on other sites

No problem, let me know if you run into any more issues! Actually I've found another one myself, v1.0.5.0 may sometimes hang when attempting to exit or when changing configuration.

 

Fixed that in v1.0.5.1, but auto-reconnect is still not back yet.

Link to post
Share on other sites

I need to try this out when I get some free time. How can I launch playback on the external player? Do I need to use an app like ET with an external player configured to start the playback or can I use the "Play On" function to initiate playback from the web or mobile app directly to the external player? Either way being able to use MPC-HC might get me to try out ET again. Thanks for sharing this.

Link to post
Share on other sites

You don't need Emby Theater. After you configure & run E2PL, it will appear by itself in the "Play On" menu, you can then select it and initiate playback from the web interface or from an Emby mobile app. You also get basic remote control functionality (Play/Pause/Stop/Volume/Seeking) and automatic viewing progress syncing. Playback is done straight through a network share (which you need to set up if you don't have it already), so there's no transcoding.

 

E2PL is a simple program though, it's not meant to handle complex scenarios or replace full-blown media centers like ET, Kodi or such. My goal with it is basically to watch videos on my desktop PC while still keeping the Emby library tidy & in sync with all other devices.

Edited by Bloodred
Link to post
Share on other sites

Auto-reconnect is now back, in v1.1.0.0. Don't worry too much if you see JSON-related exceptions in the log coming from the ApiClient, as they do not affect functionality as far as I can tell.

 

-----

 

Hey @@Luke, I've noticed that the new ApiClient versions log a lot of JsonReaderExceptions, though this does not seem to affect the functionality of the methods and events I use for E2PL. I don't think I'm misusing anything, as the exceptions appear to be coming from internal deserialization of WebSocket messages, due to incorrect JSON. Any idea why? They look like this:

 

 

2017-09-23 00:52:47,226 [20 ] ERROR EmbyExternalPlayerLauncher.ServerConnect.Logging.EmbyLogger - Error in OnMessageReceivedInternal
Newtonsoft.Json.JsonReaderException: Unterminated string. Expected delimiter: ". Path 'Data.NowPlayingItem.Path', line 1, position 4096.
   at Newtonsoft.Json.JsonTextReader.ReadStringIntoBuffer(Char quote)
   at Newtonsoft.Json.JsonTextReader.ParseValue()
   at Newtonsoft.Json.JsonTextReader.Read()
   at Newtonsoft.Json.JsonReader.Skip()
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetExtensionData(JsonObjectContract contract, JsonProperty member, JsonReader reader, String memberName, Object o)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
   at Emby.ApiClient.NewtonsoftJsonSerializer.DeserializeFromString[T](String text)
   at Emby.ApiClient.ApiClient.GetMessageType(String json)
   at Emby.ApiClient.ApiClient.OnMessageReceivedInternal(String json)
   at Emby.ApiClient.ApiClient.OnMessageReceived(String json)
2017-09-23 00:52:47,435 [20 ] ERROR EmbyExternalPlayerLauncher.ServerConnect.Logging.EmbyLogger - Error in OnMessageReceivedInternal
Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: d. Path '', line 0, position 0.
   at Newtonsoft.Json.JsonTextReader.ParseValue()
   at Newtonsoft.Json.JsonTextReader.Read()
   at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
   at Emby.ApiClient.NewtonsoftJsonSerializer.DeserializeFromString[T](String text)
   at Emby.ApiClient.ApiClient.GetMessageType(String json)
   at Emby.ApiClient.ApiClient.OnMessageReceivedInternal(String json)
   at Emby.ApiClient.ApiClient.OnMessageReceived(String json)
2017-09-23 00:52:47,635 [20 ] ERROR EmbyExternalPlayerLauncher.ServerConnect.Logging.EmbyLogger - Error in OnMessageReceivedInternal
Newtonsoft.Json.JsonReaderException: Additional text encountered after finished reading JSON content: ,. Path '', line 1, position 0.
   at Newtonsoft.Json.JsonTextReader.Read()
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
   at Emby.ApiClient.NewtonsoftJsonSerializer.DeserializeFromString[T](String text)
   at Emby.ApiClient.ApiClient.GetMessageType(String json)
   at Emby.ApiClient.ApiClient.OnMessageReceivedInternal(String json)
   at Emby.ApiClient.ApiClient.OnMessageReceived(String json)
2017-09-23 00:52:47,835 [20 ] ERROR EmbyExternalPlayerLauncher.ServerConnect.Logging.EmbyLogger - Error in OnMessageReceivedInternal
Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: a. Path '', line 0, position 0.
   at Newtonsoft.Json.JsonTextReader.ParseValue()
   at Newtonsoft.Json.JsonTextReader.Read()
   at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
   at Emby.ApiClient.NewtonsoftJsonSerializer.DeserializeFromString[T](String text)
   at Emby.ApiClient.ApiClient.GetMessageType(String json)
   at Emby.ApiClient.ApiClient.OnMessageReceivedInternal(String json)
   at Emby.ApiClient.ApiClient.OnMessageReceived(String json)
2017-09-23 00:52:48,036 [20 ] ERROR EmbyExternalPlayerLauncher.ServerConnect.Logging.EmbyLogger - Error in OnMessageReceivedInternal
Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: P. Path '', line 0, position 0.
   at Newtonsoft.Json.JsonTextReader.ParseValue()
   at Newtonsoft.Json.JsonTextReader.Read()
   at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
   at Emby.ApiClient.NewtonsoftJsonSerializer.DeserializeFromString[T](String text)
   at Emby.ApiClient.ApiClient.GetMessageType(String json)
   at Emby.ApiClient.ApiClient.OnMessageReceivedInternal(String json)
   at Emby.ApiClient.ApiClient.OnMessageReceived(String json) 

 

 

Link to post
Share on other sites
  • 1 year later...
HaraldBluetooth

Hi, thanks for this nice app, just what I need :)

I have installed your program on my local PC (Windows 10 Pro fully updated), where EMBY server is running, with a working movie library from several external disks connected via USB3.

 

When I choose your launcher in the webbrowser (Both EDGE and Chrome) and try to play, nothing happens. I've already had the 64 bit version of MPC-HC installed before I installed the 32 bit version too.

 

I get this in the log file:

2018-09-27 12:08:23,023 [53 ] ERROR EmbyExternalPlayerLauncher.ServerConnect.EmbyPlayerConnector - Play command failed.
MediaBrowser.Model.Net.HttpException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Emby.ApiClient.Net.HttpWebRequestClient.<GetResponse>d__10.MoveNext()
   --- End of inner exception stack trace ---
   at Emby.ApiClient.Net.HttpWebRequestClient.<GetResponse>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Emby.ApiClient.Net.HttpWebRequestClient.<SendAsync>d__13.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Emby.ApiClient.ApiClient.<SendAsync>d__30.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Emby.ApiClient.ApiClient.<GetItemAsync>d__40.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at EmbyExternalPlayerLauncher.ServerConnect.EmbyPlayerConnector.<Client_PlayCommand>d__26.MoveNext()

 

Can you please help me?
 

Edited by HaraldBluetooth
Link to post
Share on other sites

Hi!

 

That looks like the server is returning a HTTP 500 error. Generally speaking that error code means the server encountered some sort of unexpected error, so it could be helpful for you to check the server log to see if there is any information there about what the server failed to do exactly. Since this is happening when E2PL is trying to process a Play command and you're not seeing a player start, it probably means E2PL tries to retrieve information about the file you want to play but the request to the server fails.

 

It could be that there's something wrong with your Emby server (not sure what) but it could also happen if the Emby client E2PL uses is no longer compatible with the server version you have. What server version are you running? It's pretty bad news if it turns out the Emby client is incompatible since an update version does not seem to be available.

 

Everything is working for me but my server is older. I'll investigate when I have some time, maybe over the weekend.

Link to post
Share on other sites
HaraldBluetooth

Thanks for your answer Bloodred. My server version is latest beta 3.6.0.49. I have the same problem with the app MPCRemote, that worked for me until server version 3.6.0.30. I don't know if this is related or something else is wrong.

 

I have tried with many different movies, that all play fine directly in the web-browser, or if I play them in MPC-HC from file explorer. Emby Theater also play these files fine both directly and with MPC-HC as external player. The movies are almost all 720p or 1080p x264 mkv's.

Edited by HaraldBluetooth
Link to post
Share on other sites

I've installed the latest beta myself and sadly it does seem to be a mismatch between the newest available Emby API client and the beta, as in the server complains about the input not being in the correct format which I assume happens due to the expected format changing in the new server. I can't find an updated version of the Emby API client package yet, maybe it hasn't been released since the server itself is still in beta.

 

Anyway, this means there's nothing wrong with your setup in particular, but that E2PL is currently incompatible with this version of the server. I'll investigate more to see if I can get it fixed without a new Emby client package, but in the meantime the obvious workaround would be to use an older version of the Emby server if you need to get this working.

Link to post
Share on other sites
HaraldBluetooth

Thanks Bloodred, I will wait for your update.

 

Unfortunately I can't downgrade to an old server version, because there was some database changes i version 3.6.0.31, so my workaround is to start the movie from file explorer or use Emby Theater.

Link to post
Share on other sites

I've tried to build the latest version of the API client I could find from source (last change 5 months ago) but this doesn't seem to address the compatibility issue with the beta server. I think we'll have to wait for an official update to be released, at which point I hope to be able to easily integrate the new version into E2PL.

Link to post
Share on other sites

In short: trying to call the GetItemAsync method on the ApiClient (v3.1.0 nuget package) when the Emby server is the latest 3.6.0.50 beta fails with a HTTP 500 error.

 

Checking the server's log reveals an exception about input being in an invalid format, which I assumed was due to changes in the server's API which have not trickled down into the ApiClient package yet. This is the point where playback through E2PL fails, I'm not sure if other methods are affected as well or not.

 

Client-side exception:

2018-09-30 20:25:22,037 [148] ERROR EmbyExternalPlayerLauncher.ServerConnect.Logging.EmbyLogger - Error getting response from http://localhost:8096/emby/Users/1/Items/313?format=json
System.AggregateException: One or more errors occurred. ---> System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Emby.ApiClient.Net.HttpWebRequestClient.<GetResponse>d__10.MoveNext()
---> (Inner Exception #0) System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)<---

2018-09-30 20:25:22,038 [148] ERROR EmbyExternalPlayerLauncher.ServerConnect.EmbyPlayerConnector - Play command failed.
MediaBrowser.Model.Net.HttpException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Emby.ApiClient.Net.HttpWebRequestClient.<GetResponse>d__10.MoveNext()
   --- End of inner exception stack trace ---
   at Emby.ApiClient.Net.HttpWebRequestClient.<GetResponse>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Emby.ApiClient.Net.HttpWebRequestClient.<SendAsync>d__13.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Emby.ApiClient.ApiClient.<SendAsync>d__30.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Emby.ApiClient.ApiClient.<GetItemAsync>d__40.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at EmbyExternalPlayerLauncher.ServerConnect.EmbyPlayerConnector.<Client_PlayCommand>d__26.MoveNext()

And the corresponding exception in the server's log:

2018-09-30 20:25:20.693 Info HttpServer: HTTP GET http://localhost:8096/emby/Users/1/Items/313?format=json. UserAgent: 
2018-09-30 20:25:20.698 Error HttpServer: Error processing request
	*** Error Report ***
	Version: 3.6.0.50
	Command line: /opt/emby-server/system/EmbyServer.dll -programdata /var/lib/emby -ffmpeg /opt/emby-server/bin/ffmpeg -ffprobe /opt/emby-server/bin/ffprobe -restartexitcode 3 -updatepackage emby-server-deb_{version}_amd64.deb
	Operating system: Unix 4.15.0.34
	64-Bit OS: True
	64-Bit Process: True
	User Interactive: True
	Processor count: 2
	Program data path: /var/lib/emby
	Application directory: /opt/emby-server/system
	System.FormatException: Input string was not in a correct format.
	Source: ServiceStack.Text
	TargetSite: System.Guid ParseGeneralStyleGuid(System.ReadOnlySpan`1[System.Char], Int32 ByRef)
	   at ServiceStack.Text.DefaultMemory.ParseGeneralStyleGuid(ReadOnlySpan`1 value, Int32& len)
	   at ServiceStack.Text.DefaultMemory.ParseGuid(ReadOnlySpan`1 value)
	   at ServiceStack.Text.Common.DeserializeBuiltin`1.<>c.<GetParseStringSpanFn>b__7_6(ReadOnlySpan`1 value)
	   at ServiceStack.Text.Jsv.JsvReader.<>c__DisplayClass2_0.<GetParseFn>b__0(String v)
	   at Emby.Server.Implementations.ApplicationHost.<>c__DisplayClass300_0.<GetParseFn>b__0(String s)
	   at Emby.Server.Implementations.Services.StringMapTypeDeserializer.PopulateFromMap(Object instance, IDictionary`2 keyValuePairs)
	   at Emby.Server.Implementations.Services.RestPath.CreateRequest(String pathInfo, Dictionary`2 queryStringAndFormData, Object fromInstance)
	   at Emby.Server.Implementations.Services.ServiceHandler.CreateRequest(IRequest httpReq, RestPath restPath, Dictionary`2 requestParams, Object requestDto)
	   at Emby.Server.Implementations.Services.ServiceHandler.CreateRequest(HttpListenerHost host, IRequest httpReq, RestPath restPath, ILogger logger)
	   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost appHost, IRequest httpReq, IResponse httpRes, ILogger logger, String operationName, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IRequest httpReq, String urlString, String host, String localPath, CancellationToken cancellationToken)
	
2018-09-30 20:25:20.698 Info HttpServer: HTTP Response 500 to 10.0.2.2. Time: 5ms. http://localhost:8096/emby/Users/1/Items/313?format=json

I'm assuming that FormatException on the server is due to something having changed in the API, it looks like it's expecting a GUID but the ApiClient method takes regular strings and I don't believe they follow a GUID format, for instance while debugging I saw that item IDs returned in a PlayRequest just contain numbers (in this case "313").

Edited by Bloodred
Link to post
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...