/// <summary> /// Processes the config file by loading extra settings and then executing the ProcessPass procedure on each pass node. /// </summary> /// <param name="FileName"></param> public void ProcessConfigFile(string FileName) { LoadPlayOnSettings(); try { XmlDocument Config = new XmlDocument(); Config.Load(FileName); XmlNode SettingsNode = Config.SelectSingleNode("playpass/settings"); if (SettingsNode != null) { ServerHost = PlaySharp.Util.GetNodeAttributeValue(SettingsNode, "server", ServerHost); ServerPort = int.Parse(PlaySharp.Util.GetNodeAttributeValue(SettingsNode, "port", ServerPort.ToString())); } PlayOn PlayOn = new PlayOn(ServerHost, ServerPort); XmlNode PassesNode = Config.SelectSingleNode("playpass/passes"); if (PassesNode == null) { throw new Exception("A passes node was found in the config file"); } _MaxRunTime = TimeSpan.Parse(PlaySharp.Util.GetNodeAttributeValue(PassesNode, "max", _MaxRunTime.ToString(@"hh\:mm\:ss"))); WriteLog("Max Run Time: " + _MaxRunTime); foreach (XmlNode PassNode in PassesNode.SelectNodes("pass")) { ProcessPass(PlayOn, PassNode); } } catch (Exception ex) { WriteLog("Error processing config file: " + ex.Message.ToString()); } }
public PlayPassProcessor(PlayOn playOn, ILogManager logManager, IQueueValidator queueValidator) { _playOn = playOn; _logManager = logManager; _queueValidator = queueValidator; }
/// <summary> /// Executes the search and queue function on a pass node in the config file. /// </summary> /// <param name="PassNode">A pass node from the config file.</param> void ProcessPass(PlayOn PlayOn, XmlNode PassNode) { PlayOnItem CurrItem = PlayOn.GetCatalog(); if (Util.GetNodeAttributeValue(PassNode, "enabled", "0") == "1") { WriteLog("=== Processing {0} ===", Util.GetNodeAttributeValue(PassNode, "description")); try { foreach (XmlNode Node in PassNode.ChildNodes) { string MatchPattern = Util.GetNodeAttributeValue(Node, "name"); string ExcludePattern = Util.GetNodeAttributeValue(Node, "exclude"); bool FoundItem = false; if (!(CurrItem is PlayOnFolder)) { continue; } if (Node.Name == "scan") { WriteLog(" SEARCH: \"{0}\"", MatchPattern); foreach (PlayOnItem ChildItem in ((PlayOnFolder)CurrItem).Items) { if (ChildItem is PlayOnFolder) { if (VerboseMode) { WriteLog(" COMPARE: \"{0}\"", ChildItem.Name); } if (Util.MatchesPattern(ChildItem.Name, ExcludePattern)) { WriteLog(" EXCLUDE: \"{0}\"", ChildItem.Name); } else if (Util.MatchesPattern(ChildItem.Name, MatchPattern)) { if (VerboseMode) { WriteLog(" MATCH: " + ChildItem.Name); } FoundItem = true; CurrItem = ChildItem; break; } } } if (!FoundItem) { WriteLog(" NO MATCH: \"{0}\"", MatchPattern); } } else if (Node.Name == "queue") { WriteLog(" SEARCH: \"{0}\"", MatchPattern); foreach (PlayOnItem ChildItem in ((PlayOnFolder)CurrItem).Items) { if (ChildItem is PlayOnVideo) { if (VerboseMode) { WriteLog(" COMPARE: \"{0}\"", ChildItem.Name); } if (Util.MatchesPattern(ChildItem.Name, ExcludePattern)) { WriteLog(" EXCLUDE: \"{0}\"", ChildItem.Name); } else if (Util.MatchesPattern(ChildItem.Name, MatchPattern)) { if (VerboseMode) { WriteLog(" MATCH: {0}", ChildItem.Name); } QueueMedia((PlayOnVideo)ChildItem); FoundItem = true; } } } if (!FoundItem) { WriteLog(" NO MATCH: \"{0}\"", MatchPattern); } } } } catch (Exception ex) { WriteLog("Error processing pass: " + ex.Message.ToString()); } } }