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

📄 exportform.cs

📁 飞信的收发使用csharp进行开发
💻 CS
📖 第 1 页 / 共 2 页
字号:
namespace Imps.Client.Pc
{
    using Imps.Client;
    using Imps.Client.Core;
    using Imps.Client.Pc.BizControls;
    using Imps.Client.Pc.Controls;
    using Imps.Client.Resource;
    using Imps.Client.Utils;
    using Imps.Common;
    using Imps.Utils;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.IO;
    using System.Text;
    using System.Windows.Forms;

    public class ExportForm : XIMDialog
    {
        private IFrameworkWindow _frameworkWin;
        private ImportExportManager _manager;
        private int _maxStep = 4;
        private int _step = 1;
        private XButton btnBrowse;
        private XButton btnCancel;
        private XButton btnNext;
        private XButton btnPrevious;
        private IContainer components;
        private Dictionary<string, string> dicFields;
        private Label label1;
        private XLabel lblDescription;
        private XLabel lblExportProgress;
        private XLabel lblSelectContactFields;
        private XLabel lblSelectControls;
        private XLabel lblSelectPlugin;
        private XLabel lblSelectSavePath;
        private ListView lstContactFields;
        private ListBox lstPlugins;
        private PictureBox pbExportImport;
        private Panel pnlContainer;
        private Panel pnlMain;
        private Panel pnlStep1;
        private Panel pnlStep2;
        private Panel pnlStep3;
        private Panel pnlStep4;
        private ProgressBar progressBarExport;
        private SaveFileDialog saveFileDialog;
        private TreeView treeContacts;
        private TextBox txtFilePath;

        public ExportForm(IFrameworkWindow frameworkWin, ImportExportManager manager)
        {
            this.InitializeComponent();
            this._frameworkWin = frameworkWin;
            this._manager = manager;
            this.initComponentRegion();
            this.lstPlugins.DoubleClick += new EventHandler(this.lstPlugins_DoubleClick);
        }

        private void BindGroupContacts()
        {
            lock (this._frameworkWin.AccountManager.CurrentUser.ContactList.Groups.SyncRoot)
            {
                foreach (Imps.Client.Core.ContactGroup group in this._frameworkWin.AccountManager.CurrentUser.ContactList.Groups)
                {
                    if (group.Name != StringTable.ContactGroup.ChatFriendGroup)
                    {
                        TreeNode node = new TreeNode(group.Name);
                        node.Name = group.Id.ToString();
                        node.Checked = true;
                        node.Tag = group;
                        this.treeContacts.Nodes.Add(node);
                        List<Imps.Client.Core.Contact> listContacts = group.Contacts.ListContacts;
                        listContacts.Sort(new ContactCompare());
                        foreach (Imps.Client.Core.Contact contact in listContacts)
                        {
                            if (!(contact is Imps.Client.Core.ChatFriend))
                            {
                                TreeNode node2 = new TreeNode(contact.DisplayName);
                                node2.Name = contact.Uri.Raw;
                                node2.Checked = true;
                                node2.Tag = contact;
                                node.Nodes.Add(node2);
                            }
                        }
                    }
                }
            }
        }

        private void BindNoneGroupContacts()
        {
            lock (this._frameworkWin.AccountManager.CurrentUser.ContactList.Contacts.SyncRoot)
            {
                foreach (Imps.Client.Core.Contact contact in this._frameworkWin.AccountManager.CurrentUser.ContactList.Contacts)
                {
                    if (contact.BelongToGroups.Count == 0)
                    {
                        TreeNode node = new TreeNode(contact.DisplayName);
                        node.Name = contact.Uri.Raw;
                        node.Checked = true;
                        node.Tag = contact;
                        this.treeContacts.Nodes.Add(node);
                    }
                }
            }
        }

        private void btnBrowse_Click(object sender, EventArgs e)
        {
            UiErrorHelper.HandEventSafely(this._frameworkWin, delegate {
                this.saveFileDialog.Filter = ((this.lstPlugins.SelectedItem as ImportExportManager.ImportExportPlugin).ImportExportObject as IExportContacts).Filter;
                if ((this.txtFilePath.Text != "") && File.Exists(this.txtFilePath.Text))
                {
                    this.saveFileDialog.FileName = this.txtFilePath.Text;
                }
                if (this.saveFileDialog.ShowDialog(this) == DialogResult.OK)
                {
                    this.txtFilePath.Text = this.saveFileDialog.FileName;
                }
            });
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            base.Close();
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            this.DoNext();
        }

        private void btnPrevious_Click(object sender, EventArgs e)
        {
            UiErrorHelper.HandEventSafely(this._frameworkWin, delegate {
                this._step--;
                if (this._step == 3)
                {
                    this._step--;
                }
                this.FormatForm();
            });
        }

