Exemple #1
0
        void Run()
        {
            var saveBase = textBox1.Text;        //读取文本框中的保存地址

            Directory.CreateDirectory(saveBase); //创建这个文件夹 该函数为创建多级文件夹
            AddLog("分析文件夹结构");
            //((IPhoneBackup)comboBox1.SelectedItem).path  找到苹果备份的文件夹的绝对路径

            wechat = new WeChatInterface(((IPhoneBackup)comboBox1.SelectedItem).path, files92);
            wechat.BuildFilesDictionary();
            AddLog("查找UID");
            var UIDs = wechat.FindUIDs();

            AddLog("找到" + UIDs.Count + "个账号的消息记录");
            var uidList = new List <DisplayItem>();

            foreach (var uid in UIDs)
            {
                var userBase = Path.Combine("Documents", uid);
                AddLog("开始处理UID: " + uid);
                AddLog("读取账号信息");
                if (wechat.GetUserBasics(uid, userBase, out Friend myself))
                {
                    AddLog("微信号:" + myself.ID() + " 昵称:" + myself.DisplayName());
                }
                else
                {
                    AddLog("没有找到本人信息,用默认值替代");
                }
                var userSaveBase = Path.Combine(saveBase, myself.ID());
                Directory.CreateDirectory(userSaveBase);
                AddLog("正在打开数据库");
                if (!wechat.OpenMMSqlite(userBase, out SQLiteConnection conn))//conn
                {
                    AddLog("打开MM.sqlite失败,跳过");
                    continue;
                }
                if (wechat.OpenWCDBContact(userBase, out SQLiteConnection wcdb))//wcdb
                {
                    AddLog("存在WCDB,与旧版好友列表合并使用");
                }
                AddLog("读取好友列表");
                if (!wechat.GetFriendsDict(conn, wcdb, myself, out Dictionary <string, Friend> friends, out int friendcount))
                {
                    AddLog("读取好友列表失败,跳过");
                    continue;
                }
                AddLog("找到" + friendcount + "个好友/聊天室");
                AddLog("查找对话");
                wechat.GetChatSessions(conn, out List <string> chats);
                AddLog("找到" + chats.Count + "个对话");
                var emojidown = new HashSet <DownloadTask>();
                var chatList  = new List <DisplayItem>();
                foreach (var chat in chats)
                {
                    var    hash = chat;
                    string displayname = chat, id = displayname;
                    Friend friend = null;
                    if (friends.ContainsKey(hash))
                    {
                        friend      = friends[hash];
                        displayname = friend.DisplayName();
                        AddLog("处理与" + displayname + "的对话");
                        id = friend.ID();
                    }
                    else
                    {
                        AddLog("未找到好友信息,用默认名字代替");
                    }
                    if (radioButton4.Checked)
                    {
                        if (wechat.SaveTextRecord(conn, Path.Combine(userSaveBase, id + ".txt"), displayname, id, myself, chat, friend, friends, out int count))
                        {
                            AddLog("成功处理" + count + "条");
                        }
                        else
                        {
                            AddLog("失败");
                        }
                    }
                    else if (radioButton3.Checked)
                    {
                        if (wechat.SaveHtmlRecord(conn, userBase, userSaveBase, displayname, id, myself, chat, friend, friends, out int count, out HashSet <DownloadTask> _emojidown))
                        {
                            AddLog("成功处理" + count + "条");
                            chatList.Add(new DisplayItem()
                            {
                                pic = "Portrait/" + (friend != null ? friend.FindPortrait() : "*****@*****.**"), text = displayname, link = id + ".html"
                            });
                        }
                        else
                        {
                            AddLog("失败");
                        }
                        emojidown.UnionWith(_emojidown);
                    }
                }
                conn.Close();
                if (radioButton3.Checked)
                {
                    wechat.MakeListHTML(chatList, Path.Combine(userSaveBase, "聊天记录.html"));
                }
                var portraitdir = Path.Combine(userSaveBase, "Portrait");
                Directory.CreateDirectory(portraitdir);
                var downlist = new HashSet <DownloadTask>();
                foreach (var item in friends)
                {
                    var tfriend = item.Value;
                    if (!tfriend.PortraitRequired)
                    {
                        continue;
                    }
                    if (tfriend.Portrait != null && tfriend.Portrait != "")
                    {
                        downlist.Add(new DownloadTask()
                        {
                            url = tfriend.Portrait, filename = tfriend.ID() + ".jpg"
                        });
                    }
                    //if (tfriend.PortraitHD != null && tfriend.PortraitHD != "") downlist.Add(new DownloadTask() { url = tfriend.PortraitHD, filename = tfriend.ID() + "_hd.jpg" });
                }
                var downloader = new Downloader(6);
                if (downlist.Count > 0)
                {
                    AddLog("下载" + downlist.Count + "个头像");
                    foreach (var item in downlist)
                    {
                        downloader.AddTask(item.url, Path.Combine(portraitdir, item.filename));
                    }
                    try
                    {
                        File.Copy("res\\[email protected]", Path.Combine(portraitdir, "*****@*****.**"));
                    }
                    catch (Exception) { }
                }
                var emojidir = Path.Combine(userSaveBase, "Emoji");
                Directory.CreateDirectory(emojidir);
                if (emojidown != null && emojidown.Count > 0)
                {
                    AddLog("下载" + emojidown.Count + "个表情");
                    foreach (var item in emojidown)
                    {
                        downloader.AddTask(item.url, Path.Combine(emojidir, item.filename));
                    }
                }
                uidList.Add(new DisplayItem()
                {
                    pic = myself.ID() + "/Portrait/" + myself.FindPortrait(), text = myself.DisplayName(), link = myself.ID() + "/聊天记录.html"
                });
                downloader.StartDownload();
                downloader.WaitToEnd();
                AddLog("完成当前账号");
            }
Exemple #2
0
        void run()
        {
            var saveBase = textBox1.Text;

            Directory.CreateDirectory(saveBase);
            AddLog("分析文件夹结构");
            wechat = new WeChatInterface(currentBackup, files92);
            wechat.BuildFilesDictionary(weixinapp);
            AddLog("查找UID");
            var UIDs = wechat.FindUIDs();

            AddLog("找到" + UIDs.Count + "个账号的消息记录");
            foreach (var uid in UIDs)
            {
                var userBase = Path.Combine("Documents", uid);
                AddLog("开始处理UID: " + uid);
                AddLog("读取账号信息");
                Friend myself;
                if (wechat.GetUserBasics(uid, userBase, out myself))
                {
                    AddLog("微信号:" + myself.ID() + " 昵称:" + myself.DisplayName());
                }
                else
                {
                    AddLog("没有找到本人信息,用默认值替代");
                }
                var userSaveBase = Path.Combine(saveBase, myself.ID());
                Directory.CreateDirectory(userSaveBase);
                AddLog("正在打开数据库");
                SQLiteConnection conn, wcdb;
                if (!wechat.OpenMMSqlite(userBase, out conn))
                {
                    AddLog("打开MM.sqlite失败,跳过");
                    continue;
                }
                if (wechat.OpenWCDBContact(userBase, out wcdb))
                {
                    AddLog("存在WCDB,与旧版好友列表合并使用");
                }
                AddLog("读取好友列表");
                Dictionary <string, Friend> friends;
                int friendcount;
                if (!wechat.GetFriendsDict(conn, wcdb, myself, out friends, out friendcount))
                {
                    AddLog("读取好友列表失败,跳过");
                    continue;
                }
                AddLog("找到" + friendcount + "个好友/聊天室");
                AddLog("查找对话");
                List <string> chats;
                wechat.GetChatSessions(conn, out chats);
                AddLog("找到" + chats.Count + "个对话");
                var emojidown = new HashSet <DownloadTask>();
                foreach (var chat in chats)
                {
                    var    hash = chat;
                    string displayname = chat, id = displayname;
                    Friend friend = null;
                    if (friends.ContainsKey(hash))
                    {
                        friend      = friends[hash];
                        displayname = friend.DisplayName();
                        AddLog("处理与" + displayname + "的对话");
                        id = friend.ID();
                    }
                    else
                    {
                        AddLog("未找到好友信息,用默认名字代替");
                    }
                    if (radioButton4.Checked)
                    {
                        int count;
                        if (wechat.SaveTextRecord(conn, Path.Combine(userSaveBase, id + ".txt"), displayname, id, myself, chat, friend, friends, out count))
                        {
                            AddLog("成功处理" + count + "条");
                        }
                        else
                        {
                            AddLog("失败");
                        }
                    }
                    else if (radioButton3.Checked)
                    {
                        int count;
                        HashSet <DownloadTask> _emojidown;
                        if (wechat.SaveHtmlRecord(conn, userBase, userSaveBase, displayname, id, myself, chat, friend, friends, out count, out _emojidown))
                        {
                            AddLog("成功处理" + count + "条");
                        }
                        else
                        {
                            AddLog("失败");
                        }
                        emojidown.UnionWith(_emojidown);
                    }
                }

                var portraitdir = Path.Combine(userSaveBase, "Portrait");
                Directory.CreateDirectory(portraitdir);
                var downlist = new HashSet <DownloadTask>();
                foreach (var item in friends)
                {
                    var tfriend = item.Value;
                    if (!tfriend.PortraitRequired)
                    {
                        continue;
                    }
                    if (tfriend.Portrait != null && tfriend.Portrait != "")
                    {
                        downlist.Add(new DownloadTask()
                        {
                            url = tfriend.Portrait, filename = tfriend.ID() + ".jpg"
                        });
                    }
                    //if (tfriend.PortraitHD != null && tfriend.PortraitHD != "") downlist.Add(new DownloadTask() { url = tfriend.PortraitHD, filename = tfriend.ID() + "_hd.jpg" });
                }
                var downloader = new Downloader(6);
                if (downlist.Count > 0)
                {
                    AddLog("下载" + downlist.Count + "个头像");
                    foreach (var item in downlist)
                    {
                        downloader.AddTask(item.url, Path.Combine(portraitdir, item.filename));
                    }
                    try
                    {
                        File.Copy("*****@*****.**", Path.Combine(portraitdir, "*****@*****.**"));
                    }
                    catch (Exception) { }
                }
                var emojidir = Path.Combine(userSaveBase, "Emoji");
                Directory.CreateDirectory(emojidir);
                if (emojidown != null && emojidown.Count > 0)
                {
                    AddLog("下载" + emojidown.Count + "个表情");
                    foreach (var item in emojidown)
                    {
                        downloader.AddTask(item.url, Path.Combine(emojidir, item.filename));
                    }
                }
                downloader.StartDownload();
                downloader.WaitToEnd();
                AddLog("完成当前账号");
            }
            AddLog("任务结束");
            groupBox1.Enabled = groupBox3.Enabled = groupBox4.Enabled = true;
            button2.Enabled   = true;
            wechat            = null;
            MessageBox.Show("处理完成");
        }