CheckPasswordDialogViewModel.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using ComPDFKit.PDFDocument;
  2. using Microsoft.Office.Interop.Word;
  3. using PDF_Master.Helper;
  4. using PDF_Master.Model;
  5. using PDF_Master.Model.Dialog.ToolsDialogs.SaftyDialogs;
  6. using Prism.Commands;
  7. using Prism.Mvvm;
  8. using Prism.Services.Dialogs;
  9. using System;
  10. using System.Collections.Generic;
  11. using static PDF_Master.Model.Dialog.ToolsDialogs.SaftyDialogs.DeleteSafetySettintgsModel;
  12. using Visibility = System.Windows.Visibility;
  13. namespace PDF_Master.ViewModels.Dialog.ToolsDialogs.SaftyDialogs
  14. {
  15. public class CheckPasswordDialogViewModel : BindableBase, IDialogAware
  16. {
  17. #region 参数和属性
  18. private CPDFDocument document;
  19. private CPDFDocument tempDocument;
  20. #endregion
  21. private EnumPasswordKind passwordKind = EnumPasswordKind.StatusOpenPassword;
  22. private string _password = "";
  23. public string Password
  24. {
  25. get { return _password; }
  26. set
  27. {
  28. SetProperty(ref _password, value);
  29. IsRightValue = "unknow";
  30. if (!string.IsNullOrEmpty(value)){
  31. ClearPasswordButtonVisibility = Visibility.Visible;
  32. }
  33. else
  34. {
  35. ClearPasswordButtonVisibility = Visibility.Hidden;
  36. }
  37. }
  38. }
  39. private string _inputPasswordMsg;
  40. public string InputPasswordMsg
  41. {
  42. get { return _inputPasswordMsg; }
  43. set { SetProperty(ref _inputPasswordMsg, value); }
  44. }
  45. private string _checkPasswordMsg;
  46. public string CheckPasswordMsg
  47. {
  48. get { return _checkPasswordMsg; }
  49. set { SetProperty(ref _checkPasswordMsg, value); }
  50. }
  51. private string _errorPasswordMsg;
  52. public string ErrorPasswordMsg
  53. {
  54. get { return _errorPasswordMsg; }
  55. set { SetProperty(ref _errorPasswordMsg, value); }
  56. }
  57. private string _isRightValue = "unknown";
  58. public string IsRightValue
  59. {
  60. get { return _isRightValue; }
  61. set {
  62. SetProperty(ref _isRightValue, value);
  63. if(value == "false")
  64. {
  65. ErrorPasswordMsgVisibility = Visibility.Visible;
  66. }
  67. else
  68. {
  69. ErrorPasswordMsgVisibility = Visibility.Hidden;
  70. }
  71. }
  72. }
  73. private Visibility _clearPasswordButtonVisibility = Visibility.Hidden;
  74. public Visibility ClearPasswordButtonVisibility
  75. {
  76. get { return _clearPasswordButtonVisibility; }
  77. set { SetProperty(ref _clearPasswordButtonVisibility, value); }
  78. }
  79. private Visibility _errorPasswordMsgVisibility = Visibility.Hidden;
  80. public Visibility ErrorPasswordMsgVisibility
  81. {
  82. get { return _errorPasswordMsgVisibility; }
  83. set { SetProperty(ref _errorPasswordMsgVisibility, value); }
  84. }
  85. #region 委托声明
  86. public DelegateCommand ConfirmCommand { get; set; }
  87. public DelegateCommand CancelCommand { get; set; }
  88. public DelegateCommand ClearPasswordCommand { get; set; }
  89. #endregion
  90. public CheckPasswordDialogViewModel()
  91. {
  92. ConfirmCommand = new DelegateCommand(Confirm);
  93. CancelCommand = new DelegateCommand(Cancel);
  94. ClearPasswordCommand = new DelegateCommand(ClearPassword);
  95. }
  96. #region 逻辑函数
  97. private void Confirm()
  98. {
  99. if (passwordKind == EnumPasswordKind.StatusOpenPassword)//TODO: 用于检测输入密码的权限,以及是否输入了正确的密码
  100. {
  101. if (tempDocument.UnlockWithPassword(Password))
  102. {
  103. var dialogResult = new DialogResult(ButtonResult.OK);
  104. dialogResult.Parameters.Add(ParameterNames.Password, Password);
  105. dialogResult.Parameters.Add(ParameterNames.PasswordResult, true);
  106. RequestClose.Invoke(dialogResult);
  107. }
  108. else
  109. {
  110. IsRightValue = "false";
  111. }
  112. }
  113. else
  114. {
  115. if (tempDocument.CheckOwnerPassword(Password))
  116. {
  117. var dialogResult = new DialogResult(ButtonResult.OK);
  118. dialogResult.Parameters.Add(ParameterNames.Password, Password);
  119. dialogResult.Parameters.Add(ParameterNames.PasswordResult, true);
  120. RequestClose.Invoke(dialogResult);
  121. }
  122. else
  123. {
  124. IsRightValue = "false";
  125. }
  126. }
  127. }
  128. private void Cancel()
  129. {
  130. var dialogResult = new DialogResult(ButtonResult.Cancel);
  131. dialogResult.Parameters.Add(ParameterNames.Password, null);
  132. dialogResult.Parameters.Add(ParameterNames.PasswordResult, false);
  133. RequestClose.Invoke(dialogResult);
  134. }
  135. private void ClearPassword()
  136. {
  137. Password= "";
  138. }
  139. #endregion
  140. #region 框架相关
  141. public string Title => "";
  142. public event Action<IDialogResult> RequestClose;
  143. public bool CanCloseDialog()
  144. {
  145. return true;
  146. }
  147. public void OnDialogClosed()
  148. {
  149. if (tempDocument != null)
  150. {
  151. tempDocument.Release();
  152. }
  153. }
  154. public void OnDialogOpened(IDialogParameters parameters)
  155. {
  156. CPDFDocument doc = null;
  157. parameters.TryGetValue<CPDFDocument>(ParameterNames.PDFDocument, out doc);
  158. parameters.TryGetValue<EnumPasswordKind>(ParameterNames.PasswordKind, out passwordKind);
  159. if (doc != null)
  160. {
  161. document = doc;
  162. tempDocument = CPDFDocument.InitWithFilePath(document.FilePath);
  163. InputPasswordMsg = "\"" + document.FileName + ".pdf\"" + " is protected, please enter a Document Open Password.";
  164. CheckPasswordMsg = "Password";
  165. ErrorPasswordMsg = "Tips Text";
  166. }
  167. }
  168. #endregion
  169. }
  170. }