        private bool CanExport()
        {
            string text = this.txtFilePath.Text;
            if (text == "")
            {
                return false;
            }
            if (text.IndexOf(@"\") == -1)
            {
                return false;
            }
            if (Directory.Exists(text))
            {
                return false;
            }
            return Directory.Exists(text.Substring(0, text.LastIndexOf(@"\")));
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (this.components != null))
            {
                this.components.Dispose();
            }
            base.Dispose(disposing);
        }

        private void DoNext()
        {
            UiErrorHelper.HandEventSafely(this._frameworkWin, delegate {
                if (this._step != this._maxStep)
                {
                    if ((this._step == 2) && (this.GetSelectedContacts().Count == 0))
                    {
                        this._frameworkWin.UnifiedMessageBox.ShowInfo(this, "至少选择一个联系人!");
                    }
                    else
                    {
                        this._step++;
                        if (this._step == 3)
                        {
                            this._step++;
                        }
                        this.FormatForm();
                    }
                }
                else
                {
                    this.Export();
                }
            });
        }

        private void Export()
        {
            try
            {
                List<Imps.Client.Core.Contact> selectedContacts = this.GetSelectedContacts();
                this.progressBarExport.Maximum = selectedContacts.Count;
                if (this.CanExport())
                {
                    this.progressBarExport.Visible = true;
                    StringBuilder builder = new StringBuilder();
                    builder.Append("<Contacts>\r\n");
                    foreach (Imps.Client.Core.Contact contact in selectedContacts)
                    {
                        builder.Append("<Contact>");
                        if ((contact.Type & ContactType.NonFederation) != ContactType.None)
                        {
                            builder.Append(string.Format("<FetionId>{0}</FetionId>", (contact.Type == ContactType.MobileBuddy) ? string.Empty : contact.Uri.Sid.ToString()));
                            string mobileNo = contact.PersonalInfo.MobileNo;
                            if (string.IsNullOrEmpty(mobileNo))
                            {
                                mobileNo = contact.PersonalInfo.MobileNoUserSet;
                            }
                            builder.Append(string.Format("<MobileNo>{0}</MobileNo>", mobileNo));
                        }
                        builder.Append(string.Format("<Name>{0}</Name>", StringHelper.EncodString((string) contact.PersonalInfo.Name)));
                        builder.Append(string.Format("<Nickname>{0}</Nickname>", StringHelper.EncodString((string) contact.PersonalInfo.Nickname)));
                        builder.Append("</Contact>\r\n");
                        this.progressBarExport.Value++;
                    }
                    builder.Append("</Contacts>");
                    ((this.lstPlugins.SelectedItem as ImportExportManager.ImportExportPlugin).ImportExportObject as IExportContacts).ExportContacts(this, this.txtFilePath.Text, builder.ToString());
                    this.progressBarExport.Value = this.progressBarExport.Maximum;
                    this._frameworkWin.UnifiedMessageBox.ShowInfo(this, "导出完成!");
                    base.Close();
                }
                else
                {
                    this._frameworkWin.UnifiedMessageBox.ShowInfo(this, "不能导出,文件路径错误!");
                }
            }
            catch (IOException)
            {
                this._frameworkWin.UnifiedMessageBox.ShowInfo(this, "导出失败,确认文件是否正在被使用!");
                base.Close();
            }
            catch (Exception exception)
            {
                this._frameworkWin.UnifiedMessageBox.ShowInfo(this, "导出失败!");
                ClientLogger.WriteException(exception);
                base.Close();
            }
        }

        private void ExportForm_Load(object sender, EventArgs e)
        {
            this.pbExportImport.Image = ImpsResources.GetImage("Images.ImportExport.jpg");
        }

        private void FormatForm()
        {
            this.btnPrevious.Visible = this._step != 1;
            if (this._step == this._maxStep)
            {
                this.btnNext.Text = "导出(&E)";
                this.btnNext.Enabled = this.CanExport();
            }
            else
            {
                this.btnNext.Enabled = true;
                this.btnNext.Text = "下一步(&N)";
            }
            for (int i = 1; i <= 4; i++)
            {
                Panel panel = this.pnlContainer.Controls.Find("pnlStep" + i, false)[0] as Panel;
                panel.Visible = this._step == i;
                if (panel.Dock != DockStyle.Fill)
                {
                    panel.Dock = DockStyle.Fill;
                }
            }
        }

        private List<Imps.Client.Core.Contact> GetSelectedContacts()
        {
            List<Imps.Client.Core.Contact> list = new List<Imps.Client.Core.Contact>();
            foreach (TreeNode node in this.treeContacts.Nodes)
            {
                if (node.Tag is Imps.Client.Core.Contact)
                {
                    if (node.Checked)
                    {
                        Imps.Client.Core.Contact tag = node.Tag as Imps.Client.Core.Contact;
                        if (!list.Contains(tag))
                        {
                            list.Add(tag);
                        }
                    }
                }
                else
                {
                    foreach (TreeNode node2 in node.Nodes)
                    {
                        if (node2.Checked)
                        {
                            Imps.Client.Core.Contact item = node2.Tag as Imps.Client.Core.Contact;
                            if (!list.Contains(item))
                            {
                                list.Add(item);
                            }
                        }
                    }
                }
            }
            return list;
        }

        private void InitData()
        {
            this.BindGroupContacts();
            this.BindNoneGroupContacts();
            this.dicFields = new Dictionary<string, string>();
            this.dicFields.Add("Name", "姓名");
            this.dicFields.Add("Nickname", "昵称");

⌨️ 快捷键说明

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