コード例 #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)
 {
 }
コード例 #3
0
ファイル: AutoLists.cs プロジェクト: mashiro/tig-auto-lists
 private void PreProcessTimelineStatuses(object sender, TimelineStatusesEventArgs e)
 {
     if (e.IsFirstTime)
     {
         // APIの初回分は無視IDに追加
         foreach(var status in e.Statuses.Status)
         {
             IgnoreIds.Add(status.Id);
         }
     }
 }