messagehistorymanager.cs

来自「破解的飞信源代码」· CS 代码 · 共 139 行

CS
139
字号
namespace Imps.Client.Pc.MessageHistory2
{
    using Imps.Client;
    using Imps.Client.Core;
    using Imps.Client.Pc;
    using Imps.Client.Resource;
    using Imps.Client.Utils;
    using Imps.Client.Utils.Win32;
    using System;
    using System.Collections.Generic;
    using System.Runtime.CompilerServices;
    using System.Threading;
    using System.Windows.Forms;

    internal class MessageHistoryManager : IMessageHistoryManager
    {
        private IFrameworkWindow _framework;
        private MessageHistoryFrom _msgForm;
        private static object locker = new object();

        public event EventHandler HistoryDeleted;

        public MessageHistoryManager(IFrameworkWindow framework)
        {
            this._framework = framework;
            this._framework.AccountManager.CurrentUser.StatusChanged += new EventHandler<UserSatusChangedEventArgs>(this, (IntPtr) this.CurrentUser_StatusChanged);
        }

        public void AsyncDeleteMessageHistory(params string[] contactUris)
        {
            this.CurrentUser.HistoryManager.DeleteMessage(MessageType.All, contactUris);
            if (this.HistoryDeleted != null)
            {
                FuncDispatcher.InvokeEventHandlerInUiThread(this._msgForm, this.HistoryDeleted, new EventArgs());
            }
        }

        public bool ClearMessageHistory(IWin32Window owner)
        {
            try
            {
                if ((owner != null) && (this._framework.UnifiedMessageBox.ShowConfirmation(owner, StringTable.Conversation.MsgConfirmDeleteAll) != DialogResult.Yes))
                {
                    return false;
                }
                return this.CurrentUser.HistoryManager.ClearMessage(MessageType.All);
            }
            catch (Exception exception)
            {
                ClientLogger.WriteException(exception);
                return false;
            }
        }

        private void CurrentUser_StatusChanged(object sender, UserSatusChangedEventArgs e)
        {
            if (e.NewStatus != UserAccountStatus.Logon)
            {
                lock (locker)
                {
                    if (this._msgForm != null)
                    {
                        this._msgForm.Close();
                        this._msgForm.Dispose();
                        this._msgForm = null;
                    }
                }
            }
        }

        public void DeleteMessageHistory(params string[] contactUris)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(this.InnerDeleteMessageHistory), contactUris);
        }

        private void InnerDeleteMessageHistory(object contactUris)
        {
            if (contactUris is string[])
            {
                this.AsyncDeleteMessageHistory((string[]) contactUris);
            }
            else
            {
                this.AsyncDeleteMessageHistory(new string[0]);
            }
        }

        public IList<TMessage> LoadRecentMessages<TMessage>(Imps.Client.Core.Contact contact, int count) where TMessage: IMessage
        {
            return this.CurrentUser.HistoryManager.LoadRecentMessages<TMessage>(contact.Uri.Raw, count);
        }

        public bool SaveMessage(IMessage msg)
        {
            return this.CurrentUser.HistoryManager.SaveMessage(msg);
        }

        public void ShowMessageHistory(IWin32Window owner)
        {
            this.ShowMessageHistory(owner, string.Empty);
        }

        public void ShowMessageHistory(IWin32Window owner, string contactUri)
        {
            UiErrorHelper.HandEventSafely(this._framework, delegate {
                FormClosedEventHandler handler = null;
                lock (locker)
                {
                    if ((this._msgForm == null) || this._msgForm.IsDisposed)
                    {
                        this._msgForm = new MessageHistoryFrom(this._framework);
                        if (handler == null)
                        {
                            handler = new FormClosedEventHandler(this, (IntPtr) this.<ShowMessageHistory>b__1);
                        }
                        this._msgForm.add_FormClosed(handler);
                        this._msgForm.Show();
                    }
                    else
                    {
                        this._msgForm.Activate();
                        Imps.Client.Utils.Win32.NativeMethods.ShowWindow(this._msgForm.Handle, 9);
                    }
                }
                this._msgForm.ShowMessage(contactUri);
            });
        }

        private Imps.Client.Core.User CurrentUser
        {
            get
            {
                return this._framework.AccountManager.CurrentUser;
            }
        }
    }
}

⌨️ 快捷键说明

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