using ComPDFKit.PDFDocument;
using PDF_Office.Model;
using PDF_Office.Model.Dialog.ToolsDialogs.SaftyDialogs;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.Windows.Forms;
namespace PDF_Office.ViewModels.Dialog.ToolsDialogs.SaftyDialogs
{
public class DeleteSafetySettingsDialogViewModel : BindableBase, IDialogAware
{
#region 参数和属性
DeleteSafetySettintgsModel deleteSafetySettintgsModel;
public IDialogService dialogs;
private CPDFDocument document;
#endregion
#region 委托声明
public DelegateCommand DelegateCheckPasswordCommand { get; set; }
public DelegateCommand DelegateCancelCommand { get; set; }
#endregion
public DeleteSafetySettingsDialogViewModel(IDialogService dialogService)
{
dialogs = dialogService;
DelegateCheckPasswordCommand = new DelegateCommand(OpenCheckPasswordDialog);
DelegateCancelCommand = new DelegateCommand(Cancel);
}
#region 检查函数
private bool CheckHaveAllPermissions()
{
CPDFPermissionsInfo permissionsInfo = document.GetPermissionsInfo();
if (permissionsInfo.AllowsDocumentChanges &&
permissionsInfo.AllowsPrinting &&
permissionsInfo.AllowsHighQualityPrinting &&
permissionsInfo.AllowsCopying &&
//permissionsInfo.AllowsDocumentAssembly&&
//TODO: 这个权限有问题
permissionsInfo.AllowsCommenting)
{
return true;
}
else
{
return false;
}
}
///
/// 检测是否需要输入密码
///
///
/// EnumNeedPassword.StatusVerifyPassword:需要确认密码;
/// EnumNeedPassword.StatusDirectDescrypt:直接执行操作
/// EnumNeedPassword.StatusCannotDecrypt:无可执行操作。
///
private DeleteSafetySettintgsModel.EnumNeedPassword CheckNeedPassword()
{
if (document.IsLocked)
{
return DeleteSafetySettintgsModel.EnumNeedPassword.StatusVerifyPassword;
}
else { }
if (document.IsEncrypted)
{
if (CheckHaveAllPermissions())
{
return DeleteSafetySettintgsModel.EnumNeedPassword.StatusDirectDescrypt;
}
else
{
return DeleteSafetySettintgsModel.EnumNeedPassword.StatusVerifyPassword;
}
}
else
{
return DeleteSafetySettintgsModel.EnumNeedPassword.StatusCannotDecrypt;
}
}
#endregion
#region 逻辑函数
private void OpenCheckPasswordDialog()
{
FolderBrowserDialog folderDialog = new FolderBrowserDialog();
System.Windows.Forms.SaveFileDialog sfd = new System.Windows.Forms.SaveFileDialog();
/*
*设置这个对话框的起始保存路径
*/
sfd.InitialDirectory = document.FilePath;
/*
*设置保存的文件的类型,注意过滤器的语法 例子:“文件类型|*.后缀名;*.后缀名;”
*/
sfd.Filter = "PDF|*.pdf;";
/*
*调用ShowDialog()方法显示该对话框,该方法的返回值代表用户是否点击了确定按钮
**/
sfd.FileName = document.FileName + "_CompressFile.pdf";
/*
* 做一些工作
*/
if (CheckNeedPassword() == DeleteSafetySettintgsModel.EnumNeedPassword.StatusVerifyPassword)
{
bool IfDiscryptied = false;
DialogParameters value = new DialogParameters();
RequestClose?.Invoke(new Prism.Services.Dialogs.DialogResult(ButtonResult.OK));
dialogs.ShowDialog(DialogNames.CheckPasswordDialog, value, e => { IfDiscryptied = e.Parameters.GetValue("CheckPassword"); });
if (IfDiscryptied)
{
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
document.Descrypt(sfd.FileName);
MessageBox.Show("保存成功");
RequestClose?.Invoke(new Prism.Services.Dialogs.DialogResult(ButtonResult.OK));
}
else
{
MessageBox.Show("取消保存");
}
}
else if (CheckNeedPassword() == DeleteSafetySettintgsModel.EnumNeedPassword.StatusDirectDescrypt)
{
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
document.Descrypt(sfd.FileName);
MessageBox.Show("Ok");
RequestClose?.Invoke(new Prism.Services.Dialogs.DialogResult(ButtonResult.OK));
}
else
{
MessageBox.Show("取消保存");
}
}
else if (CheckNeedPassword() == DeleteSafetySettintgsModel.EnumNeedPassword.StatusCannotDecrypt)
{
MessageBox.Show("无可用安全性设置");
}
else
{ }
RequestClose?.Invoke(new Prism.Services.Dialogs.DialogResult(ButtonResult.Cancel));
}
}
private void Cancel()
{
RequestClose?.Invoke(new Prism.Services.Dialogs.DialogResult(ButtonResult.Cancel));
}
#endregion
#region 框架相关
public string Title => "";
public event Action RequestClose;
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
}
public void OnDialogOpened(IDialogParameters parameters)
{
CPDFDocument doc = null;
parameters.TryGetValue(ParameterNames.PDFDocument, out doc);
if (doc != null)
{
document = doc;
}
}
#endregion
}
}