private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
if ((worker.CancellationPending == true))
{
e.Cancel = true;
}
else
{
#if (!DEBUG)
if (!getUUID())
{
updateUITextLine(info_display, "获取uuid失败", Environment.NewLine, Color.Red);
return;
}
showQRImage();
while (waitForLogin() != "200") ;
if (!login())
{
updateUITextLine(info_display, "登录失败", Environment.NewLine, Color.Red);
return;
}
if (!webwxinit())
{
updateUITextLine(info_display, "初始化失败", Environment.NewLine, Color.Red);
return;
}
#endif
#if (DEBUG)
start_btn.Invoke(new Action(() =>
{
this.Controls.Remove(start_btn);
start_btn.Dispose();
}));
qrcode_img.Invoke(new Action(() =>
{
this.Controls.Remove(qrcode_img);
qrcode_img.Dispose();
}));
info_display.Invoke(new Action(() =>
{
info_display.Location = new System.Drawing.Point(0, 0);
info_display.Size = new Size(333, 438);
}));
#endif
var member_list = webwxgetcontact();
if(member_list.Count == 0)
{
updateUITextLine(info_display, "好友列表为空", Environment.NewLine, Color.Red);
return;
}
Console.WriteLine("member_list: ");
foreach(var member in member_list)
{
Console.WriteLine(member["UserName"]);
}
var member_count = member_list.Count;
updateUITextLine(info_display, String.Format("通讯录共{0}位好友", member_count), Environment.NewLine, Color.Black);
var room_name = "";
List<string> result = new List<string>();
List<string> rst_blk = new List<string>();
var d = new Dictionary<string, dynamic>();
member_list.ForEach(member =>
{
d[member["UserName"]] = Tuple.Create<string, string>((member["NickName"]),
(member["RemarkName"]));
});
updateUITextLine(info_display, "开始查找...", Environment.NewLine, Color.Black);
var group_num = (int)Math.Ceiling(member_count / (float) MAX_GROUP_NUM);
Console.WriteLine("***************** group number: " + group_num);
for (int i = 0; i < group_num; i++)
{
var usernames = new List<string>();
for (int j = 0; j < MAX_GROUP_NUM; j++)
{
if (i * MAX_GROUP_NUM + j >= member_count)
{
break;
}
var member = member_list[i * MAX_GROUP_NUM + j];
usernames.Add(member["UserName"]);
}
List<string> deleted_list;
List<string> blocked_list;
if (String.IsNullOrEmpty(room_name))
{
var tuple = createChatRoom(usernames);
room_name = tuple.Item1;
if (String.IsNullOrEmpty(room_name))
{
if (tuple.Item4.Equals("Too many attempts. Try again later."))
{
updateUITextLine(info_display, "操作过于频繁,请稍后再试", Environment.NewLine, Color.Red);
return;
} else
{
Console.WriteLine("***** no chatroom created");
}
}
deleted_list = tuple.Item2;
blocked_list = tuple.Item3;
}
else
{
var tuple = addMember(room_name, usernames);
deleted_list = tuple.Item1;
blocked_list = tuple.Item2;
var err_msg = tuple.Item3;
if (err_msg.Equals("Too many attempts. Try again later."))
{
updateUITextLine(info_display, "操作过于频繁,请稍后再试", Environment.NewLine, Color.Red);
return;
}
}
if (deleted_list.Count > 0)
{
result.AddRange(deleted_list);
}
if (blocked_list.Count > 0)
{
rst_blk.AddRange(blocked_list);
}
if (string.IsNullOrEmpty(room_name))
{
// TO_DO: if failed to create the chatroom
}
if(!String.IsNullOrEmpty(room_name) && !deleteMember(room_name, usernames))
{
updateUITextLine(info_display, "操作过于频繁,请稍后再试", Environment.NewLine, Color.Red);
return;
}
result_update(deleted_list, d, "删除");
result_update(blocked_list, d, "拉黑");
if (i != group_num - 1)
{
updateUITextLine(info_display, "", Environment.NewLine, Color.Black);
updateUITextLine(info_display, "30秒后继续查找,请耐心等待...", Environment.NewLine, Color.Black);
System.Threading.Thread.Sleep(30000); // 30s interval
}
}
updateUITextLine(info_display, Environment.NewLine + "结果汇总完毕,30s后可重试...", Environment.NewLine, Color.Black);
conclude(result, "以下联系人已将你删除", d);
conclude(rst_blk, "以下联系人已将你拉黑", d);
}
}