📄 exportform.cs
字号:
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 + -