Exemplo n.º 1
0
        public dynamic PostStalkInfo(dynamic parameters)
        {
            var channel = this.channelConfiguration.Items.FirstOrDefault(x => x.Guid == parameters.channel);

            if (channel == null || !channel.Stalks.ContainsKey(parameters.stalk))
            {
                return(new NotFoundResponse());
            }

            if (!this.UserCanConfigureStalks(this.Context, channel))
            {
                return(new NotFoundResponse());
            }

            var doc = new XmlDocument();

            doc.LoadXml(this.Request.Form.newsearchtree);

            IStalk stalk   = channel.Stalks[parameters.stalk];
            var    newTree = this.stalkNodeFactory.NewFromXmlFragment((XmlElement)doc.FirstChild.FirstChild);

            stalk.SearchTree = newTree;

            var stalkIsEnabled = this.Request.Form.enabledSwitch;

            stalk.IsEnabled   = stalkIsEnabled.HasValue;
            stalk.Description = this.Request.Form.stalkDescription;

            var expiry = this.Request.Form.expiry;

            DateTime newExpiry;
            var      dateParseResult = DateTime.TryParse(expiry, out newExpiry);

            if (dateParseResult)
            {
                stalk.ExpiryTime = newExpiry.ToUniversalTime();
            }
            else
            {
                stalk.ExpiryTime = null;
            }

            this.channelConfiguration.Save();
            this.FreenodeClient.SendMessage(
                stalk.Channel,
                "The stalk " + stalk.Identifier + " was modified by " + this.Context.CurrentUser.UserName
                + " from the web interface.");

            return(this.Response.AsRedirect(string.Format("/channels/{0}/stalk/{1}", channel.Guid, stalk.Identifier)));
        }
Exemplo n.º 2
0
 public StalkInfoFormattingEventArgs(IStalk stalk)
 {
     this.Stalk = stalk;
 }
        public IEnumerable <SubscriptionResult> GetUserSubscriptionsToStalk(IIrcChannel channel, IStalk stalk)
        {
            var userData = this.botUserConfiguration.Items.ToDictionary(
                x => x,
                y => new SubscriptionResult {
                Stalk = stalk, Channel = channel, BotUser = y
            });

            foreach (var channelUser in channel.Users.Where(x => x.Subscribed))
            {
                var botUser = this.botUserConfiguration[channelUser.Mask.ToString()];
                userData[botUser].IsSubscribed = true;
                userData[botUser].Source       = SubscriptionSource.Channel;
                userData[botUser].Complete     = true;
            }

            foreach (var stalkUser in stalk.Subscribers)
            {
                var botUser = this.botUserConfiguration[stalkUser.Mask.ToString()];

                if (stalkUser.Subscribed)
                {
                    userData[botUser].IsSubscribed = true;
                    userData[botUser].Overridden   = false;
                    userData[botUser].Source       = SubscriptionSource.Stalk;
                    userData[botUser].Complete     = true;
                }
                else
                {
                    // subscription exclusion for channel users
                    userData[botUser].IsSubscribed = false;
                    userData[botUser].Overridden   = true;
                    userData[botUser].Source       = SubscriptionSource.Stalk;
                    userData[botUser].Complete     = true;
                }
            }

            return(userData.Where(x => x.Value.Complete).Select(x => x.Value).ToList());
        }
 public bool IsSubscribedToStalk(IBotUser botUser, IIrcChannel channel, IStalk stalk)
 {
     return(this.GetUserSubscriptionsToStalk(channel, stalk)
            .Where(x => x.IsSubscribed)
            .Any(x => Equals(x.BotUser, botUser)));
 }
        public bool SubscribeStalk(IrcUserMask mask, IIrcChannel channel, IStalk stalk, out SubscriptionSource source)
        {
            if (channel.Identifier != stalk.Channel)
            {
                throw new Exception("Mismatch between stalk channel and channel!");
            }

            var stalkSubscriber   = stalk.Subscribers.FirstOrDefault(x => x.Mask.ToString() == mask.ToString());
            var channelSubscriber = channel.Users.FirstOrDefault(x => x.Mask.ToString() == mask.ToString());

            this.logger.DebugFormat(
                "Subscription request for {0} to {1} in {2}",
                mask,
                stalk.Identifier,
                channel.Identifier);

            if (stalkSubscriber != null)
            {
                if (stalkSubscriber.Subscribed)
                {
                    if (channelSubscriber != null)
                    {
                        if (channelSubscriber.Subscribed)
                        {
                            // subscribed to channel
                            // subscribed to stalk
                            this.logger.WarnFormat(
                                "Found subscription request from stalk- ({0}) and channel-subscribed ({1}) user ({2})",
                                stalk.Identifier,
                                channel.Identifier,
                                mask);

                            this.logger.DebugFormat(
                                "Unsubscribing from stalk - already subscribed to stalk and channel");
                            stalk.Subscribers.Remove(stalkSubscriber);
                            source = SubscriptionSource.Channel;
                            return(false);
                        }
                        else
                        {
                            // not subscribed to channel
                            // subscribed to stalk
                            this.logger.DebugFormat("Not subscribing - already subscribed to stalk");
                            source = SubscriptionSource.Stalk;
                            return(false);
                        }
                    }
                    else
                    {
                        // not subscribed to channel
                        // subscribed to stalk
                        this.logger.DebugFormat("Not subscribing - already subscribed to stalk");
                        source = SubscriptionSource.Stalk;
                        return(false);
                    }
                }
                else
                {
                    if (channelSubscriber != null)
                    {
                        if (channelSubscriber.Subscribed)
                        {
                            // forcibly unsubscribed from stalk
                            // subscribed to channel
                            this.logger.DebugFormat("Removing forced unsubscribe - already subscribed to channel");
                            stalk.Subscribers.Remove(stalkSubscriber);
                            source = SubscriptionSource.Channel;
                            return(true);
                        }
                        else
                        {
                            // forcibly unsubscribed from stalk
                            // not subscribed to channel
                            this.logger.WarnFormat(
                                "Found subscription request from stalk-force-unsubscribed ({0}) and channel-unsubscribed ({1}) user ({2})",
                                stalk.Identifier,
                                channel.Identifier,
                                mask);
                            this.logger.DebugFormat("Converting forced unsubscribe to stalk subscription");
                            stalkSubscriber.Subscribed = true;
                            source = SubscriptionSource.Stalk;
                            return(true);
                        }
                    }
                    else
                    {
                        // forcibly unsubscribed from stalk
                        // not subscribed to channel
                        this.logger.WarnFormat(
                            "Found subscription request from stalk-force-unsubscribed ({0}) and channel-unsubscribed ({1}) user ({2})",
                            stalk.Identifier,
                            channel.Identifier,
                            mask);
                        this.logger.DebugFormat("Converting forced unsubscribe to stalk subscription");
                        stalkSubscriber.Subscribed = true;
                        source = SubscriptionSource.Stalk;
                        return(true);
                    }
                }
            }
            else
            {
                if (channelSubscriber != null)
                {
                    if (channelSubscriber.Subscribed)
                    {
                        // already subscribed to channel
                        // not subscribed to stalk
                        source = SubscriptionSource.Channel;
                        return(false);
                    }
                    else
                    {
                        // not subscribed to channel
                        // not subscribed to stalk
                        this.logger.DebugFormat("Subscribing to stalk");
                        stalkSubscriber = new StalkUser(mask, true);
                        stalk.Subscribers.Add(stalkSubscriber);
                        source = SubscriptionSource.Stalk;
                        return(true);
                    }
                }
                else
                {
                    // not subscribed to channel
                    // not subscribed to stalk
                    this.logger.DebugFormat("Subscribing to stalk");
                    stalkSubscriber = new StalkUser(mask, true);
                    stalk.Subscribers.Add(stalkSubscriber);
                    source = SubscriptionSource.Stalk;
                    return(true);
                }
            }
        }
