⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbhistorymanager.cs

📁 破解的飞信源代码
💻 CS
📖 第 1 页 / 共 3 页
字号:
                            if (flag)
                            {
                                File.Delete(text2);
                            }
                        }
                    }
                    catch
                    {
                    }
                }
            }
        }

        protected IList<TMessage> ParseMessage<TMessage>(SQLiteDataReader reader) where TMessage: IMessage
        {
            using (SQLiteDataReader reader2 = reader)
            {
                Dictionary<string, int> dictionary = new Dictionary<string, int>();
                IList<TMessage> list = new List<TMessage>();
                int num = 0;
                while (reader.Read())
                {
                    DateTime time = (DateTime) reader["Time"];
                    string text = reader["ID"] as string;
                    if (text != null)
                    {
                        TMessage local;
                        if (!dictionary.ContainsKey(text))
                        {
                            local = Activator.CreateInstance<TMessage>();
                            local.ID = reader["ID"] as string;
                            Player player = new Player(reader["SenderUri"].ToString(), reader["SenderName"].ToString(), (PlayerType) Enum.Parse(typeof(PlayerType), reader["SenderType"].ToString()));
                            local.Sender = player;
                            local.Body = reader["Body"] as string;
                            local.Type = (MessageType) Enum.Parse(typeof(MessageType), reader["MessageType"].ToString());
                            local.Time = time;
                            local.Extend = reader["Extend"] as string;
                            list.Insert(num, local);
                            dictionary.Add(text, num);
                            num++;
                        }
                        else
                        {
                            local = list.get_Item(dictionary.get_Item(text));
                        }
                        Player player2 = new Player(reader["ReceiverUri"] as string, reader["ReceiverName"] as string, (PlayerType) Enum.Parse(typeof(PlayerType), reader["ReceiverType"].ToString()), (MessageStatus) Enum.Parse(typeof(MessageStatus), reader["Status"].ToString()));
                        local.Receivers.Add(player2);
                    }
                }
                reader.Close();
                return list;
            }
        }

        private string ParseSearchString(string searchString)
        {
            string text = searchString;
            text = text.Replace("/", "//").Replace("%", "/%").Replace("_", "/_");
            return string.Format("%{0}%", text);
        }

        public bool SaveMessage(IMessage msg)
        {
            try
            {
                this._dbHelper.JoinTransaction();
                if (this.ExistMessage(msg))
                {
                    List<Player>.Enumerator enumerator = msg.Receivers.GetEnumerator();
                    try
                    {
                        while (enumerator.MoveNext())
                        {
                            Player player = enumerator.get_Current();
                            if (this._dbHelper.ExecuteScalar("SELECT COUNT(*) FROM [Message] WHERE MessageID = @ID AND [ReceiverUri] = @ReveiverUri", new object[] { msg.ID, player.Uri }) == 0)
                            {
                                this.SavePlayer(player);
                                if (this._dbHelper.ExecuteNonQuery("INSERT INTO [Message] ([MessageID], [ReceiverUri], [ReceiverName], [Status]) VALUES (@MessageID, @ReceiverUri, @ReceiverName, @Status)", new object[] { msg.ID, player.Uri, player.Name, (int) player.Status }) != 1)
                                {
                                    throw new Exception();
                                }
                            }
                            else if (this._dbHelper.ExecuteNonQuery("UPDATE [Message] SET [Status] = @Status WHERE [MessageID] = @MessageID AND [ReceiverUri] = @ReveiverUri", new object[] { (int) player.Status, msg.ID, player.Uri }) != 1)
                            {
                                throw new Exception();
                            }
                        }
                    }
                    finally
                    {
                        enumerator.Dispose();
                    }
                }
                else
                {
                    this.SavePlayer(msg.Sender);
                    if (this._dbHelper.ExecuteNonQuery("INSERT INTO [MessageBody] ([ID], [SenderUri], [SenderName], [Body], [Extend], [MessageType], [Time]) VALUES (@ID, @SenderUri, @SenderName, @Body, @Extend, @MessageType, @Time)", new object[] { msg.ID, msg.Sender.Uri, msg.Sender.Name, msg.Body, msg.Extend, (int) msg.Type, msg.Time }) != 1)
                    {
                        throw new Exception();
                    }
                    List<Player>.Enumerator enumerator2 = msg.Receivers.GetEnumerator();
                    try
                    {
                        while (enumerator2.MoveNext())
                        {
                            Player player2 = enumerator2.get_Current();
                            this.SavePlayer(player2);
                            if (this._dbHelper.ExecuteNonQuery("INSERT INTO [Message] ([MessageID], [ReceiverUri], [ReceiverName], [Status]) VALUES (@MessageID, @ReceiverUri, @ReceiverName, @Status)", new object[] { msg.ID, player2.Uri, player2.Name, (int) player2.Status }) != 1)
                            {
                                throw new Exception();
                            }
                        }
                    }
                    finally
                    {
                        enumerator2.Dispose();
                    }
                }
                this._dbHelper.CommitTransaction();
                return true;
            }
            catch
            {
                this._dbHelper.RollbackTransaction();
                return false;
            }
        }

        protected void SavePlayer(Player player)
        {
            if (!this.ExistPlayer(player))
            {
                if (this._dbHelper.ExecuteNonQuery("INSERT INTO [Player] ([Uri], [Name], [Type]) VALUES  (@Uri, @Name, @Type)", new object[] { player.Uri, player.Name, (int) player.Type }) != 1)
                {
                    throw new Exception();
                }
            }
            else if (!string.IsNullOrEmpty(player.Name))
            {
                this._dbHelper.ExecuteNonQuery("UPDATE [Player] SET [Name] = @Name WHERE [Uri] = @Uri", new object[] { player.Name, player.Uri });
            }
        }

        public IList<TMessage> SearchMessages<TMessage>(MessageType messageType, string searchString, int page, out int msgCount) where TMessage: IMessage
        {
            try
            {
                searchString = this.ParseSearchString(searchString);
                msgCount = this._dbHelper.ExecuteScalar("SELECT COUNT(DISTINCT ID) AS MessageCount FROM [vMessage] WHERE ([MessageType] = [MessageType] & @Type) AND ([Body] LIKE @Search ESCAPE '/')", new object[] { (int) messageType, searchString });
                page = this.GetCurrentPage(page, msgCount);
                SQLiteDataReader reader = this._dbHelper.ExecuteReader("SELECT * FROM [vMessage] WHERE [ID] IN (SELECT [ID] FROM [vMessage] WHERE ([MessageType] = [MessageType] & @Type) AND ([Body] LIKE @Search ESCAPE '/') GROUP BY [ID] ORDER BY [Time] DESC LIMIT @Offset,@Count) ORDER BY [Time] DESC", new object[] { (int) messageType, searchString, page * this.MessagesPerPage, this.MessagesPerPage });
                return this.ParseMessage<TMessage>(reader);
            }
            catch
            {
                msgCount = 0;
                return null;
            }
        }

        public IList<TMessage> SearchMessages<TMessage>(PlayerType playerType, string searchString, int page, out int msgCount) where TMessage: IMessage
        {
            try
            {
                searchString = this.ParseSearchString(searchString);
                if (playerType == PlayerType.Group)
                {
                    msgCount = this._dbHelper.ExecuteScalar("SELECT COUNT(DISTINCT ID) AS MessageCount FROM [vMessage] WHERE ([SenderType] = @Type OR [ReceiverType] = @Type) AND ([Body] LIKE @Search ESCAPE '/')", new object[] { (int) playerType, searchString });
                    page = this.GetCurrentPage(page, msgCount);
                    SQLiteDataReader reader = this._dbHelper.ExecuteReader("SELECT * FROM [vMessage] WHERE [ID] IN (SELECT [ID] FROM [vMessage] WHERE ([SenderType] = @Type OR [ReceiverType] = @Type) AND ([Body] LIKE @Search ESCAPE '/') GROUP BY [ID] ORDER BY [Time] DESC LIMIT @Offset,@Count) ORDER BY [Time] DESC", new object[] { (int) playerType, searchString, page * this.MessagesPerPage, this.MessagesPerPage });
                    return this.ParseMessage<TMessage>(reader);
                }
                msgCount = this._dbHelper.ExecuteScalar("SELECT COUNT(DISTINCT ID) AS MessageCount FROM [vMessage] WHERE ([SenderType] = @Type OR [ReceiverType] = @Type) AND ([SenderType] != @GroupType AND [ReceiverType] != @GroupType) AND ([Body] LIKE @Search ESCAPE '/')", new object[] { (int) playerType, 8, searchString });
                page = this.GetCurrentPage(page, msgCount);
                SQLiteDataReader reader2 = this._dbHelper.ExecuteReader("SELECT * FROM [vMessage] WHERE [ID] IN (SELECT [ID] FROM [vMessage] WHERE ([SenderType] = @Type OR [ReceiverType] = @Type) AND ([SenderType] != @GroupType AND [ReceiverType] != @GroupType) AND ([Body] LIKE @Search ESCAPE '/') GROUP BY [ID] ORDER BY [Time] DESC LIMIT @Offset,@Count) ORDER BY [Time] DESC", new object[] { (int) playerType, 8, searchString, page * this.MessagesPerPage, this.MessagesPerPage });
                return this.ParseMessage<TMessage>(reader2);
            }
            catch
            {
                msgCount = 0;
                return null;
            }
        }

        public IList<TMessage> SearchMessages<TMessage>(string uri, string searchString, int page, out int msgCount) where TMessage: IMessage
        {
            try
            {
                searchString = this.ParseSearchString(searchString);
                if (uri != this._currentPlayer.Uri)
                {
                    msgCount = this._dbHelper.ExecuteScalar("SELECT COUNT(DISTINCT ID) AS MessageCount FROM [vMessage] WHERE ([SenderUri] = @Uri OR [ReceiverUri] = @Uri) AND ([Body] LIKE @Search ESCAPE '/')", new object[] { uri, searchString });
                    page = this.GetCurrentPage(page, msgCount);
                    SQLiteDataReader reader = this._dbHelper.ExecuteReader("SELECT * FROM [vMessage] WHERE [ID] IN (SELECT [ID] FROM [vMessage] WHERE ([SenderUri] = @Uri OR [ReceiverUri] = @Uri) AND ([Body] LIKE @Search ESCAPE '/') GROUP BY [ID] ORDER BY [Time] DESC LIMIT @Offset,@Count) ORDER BY [Time] DESC", new object[] { uri, searchString, page * this.MessagesPerPage, this.MessagesPerPage });
                    return this.ParseMessage<TMessage>(reader);
                }
                msgCount = this._dbHelper.ExecuteScalar("SELECT COUNT(DISTINCT ID) AS MessageCount FROM [vMessage] WHERE ([SenderUri] = @Uri AND [ReceiverUri] = @Uri) AND ([Body] LIKE @Search ESCAPE '/')", new object[] { uri, searchString });
                page = this.GetCurrentPage(page, msgCount);
                SQLiteDataReader reader2 = this._dbHelper.ExecuteReader("SELECT * FROM [vMessage] WHERE [ID] IN (SELECT [ID] FROM [vMessage] WHERE ([SenderUri] = @Uri AND [ReceiverUri] = @Uri) AND ([Body] LIKE @Search ESCAPE '/') GROUP BY [ID] ORDER BY [Time] DESC LIMIT @Offset,@Count) ORDER BY [Time] DESC", new object[] { uri, searchString, page * this.MessagesPerPage, this.MessagesPerPage });
                return this.ParseMessage<TMessage>(reader2);
            }
            catch
            {
                msgCount = 0;
                return null;
            }
        }

        public void UpdatePlayer(Player oldPlayer, Player newPlayer)
        {
            try
            {
                this._dbHelper.JoinTransaction();
                this.SavePlayer(newPlayer);
                this._dbHelper.ExecuteNonQuery("UPDATE [MessageBody] SET [SenderUri] = @Uri WHERE [SenderUri] = @OldUri", new object[] { newPlayer.Uri, oldPlayer.Uri });
                this._dbHelper.ExecuteNonQuery("UPDATE [Message] SET [ReceiverUri] = @Uri WHERE [ReceiverUri] = @OldUri", new object[] { newPlayer.Uri, oldPlayer.Uri });
                this.DeletePlayer(oldPlayer);
                this._dbHelper.CommitTransaction();
            }
            catch
            {
                this._dbHelper.RollbackTransaction();
            }
        }

        private DbHelper _dbHelper
        {
            get
            {
                return DbHelper.Instance;
            }
        }

        public Player CurrentPlayer
        {
            get
            {
                return this._currentPlayer;
            }
        }

        public User CurrentUser
        {
            get
            {
                return this._currentUser;
            }
            set
            {
                this._currentUser = value;
            }
        }

        public int MessagesPerPage
        {
            get
            {
                return 30;
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -