DocumentaryTranslationDialogViewModel.cs 9.5 KB

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