DocumentaryTranslationDialogViewModel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  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. private string T_title;
  25. public string T_Title
  26. {
  27. get { return T_title; }
  28. set
  29. {
  30. SetProperty(ref T_title, value);
  31. }
  32. }
  33. private string T_limitTip;
  34. public string T_LimitTip
  35. {
  36. get { return T_limitTip; }
  37. set
  38. {
  39. SetProperty(ref T_limitTip, value);
  40. }
  41. }
  42. private string T_supportedLimitTip;
  43. public string T_SupportedLimitTip
  44. {
  45. get { return T_supportedLimitTip; }
  46. set
  47. {
  48. SetProperty(ref T_supportedLimitTip, value);
  49. }
  50. }
  51. private string T_translationLanguage;
  52. public string T_TranslationLanguage
  53. {
  54. get { return T_translationLanguage; }
  55. set
  56. {
  57. SetProperty(ref T_translationLanguage, value);
  58. }
  59. }
  60. private string T_translationBtn;
  61. public string T_TranslationBtn
  62. {
  63. get { return T_translationBtn; }
  64. set
  65. {
  66. SetProperty(ref T_translationBtn, value);
  67. }
  68. }
  69. private string T_no;
  70. public string T_No
  71. {
  72. get { return T_no; }
  73. set
  74. {
  75. SetProperty(ref T_no, value);
  76. }
  77. }
  78. private void InitString()
  79. {
  80. T_Title = App.HomePageLoader.GetString("ViewRightMenuText_AITranslationTitle");
  81. T_SupportedLimitTip = App.HomePageLoader.GetString("AITranslation_NotSupportedTip");
  82. T_LimitTip = App.HomePageLoader.GetString("AITranslation_LimitTip");
  83. T_TranslationLanguage = App.HomePageLoader.GetString("AITranslationBtn_TranslationLanguage");
  84. T_TranslationBtn = App.HomePageLoader.GetString("ViewRightMenuText_AITranslationBtn");
  85. T_No = App.MainPageLoader.GetString("Convert_No");
  86. }
  87. #endregion
  88. #region 参数和属性
  89. public string Title => "";
  90. public IRegionManager regionManager;
  91. public CPDFViewer PDFViewer;
  92. public ViewContentViewModel viewContentViewModel;
  93. private CPDFViewer pdfViewer = null;
  94. private string fromlanguage = "";
  95. private string tolanguage = "";
  96. private int fromlanguageIndex = 0;
  97. public int FromlanguageIndex
  98. {
  99. get { return fromlanguageIndex; }
  100. set
  101. {
  102. SetProperty(ref fromlanguageIndex, value);
  103. fromlanguage = ChatGTPAIHelper.UpdateLanguagebType(value);
  104. }
  105. }
  106. private int tolanguageIndex = 0;
  107. public int TolanguageIndex
  108. {
  109. get { return tolanguageIndex; }
  110. set
  111. {
  112. SetProperty(ref tolanguageIndex, value);
  113. tolanguage = ChatGTPAIHelper.UpdateLanguagebType(value + 1);
  114. }
  115. }
  116. /// <summary>
  117. /// 进度条显示
  118. /// </summary>
  119. private Visibility progressVisible = Visibility.Collapsed;
  120. public Visibility ProgressVisible
  121. {
  122. get
  123. {
  124. return progressVisible;
  125. }
  126. set
  127. {
  128. SetProperty(ref progressVisible, value);
  129. }
  130. }
  131. private double processvalue = 0;
  132. /// <summary>
  133. /// 进度条当前值
  134. /// </summary>
  135. public double Value
  136. {
  137. get { return processvalue; }
  138. set
  139. {
  140. SetProperty(ref processvalue, value);
  141. }
  142. }
  143. private double maxValue = 10;
  144. /// <summary>
  145. /// 进度条最大值
  146. /// </summary>
  147. public double MaxValue
  148. {
  149. get { return maxValue; }
  150. set
  151. {
  152. SetProperty(ref maxValue, value);
  153. }
  154. }
  155. /// <summary>
  156. /// 初始化翻译前语言列表
  157. /// </summary>
  158. public static List<string> FromlanguageFamily { set; get; } = new List<string>();
  159. public string ViewerRegionName { get; set; }
  160. private void GetFromlanguageOrigin()
  161. {
  162. FromlanguageFamily.Clear();
  163. FromlanguageFamily = ChatGTPAIHelper.SetFromlanguageOrigin();
  164. }
  165. /// <summary>
  166. /// 初始化翻译到语言列表
  167. /// </summary>
  168. public List<string> TolanguageFamily { set; get; } = new List<string>();
  169. private void GetTolanguageOrigin()
  170. {
  171. TolanguageFamily.Clear();
  172. TolanguageFamily = ChatGTPAIHelper.SetTolanguageOrigin();
  173. }
  174. public static Action CancelProgress { get; set; }
  175. #endregion
  176. #region 委托声明
  177. public DelegateCommand TranslateCommand { get; set; }
  178. public DelegateCommand CancelCommand { get; set; }
  179. public DelegateCommand CancelProgressCommand { get; set; }
  180. #endregion
  181. public DocumentaryTranslationDialogViewModel(IRegionManager regionManager)
  182. {
  183. this.regionManager = regionManager;
  184. CancelCommand = new DelegateCommand(cancel);
  185. TranslateCommand = new DelegateCommand(translate);
  186. ViewerRegionName = Guid.NewGuid().ToString();
  187. CancelProgressCommand = new DelegateCommand(cancelprogress);
  188. init();
  189. InitString();
  190. }
  191. #region 逻辑函数
  192. /// <summary>
  193. /// 初始化下拉列表,或其他
  194. /// </summary>
  195. private void init()
  196. {
  197. GetFromlanguageOrigin();
  198. GetTolanguageOrigin();
  199. }
  200. /// <summary>
  201. /// 进度条取消
  202. /// </summary>
  203. private void cancelprogress()
  204. {
  205. if (CancelProgress != null)
  206. {
  207. CancelProgress.Invoke();
  208. }
  209. }
  210. /// <summary>
  211. /// 关闭窗口
  212. /// </summary>
  213. private void cancel()
  214. {
  215. RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
  216. }
  217. /// <summary>
  218. /// 翻译当前文档
  219. /// </summary>
  220. public async void translate()
  221. {
  222. //添加付费拦截锁
  223. if (!ServiceHelper.IAPBeforeFunction())
  224. {
  225. return;
  226. }
  227. if (Settings.Default.UserDate.subscribestatus != 1)
  228. {
  229. App.mainWindowViewModel.dialogs.ShowDialog(DialogNames.IAPCompareDialog);
  230. return;
  231. }
  232. ProgressVisible = Visibility.Visible;
  233. Value = 1;
  234. string newfile = "";
  235. FileInfo fileInfo = new FileInfo(pdfViewer.Document.FilePath);
  236. Value = 3;
  237. //判断文件大小
  238. if ((((float)fileInfo.Length) / 1024 / 1024) > 30)
  239. {
  240. Value = 9;
  241. AlertsMessage alertsMessage = new AlertsMessage();
  242. alertsMessage.ShowDialog("", "The uploaded file cannot exceed 10MB", App.ServiceLoader.GetString("Text_ok"));
  243. ProgressVisible = Visibility.Collapsed;
  244. return;
  245. }
  246. //判断文件页数
  247. if (fileInfo.Extension.ToLower() == ".pdf")
  248. {
  249. CPDFDocument cPDFDocument = CPDFDocument.InitWithFilePath(pdfViewer.Document.FilePath);
  250. if (cPDFDocument.PageCount > 30)
  251. {
  252. Value = 9;
  253. AlertsMessage alertsMessage = new AlertsMessage();
  254. alertsMessage.ShowDialog("", "The uploaded file cannot exceed 30Pages", App.ServiceLoader.GetString("Text_ok"));
  255. ProgressVisible = Visibility.Collapsed;
  256. return;
  257. }
  258. }
  259. Value = 4;
  260. await Task.Run(async delegate
  261. {
  262. newfile = await ChatGTPAIHelper.fileTranslate(pdfViewer.Document.FilePath, fromlanguage, tolanguage, false);
  263. });
  264. Value = 8;
  265. if (!string.IsNullOrEmpty(newfile))
  266. {
  267. if (File.Exists(newfile))
  268. {
  269. if (viewContentViewModel != null)
  270. {
  271. viewContentViewModel.OpenFile(new string[] { newfile });
  272. RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
  273. }
  274. }
  275. else
  276. {
  277. //newfile code
  278. if (newfile == "-1")
  279. {
  280. Value = 9;
  281. ProgressVisible = Visibility.Collapsed; return;
  282. }
  283. AlertsMessage alertsMessage = new AlertsMessage();
  284. alertsMessage.ShowDialog("", ChatGTPAIHelper.GetBaiduTranslationCode(newfile), App.ServiceLoader.GetString("Text_ok"));
  285. }
  286. }
  287. Value = 9;
  288. ProgressVisible = Visibility.Collapsed;
  289. }
  290. #endregion
  291. #region 构架行为
  292. public event Action<IDialogResult> RequestClose;
  293. public bool CanCloseDialog()
  294. {
  295. return true;
  296. }
  297. public void OnDialogClosed()
  298. {
  299. }
  300. public void OnDialogOpened(IDialogParameters parameters)
  301. {
  302. parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out pdfViewer);
  303. parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel, out viewContentViewModel);
  304. if (pdfViewer != null)
  305. {
  306. if (!regionManager.Regions[ViewerRegionName].Views.Contains(pdfViewer))
  307. {
  308. //设置PDFview为预览
  309. PDFViewer = new CPDFViewer();
  310. PDFViewer.InitDocument(pdfViewer.Document);
  311. regionManager.AddToRegion(ViewerRegionName, PDFViewer);
  312. PDFViewer.SetAnnotInteraction(!PDFViewer.GetAnnotInteraction());
  313. PDFViewer.Load();
  314. if (PDFViewer.Document.PageCount == 1)
  315. {
  316. //防止单页pdfview闪烁问题
  317. PDFViewer.ChangeViewMode(ViewMode.Single);
  318. }
  319. else
  320. {
  321. PDFViewer.ChangeViewMode(ViewMode.SingleContinuous);
  322. }
  323. PDFViewer.ChangeFitMode(FitMode.FitHeight);
  324. PDFViewer.SetMouseMode(MouseModes.PanTool);
  325. PDFViewer.Document.ReleasePages();
  326. PDFViewer.ReloadDocument();
  327. fromlanguage = ChatGTPAIHelper.UpdateLanguagebType(0);
  328. tolanguage = ChatGTPAIHelper.UpdateLanguagebType(1);
  329. //PageRangeNumber = PDFViewer.Document.PageCount;
  330. //PDFViewer.Zoom(0.1);
  331. }
  332. }
  333. }
  334. #endregion
  335. }
  336. }