DocumentaryTranslationDialogViewModel.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. using ComPDFKitViewer;
  2. using ComPDFKitViewer.PdfViewer;
  3. using Microsoft.Win32;
  4. using PDF_Master.CustomControl;
  5. using PDF_Master.Helper;
  6. using PDF_Master.Model;
  7. using PDF_Master.Properties;
  8. using Prism.Commands;
  9. using Prism.Mvvm;
  10. using Prism.Regions;
  11. using Prism.Services.Dialogs;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.IO;
  15. using System.Linq;
  16. using System.Threading.Tasks;
  17. using System.Windows;
  18. namespace PDF_Master.ViewModels.Dialog.ChatGPTAIDialogs
  19. {
  20. public class DocumentaryTranslationDialogViewModel : BindableBase, IDialogAware
  21. {
  22. #region 参数和属性
  23. public string Title => "";
  24. public IRegionManager regionManager;
  25. public CPDFViewer PDFViewer;
  26. public ViewContentViewModel viewContentViewModel;
  27. private CPDFViewer pdfViewer = null;
  28. private string fromlanguage = "";
  29. private string tolanguage = "";
  30. private int fromlanguageIndex = 0;
  31. public int FromlanguageIndex
  32. {
  33. get { return fromlanguageIndex; }
  34. set
  35. {
  36. SetProperty(ref fromlanguageIndex, value);
  37. fromlanguage = ChatGTPAIHelper.UpdateLanguagebType(value);
  38. }
  39. }
  40. private int tolanguageIndex = 0;
  41. public int TolanguageIndex
  42. {
  43. get { return tolanguageIndex; }
  44. set
  45. {
  46. SetProperty(ref tolanguageIndex, value);
  47. tolanguage = ChatGTPAIHelper.UpdateLanguagebType(value + 1);
  48. }
  49. }
  50. /// <summary>
  51. /// 进度条显示
  52. /// </summary>
  53. private Visibility progressVisible = Visibility.Collapsed;
  54. public Visibility ProgressVisible
  55. {
  56. get
  57. {
  58. return progressVisible;
  59. }
  60. set
  61. {
  62. SetProperty(ref progressVisible, value);
  63. }
  64. }
  65. private double processvalue = 0;
  66. /// <summary>
  67. /// 进度条当前值
  68. /// </summary>
  69. public double Value
  70. {
  71. get { return processvalue; }
  72. set
  73. {
  74. SetProperty(ref processvalue, value);
  75. }
  76. }
  77. private double maxValue = 10;
  78. /// <summary>
  79. /// 进度条最大值
  80. /// </summary>
  81. public double MaxValue
  82. {
  83. get { return maxValue; }
  84. set
  85. {
  86. SetProperty(ref maxValue, value);
  87. }
  88. }
  89. /// <summary>
  90. /// 初始化翻译前语言列表
  91. /// </summary>
  92. public static List<string> FromlanguageFamily { set; get; } = new List<string>();
  93. public string ViewerRegionName { get; set; }
  94. private void GetFromlanguageOrigin()
  95. {
  96. FromlanguageFamily.Clear();
  97. FromlanguageFamily = ChatGTPAIHelper.SetFromlanguageOrigin();
  98. }
  99. /// <summary>
  100. /// 初始化翻译到语言列表
  101. /// </summary>
  102. public List<string> TolanguageFamily { set; get; } = new List<string>();
  103. private void GetTolanguageOrigin()
  104. {
  105. TolanguageFamily.Clear();
  106. TolanguageFamily = ChatGTPAIHelper.SetTolanguageOrigin();
  107. }
  108. #endregion
  109. #region 委托声明
  110. public DelegateCommand TranslateCommand { get; set; }
  111. public DelegateCommand CancelCommand { get; set; }
  112. #endregion
  113. public DocumentaryTranslationDialogViewModel(IRegionManager regionManager)
  114. {
  115. this.regionManager = regionManager;
  116. CancelCommand = new DelegateCommand(cancel);
  117. TranslateCommand = new DelegateCommand(translate);
  118. ViewerRegionName = Guid.NewGuid().ToString();
  119. init();
  120. }
  121. #region 逻辑函数
  122. /// <summary>
  123. /// 初始化下拉列表,或其他
  124. /// </summary>
  125. private void init()
  126. {
  127. GetFromlanguageOrigin();
  128. GetTolanguageOrigin();
  129. }
  130. /// <summary>
  131. /// 关闭窗口
  132. /// </summary>
  133. private void cancel()
  134. {
  135. RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
  136. }
  137. /// <summary>
  138. /// 翻译当前文档
  139. /// </summary>
  140. public async void translate()
  141. {
  142. //添加付费拦截锁
  143. if (!ServiceHelper.IAPBeforeFunction())
  144. {
  145. return;
  146. }
  147. if (Settings.Default.UserDate.subscribestatus != 1)
  148. {
  149. App.mainWindowViewModel.dialogs.ShowDialog(DialogNames.IAPCompareDialog);
  150. return;
  151. }
  152. ProgressVisible = Visibility.Visible;
  153. Value = 1;
  154. string newfile = "";
  155. FileInfo fileInfo = new FileInfo(pdfViewer.Document.FilePath);
  156. Value = 3;
  157. if ((((float)fileInfo.Length) / 1024 / 1024) > 30)
  158. {
  159. Value = 9;
  160. AlertsMessage alertsMessage = new AlertsMessage();
  161. alertsMessage.ShowDialog("", "The uploaded file cannot exceed 10MB", App.ServiceLoader.GetString("Text_ok"));
  162. ProgressVisible = Visibility.Collapsed;
  163. return;
  164. }
  165. Value = 4;
  166. await Task.Run(async delegate
  167. {
  168. newfile = await ChatGTPAIHelper.fileTranslate(pdfViewer.Document.FilePath, fromlanguage, tolanguage, false);
  169. });
  170. Value = 8;
  171. if (!string.IsNullOrEmpty(newfile))
  172. {
  173. if (File.Exists(newfile))
  174. {
  175. if (viewContentViewModel != null)
  176. {
  177. viewContentViewModel.OpenFile(new string[] { newfile });
  178. RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
  179. }
  180. }
  181. else
  182. {
  183. //newfile code
  184. AlertsMessage alertsMessage = new AlertsMessage();
  185. alertsMessage.ShowDialog("", newfile, App.ServiceLoader.GetString("Text_ok"));
  186. }
  187. }
  188. Value = 9;
  189. ProgressVisible = Visibility.Collapsed;
  190. }
  191. #endregion
  192. #region 构架行为
  193. public event Action<IDialogResult> RequestClose;
  194. public bool CanCloseDialog()
  195. {
  196. return true;
  197. }
  198. public void OnDialogClosed()
  199. {
  200. }
  201. public void OnDialogOpened(IDialogParameters parameters)
  202. {
  203. parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out pdfViewer);
  204. parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel, out viewContentViewModel);
  205. if (pdfViewer != null)
  206. {
  207. if (!regionManager.Regions[ViewerRegionName].Views.Contains(pdfViewer))
  208. {
  209. //设置PDFview为预览
  210. PDFViewer = new CPDFViewer();
  211. PDFViewer.InitDocument(pdfViewer.Document);
  212. regionManager.AddToRegion(ViewerRegionName, PDFViewer);
  213. PDFViewer.SetAnnotInteraction(!PDFViewer.GetAnnotInteraction());
  214. PDFViewer.Load();
  215. if (PDFViewer.Document.PageCount == 1)
  216. {
  217. //防止单页pdfview闪烁问题
  218. PDFViewer.ChangeViewMode(ViewMode.Single);
  219. }
  220. else
  221. {
  222. PDFViewer.ChangeViewMode(ViewMode.SingleContinuous);
  223. }
  224. PDFViewer.ChangeFitMode(FitMode.FitHeight);
  225. PDFViewer.SetMouseMode(MouseModes.PanTool);
  226. PDFViewer.Document.ReleasePages();
  227. PDFViewer.ReloadDocument();
  228. fromlanguage = ChatGTPAIHelper.UpdateLanguagebType(0);
  229. tolanguage = ChatGTPAIHelper.UpdateLanguagebType(1);
  230. //PageRangeNumber = PDFViewer.Document.PageCount;
  231. //PDFViewer.Zoom(0.1);
  232. }
  233. }
  234. }
  235. #endregion
  236. }
  237. }