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

📄 dbhistorymanager.cs

📁 破解的飞信源代码
💻 CS
📖 第 1 页 / 共 3 页
字号:
                builder.AppendLine("Time DATETIME)");
                builder.AppendLine("");
                this._dbHelper.ExecuteNonQuery(builder.ToString(), null);
            }
            if (!objects.Contains("Message"))
            {
                builder = new StringBuilder();
                builder.AppendLine("CREATE TABLE Message(");
                builder.AppendLine("MessageID VARCHAR(64),");
                builder.AppendLine("ReceiverUri VARCHAR(256),");
                builder.AppendLine("ReceiverName VARCHAR(256),");
                builder.AppendLine("Status INTEGER,");
                builder.AppendLine("PRIMARY KEY (MessageID, ReceiverUri))");
                builder.AppendLine("");
                this._dbHelper.ExecuteNonQuery(builder.ToString(), null);
            }
            if (!objects.Contains("vMessage"))
            {
                builder = new StringBuilder();
                builder.AppendLine("CREATE VIEW vMessage AS ");
                builder.AppendLine("SELECT MessageBody.ID AS ID, MessageBody.SenderUri AS SenderUri , MessageBody.SenderName AS SenderName , Message.ReceiverUri AS ReceiverUri , Message.ReceiverName AS ReceiverName , MessageBody.Body AS Body , MessageBody.Extend AS Extend, ");
                builder.AppendLine("MessageBody.MessageType AS MessageType , Message.Status AS Status , MessageBody.[Time] AS [Time] , P2.[Type] AS SenderType , P1.[Type] AS ReceiverType");
                builder.AppendLine("FROM Message INNER JOIN ");
                builder.AppendLine("MessageBody ON Message.MessageID = MessageBody.ID ");
                builder.AppendLine("INNER JOIN Player P1 ON Message.ReceiverUri = P1.Uri ");
                builder.AppendLine("INNER JOIN Player P2 ON MessageBody.SenderUri = P2.Uri ");
                builder.AppendLine("");
                this._dbHelper.ExecuteNonQuery(builder.ToString(), null);
            }
            if (!objects.Contains("vPlayerRef"))
            {
                builder = new StringBuilder();
                builder.AppendLine("CREATE VIEW vPlayerRef AS ");
                builder.AppendLine("SELECT COUNT(MessageBody.SenderUri) + COUNT(Message.ReceiverUri) AS RefCount, Player.Uri AS Uri ");
                builder.AppendLine("FROM Player LEFT OUTER JOIN MessageBody ON Player.Uri = MessageBody.SenderUri LEFT OUTER JOIN Message ON Player.Uri = Message.ReceiverUri ");
                builder.AppendLine("GROUP BY Player.Uri");
                builder.AppendLine("");
                this._dbHelper.ExecuteNonQuery(builder.ToString(), null);
            }
            Thread thread = new Thread(new ThreadStart(this.MigationMessageHistory));
            thread.Priority = ThreadPriority.BelowNormal;
            thread.Start();
        }

        public IList<TMessage> LoadMessages<TMessage>(MessageType type, MessageStatus status) where TMessage: IMessage
        {
            try
            {
                SQLiteDataReader reader = this._dbHelper.ExecuteReader("SELECT * FROM [vMessage] WHERE ([MessageType] = [MessageType] & @Type) AND ([Status] = @Status) ORDER BY [Time] DESC", new object[] { (int) type, (int) status });
                return this.ParseMessage<TMessage>(reader);
            }
            catch
            {
                return null;
            }
        }

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

        public IList<TMessage> LoadMessages<TMessage>(IMessage message, out Player selectPlayer, out int currentPage, out int msgCount) where TMessage: IMessage
        {
            currentPage = 0;
            msgCount = 0;
            selectPlayer = this._currentPlayer;
            try
            {
                selectPlayer = message.Sender;
                List<Player>.Enumerator enumerator = message.Receivers.GetEnumerator();
                try
                {
                    while (enumerator.MoveNext())
                    {
                        Player player = enumerator.get_Current();
                        if (player.Type == PlayerType.Group)
                        {
                            selectPlayer = player;
                            goto Label_0074;
                        }
                        if (((selectPlayer.Type == PlayerType.User) && (player.Type != PlayerType.User)) && (player.Type != PlayerType.System))
                        {
                            selectPlayer = player;
                        }
                    }
                }
                finally
                {
                    enumerator.Dispose();
                }
            Label_0074:;
                int num = this._dbHelper.ExecuteScalar("SELECT COUNT(DISTINCT ID) AS MessageCount FROM [vMessage] WHERE ([SenderUri] = @Uri OR [ReceiverUri] = @Uri) AND [Time] > @Time", new object[] { selectPlayer.Uri, message.Time });
                currentPage = num / this.MessagesPerPage;
                return this.LoadMessages<TMessage>(selectPlayer, MessageType.All, currentPage, out msgCount);
            }
            catch
            {
                return null;
            }
        }

        public IList<TMessage> LoadMessages<TMessage>(Player player, MessageType type, int page, out int msgCount) where TMessage: IMessage
        {
            try
            {
                if (player.Uri != this.CurrentPlayer.Uri)
                {
                    if (player.Type == PlayerType.Group)
                    {
                        msgCount = this._dbHelper.ExecuteScalar("SELECT COUNT(DISTINCT ID) AS MessageCount FROM [vMessage] WHERE [ReceiverUri] = @Uri AND [ReceiverType] = @PlayerType AND [MessageType] = [MessageType] & @Type", new object[] { player.Uri, (int) player.Type, (int) type });
                        page = this.GetCurrentPage(page, msgCount);
                        SQLiteDataReader reader = this._dbHelper.ExecuteReader("SELECT * FROM [vMessage] WHERE [ID] IN (SELECT [ID] FROM [vMessage] WHERE [ReceiverUri] = @Uri AND [ReceiverType] = @PlayerType AND [MessageType] = [MessageType] & @Type GROUP BY [ID] ORDER BY [Time] DESC LIMIT @Offset,@Count) ORDER BY [Time] DESC", new object[] { player.Uri, (int) player.Type, (int) type, 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 OR [ReceiverUri] = @Uri) AND [ReceiverType] <> @PlayerType AND [MessageType] = [MessageType] & @Type", new object[] { player.Uri, 8, (int) type });
                    page = this.GetCurrentPage(page, msgCount);
                    SQLiteDataReader reader2 = this._dbHelper.ExecuteReader("SELECT * FROM [vMessage] WHERE [ID] IN (SELECT [ID] FROM [vMessage] WHERE ([SenderUri] = @Uri OR [ReceiverUri] = @Uri) AND [ReceiverType] <> @PlayerType AND [MessageType] = [MessageType] & @Type GROUP BY [ID] ORDER BY [Time] DESC LIMIT @Offset,@Count) ORDER BY [Time] DESC", new object[] { player.Uri, 8, (int) type, page * this.MessagesPerPage, this.MessagesPerPage });
                    return this.ParseMessage<TMessage>(reader2);
                }
                msgCount = this._dbHelper.ExecuteScalar("SELECT COUNT(DISTINCT ID) AS MessageCount FROM [vMessage] WHERE ([SenderUri] = @Uri AND [ReceiverUri] = @Uri) AND [MessageType] = [MessageType] & @Type", new object[] { player.Uri, (int) type });
                page = this.GetCurrentPage(page, msgCount);
                SQLiteDataReader reader3 = this._dbHelper.ExecuteReader("SELECT * FROM [vMessage] WHERE [ID] IN (SELECT [ID] FROM [vMessage] WHERE ([SenderUri] = @Uri AND [ReceiverUri] = @Uri) AND [MessageType] = [MessageType] & @Type GROUP BY [ID] ORDER BY [Time] DESC LIMIT @Offset,@Count) ORDER BY [Time] DESC", new object[] { player.Uri, (int) type, page * this.MessagesPerPage, this.MessagesPerPage });
                return this.ParseMessage<TMessage>(reader3);
            }
            catch
            {
                msgCount = 0;
                return null;
            }
        }

        public IList<Player> LoadPlayer()
        {
            IList<Player> list2;
            try
            {
                using (SQLiteDataReader reader = this._dbHelper.ExecuteReader("SELECT * FROM [Player] WHERE (Uri IN (SELECT DISTINCT SenderUri FROM vMessage WHERE (ReceiverType <> 8))) OR (Uri IN (SELECT DISTINCT ReceiverUri FROM vMessage vMessage_1)) ORDER BY [Name]", null))
                {
                    List<Player> list = new List<Player>();
                    while (reader.Read())
                    {
                        string uri = reader["Uri"].ToString();
                        string friendlyName = reader["Name"].ToString();
                        PlayerType type = (PlayerType) Enum.Parse(typeof(PlayerType), reader["Type"].ToString());
                        Player player = new Player(uri, friendlyName, type);
                        list.Add(player);
                    }
                    reader.Close();
                    list2 = list;
                }
            }
            catch
            {
                list2 = null;
            }
            return list2;
        }

        public IList<TMessage> LoadRecentMessages<TMessage>(string uri, int count) where TMessage: IMessage
        {
            try
            {
                SQLiteDataReader reader = this._dbHelper.ExecuteReader("SELECT * FROM [vMessage] WHERE [ID] IN (SELECT [ID] FROM [vMessage] WHERE (([SenderUri] = @Uri AND [ReceiverUri] = @Me) OR ([SenderUri] = @Me AND [ReceiverUri] = @Uri)) AND ([MessageType] = [MessageType] & @Type) GROUP BY [ID] ORDER BY [Time] DESC LIMIT 0,@Count) ORDER BY [Time] DESC", new object[] { uri, this.CurrentPlayer.Uri, 15, count });
                return this.ParseMessage<TMessage>(reader);
            }
            catch
            {
                return null;
            }
        }

        private void MigationMessageHistory()
        {
            string path = this.CurrentUser.PersistentManager.BaseDirForHistory;
            if (Directory.Exists(path))
            {
                foreach (string text2 in Directory.GetFiles(path))
                {
                    bool flag = true;
                    FileInfo info = new FileInfo(text2);
                    string name = info.Name;
                    string sidOrMobileNo = string.Empty;
                    string uriString = string.Empty;
                    string friendlyName = string.Empty;
                    string mobileNoString = string.Empty;
                    try
                    {
                        int index = name.IndexOf("_");
                        if (index != -1)
                        {
                            sidOrMobileNo = name.Substring(index + 1);
                        }
                        else
                        {
                            sidOrMobileNo = name;
                        }
                        sidOrMobileNo = sidOrMobileNo.Substring(0, sidOrMobileNo.Length - 4);
                        if ((sidOrMobileNo != "10000") && (sidOrMobileNo != "1000"))
                        {
                            Contact contact = null;
                            try
                            {
                                contact = this.CurrentUser.ContactList.FindContact(true, sidOrMobileNo);
                            }
                            catch
                            {
                            }
                            if (contact == null)
                            {
                                this.CurrentUser.GetUri(sidOrMobileNo, out uriString, out mobileNoString);
                                friendlyName = sidOrMobileNo;
                            }
                            else
                            {
                                uriString = contact.Uri.Raw;
                                friendlyName = contact.DisplayName;
                            }
                            Player currentPlayer = null;
                            if (uriString == this.CurrentPlayer.Uri)
                            {
                                currentPlayer = this.CurrentPlayer;
                            }
                            else
                            {
                                currentPlayer = new Player(uriString, friendlyName, PlayerType.Contact);
                            }
                            XmlDocument document = new XmlDocument();
                            document.Load(text2);
                            foreach (XmlNode node in document.DocumentElement.ChildNodes)
                            {
                                InstantMessage msg = this.GetMessage(node, currentPlayer);
                                if (!this.SaveMessage(msg))
                                {
                                    flag = false;
                                }
                            }
                            if (flag)
                            {
                                File.Delete(text2);
                            }
                        }
                        else
                        {
                            XmlDocument document2 = new XmlDocument();
                            document2.Load(text2);
                            foreach (XmlNode node2 in document2.DocumentElement.ChildNodes)
                            {
                                SystemMessage message = this.GetMessage(node2);
                                if (!this.SaveMessage(message))
                                {
                                    flag = false;
                                }
                            }

⌨️ 快捷键说明

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