/// <summary> /// Write <seealso cref="DataModel"/> to data storage contoller at defined random index. Then write that index to CurrentCategory index collection, and save changes of category storage controller. /// </summary> /// <param name="category">Adding data</param> public void AddData(DataModel data, CategoryModel toCategory) { List <int> usingIndexes = GetUsingDataIndexes(); int maxValue = dataController.Count(); int newIndex = random.Next(0, maxValue); while (usingIndexes.Contains(newIndex)) { newIndex = random.Next(0, maxValue); } dataController.PasteAt(SecureManager.GetIndexOf(newIndex), data); List <CategoryModel> categories = categoryController.ToList(); for (int i = 0; i < categories.Count; i++) { if (categories[i].Equals(toCategory)) { CategoryModel newCategory = new CategoryModel { DataIndexes = new List <int>(toCategory.DataIndexes), Name = toCategory.Name }; newCategory.DataIndexes.Add(newIndex); categoryController.PasteAt(i, newCategory); break; } } }
/// <summary> /// Replace old data by new. /// </summary> public void ReplaceData(DataModel oldData, DataModel newData) { List <int> usingIndexes = GetUsingDataIndexes(); foreach (var index in usingIndexes) { if (dataController.Get(SecureManager.GetIndexOf(index)).Equals(oldData)) { dataController.PasteAt(SecureManager.GetIndexOf(index), newData); break; } } }
/// <summary> /// Get list of data referenced in CurrentCategory. /// </summary> /// <returns></returns> public List <DataModel> GetData(CategoryModel ofCategory) { List <DataModel> dataList = new List <DataModel>(); if (ofCategory.DataIndexes.Count == 0) { return(dataList); } dataList.Capacity = ofCategory.DataIndexes.Count; foreach (var dataIndex in ofCategory.DataIndexes) { dataList.Add(dataController.Get(SecureManager.GetIndexOf(dataIndex))); } return(dataList); }
/// <summary> /// Finds which category refers to this data, and remove this reference. /// </summary> /// <param name="data">Data to remove.</param> public void RemoveData(DataModel data) { List <CategoryModel> categories = GetCategories(); for (int i = 0; i < categories.Count; i++) { foreach (var dataIndex in categories[i].DataIndexes) { if (dataController.Get(SecureManager.GetIndexOf(dataIndex)).Equals(data)) { CategoryModel newCategory = new CategoryModel { DataIndexes = new List <int>(categories[i].DataIndexes), Name = categories[i].Name }; newCategory.DataIndexes.Remove(dataIndex); categoryController.PasteAt(i, newCategory); return; } } } }
private void SecureStorage() { var dataIndexes = GetUsingDataIndexes(); if (dataIndexes.Count == 0) { return; } List <DataModel> data = new List <DataModel>(); foreach (var index in dataIndexes) { data.Add(dataController.Get(SecureManager.GetIndexOf(index))); } Random rng = new Random(); DataGenerator generator = new DataGenerator(); int storageLength = dataController.Count(); foreach (var item in data) { for (int i = 0; i < storageLength / (50 * data.Count); i++) { int index; do { index = rng.Next(storageLength); } while (dataIndexes.Contains(index)); dataController.PasteAt(SecureManager.GetIndexOf(index), new DataModel { Date = item.Date, Description = item.Description, Login = item.Login, Password = generator.GenerateRandomPassword(item.Password.Length) }); } } }