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; } } } } }
void CurrentSession_PostProcessTimelineStatuses(object sender, TimelineStatusesEventArgs e) { }