コード例 #1
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;
                        }
                    }
                }
            }
        }
コード例 #2
0
 void CurrentSession_PostProcessTimelineStatuses(object sender, TimelineStatusesEventArgs e)
 {
 }