public bool WriteFile(string name, byte[] data) { using (var context = DatabaseContext.Instance.Make()) { try { var file = context.FILE.Find(name); if (file == null) { context.FILE.Add(new FILE { Name = name, Data = data, HashCode = UserInfoEx.ComputeHash(data) }); } else { file.Data = data; file.HashCode = UserInfoEx.ComputeHash(data); } context.SaveChanges(); } catch (Exception ex) { Logger.Error("AccountEfficiencyCache.WriteFile", ex); return(false); } } return(true); }
private static bool UpdateText(FILE file, string text) { var data = UserInfoEx.GetTextData(text); var hash = UserInfoEx.ComputeHash(data); if (file.HashCode == hash) { return(false); } file.Data = data; file.HashCode = hash; return(true); }
private static FILE CreateText(string text, string fileName = "") { var result = new FILE(); if (string.IsNullOrEmpty(fileName)) { fileName = string.Format("{0}", Guid.NewGuid()) + ".rtf"; } result.Name = fileName; result.Data = UserInfoEx.GetTextData(text); result.HashCode = UserInfoEx.ComputeHash(result.Data); return(result); }
private static bool UpdateBitmap(FILE file, Bitmap bitmap) { var data = UserInfoEx.GetBitmapData(bitmap); var hash = UserInfoEx.ComputeHash(data); if (file.HashCode == hash) { return(false); } file.Data = data; file.HashCode = hash; return(true); }
private static FILE CreateBitmap(Bitmap bitmap, string fileName = "") { var result = new FILE(); if (string.IsNullOrEmpty(fileName)) { fileName = string.Format("{0}", Guid.NewGuid()) + ".png"; } result.Name = fileName; result.Data = UserInfoEx.GetBitmapData(bitmap); result.HashCode = UserInfoEx.ComputeHash(result.Data); return(result); }
private UserInfoEx CreateUserInfoEx(USER_INFO info, bool full) { var result = new UserInfoEx(); result.Id = info.Id; result.AvatarBigFileName = info.AvatarBig; // if full reading is enabled, then hash codes will be set automatically with setting data if (info.FILE_BIG != null) { if (full) { result.AvatarBigData = info.FILE_BIG.Data; } else { result.AvatarBigHashCode = info.FILE_BIG.HashCode ?? UserInfoEx.ComputeHash(result.AvatarBigData); } } result.AvatarSmallFileName = info.AvatarSmall; if (info.FILE_SMALL != null) { if (full) { result.AvatarSmallData = info.FILE_SMALL.Data; } else { result.AvatarSmallHashCode = info.FILE_SMALL.HashCode ?? UserInfoEx.ComputeHash(result.AvatarSmallData); } } result.AboutFileName = info.About; if (info.FILE_ABOUT != null) { if (full) { result.AboutData = info.FILE_ABOUT.Data; } else { result.AboutHashCode = info.FILE_ABOUT.HashCode ?? UserInfoEx.ComputeHash(result.AboutData); } } result.Contacts = info.Contacts; return(result); }
// запись файла в БД с обновлением кэша в случае необходимости private bool SetFile(string name, byte[] data) { if (string.IsNullOrEmpty(name)) { return(false); } try { var cacheFileName = path + "\\" + name; if (File.Exists(cacheFileName) && UserInfoEx.ComputeHash(File.ReadAllBytes(cacheFileName)) == UserInfoEx.ComputeHash(data)) { return(false); } dataSource.WriteFile(name, data); File.WriteAllBytes(cacheFileName, data); return(true); } catch (Exception ex) { Logger.Info(string.Format("UserInfoExCache.SetFile: error caching file {0}", name), ex); return(false); } }
// чтение файла из БД с обновлением кэша в случае необходимости private List <byte[]> GetFiles(List <string> names, List <string> hashCodes) { var fileDict = new Dictionary <string, byte[]>(); // forming request var requestNames = new List <string>(); for (var i = 0; i < names.Count; i++) { var name = names[i]; var hashCode = hashCodes[i]; if (name == null || hashCode == null) // при вызове из GetUsersInfo: на сервере файла не существует { try { if (!string.IsNullOrEmpty(name)) { File.Delete(path + "\\" + name); fileDict.Add(name, null); } } catch (Exception ex) { Logger.Info("UserInfoExCache.GetFiles: error deleting file " + path + "\\" + name, ex); } continue; } if (File.Exists(path + "\\" + name)) { var data = File.ReadAllBytes(path + "\\" + name); if (UserInfoEx.ComputeHash(data) == hashCode) { fileDict.Add(name, data); continue; } } requestNames.Add(name); } // requesting server var files = dataSource.ReadFiles(requestNames); if (files == null || files.Count != requestNames.Count) { Logger.Info("UserInfoExCache.GetFiles: server error"); return(null); } // saving to cache for (var i = 0; i < requestNames.Count; i++) { var name = requestNames[i]; var data = files[i]; try { File.WriteAllBytes(path + "\\" + name, data); } catch (Exception ex) { Logger.Info("UserInfoExCache.GetFiles: error writing cache " + path + "\\" + name, ex); } fileDict.Add(name, data); } return(names.Select(name => name == null ? null : fileDict[name]).ToList()); }