Пример #1
0
        public ActionResult <int> Add(ManagementRule item)
        {
            var maxId = 0;

            if (this._cache.Values.Count > 0)
            {
                maxId = this._cache.Keys.Max();
            }
            item.Id = maxId + 1;
            if (this._cache.Values.Any(o => o.RuleString.Equals(item.RuleString, StringComparison.OrdinalIgnoreCase) && o.SearchPosition == item.SearchPosition))
            {
                return(new ActionResult <int>(ActionStatus.Error, "Rule already exists"));
            }
            if (!this._cache.TryAdd(item.Id, item))
            {
                return(new ActionResult <int>(ActionStatus.Error, "Id already exists, try again"));
            }
            if (item.IgnoreVideo)
            {
                item.Target = null;
            }
            var saveResult = this._storage.Save(this._cache);

            if (saveResult.Status != ActionStatus.Success)
            {
                return(new ActionResult <int>(saveResult));
            }
            return(new ActionResult <int>(ActionStatus.Success, item.Id));
        }
Пример #2
0
        public ActionResult Update(ManagementRule item)
        {
            var cacheItemResult = Get(item.Id);

            if (cacheItemResult.Status != ActionStatus.Success)
            {
                return(cacheItemResult);
            }
            var oldRule = cacheItemResult.Data;

            oldRule.Regex          = item.Regex;
            oldRule.RuleString     = item.RuleString;
            oldRule.Target         = item.IgnoreVideo ? null : item.Target;
            oldRule.IgnoreVideo    = item.IgnoreVideo;
            oldRule.Priority       = item.Priority;
            oldRule.SearchPosition = item.SearchPosition;

            this._storage.Save(this._cache);

            return(new ActionResult(ActionStatus.Success));
        }
Пример #3
0
        private void buttonAdd_Click(object sender, EventArgs e)
        {
            var rule = new ManagementRule
            {
                Regex          = this.checkBoxRegex.Checked,
                RuleString     = this.textBoxRule.Text,
                Target         = this.comboBoxTarget.SelectedValue as string ?? this.comboBoxTarget.Text,
                IgnoreVideo    = this.checkBoxIgnore.Checked,
                Priority       = (int)this.numericUpDownPriority.Value,
                SearchPosition = (SearchPosition)this.comboBoxSearchPosition.SelectedValue
            };
            var result = YtManagementClient.AddRule(rule);

            if (result.Status != ActionStatus.Success)
            {
                this.ShowTooltip(result.Message, ToolTipIcon.Error);
                return;
            }
            this.ShowTooltip("Success", ToolTipIcon.Info);
            ReloadRules();
        }
Пример #4
0
        private bool CheckRuleOnString(string text, ManagementRule rule, out ManagementRule matchedRule)
        {
            if (rule.Regex)
            {
                if (!Regex.IsMatch(text, rule.RuleString, RegexOptions.Singleline | RegexOptions.IgnoreCase))
                {
                    matchedRule = null;
                    return(false);
                }
                matchedRule = rule;
                return(true);
            }
            else
            {
                if (text.IndexOf(rule.RuleString, StringComparison.OrdinalIgnoreCase) < 0)
                {
                    matchedRule = null;
                    return(false);
                }

                matchedRule = rule;
                return(true);
            }
        }
Пример #5
0
 public static ActionResult UpdateRule(ManagementRule rule)
 {
     return(Post <ActionResult>("rules", rule));
 }
Пример #6
0
 public static ActionResult <int> AddRule(ManagementRule rule)
 {
     return(Put <ActionResult <int> >("rules", rule));
 }
Пример #7
0
 public Common.Model.ActionResult Put([FromBody] ManagementRule item) => _rulesRepository.Add(item);
Пример #8
0
 public Common.Model.ActionResult Post([FromBody] ManagementRule item) => _rulesRepository.Update(item);
Пример #9
0
        private void Process()
        {
            var subscriptionResult = ytService.GetSubscriptions();

            if (subscriptionResult.Status != ActionStatus.Success)
            {
                return;
            }

            var rules = rulesRepository.GetAll().Data;

            foreach (var subscription in subscriptionResult.Data)
            {
                var uploads = ytService.GetUploads(subscription.Id);
                if (uploads.Status != ActionStatus.Success)
                {
                    continue;
                }
                var unprocessedVideos = uploads.Data.Where(o => !ytService.IsProcessed(o.Id)).ToList();
                foreach (var video in unprocessedVideos) // should only process new videos
                {
                    Console.WriteLine("Checking video {0}", video.Title);
                    ManagementRule matchedRule = null;
                    foreach (var rule in rules.OrderByDescending(o => o.Priority))
                    {
                        var success = false;
                        switch (rule.SearchPosition)
                        {
                        case SearchPosition.VideoTitle:
                            success = CheckRuleOnString(video.Title, rule, out matchedRule);
                            break;

                        case SearchPosition.ChannelTitle:
                            success = CheckRuleOnString(subscription.Title, rule, out matchedRule);
                            break;

                        case SearchPosition.All:
                            if (success = CheckRuleOnString(video.Title, rule, out matchedRule))
                            {
                                break;
                            }
                            success |= CheckRuleOnString(subscription.Title, rule, out matchedRule);
                            break;

                        default:
                            Console.WriteLine("SearchPosition {0} not supported", rule.SearchPosition);
                            continue;
                        }
                        if (success)
                        {
                            break;
                        }
                    }
                    if (matchedRule == null)
                    {
                        Console.WriteLine("No rules found for '{0}'", video.Title);
                        continue;
                    }

                    matchedRule.LastMatch = DateTime.Now;
                    if (!matchedRule.IgnoreVideo)
                    {
                        Console.WriteLine("Moving video '{0}' to '{1}'", video.Title, matchedRule.Target);
                        var addResult = ytService.AddToPlaylist(video.Id, matchedRule.Target);
                        if (addResult.Status != ActionStatus.Success)
                        {
                            Console.WriteLine("{0} {1}", addResult.Status, addResult.Message);
                            continue;
                        }
                    }
                    ytService.SetProcessed(video.Id, matchedRule.Id);
                }
            }
        }