using ComPDFKitViewer.AnnotEvent;
using PDFSettings;
using PDFSettings.Settings;
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using System.Dynamic;
using System.Windows;
using System.IO;
using PDF_Office.Properties;
using PDF_Office;
namespace PDF_Office.Helper
{
public class SettingHelper
{
public static void SortRecentOpenFiles(string filePath)
{
if (Settings.Default.RecentOpenFiles == null)
Settings.Default.RecentOpenFiles = new RecentOpenFiles();
OpenFileInfo existFile = null;
foreach (var file in Settings.Default.RecentOpenFiles)
{
if (file.FilePath.ToLower() == filePath.ToLower())
{
if(file.FilePath != filePath)
{
file.FilePath = filePath;
file.FileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);
}
file.LastOpenTime = DateTime.Now;
existFile = file;
break;
}
}
if (existFile != null)
{
if (Settings.Default.RecentOpenFiles.IndexOf(existFile) != 0)
{
Settings.Default.RecentOpenFiles.Remove(existFile);
Settings.Default.RecentOpenFiles.Insert(0, existFile);
}
}
else
{
OpenFileInfo fileInfo = new OpenFileInfo();
fileInfo.FileName = Path.GetFileName(filePath);
fileInfo.FilePath = filePath;
fileInfo.IsGuidPDF = string.Equals(filePath, App.GuidPDFPath);
fileInfo.ThumbImgPath = "";
fileInfo.LastOpenTime = DateTime.Now;
PDF_Office.Properties.Settings.Default.RecentOpenFiles.Insert(0, fileInfo);
}
//限制最近文件列表显示的最大条数
if(Settings.Default.RecentOpenFiles.Count>Settings.Default.AppProperties.Description.FileCountInRecentFiles)
{
Settings.Default.RecentOpenFiles.RemoveRange(Settings.Default.AppProperties.Description.FileCountInRecentFiles, Settings.Default.RecentOpenFiles.Count-Settings.Default.AppProperties.Description.FileCountInRecentFiles);
}
Settings.Default.Save();
}
public static void RemoveRecentOpenFile(string filePath)
{
if (Settings.Default.RecentOpenFiles == null || Settings.Default.RecentOpenFiles.Count == 0)
return;
OpenFileInfo deleteItem = null;
foreach(var item in Settings.Default.RecentOpenFiles)
{
if (item.FilePath.ToLower() == filePath.ToLower())
{
deleteItem = item;
break;
}
}
if(deleteItem!=null)
{
DeleteByPath(deleteItem.ThumbImgPath);
Settings.Default.RecentOpenFiles.Remove(deleteItem);
Settings.Default.Save();
}
}
public static void DeleteByPath(string path)
{
try
{
if (!string.IsNullOrEmpty(path) && System.IO.File.Exists(path))
System.IO.File.Delete(path);
}
catch { }
}
public static void RemoveAllRecentOpenFiles()
{
if (Settings.Default.RecentOpenFiles == null || Settings.Default.RecentOpenFiles.Count == 0)
return;
string folderPath = System.IO.Path.Combine(App.CurrentPath, "CoverImage");
DirectoryInfo directoryInfo = new DirectoryInfo(folderPath);
if (directoryInfo.Exists)
{
var files = directoryInfo.GetFiles();
foreach (var file in files)
{
if (file.Exists)
file.Delete();
}
}
Settings.Default.RecentOpenFiles.Clear();
Settings.Default.Save();
}
public static OpenFileInfo GetFileInfo(string filePath)
{
if (Settings.Default.RecentOpenFiles == null || Settings.Default.RecentOpenFiles.Count == 0)
return null;
foreach(var info in Settings.Default.RecentOpenFiles)
{
if (info.FilePath == filePath)
return info;
}
return null;
}
public static void SetFileInfo(OpenFileInfo openFileInfo)
{
try
{
if (Settings.Default.RecentOpenFiles == null || Settings.Default.RecentOpenFiles.Count == 0 || openFileInfo == null)
return;
for (int i = 0; i < Settings.Default.RecentOpenFiles.Count; i++)
{
if (Settings.Default.RecentOpenFiles[i].FilePath == openFileInfo.FilePath)
{
Settings.Default.RecentOpenFiles[i] = openFileInfo;
Settings.Default.Save();//保存时有可能会文件被占用
return;
}
}
}
catch { }
}
#region 缓存注释属性
public static DefaultAnnotProperty GetAnnotDefaultProperty(AnnotArgsType annotToolType, string saveKey = "")
{
if (Settings.Default.DefautAnnotProperties != null)
{
if (saveKey == "")
{
return Settings.Default.DefautAnnotProperties.GetAnnotProperty(annotToolType);
}
return Settings.Default.DefautAnnotProperties.GetAnnotProperty(annotToolType, saveKey);
}
return null;
}
public static void SetAnnotDefaultProperty(DefaultAnnotProperty annotProperty)
{
if (Settings.Default.DefautAnnotProperties == null)
{
Settings.Default.DefautAnnotProperties = new DefaultAnnotProperties();
}
Settings.Default.DefautAnnotProperties.SetAnnotProperty(annotProperty);
Settings.Default.Save();
}
#endregion 缓存注释属性
#region 缓存颜色列表
public static void SetColorSelector(ColorSelectorItem selectorItem)
{
if (Settings.Default.ColorSelectors == null)
{
Settings.Default.ColorSelectors = new ColorSelectorList();
}
Settings.Default.ColorSelectors.SetColorSelector(selectorItem);
Settings.Default.Save();
}
public static ColorSelectorItem GetColorSelectorItem(ColorSelectorType selectorType,int Index)
{
if (Settings.Default.ColorSelectors != null)
{
return Settings.Default.ColorSelectors.GetColorSelector(selectorType, Index);
}
return null;
}
#endregion 缓存颜色列表
private static string KeyAlaphabet = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
public static char NumberToChar(int num)
{
if (num >= 0 && num <= 35)
{
return KeyAlaphabet[num];
}
throw new ArgumentException("Wrong num value.", "ch");
}
///
/// AES加密
///
/// 加密字符
/// 加密的密码
///
public static string AESEncrypt(string text, string password)
{
RijndaelManaged rijndaelCipher = new RijndaelManaged();
rijndaelCipher.Mode = CipherMode.CBC;
rijndaelCipher.Padding = PaddingMode.PKCS7;
rijndaelCipher.KeySize = 128;
rijndaelCipher.BlockSize = 128;
byte[] pwdBytes = Encoding.UTF8.GetBytes(password);
byte[] keyBytes = new byte[16];
int len = pwdBytes.Length;
if (len > keyBytes.Length) len = keyBytes.Length;
Array.Copy(pwdBytes, keyBytes, len);
rijndaelCipher.Key = keyBytes;
rijndaelCipher.IV = new byte[16];
ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
byte[] plainText = Encoding.UTF8.GetBytes(text);
byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);
return Convert.ToBase64String(cipherBytes);
}
///
/// AES解密
///
///
///
///
public static string AESDecrypt(string text, string password)
{
RijndaelManaged rijndaelCipher = new RijndaelManaged();
rijndaelCipher.Mode = CipherMode.CBC;
rijndaelCipher.Padding = PaddingMode.PKCS7;
rijndaelCipher.KeySize = 128;
rijndaelCipher.BlockSize = 128;
byte[] encryptedData = Convert.FromBase64String(text);
byte[] pwdBytes = Encoding.UTF8.GetBytes(password);
byte[] keyBytes = new byte[16];
int len = pwdBytes.Length;
if (len > keyBytes.Length) len = keyBytes.Length;
Array.Copy(pwdBytes, keyBytes, len);
rijndaelCipher.Key = keyBytes;
rijndaelCipher.IV = new byte[16];
ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
return Encoding.UTF8.GetString(plainText);
}
public static ProductActiveInfo GetProductActiveInfo()
{
//if (Settings.Default.ProductActiveStore != null)
//{
// ProductActiveInfo activeInfo = new ProductActiveInfo();
// ProductActiveStore storeInfo= Settings.Default.ProductActiveStore;
// Random random = new Random((int)storeInfo.UpdateTime.Ticks);
// StringBuilder keyBuilder = new StringBuilder();
// for (int i = 0; i < 16; i++)
// {
// keyBuilder.Append(NumberToChar(random.Next(0, 35)));
// }
// string checkData = AESEncrypt(storeInfo.SignData, keyBuilder.ToString());
// MD5 mD5 = MD5.Create();
// byte[] hashCode = mD5.ComputeHash(Encoding.UTF8.GetBytes(checkData));
// StringBuilder checkBuilder = new StringBuilder();
// foreach (byte code in hashCode)
// {
// checkBuilder.Append(code.ToString("X2"));
// }
// if (checkBuilder.ToString() == storeInfo.CheckSum)
// {
// string decryptData = AESDecrypt(storeInfo.SignData, keyBuilder.ToString());
// activeInfo = JsonConvert.DeserializeObject(decryptData);
// }
// return activeInfo;
//}
return null;
}
public static void SetProductActiveStore(ProductActiveInfo activeInfo)
{
//ProductActiveStore activeStore = new ProductActiveStore();
//activeStore.UpdateTime = DateTime.Now;
//string rawData = JsonConvert.SerializeObject(activeInfo);
//Random random = new Random((int)activeStore.UpdateTime.Ticks);
//StringBuilder keyBuilder = new StringBuilder();
//for (int i = 0; i < 16; i++)
//{
// keyBuilder.Append(NumberToChar(random.Next(0, 35)));
//}
//activeStore.SignData = AESEncrypt(rawData, keyBuilder.ToString());
//string checkData = AESEncrypt(activeStore.SignData, keyBuilder.ToString());
//MD5 mD5 = MD5.Create();
//byte[] hashCode = mD5.ComputeHash(Encoding.UTF8.GetBytes(checkData));
//StringBuilder checkBuilder = new StringBuilder();
//foreach(byte code in hashCode)
//{
// checkBuilder.Append(code.ToString("X2"));
//}
//activeStore.CheckSum = checkBuilder.ToString();
//Settings.Default.ProductActiveStore = activeStore;
//Settings.Default.Save();
}
}
}