public void IncrementUrl(string url, int uid, string usage) { lock (LockObj) { LockObj.LockMessage = MiscTools.GetCurrentMethod(); var matches = from tUrl in SqlConnector.LinkedUrls where tUrl.Url == url select tUrl; if (!matches.Any()) { var u = new LinkedUrl { LastUsage = usage, LastUsedById = uid, Url = url, Uses = 1 }; SqlConnector.Insert(u); } else { matches.Set(m => m.Uses, m => m.Uses + 1) .Set(m => m.LastUsage, usage) .Set(m => m.LastUsedById, uid) .Update(); } Logger.Log(this, "Incremented URL count with URL: " + url + "."); } LockObj.LockMessage = "None"; }
public void IncrementWord(string word) { lock (LockObj) { LockObj.LockMessage = MiscTools.GetCurrentMethod(); var matches = from usedWord in SqlConnector.Words where usedWord.Word == word select usedWord; if (matches.Any()) { var match = matches.First(); match.Uses++; Update(match); } else { SqlConnector.Insert(new UsedWord { Uses = 1, Word = word }); } } LockObj.LockMessage = "None"; }
public void IncrementVar(string key, int amount = 1) { lock (LockObj) { LockObj.LockMessage = MiscTools.GetCurrentMethod(); var matches = from pair in SqlConnector.KeyValuePairs where pair.Key == key select pair; if (!matches.Any()) { var p = new KeyValuePair { Key = key, Value = amount }; SqlConnector.Insert(p); Logger.Log(this, $"Inserted keyvaluepair with key: {key}."); } else { var m = matches.First(); m.Value += amount; Update(m); } } LockObj.LockMessage = "None"; }
public void UpsertMiscData(string type, string key, string value) { lock (LockObj) { LockObj.LockMessage = MiscTools.GetCurrentMethod(); var matches = from pair in SqlConnector.MiscData where pair.Type == type && pair.Key == key select pair; if (matches.Any()) { matches.Set(data => data.Value, () => value).Update(); } else { SqlConnector.Insert(new MiscData { Type = type, Key = key, Value = value, Enabled = true }); } } LockObj.LockMessage = "None"; }
public void IncrementEmoticon(string emoticon, int uid) { lock (LockObj) { LockObj.LockMessage = MiscTools.GetCurrentMethod(); var matches = from tEmoticon in SqlConnector.Emoticons where tEmoticon.Emoticon == emoticon select tEmoticon; if (!matches.Any()) { var insert = new UsedEmoticon { Emoticon = emoticon, LastUsedById = uid, Uses = 1 }; SqlConnector.Insert(insert); } else { matches.Set(m => m.Uses, m => m.Uses + 1) .Set(m => m.LastUsedById, uid).Update(); } Logger.Log(this, $"Incremented emoticon count with emoticon: {emoticon}."); } LockObj.LockMessage = "None"; }
public void IncrementLineCount(int uid) { lock (LockObj) { LockObj.LockMessage = MiscTools.GetCurrentMethod(); var matches = from stat in SqlConnector.UserStatistics where stat.UserId == uid select stat; if (matches.Count() != 0) { var match = matches.First(); match.Lines++; Update(match); } else { var nstat = new UserStatistic { UserId = uid, Lines = 1 }; SqlConnector.Insert(nstat); Logger.Log(this, $"Created new stats row for {uid}."); } } LockObj.LockMessage = "None"; }
/// <summary> /// Returns the matching database user for the given ChatUser. /// Will create a database user if one does not exist, and updates /// it if the user's nickname or AddressableName have changed. /// </summary> public User UpsertUser(ChatUser user) { lock (LockObj) { LockObj.LockMessage = MiscTools.GetCurrentMethod(); // TODO: implement IRC user mapping if (user.HasTemporallyUniqueId) { // The user's UniqueId is guaranteed to be correct, so we can simply match on that var matches = SqlConnector.Users.Where(u => u.UniqueId == user.UniqueId).ToArray(); if (matches.Length == 0) { Logger.Log(this, $"Adding new user {user} to the database"); var dbUser = new User { AddressableName = user.AddressableName, Nickname = user.Nickname, OriginalNickname = user.Nickname, UniqueId = user.UniqueId }; SqlConnector.Insert(dbUser); // Instead of returning dbUser, grab the newly added user from the database, // which will set their userId to the generated value. return(SqlConnector.Users.First(u => u.UniqueId == user.UniqueId)); } if (matches.Length == 1) { var dbUser = matches[0]; if (dbUser.AddressableName != user.AddressableName) { Logger.Log(this, $"Updating AddressableName for {dbUser} to {user.AddressableName}"); dbUser.AddressableName = user.AddressableName; } if (dbUser.Nickname != user.Nickname) { Logger.Log(this, $"Updating Nickname for {dbUser} to {user.Nickname}"); dbUser.Nickname = user.Nickname; } Update(dbUser); return(matches[0]); } throw new CorruptedDatabaseException($"Multiple users with the same UniqueId (\"{user.UniqueId}\") found"); } else { throw new NotImplementedException("IRC user mapping is not supported yet"); } } }
internal void Snag(ChatMessage message) { lock (LockObj) { LockObj.LockMessage = MiscTools.GetCurrentMethod(); var q = new Quote { Text = message.Body, AuthorId = message.Sender.DbUser.Id, TakenAt = DateTime.Now }; SqlConnector.Insert(q); Logger.Log(this, $"Added quote for {message.Sender.Nickname}."); } LockObj.LockMessage = "None"; }
public void AddMessage(ChatMessage message) { lock (LockObj) { LockObj.LockMessage = MiscTools.GetCurrentMethod(); var line = new ChatLog { SentAt = message.SentAt, MessageType = MessageTypes.ChatMessage, ChannelId = message.Channel.Identifier, Channel = message.Channel.Name, SenderId = message.Sender.DbUser.Id, Nick = message.Sender.Nickname, Message = message.Body }; SqlConnector.Insert(line); } LockObj.LockMessage = "None"; }