Beispiel #1
0
        public IcqAccount Get(int uin)
        {
            IcqAccount result = null;

            try
            {
                using (var conn = new SqlConnection(_cnString))
                {
                    using (var cmd = new SqlCommand("[dbo].[ICQ_ACCOUNT_GET_BY_UIN]", conn))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;

                        cmd.Parameters.AddWithValue("@uin", uin);

                        conn.Open();

                        using (var dr = cmd.ExecuteReader())
                        {
                            if (dr.Read())
                            {
                                result          = new IcqAccount();
                                result.Uin      = dr.GetInt32(dr.GetOrdinal("UIN"));
                                result.Nickname = dr.GetString(dr.GetOrdinal("NICKNAME"));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            return(result);
        }
Beispiel #2
0
        public void Add(IcqAccount account)
        {
            int rowCount = 0;

            try
            {
                using (var conn = new SqlConnection(_cnString))
                {
                    using (var cmd = new SqlCommand("[dbo].[ICQ_ACCOUNT_ADD]", conn))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;

                        cmd.Parameters.AddWithValue("@uin", account.Uin);
                        cmd.Parameters.AddWithValue("@nick", account.Nickname);

                        conn.Open();

                        using (var dr = cmd.ExecuteReader())
                        {
                            if (dr.Read())
                            {
                                rowCount = dr.GetInt32(dr.GetOrdinal("ROWCOUNT"));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
Beispiel #3
0
        public int LoadToDb(string qhfFilePath, out int totalMsgs)
        {
            var messages = new List <IcqMessage>();
            var account  = new IcqAccount();

            using (QHFReader reader = new QHFReader(qhfFilePath))
            {
                account.Nickname = reader.Nick;
                account.Uin      = Convert.ToInt32(reader.Uin);

                var message = new QHFMessage();
                while (reader.GetNextMessage(message))
                {
                    messages.Add(new IcqMessage(account.Uin, message.IsMy, message.Time, message.Text));
                }
            }

            messages = messages.OrderBy(ks => ks.DateTime).ToList();

            totalMsgs = messages.Count;

            var loader = IcqMessageLoader.GetInstance(_cnString);
            IEnumerable <IcqMessage> uploadedMessages = null;

            var accountLoader = IcqAccountLoader.GetInstance(_cnString);

            if (accountLoader.Get(account.Uin) == null)
            {
                accountLoader.Add(account);
            }
            else
            {
                if (messages.First().DateTime < loader.GetLatest(account).DateTime)
                {
                    if (messages.Last().DateTime > loader.GetEarliest(account).DateTime)
                    {
                        uploadedMessages = loader.GetRange(account, messages.First().DateTime, messages.Last().DateTime);
                    }
                }
            }

            int uploadCount = 0;

            if (uploadedMessages == null)
            {
                uploadCount = loader.AddRange(messages);
            }
            else
            {
                var selectedMessages = messages.Where(m => !uploadedMessages.Any(um => um.Equals(m))).ToList();
                uploadCount = loader.AddRange(selectedMessages);
            }

            return(uploadCount);
        }
Beispiel #4
0
        public int LoadTxtToDb(string txtFilePath)
        {
            if (Path.GetExtension(txtFilePath) != ".txt")
            {
                throw new IOException($"Файл \"{Path.GetFileName(txtFilePath)}\" не является текстовым.");
            }

            var account     = new IcqAccount();
            var qipMessages = QipTxtReader.ReadMessages(txtFilePath);

            account.Uin      = Convert.ToInt32(Path.GetFileNameWithoutExtension(txtFilePath));
            account.Nickname = "";

            List <IcqMessage> messages = qipMessages
                                         .Select(message => new IcqMessage(account.Uin, message.IsMy, message.Time, message.Text))
                                         .ToList();

            var loader = IcqMessageLoader.GetInstance(_cnString);
            IEnumerable <IcqMessage> uploadedMessages = null;

            var accountLoader = IcqAccountLoader.GetInstance(_cnString);

            if (accountLoader.Get(account.Uin) == null)
            {
                accountLoader.Add(account);
            }
            else
            {
                if (messages.First().DateTime < loader.GetLatest(account).DateTime)
                {
                    if (messages.Last().DateTime > loader.GetEarliest(account).DateTime)
                    {
                        uploadedMessages = loader.GetRange(account, messages.First().DateTime, messages.Last().DateTime);
                    }
                }
            }

            int uploadCount = 0;

            if (uploadedMessages == null)
            {
                uploadCount = loader.AddRange(messages);
            }
            else
            {
                var selectedMessages = messages.Where(m => !uploadedMessages.Any(um => um.Equals(m)));
                uploadCount = loader.AddRange(selectedMessages);
            }

            return(uploadCount);
        }
Beispiel #5
0
        public IEnumerable <IcqMessage> GetRange(IcqAccount account, DateTime from, DateTime to)
        {
            var result = new List <IcqMessage>();

            try
            {
                using (var conn = new SqlConnection(_cnString))
                {
                    using (var cmd = new SqlCommand("[dbo].[ICQ_HISTORY_GET_RANGE]", conn))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("@uin", account.Uin);
                        cmd.Parameters.AddWithValue("@from", from);
                        cmd.Parameters.AddWithValue("@to", to);

                        conn.Open();

                        using (var dr = cmd.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                var msg = new IcqMessage();
                                msg.Id         = dr.GetInt32(dr.GetOrdinal("MESSAGE_ID"));
                                msg.ContactUin = dr.GetInt32(dr.GetOrdinal("CONTACT_UIN"));
                                msg.IsMy       = dr.GetBoolean(dr.GetOrdinal("IS_MY"));
                                msg.DateTime   = dr.GetDateTime(dr.GetOrdinal("DATE"));
                                msg.Text       = dr.GetString(dr.GetOrdinal("TEXT"));

                                result.Add(msg);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            return(result);
        }
Beispiel #6
0
        public IcqMessage GetLatest(IcqAccount account)
        {
            IcqMessage result = null;

            try
            {
                using (var conn = new SqlConnection(_cnString))
                {
                    using (var cmd = new SqlCommand("[dbo].[ICQ_HISTORY_GET_LATEST]", conn))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("@uin", account.Uin);

                        conn.Open();

                        using (var dr = cmd.ExecuteReader())
                        {
                            if (dr.Read())
                            {
                                result            = new IcqMessage();
                                result.Id         = dr.GetInt32(dr.GetOrdinal("MESSAGE_ID"));
                                result.ContactUin = dr.GetInt32(dr.GetOrdinal("CONTACT_UIN"));
                                result.IsMy       = dr.GetBoolean(dr.GetOrdinal("IS_MY"));
                                result.DateTime   = dr.GetDateTime(dr.GetOrdinal("DATE"));
                                result.Text       = dr.GetString(dr.GetOrdinal("TEXT"));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            return(result);
        }