Workspace.xaml.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Diagnostics;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows;
  11. using System.Windows.Controls;
  12. using System.Windows.Controls.Primitives;
  13. using System.Windows.Data;
  14. using System.Windows.Documents;
  15. using System.Windows.Input;
  16. using System.Windows.Media;
  17. using System.Windows.Media.Imaging;
  18. using System.Windows.Navigation;
  19. using WechatBakTool.Export;
  20. using WechatBakTool.Helpers;
  21. using WechatBakTool.Model;
  22. using WechatBakTool.ViewModel;
  23. namespace WechatBakTool.Pages
  24. {
  25. /// <summary>
  26. /// Workspace.xaml 的交互逻辑
  27. /// </summary>
  28. public partial class Workspace : Page
  29. {
  30. public WXUserReader? UserReader;
  31. private WorkspaceViewModel ViewModel = new WorkspaceViewModel();
  32. public Workspace()
  33. {
  34. ViewModel.ExportItems = new System.Collections.ObjectModel.ObservableCollection<ExportItem> {
  35. new ExportItem(){ Name="导出为HTML",Value=1 },
  36. new ExportItem(){ Name="导出为TXT",Value=2 },
  37. };
  38. ViewModel.SelectExportItem = ViewModel.ExportItems[0];
  39. InitializeComponent();
  40. list_users.Items.Clear();
  41. DataContext = ViewModel;
  42. UserBakConfig? config = Main2.CurrentUserBakConfig;
  43. if (config != null)
  44. {
  45. UserReader = new WXUserReader(config);
  46. if (config.Decrypt)
  47. {
  48. ViewModel.Contacts = UserReader.GetWXContacts();
  49. }
  50. }
  51. }
  52. private void btn_read_Click(object sender, RoutedEventArgs e)
  53. {
  54. if (Main2.CurrentUserBakConfig == null)
  55. {
  56. MessageBox.Show("工作区配置加载失败,请检查配置文件是否正常","错误");
  57. return;
  58. }
  59. }
  60. private void list_users_SelectionChanged(object sender, SelectionChangedEventArgs e)
  61. {
  62. ViewModel.ExportCount = "";
  63. ViewModel.WXContact = list_users.SelectedItem as WXContact;
  64. if(ViewModel.WXContact == null || UserReader == null)
  65. {
  66. return;
  67. }
  68. List<WXMsg>? msgs = UserReader.GetWXMsgs(ViewModel.WXContact.UserName);
  69. list_msg.ItemsSource = msgs;
  70. }
  71. private void txt_find_user_TextChanged(object sender, TextChangedEventArgs e)
  72. {
  73. if (UserReader == null)
  74. return;
  75. string findName = txt_find_user.Text;
  76. if (txt_find_user.Text == "搜索...")
  77. findName = "";
  78. ViewModel.Contacts = UserReader.GetWXContacts(findName);
  79. }
  80. private void txt_find_user_GotFocus(object sender, RoutedEventArgs e)
  81. {
  82. if (txt_find_user.Text == "搜索...")
  83. txt_find_user.Text = "";
  84. Debug.WriteLine(ViewModel.SearchString);
  85. }
  86. private void btn_export_Click(object sender, RoutedEventArgs e)
  87. {
  88. if(ViewModel.WXContact == null || UserReader == null)
  89. {
  90. MessageBox.Show("请选择联系人", "错误");
  91. return;
  92. }
  93. try
  94. {
  95. string path = Path.Combine(Main2.CurrentUserBakConfig!.UserWorkspacePath, ViewModel.WXContact.UserName + ".txt");
  96. IExport export = new TXTExport();
  97. export.InitTemplate(ViewModel.WXContact, path);
  98. export.SetMsg(UserReader, ViewModel.WXContact, ViewModel);
  99. export.SetEnd();
  100. export.Save(path);
  101. }catch(Exception ex)
  102. {
  103. File.AppendAllText("1.log", ex.Message);
  104. MessageBox.Show(ex.Message);
  105. }
  106. MessageBox.Show("导出完成");
  107. }
  108. private void btn_open_workspace_Click(object sender, RoutedEventArgs e)
  109. {
  110. Process.Start("explorer.exe ", Main2.CurrentUserBakConfig!.UserWorkspacePath);
  111. }
  112. private void Export_Click(object sender, RoutedEventArgs e)
  113. {
  114. Task.Run(() =>
  115. {
  116. if (ViewModel.WXContact == null || UserReader == null)
  117. {
  118. MessageBox.Show("请选择联系人", "错误");
  119. return;
  120. }
  121. if (ViewModel.SelectExportItem == null)
  122. {
  123. MessageBox.Show("请选择导出方式", "错误");
  124. return;
  125. }
  126. string path = Path.Combine(Main2.CurrentUserBakConfig!.UserWorkspacePath, ViewModel.WXContact.UserName);
  127. IExport export;
  128. #if DEBUG
  129. Stopwatch stopwatch = new Stopwatch();
  130. stopwatch.Start();
  131. #endif
  132. if (ViewModel.SelectExportItem.Value == 2)
  133. {
  134. path += ".txt";
  135. export = new TXTExport();
  136. }
  137. else
  138. {
  139. path += ".html";
  140. export = new HtmlExport();
  141. }
  142. export.InitTemplate(ViewModel.WXContact, path);
  143. export.SetMsg(UserReader, ViewModel.WXContact, ViewModel);
  144. export.SetEnd();
  145. export.Save(path);
  146. #if DEBUG
  147. stopwatch.Stop();
  148. MessageBox.Show(stopwatch.Elapsed.ToString());
  149. #endif
  150. MessageBox.Show("导出完成", "提示");
  151. });
  152. }
  153. private void btn_pre_emoji_Click(object sender, RoutedEventArgs e)
  154. {
  155. if(UserReader != null && ViewModel.WXContact != null)
  156. {
  157. Task.Run(() => {
  158. UserReader.PreDownloadEmoji(ViewModel.WXContact.UserName);
  159. MessageBox.Show("用户所有表情预下载完毕");
  160. });
  161. }
  162. }
  163. }
  164. }