Exemplo n.º 6
0
        public XmlElement ToXmlElement(IStalk stalk, XmlDocument doc)
        {
            var e = doc.CreateElement("complexstalk");

            e.SetAttribute("flag", stalk.Identifier);

            if (stalk.LastUpdateTime != null)
            {
                e.SetAttribute(
                    "lastupdate",
                    XmlConvert.ToString(stalk.LastUpdateTime.Value, XmlDateTimeSerializationMode.Utc));
            }

            if (stalk.LastTriggerTime != null)
            {
                e.SetAttribute(
                    "lasttrigger",
                    XmlConvert.ToString(stalk.LastTriggerTime.Value, XmlDateTimeSerializationMode.Utc));
            }

            if (stalk.CreationDate != DateTime.MinValue)
            {
                e.SetAttribute(
                    "creation",
                    XmlConvert.ToString(stalk.CreationDate, XmlDateTimeSerializationMode.Utc));
            }

            if (stalk.Description != null)
            {
                e.SetAttribute("description", stalk.Description);
            }

            if (stalk.LastMessageId != null)
            {
                e.SetAttribute("lastmessageid", stalk.LastMessageId);
            }

            e.SetAttribute("enabled", XmlConvert.ToString(stalk.IsEnabled));

            e.SetAttribute("watchchannel", stalk.WatchChannel);

            if (stalk.ExpiryTime != null)
            {
                e.SetAttribute("expiry", XmlConvert.ToString(stalk.ExpiryTime.Value, XmlDateTimeSerializationMode.Utc));
            }

            if (stalk.DynamicExpiry != null)
            {
                e.SetAttribute("dynamicexpiry", XmlConvert.ToString(stalk.DynamicExpiry.Value));
            }

            e.SetAttribute("triggercount", XmlConvert.ToString(stalk.TriggerCount));

            var searchTreeParentElement = doc.CreateElement("searchtree");

            searchTreeParentElement.AppendChild(this.StalkNodeFactory.ToXml(doc, stalk.SearchTree));
            e.AppendChild(searchTreeParentElement);

            var subsElement = doc.CreateElement("subscribers");

            e.AppendChild(subsElement);

            foreach (var user in stalk.Subscribers)
            {
                var u = doc.CreateElement("user");
                u.SetAttribute("mask", user.Mask.ToString());

                if (!user.Subscribed)
                {
                    u.SetAttribute("unsubscribed", XmlConvert.ToString(true));
                }

                subsElement.AppendChild(u);
            }

            return(e);
        }
Exemplo n.º 7
0
 public DisplayStalk(IStalk stalk, IAppConfiguration appConfiguration, IStalkNodeFactory stalkNodeFactory)
 {
     this.appConfiguration = appConfiguration;
     this.stalkNodeFactory = stalkNodeFactory;
     this.Stalk            = stalk;
 }