public bool Command(string cmd, string parameter) { HttpWebRequest request; var returnContent = false; var uri = @"http://" + _parent.ClientIPAddress + ":32433/playback/" + cmd + "?commandID=720276921&type=video"; if (!String.IsNullOrEmpty(parameter)) { uri += "&" + parameter; } try { request = (HttpWebRequest)WebRequest.Create(new Uri(uri)); request.Headers.Add("X-Plex-Token", _parent.PlexAuthToken); request.Headers.Add("X-Plex-Client-Identifier", "Plex Media Player"); // request.Headers.Add("X-Plex-Product","Yatse 3 Socket"); // request.Headers.Add("X-Plex-Version", "0.1.0"); request.Headers.Add("commandID", "1"); request.Method = "GET"; request.Timeout = 1000; _parent.Log("Plex COMMAND via MPC : " + cmd); _parent.Trace(uri); using (var response = (HttpWebResponse)request.GetResponse()) { using (var stream = response.GetResponseStream()) { if (stream != null) { using (var reader = new StreamReader(stream, Encoding.UTF8)) { var reqContent = reader.ReadToEnd(); _parent.Trace(reqContent); returnContent = true; } } } } } catch (WebException e) { _parent.Log("ERROR - PLEX via MPC Command : " + cmd + " - " + e.Message); if (e.Status == WebExceptionStatus.Timeout) { // _parent.MpcLoaded = false; } } return(returnContent); }
public void StopAsync() { _parent.Log("Cancelling downloads"); _workerDownloads.CancelAsync(); }
public void RefreshNowPlaying() { lock (Locker) { /*if (_parent.MpcLoaded) * { * var result = _parent.MpcHcRemote.GetStatus(); * var result2 = new ArrayList(); * MpcHcRemote.ParseCSVFields(result2, result); * var data = (string[])result2.ToArray(typeof(string)); * if (data.Length > 6) * { * _nowPlaying.MediaType = "Video"; * _nowPlaying.Title = "Media Player Classic"; * _nowPlaying.Time = new TimeSpan(0, 0, 0, Convert.ToInt32("0" + data[2]) / 1000); * _nowPlaying.Duration = new TimeSpan(0, 0, 0, Convert.ToInt32("0" + data[4]) / 1000); * var percent = Math.Floor(100.0 * Convert.ToInt32("0" + data[2], CultureInfo.InvariantCulture) / Convert.ToInt32("0" + data[4], CultureInfo.InvariantCulture)); * if (Double.IsNaN(percent)) * percent = 0; * _nowPlaying.Volume = Convert.ToInt32("0" + data[7], CultureInfo.InvariantCulture); * _nowPlaying.IsMuted = data[6] == "1"; * _nowPlaying.Progress = (int)percent; * * if (data[1] == "Playing") * { * _parent.Log("XBMC PLAYER REMOTE: Playing given Changing NowPlaying to true " + data[1]); * _nowPlaying.IsPlaying = true; * _nowPlaying.IsPaused = false; * } * if (data[1] == "Paused") * { * _parent.Log("XBMC PLAYER REMOTE: Paused given Changing NowPlaying to true " + data[1]); * _nowPlaying.IsPaused = true; * _nowPlaying.IsPlaying = !_nowPlaying.IsPaused; * } * * } * if (_parent.MpcLoaded == false) * { * _nowPlaying.FileName = "Glenn MPC Stopped"; * _nowPlaying.Title = ""; * _nowPlaying.IsPlaying = false; * _nowPlaying.IsPaused = false; * } * } * else * { * if (!_parent.IsConnected()) * { * _nowPlaying.FileName = ""; * _nowPlaying.Title = ""; * _nowPlaying.IsPlaying = false; * _nowPlaying.IsPaused = false; * _parent.Log("XBMC PLAYER REMOTE: Returning as no !Player Connected"); * * return; * } * //_parent.Log("XBMC PLAYER REMOTE: Check with MPC Doesnt make it here"); * /* */ /* * var GUIproperties = new JsonObject(); * GUIproperties["properties"] = new[] * { * "currentwindow" * * * }; * * var menuresult = (JsonObject)_parent.JsonCommand("GUI.GetProperties", GUIproperties); * var GUIdeeper = (JsonObject)menuresult["currentwindow"]; * _nowPlaying.CurrentMenuLabel = GUIdeeper["label"].ToString(); * _nowPlaying.CurrentMenuID = GUIdeeper["id"].ToString(); * * * var current = -1; * var players = (JsonArray)_parent.JsonCommand("Player.GetActivePlayers", null); * * * if (players.Count > 0) * { * foreach (JsonObject player in players) * { * if (player["type"].ToString() == "picture") * continue; * current = Int32.Parse(player["playerid"].ToString()); * _nowPlaying.MediaType = (string)player["type"]; * } * } * * if (current == -1) * { * _nowPlaying.FileName = ""; * _nowPlaying.Title = ""; * _nowPlaying.IsPlaying = false; * _nowPlaying.IsPaused = false; * return; * } * * var items = new JsonObject(); * items["playerid"] = current; * items["properties"] = new[]{ * "file", * "comment", * "tvshowid", * "albumartist", * "duration", * //"id", * "album", * //"votes", * // "mpaa", * // "writer", * //"albumid", * //"type", * "genre", * "year", * //"plotoutline", * "track", * "artist", * //"season", * //"imdbnumber", * // "studio", * //"showlink", * "showtitle", * "episode", * "season", * "plot", * "director", * "studio", * "rating", * //"productioncode", * //"country", * //"premiered", * //"originaltitle", * //"artistid", * //"firstaired", * "tagline", * "thumbnail", * "fanart" * //"top250", * //"trailer" * }; * * var properties = new JsonObject(); * properties["playerid"] = current; * properties["properties"] = new[]{ * "totaltime", * "percentage", * "time", * "speed" * }; * * var appproperties = new JsonObject(); * appproperties["properties"] = new[] * { * "muted", * "volume" * }; * * var result1 = (JsonObject)_parent.JsonCommand("Player.GetProperties", properties); * var result2 = (JsonObject)_parent.JsonCommand("Player.GetItem", items); * var result3 = (JsonObject)_parent.JsonCommand("Application.GetProperties", appproperties); * * * if (result1 == null || result2 == null || result3 == null) * { * _nowPlaying.FileName = ""; * _nowPlaying.Title = ""; * _nowPlaying.IsPlaying = false; * _nowPlaying.IsPaused = false; * return; * } * * result2 = (JsonObject)(result2)["item"]; * * * * * * * * if (_nowPlaying.MediaType == "video") * { * if (result2["type"].ToString() == "channel") //if PVR Needs to go high otherwise exception * { * _nowPlaying.MediaType = "Pvr"; * _nowPlaying.IsNewMedia = true; * _nowPlaying.FileName = result2["label"].ToString(); * _nowPlaying.ThumbURL = result2["thumbnail"].ToString(); * _nowPlaying.FanartURL = result2["fanart"].ToString(); * _nowPlaying.Title = result2["label"].ToString(); * _nowPlaying.IsPaused = Convert.ToInt32("0" + result1["speed"].ToString().Replace("-", "")) == 0; * _nowPlaying.IsPlaying = !_nowPlaying.IsPaused; * var pvrtime = (JsonObject)result1["time"]; * var pvrtotal = (JsonObject)result1["totaltime"]; * _nowPlaying.Time = new TimeSpan(0, Convert.ToInt32("0" + pvrtime["hours"]), Convert.ToInt32("0" + pvrtime["minutes"]), Convert.ToInt32("0" + pvrtime["seconds"])); * _nowPlaying.Duration = new TimeSpan(0, Convert.ToInt32("0" + pvrtotal["hours"]), Convert.ToInt32("0" + pvrtotal["minutes"]), Convert.ToInt32("0" + pvrtotal["seconds"])); * _nowPlaying.Progress = Convert.ToInt32("0" + result1["percentage"].ToString().Split('.')[0]); * _nowPlaying.Volume = Convert.ToInt32("0" + result3["volume"]); * _nowPlaying.IsMuted = (bool)result3["muted"]; * return; * } * } * * _nowPlaying.IsPaused = Convert.ToInt32("0" + result1["speed"].ToString().Replace("-", "")) == 0; * _nowPlaying.IsPlaying = !_nowPlaying.IsPaused; * var time = (JsonObject)result1["time"]; * var total = (JsonObject)result1["totaltime"]; * _nowPlaying.Time = new TimeSpan(0, Convert.ToInt32("0" + time["hours"]), Convert.ToInt32("0" + time["minutes"]), Convert.ToInt32("0" + time["seconds"])); * _nowPlaying.Duration = new TimeSpan(0, Convert.ToInt32("0" + total["hours"]), Convert.ToInt32("0" + total["minutes"]), Convert.ToInt32("0" + total["seconds"])); * _nowPlaying.Progress = Convert.ToInt32("0" + result1["percentage"].ToString().Split('.')[0]); * _nowPlaying.Volume = Convert.ToInt32("0" + result3["volume"]); * _nowPlaying.IsMuted = (bool)result3["muted"]; * * _parent.MpcLoaded = _nowPlaying.Duration == new TimeSpan(0, 0, 0, 1); * * _nowPlaying.FileName = result2["file"].ToString(); * * if (_nowPlaying.MediaType == "audio") * { * _nowPlaying.MediaType = "Audio"; * _nowPlaying.Genre = _parent.JsonArrayToString((JsonArray)result2["genre"]); * _nowPlaying.Title = result2["label"].ToString(); * _nowPlaying.Year = Convert.ToInt32("0" + result2["year"]); * _nowPlaying.Track = Convert.ToInt32("0" + result2["track"]); * _nowPlaying.Artist = _parent.JsonArrayToString((JsonArray)result2["artist"]); * _nowPlaying.Album = result2["album"].ToString(); * _nowPlaying.ThumbURL = result2["thumbnail"].ToString(); * _nowPlaying.FanartURL = result2["fanart"].ToString(); * } * * if (_nowPlaying.MediaType == "video") * { * _nowPlaying.MediaType = result2["type"].ToString() == "episode" ? "TvShow" : "Movie"; * * * * _nowPlaying.Genre = _parent.JsonArrayToString((JsonArray)result2["genre"]); * _nowPlaying.Title = result2["label"].ToString(); * _nowPlaying.Year = Convert.ToInt32("0" + result2["year"]); * _nowPlaying.SeasonNumber = Convert.ToInt32("0" + result2["season"].ToString().Replace("-", "")); * _nowPlaying.EpisodeNumber = Convert.ToInt32("0" + result2["episode"].ToString().Replace("-", "")); * _nowPlaying.ShowTitle = result2["showtitle"].ToString(); * _nowPlaying.Plot = result2["plot"].ToString(); * _nowPlaying.Director = _parent.JsonArrayToString((JsonArray)result2["director"]); * _nowPlaying.Studio = _parent.JsonArrayToString((JsonArray)result2["studio"]); * _nowPlaying.Tagline = result2["tagline"].ToString(); * _nowPlaying.Rating = result2["rating"].ToString(); * _nowPlaying.ThumbURL = result2["thumbnail"].ToString(); * _nowPlaying.FanartURL = result2["fanart"].ToString(); * } */ if (_parent.IsConnected()) { try { _parent.Log("Plex: Using Parent IP equals: " + _parent.IP); string NPurl = "http://" + _parent.IP + ":32400/status/sessions"; var request = WebRequest.Create(NPurl); request.Headers.Add("X-Plex-Token", _parent.PlexAuthToken); var response = request.GetResponse(); if (((HttpWebResponse)response).StatusCode == HttpStatusCode.OK) { // Use MPC Remote _parent.MpcLoaded = true; // Get the stream containing content returned by the server. System.IO.Stream dataStream = response.GetResponseStream(); // Open the stream using a StreamReader. System.IO.StreamReader reader = new System.IO.StreamReader(dataStream); XmlSerializer serializer = new XmlSerializer(typeof(MediaContainer)); MediaContainer deserialized = (MediaContainer)serializer.Deserialize(reader); var length = deserialized.Video.Count; _parent.Log("Number of playing Videos: " + length); if (length == 0) { _nowPlaying.FileName = ""; _nowPlaying.Title = ""; _nowPlaying.IsPlaying = false; _nowPlaying.IsPaused = false; _nowPlaying.IsPlaying = false; _parent.Log("Plex Log: Nothing is Playing"); return; } //_nowPlaying.IsPlaying = true; //_nowPlaying.IsPaused = false; _nowPlaying.IsNewMedia = true; _nowPlaying.MediaType = "Movie"; //_nowPlaying.Title = "Plex Playing"; foreach (var server in deserialized.Video) { _parent.Log("Checking against Local Playback only Client IP: " + _parent.ClientIPAddress); if (server.Player.address == _parent.ClientIPAddress) { _parent.Log("Plex: Found Local Playback"); _nowPlaying.FanartURL = @"http://" + _parent.IP + ":" + _parent.ServerPort + server.art; _parent.Log("Plex: Fanart URL sorting Out: " + _parent.IP + ":" + _parent.ServerPort + server.art); //Console.WriteLine("Grandparent art is {0} and Players is {1}", server.grandparentArt, server.Player); _nowPlaying.Title = server.title; // Console.WriteLine("" + server.art); // Console.WriteLine("" + server.chapterSource); //_nowPlaying.Director = server.Director.tag; // Console.WriteLine("" + server.duration); // Console.WriteLine("" + server.grandparentArt); _nowPlaying.ShowTitle = server.grandparentTitle; // Console.WriteLine("" + server.grandparentThumb); /* Console.WriteLine("" + server.guid); * Console.WriteLine("" + server.index); * Console.WriteLine("" + server.indexString); * Console.WriteLine("" + server.key); * Console.WriteLine("" + server.lastViewedAt); * Console.WriteLine("Filename: " + server.Media.Part.file); * // Console.WriteLine("" + server.Media.Part.duration); * // */ // Console.WriteLine("Player Product: " + server.Player.product); _nowPlaying.Plot = server.summary; _nowPlaying.ThumbURL = @"http://" + _parent.IP + ":" + _parent.ServerPort + server.thumb; _nowPlaying.FileName = server.Media.Part.file; _nowPlaying.Title = server.Player.product; _nowPlaying.MediaType = server.type == "episode" ? "TvShow" : "Movie"; _nowPlaying.Duration = new TimeSpan(0, Convert.ToInt32("0"), Convert.ToInt32("0"), Convert.ToInt32("0"), Convert.ToInt32(server.Media.duration)); _nowPlaying.Time = new TimeSpan(0, 0, 0, Convert.ToInt32(server.viewOffset) / 1000, 0); var percent = Math.Floor(100.0 * Convert.ToInt32("0" + server.viewOffset, CultureInfo.InvariantCulture) / Convert.ToInt32("0" + server.Media.duration, CultureInfo.InvariantCulture)); if (Double.IsNaN(percent)) { percent = 0; } _nowPlaying.Progress = (int)percent; if (server.Player.state == "paused") { _nowPlaying.IsPaused = true; _nowPlaying.IsPlaying = false; } if (server.Player.state == "playing") { _nowPlaying.IsPaused = false; _nowPlaying.IsPlaying = true; } _parent.Log("Plex Remote: Filename" + _nowPlaying.FileName + " IsPlaying :" + _nowPlaying.IsPlaying + " IsPaused :" + _nowPlaying.IsPaused + " MediaType :" + _nowPlaying.MediaType); return; } } _parent.Log("Plex Remote: Filename" + _nowPlaying.FileName + " IsPlaying :" + _nowPlaying.IsPlaying + " IsPaused :" + _nowPlaying.IsPaused + " MediaType :" + _nowPlaying.MediaType); return; } } catch (Exception ex) { _parent.Log("Exception in NowPlaying Plex System" + ex); } } } }
public void RefreshNowPlaying() { lock (Locker) { /*if (_parent.MpcLoaded) * { * var result = _parent.MpcHcRemote.GetStatus(); * var result2 = new ArrayList(); * MpcHcRemote.ParseCSVFields(result2, result); * var data = (string[])result2.ToArray(typeof(string)); * if (data.Length > 6) * { * _nowPlaying.MediaType = "Video"; * _nowPlaying.Title = "Media Player Classic"; * _nowPlaying.Time = new TimeSpan(0, 0, 0, Convert.ToInt32("0" + data[2]) / 1000); * _nowPlaying.Duration = new TimeSpan(0, 0, 0, Convert.ToInt32("0" + data[4]) / 1000); * var percent = Math.Floor(100.0 * Convert.ToInt32("0" + data[2], CultureInfo.InvariantCulture) / Convert.ToInt32("0" + data[4], CultureInfo.InvariantCulture)); * if (Double.IsNaN(percent)) * percent = 0; * _nowPlaying.Volume = Convert.ToInt32("0" + data[7], CultureInfo.InvariantCulture); * _nowPlaying.IsMuted = data[6] == "1"; * _nowPlaying.Progress = (int)percent; * * if (data[1] == "Playing") * { * _parent.Log("XBMC PLAYER REMOTE: Playing given Changing NowPlaying to true " + data[1]); * _nowPlaying.IsPlaying = true; * _nowPlaying.IsPaused = false; * } * if (data[1] == "Paused") * { * _parent.Log("XBMC PLAYER REMOTE: Paused given Changing NowPlaying to true " + data[1]); * _nowPlaying.IsPaused = true; * _nowPlaying.IsPlaying = !_nowPlaying.IsPaused; * } * * } * if (_parent.MpcLoaded == false) * { * _nowPlaying.FileName = "Glenn MPC Stopped"; * _nowPlaying.Title = ""; * _nowPlaying.IsPlaying = false; * _nowPlaying.IsPaused = false; * } * } * else * { * if (!_parent.IsConnected()) * { * _nowPlaying.FileName = ""; * _nowPlaying.Title = ""; * _nowPlaying.IsPlaying = false; * _nowPlaying.IsPaused = false; * _parent.Log("XBMC PLAYER REMOTE: Returning as no !Player Connected"); * * return; * } * //_parent.Log("XBMC PLAYER REMOTE: Check with MPC Doesnt make it here"); * /* */ /* * var GUIproperties = new JsonObject(); * GUIproperties["properties"] = new[] * { * "currentwindow" * * * }; * * var menuresult = (JsonObject)_parent.JsonCommand("GUI.GetProperties", GUIproperties); * var GUIdeeper = (JsonObject)menuresult["currentwindow"]; * _nowPlaying.CurrentMenuLabel = GUIdeeper["label"].ToString(); * _nowPlaying.CurrentMenuID = GUIdeeper["id"].ToString(); * * * var current = -1; * var players = (JsonArray)_parent.JsonCommand("Player.GetActivePlayers", null); * * * if (players.Count > 0) * { * foreach (JsonObject player in players) * { * if (player["type"].ToString() == "picture") * continue; * current = Int32.Parse(player["playerid"].ToString()); * _nowPlaying.MediaType = (string)player["type"]; * } * } * * if (current == -1) * { * _nowPlaying.FileName = ""; * _nowPlaying.Title = ""; * _nowPlaying.IsPlaying = false; * _nowPlaying.IsPaused = false; * return; * } * * var items = new JsonObject(); * items["playerid"] = current; * items["properties"] = new[]{ * "file", * "comment", * "tvshowid", * "albumartist", * "duration", * //"id", * "album", * //"votes", * // "mpaa", * // "writer", * //"albumid", * //"type", * "genre", * "year", * //"plotoutline", * "track", * "artist", * //"season", * //"imdbnumber", * // "studio", * //"showlink", * "showtitle", * "episode", * "season", * "plot", * "director", * "studio", * "rating", * //"productioncode", * //"country", * //"premiered", * //"originaltitle", * //"artistid", * //"firstaired", * "tagline", * "thumbnail", * "fanart" * //"top250", * //"trailer" * }; * * var properties = new JsonObject(); * properties["playerid"] = current; * properties["properties"] = new[]{ * "totaltime", * "percentage", * "time", * "speed" * }; * * var appproperties = new JsonObject(); * appproperties["properties"] = new[] * { * "muted", * "volume" * }; * * var result1 = (JsonObject)_parent.JsonCommand("Player.GetProperties", properties); * var result2 = (JsonObject)_parent.JsonCommand("Player.GetItem", items); * var result3 = (JsonObject)_parent.JsonCommand("Application.GetProperties", appproperties); * * * if (result1 == null || result2 == null || result3 == null) * { * _nowPlaying.FileName = ""; * _nowPlaying.Title = ""; * _nowPlaying.IsPlaying = false; * _nowPlaying.IsPaused = false; * return; * } * * result2 = (JsonObject)(result2)["item"]; * * * * * * * * if (_nowPlaying.MediaType == "video") * { * if (result2["type"].ToString() == "channel") //if PVR Needs to go high otherwise exception * { * _nowPlaying.MediaType = "Pvr"; * _nowPlaying.IsNewMedia = true; * _nowPlaying.FileName = result2["label"].ToString(); * _nowPlaying.ThumbURL = result2["thumbnail"].ToString(); * _nowPlaying.FanartURL = result2["fanart"].ToString(); * _nowPlaying.Title = result2["label"].ToString(); * _nowPlaying.IsPaused = Convert.ToInt32("0" + result1["speed"].ToString().Replace("-", "")) == 0; * _nowPlaying.IsPlaying = !_nowPlaying.IsPaused; * var pvrtime = (JsonObject)result1["time"]; * var pvrtotal = (JsonObject)result1["totaltime"]; * _nowPlaying.Time = new TimeSpan(0, Convert.ToInt32("0" + pvrtime["hours"]), Convert.ToInt32("0" + pvrtime["minutes"]), Convert.ToInt32("0" + pvrtime["seconds"])); * _nowPlaying.Duration = new TimeSpan(0, Convert.ToInt32("0" + pvrtotal["hours"]), Convert.ToInt32("0" + pvrtotal["minutes"]), Convert.ToInt32("0" + pvrtotal["seconds"])); * _nowPlaying.Progress = Convert.ToInt32("0" + result1["percentage"].ToString().Split('.')[0]); * _nowPlaying.Volume = Convert.ToInt32("0" + result3["volume"]); * _nowPlaying.IsMuted = (bool)result3["muted"]; * return; * } * } * * _nowPlaying.IsPaused = Convert.ToInt32("0" + result1["speed"].ToString().Replace("-", "")) == 0; * _nowPlaying.IsPlaying = !_nowPlaying.IsPaused; * var time = (JsonObject)result1["time"]; * var total = (JsonObject)result1["totaltime"]; * _nowPlaying.Time = new TimeSpan(0, Convert.ToInt32("0" + time["hours"]), Convert.ToInt32("0" + time["minutes"]), Convert.ToInt32("0" + time["seconds"])); * _nowPlaying.Duration = new TimeSpan(0, Convert.ToInt32("0" + total["hours"]), Convert.ToInt32("0" + total["minutes"]), Convert.ToInt32("0" + total["seconds"])); * _nowPlaying.Progress = Convert.ToInt32("0" + result1["percentage"].ToString().Split('.')[0]); * _nowPlaying.Volume = Convert.ToInt32("0" + result3["volume"]); * _nowPlaying.IsMuted = (bool)result3["muted"]; * * _parent.MpcLoaded = _nowPlaying.Duration == new TimeSpan(0, 0, 0, 1); * * _nowPlaying.FileName = result2["file"].ToString(); * * if (_nowPlaying.MediaType == "audio") * { * _nowPlaying.MediaType = "Audio"; * _nowPlaying.Genre = _parent.JsonArrayToString((JsonArray)result2["genre"]); * _nowPlaying.Title = result2["label"].ToString(); * _nowPlaying.Year = Convert.ToInt32("0" + result2["year"]); * _nowPlaying.Track = Convert.ToInt32("0" + result2["track"]); * _nowPlaying.Artist = _parent.JsonArrayToString((JsonArray)result2["artist"]); * _nowPlaying.Album = result2["album"].ToString(); * _nowPlaying.ThumbURL = result2["thumbnail"].ToString(); * _nowPlaying.FanartURL = result2["fanart"].ToString(); * } * * if (_nowPlaying.MediaType == "video") * { * _nowPlaying.MediaType = result2["type"].ToString() == "episode" ? "TvShow" : "Movie"; * * * * _nowPlaying.Genre = _parent.JsonArrayToString((JsonArray)result2["genre"]); * _nowPlaying.Title = result2["label"].ToString(); * _nowPlaying.Year = Convert.ToInt32("0" + result2["year"]); * _nowPlaying.SeasonNumber = Convert.ToInt32("0" + result2["season"].ToString().Replace("-", "")); * _nowPlaying.EpisodeNumber = Convert.ToInt32("0" + result2["episode"].ToString().Replace("-", "")); * _nowPlaying.ShowTitle = result2["showtitle"].ToString(); * _nowPlaying.Plot = result2["plot"].ToString(); * _nowPlaying.Director = _parent.JsonArrayToString((JsonArray)result2["director"]); * _nowPlaying.Studio = _parent.JsonArrayToString((JsonArray)result2["studio"]); * _nowPlaying.Tagline = result2["tagline"].ToString(); * _nowPlaying.Rating = result2["rating"].ToString(); * _nowPlaying.ThumbURL = result2["thumbnail"].ToString(); * _nowPlaying.FanartURL = result2["fanart"].ToString(); * } */ if (_parent.IsConnected()) { try { _parent.Log("Plex: Using Parent IP equals: " + _parent.IP); string NPurl = "http://" + _parent.IP + ":32400/status/sessions"; var request = WebRequest.Create(NPurl); request.Headers.Add("X-Plex-Token", _parent.PlexAuthToken); var response = request.GetResponse(); if (((HttpWebResponse)response).StatusCode == HttpStatusCode.OK) { // Use MPC Remote _parent.MpcLoaded = true; // Get the stream containing content returned by the server. System.IO.Stream dataStream = response.GetResponseStream(); // Open the stream using a StreamReader. System.IO.StreamReader reader = new System.IO.StreamReader(dataStream); XmlSerializer serializer = new XmlSerializer(typeof(MediaContainer)); MediaContainer deserialized = (MediaContainer)serializer.Deserialize(reader); _parent.Log("status/sessions: " + reader.ReadToEnd().ToString()); var length = Convert.ToInt32(deserialized.size); _parent.Log("Number of playing Videos: " + length); if (length == 0) { _nowPlaying.FileName = ""; _nowPlaying.Title = ""; _nowPlaying.IsPlaying = false; _nowPlaying.IsPaused = false; _nowPlaying.IsPlaying = false; //_nowPlaying.IsNewMedia = false; _parent.Log("Plex Log: Nothing is Playing"); return; } //_nowPlaying.IsPlaying = true; //_nowPlaying.IsPaused = false; _nowPlaying.IsNewMedia = true; _nowPlaying.MediaType = "Movie"; //_nowPlaying.Title = "Plex Playing"; foreach (var server in deserialized.Video) { _parent.Log("Checking against Local Playback only Client IP: " + _parent.ClientIPAddress); _parent.Log("IP Address Playing now are:" + server.Player.address); if (server.Player.address.Contains(_parent.ClientIPAddress)) { _parent.Log("Plex: Found Local Playback"); _parent.Log("***** Plex: " + server.ToString()); _parent.Log("Plex: server.Art EQUALS ===========" + server.art); if (!String.IsNullOrEmpty(server.art)) { if (server.art.StartsWith("http:")) { _nowPlaying.FanartURL = server.art; } else { _nowPlaying.FanartURL = @"http://" + _parent.IP + ":" + _parent.ServerPort + server.art; } } else { // If no fanart url use Thumb for background as well _nowPlaying.FanartURL = String.IsNullOrEmpty(server.thumb) ? "" : @"http://" + _parent.IP + ":" + _parent.ServerPort + server.thumb; } _parent.Log("Plex: Fanart URL sorting Out: " + _parent.IP + ":" + _parent.ServerPort + server.art); _parent.Log("Plex: nowPlaying Fanart equals:" + _nowPlaying.FanartURL); //Console.WriteLine("Grandparent art is {0} and Players is {1}", server.grandparentArt, server.Player); _nowPlaying.Title = String.IsNullOrEmpty(server.title) ? "Blank" : server.title; _parent.Log("Plex:NP NowPlaying.title:" + _nowPlaying.Title); // Console.WriteLine("" + server.art); // Console.WriteLine("" + server.chapterSource); //_nowPlaying.Director = server.Director.tag; // Console.WriteLine("" + server.duration); // Console.WriteLine("" + server.grandparentArt); _nowPlaying.ShowTitle = String.IsNullOrEmpty(server.grandparentTitle) ? "Blank" : server.grandparentTitle; _parent.Log("Plex:NP NowPlaying.Showtitle:" + _nowPlaying.ShowTitle); // Console.WriteLine("" + server.grandparentThumb); /* Console.WriteLine("" + server.guid); * Console.WriteLine("" + server.index); * Console.WriteLine("" + server.indexString); * Console.WriteLine("" + server.key); * Console.WriteLine("" + server.lastViewedAt); * Console.WriteLine("Filename: " + server.Media.Part.file); * // Console.WriteLine("" + server.Media.Part.duration); * // */ // Console.WriteLine("Player Product: " + server.Player.product); _nowPlaying.Plot = String.IsNullOrEmpty(server.summary) ? "" : server.summary; _parent.Log("Plex:NP NowPlaying.Plot:" + _nowPlaying.Plot); _parent.Log("Plex:NP NowPlaying.ThumbURL:" + @"http://" + _parent.IP + ":" + _parent.ServerPort + server.thumb); _nowPlaying.ThumbURL = String.IsNullOrEmpty(server.thumb)? "" : @"http://" + _parent.IP + ":" + _parent.ServerPort + server.thumb; _nowPlaying.FileName = String.IsNullOrEmpty(server.Media.Part.file) ? "NotGiven" : server.Media.Part.file; _parent.Log("Plex:NP NowPlaying.FileName:" + _nowPlaying.FileName); _nowPlaying.Title = String.IsNullOrEmpty(server.title) ? "" : server.title; _parent.Log("Plex:NP NowPlaying.Title:" + _nowPlaying.Title); // Make changes here to recognise ts recordings as TV and use regex to populate season/episode data _nowPlaying.MediaType = server.type == "episode" ? "TvShow" : "Movie"; _parent.Log("Plex:NP NowPlaying.MediaType:" + _nowPlaying.MediaType); if (Convert.ToUInt64(server.Media.duration) > 0) { // duration for Plex given in millseconds - convert to seconds and round // Convert Duration to Timespan with seconds only var RoundSeconds = Math.Round(Convert.ToInt64(server.Media.duration) / 1000.00, 1); _nowPlaying.Duration = new TimeSpan(0, Convert.ToInt32("0"), Convert.ToInt32("0"), Convert.ToInt32(RoundSeconds)); } _parent.Log("Plex:NP server.Media.Duration:" + server.Media.duration + ": _nowPlaying.Duration (calculated) :" + _nowPlaying.Duration); var RoundOffset = Math.Round(Convert.ToInt64(server.viewOffset) / 1000.00, 1); _nowPlaying.Time = new TimeSpan(0, 0, 0, Convert.ToInt32(RoundOffset)); _parent.Log("Plex:NP NowPlaying.Time:" + _nowPlaying.Time + " Calcuated on server.viewOffset:" + server.viewOffset); var percent = Math.Floor(100.0 * Convert.ToInt32("0" + server.viewOffset, CultureInfo.InvariantCulture) / Convert.ToInt32("0" + server.Media.duration, CultureInfo.InvariantCulture)); if (Double.IsNaN(percent)) { percent = 0; } _nowPlaying.Progress = (int)percent; _parent.Log("Plex:NP NowPlaying.Progress:" + _nowPlaying.Progress); //_nowPlaying.FirstAired = server.originallyAvailableAt; if (server.type == "episode") { _nowPlaying.EpisodeNumber = Convert.ToInt32(server.index); _nowPlaying.SeasonNumber = Convert.ToInt32(server.parentIndex); } _parent.Log("Plex:NP server.Player.state:" + server.Player.state); if (server.Player.state == "paused") { _nowPlaying.IsPaused = true; _nowPlaying.IsPlaying = false; } if (server.Player.state == "playing") { _nowPlaying.IsPaused = false; _nowPlaying.IsPlaying = true; } if (server.Player.state == "buffering") { _nowPlaying.IsPaused = false; _nowPlaying.IsPlaying = true; } _nowPlaying.LogoURL = ""; _nowPlaying.MovieIcons = ""; _parent.Log("Plex Remote: Filename" + _nowPlaying.FileName + " IsPlaying :" + _nowPlaying.IsPlaying + " IsPaused :" + _nowPlaying.IsPaused + " MediaType :" + _nowPlaying.MediaType); // check for endwith ts filename // actually check for mpegts // may be recorded movies in mpegts format as well..... // check for regex s00e00 contents - and when both present swap // Change of plans - run for all files regardless of type and regardless of mediacontainer if (1 == 1) //(server.Media.container == "mpegts" && server.type == "movie") { _parent.Log("Plex Remote: New changing recorded TV to TV Shows and extracting season/episode data"); Regex regex = new Regex(@"[Ss](?<season>\d{1,2})[Ee](?<episode>\d{1,2})"); _parent.Log("Plex Remote: Server Title Equals:" + server.title); if (server.title != null) { Match match = regex.Match(server.title); if (match.Success) { _nowPlaying.MediaType = "TvShow"; _nowPlaying.SeasonNumber = Convert.ToInt32(match.Groups["season"].Value); _nowPlaying.EpisodeNumber = Convert.ToInt32(match.Groups["episode"].Value); _parent.Log("Plex Remote: Regex TV Conversion: From :" + server.title); //string replacement = "`$``"; //string newtitle = replacement; // string newtitle = regex.Replace(server.title, replacement); string[] lines = Regex.Split(server.title, @"[Ss](?<season>\d{1,2})[Ee](?<episode>\d{1,2})"); string title1 = lines[0]; string newtitle = title1.Replace(".", " "); _parent.Log("Plex Remote: New title equals :" + newtitle); //_nowPlaying.ShowTitle = newtitle; _nowPlaying.Title = newtitle; } } } return; } } // if no local Client Playback then nothing Playing _nowPlaying.FileName = ""; _nowPlaying.Title = ""; _nowPlaying.IsPlaying = false; _nowPlaying.IsPaused = false; _nowPlaying.IsPlaying = false; _nowPlaying.IsNewMedia = false; _parent.Log("Plex Log 2nd: Nothing is Playing"); return; } } catch (Exception ex) { _parent.Log("Exception in NowPlaying Plex System" + ex); } } } }