/// <summary> /// Generates the skip filename for a media item. /// </summary> private string SkipFileNameFromMedia(PlayOnVideo media) { var temp = String.Format("{0} - {1}.playpass.skip", media.Series, media.MediaTitle); var re = new Regex("[<>:\"/\\|?*]"); temp = re.Replace(temp, "_").TrimStart(' ', '-'); return Path.Combine(_skipFilePath, temp); }
public bool CanQueueMedia(PlayOnVideo media, out string message) { var retValue = false; if (_queueList.MediaInList(media)) message = "Already recorded or skipped."; else if (QueueCountLimit > 0 && QueueCountLimit <= _queuedCount) message = "Queue limit reached."; else if (QueueDurationLimit.Ticks > 0 && QueueDurationLimit <= _queuedDuration.Add(RunTimeToTimeSpan(media.RunTime))) message = "Queue duration limit reached."; else { message = ""; retValue = true; } return retValue; }
/// <summary> /// Attempts to queue this video item in PlayLater and indicates the result. /// </summary> public PlayOnConstants.QueueVideoResult QueueMedia(PlayOnVideo media) { if (media.PlayLaterUrl == "") { return(PlayOnConstants.QueueVideoResult.PlayLaterNotFound); } var doc = XmlRequest(media.PlayLaterUrl); var success = (Util.GetNodeInnerText(doc.SelectSingleNode("result/status")) == "true"); var message = Util.GetNodeInnerText(doc.SelectSingleNode("result/msg")); if (success) { return(PlayOnConstants.QueueVideoResult.Success); } if (message.IndexOf("already", StringComparison.Ordinal) > -1) { return(PlayOnConstants.QueueVideoResult.AlreadyInQueue); } return(PlayOnConstants.QueueVideoResult.Failed); }
/// <summary> /// Returns a PlayOnItem based on the data in an XmlNode. /// </summary> public PlayOnItem GetItem(XmlNode Node) { string NodeType = Util.GetNodeAttributeValue(Node, "type"); PlayOnItem NewItem; if (Node.Name == "catalog") { NewItem = new PlayOnCatalog(this); } else if (NodeType == "folder") { NewItem = new PlayOnFolder(this); } else if (NodeType == "video") { NewItem = new PlayOnVideo(this); } else { throw new Exception(String.Format("Unhandled node type: {0}", NodeType)); } NewItem.LoadFromNode(Node); return(NewItem); }
/// <summary> /// Returns a PlayOnItem based on the data in an XmlNode. /// </summary> private PlayOnItem GetItem(XmlNode node) { var nodeType = Util.GetNodeAttributeValue(node, "type"); PlayOnItem newItem; if (node.Name == "catalog") { newItem = new PlayOnCatalog(this); } else if (nodeType == "folder") { newItem = new PlayOnFolder(this); } else if (nodeType == "video") { newItem = new PlayOnVideo(this); } else { throw new Exception(String.Format("Unhandled node type: {0}", nodeType)); } newItem.LoadFromNode(node); return(newItem); }
/// <summary> /// Returns a PlayOnItem based on the data in an XmlNode. /// </summary> private PlayOnItem GetItem(XmlNode node) { var nodeType = Util.GetNodeAttributeValue(node, "type"); PlayOnItem newItem; if (node.Name == "catalog") newItem = new PlayOnCatalog(this); else if (nodeType == "folder") newItem = new PlayOnFolder(this); else if (nodeType == "video") newItem = new PlayOnVideo(this); else throw new Exception(String.Format("Unhandled node type: {0}", nodeType)); newItem.LoadFromNode(node); return newItem; }
/// <summary> /// Attempts to queue this video item in PlayLater and indicates the result. /// </summary> public PlayOnConstants.QueueVideoResult QueueMedia(PlayOnVideo media) { if (media.PlayLaterUrl == "") return PlayOnConstants.QueueVideoResult.PlayLaterNotFound; var doc = XmlRequest(media.PlayLaterUrl); var success = (Util.GetNodeInnerText(doc.SelectSingleNode("result/status")) == "true"); var message = Util.GetNodeInnerText(doc.SelectSingleNode("result/msg")); if (success) return PlayOnConstants.QueueVideoResult.Success; if (message.IndexOf("already", StringComparison.Ordinal) > -1) return PlayOnConstants.QueueVideoResult.AlreadyInQueue; return PlayOnConstants.QueueVideoResult.Failed; }
/// <summary> /// Generates the skip filename for a media item. /// </summary> private static string KeyFromMedia(PlayOnVideo media) { return media.Series + " - " + media.MediaTitle; }
/// <summary> /// Indicates if a skip file exists for the supplied media item. /// </summary> public bool MediaInList(PlayOnVideo media) { return _list.Contains(KeyFromMedia(media)); }
/// <summary> /// Adds the supplied Media item to the list of already queued media. /// </summary> public void AddMediaToList(PlayOnVideo media) { if (MediaInList(media)) return; _list.Add(KeyFromMedia(media)); }
/// <summary> /// Indicates if a skip file exists for the supplied media item. /// </summary> public bool MediaInList(PlayOnVideo media) { return File.Exists(SkipFileNameFromMedia(media)); }
/// <summary> /// Adds the supplied Media item to the list of already queued media. /// </summary> public void AddMediaToList(PlayOnVideo media) { var skipFileName = SkipFileNameFromMedia(media); var fs = new FileStream(skipFileName, FileMode.CreateNew); fs.Dispose(); }
/// <summary> /// Checks to see if the item has already been recorded. If not, it will queue the video for recording in PlayLater. /// </summary> private void QueueMedia(PlayOnVideo media) { var success = false; string message; if (SkipMode) { message = "Manually skipped."; _queueValidator.AddMediaToQueueList(media); } else if (_queueValidator.CanQueueMedia(media, out message)) { if (!QueueMode) { success = true; message = "Pending queue mode."; _queueValidator.AddMediaToCounts(media); } else { try { var queueResult = _playOn.QueueMedia(media); if (queueResult == PlayOnConstants.QueueVideoResult.PlayLaterNotFound) message = "PlayLater queue link not found. PlayLater may not be running."; else if (queueResult == PlayOnConstants.QueueVideoResult.AlreadyInQueue) message = "Already queued."; success = (queueResult == PlayOnConstants.QueueVideoResult.Success); if (success) _queueValidator.AddMediaToQueueList(media); } catch (Exception ex) { message = ex.Message; } } } _logManager.Log("{0}{1}", (success ? "Queued" : "Skipped"), (message == "" ? "" : ": " + message)); }
public void AddMediaToQueueList(PlayOnVideo media) { _queueList.AddMediaToList(media); AddMediaToCounts(media); }
public void AddMediaToCounts(PlayOnVideo media) { _queuedCount++; _queuedDuration = _queuedDuration.Add(RunTimeToTimeSpan(media.RunTime)); }