예제 #1
0
        public override void Initialize()
        {
            base.Initialize();

            lock (_dataContext)
            {
                _dataContext.Connection.Open();

                // メインチャンネル
                if ((from g1 in _dataContext.Group
                     where g1.UserId == CurrentSession.TwitterUser.Id && g1.Name == CurrentSession.Config.ChannelName
                     select g1).Count() == 0)
                {
                    using (var ctx = new TwitterIrcGatewayDataContext())
                    {
                        Group g = new Group
                                      {Name = CurrentSession.Config.ChannelName, UserId = CurrentSession.TwitterUser.Id};
                        ctx.Group.InsertOnSubmit(g);
                        ctx.SubmitChanges();
                    }
                }

                UpdateGroupCache();
            }
            CurrentSession.AddInsLoadCompleted += new EventHandler<EventArgs>(CurrentSession_AddInsLoadCompleted);
            CurrentSession.PreProcessTimelineStatuses += new EventHandler<TimelineStatusesEventArgs>(CurrentSession_PreProcessTimelineStatuses);
            CurrentSession.PreProcessTimelineStatus += new EventHandler<TimelineStatusEventArgs>(CurrentSession_PreProcessTimelineStatus);
            CurrentSession.PostSendGroupMessageTimelineStatus += new EventHandler<TimelineStatusGroupEventArgs>(CurrentSession_PostSendGroupMessageTimelineStatus);
            CurrentSession.PostProcessTimelineStatuses += new EventHandler<TimelineStatusesEventArgs>(CurrentSession_PostProcessTimelineStatuses);
        }
예제 #2
0
        void CurrentSession_PreProcessTimelineStatuses(object sender, TimelineStatusesEventArgs e)
        {
            lock (_dataContext)
            {
                // FIXME: この辺はあとで何とかする
                var notFoundCount = (from g in CurrentSession.Groups.Keys
                                     where !_cacheGroup.ContainsKey(g)
                                     select g).Count();
                if (notFoundCount > 0)
                {
                    var newGroups = from g in CurrentSession.Groups.Keys
                                    let count = (from g1 in _dataContext.Group
                                                 where g1.UserId == CurrentSession.TwitterUser.Id && g1.Name == g
                                                 select g1).Count()
                                    where count == 0
                                    select new Group() {Name = g, UserId = CurrentSession.TwitterUser.Id};
                    using (var ctx = new TwitterIrcGatewayDataContext())
                    {
                        ctx.Group.InsertAllOnSubmit(newGroups);
                        ctx.SubmitChanges();
                    }
                    UpdateGroupCache();
                }
                // メインチャンネル
                if ((from g1 in _dataContext.Group
                     where g1.UserId == CurrentSession.TwitterUser.Id && g1.Name == CurrentSession.Config.ChannelName
                     select g1).Count() == 0)
                {
                    using (var ctx = new TwitterIrcGatewayDataContext())
                    {
                        Group g = new Group { Name = CurrentSession.Config.ChannelName, UserId = CurrentSession.TwitterUser.Id };
                        ctx.Group.InsertOnSubmit(g);
                        ctx.SubmitChanges();
                    }
                }

                var newTwitterUsers =
                    (from status in e.Statuses.Status where status.User.Id != 0 select status.User).Distinct();
                foreach (var user in newTwitterUsers)
                {
                    using (var ctx = new TwitterIrcGatewayDataContext())
                    {
                        try
                        {
                            User newUser = new User
                                           {
                                               Id = user.Id,
                                               Name = user.Name,
                                               IsProtected = user.Protected,
                                               ProfileImageUrl = user.ProfileImageUrl,
                                               ScreenName = user.ScreenName
                                           };
                            if (!ctx.User.Contains(newUser))
                            {
                                ctx.User.InsertOnSubmit(newUser);
                                ctx.SubmitChanges();
                            }
                        }
                        catch (DuplicateKeyException dupE)
                        {
                            continue;
                        }
                        catch (SqlException sqlE)
                        {
                            // キー制約
                            if (sqlE.Number == 2627)
                                continue;

                            throw;
                        }
                    }
                }
            }
        }
 partial void UpdateGroup(Group instance);
 partial void DeleteGroup(Group instance);
 partial void InsertGroup(Group instance);