Skip to content

Commit d36b019

Browse files
committed
Data/category vm and StorageHandler reworked
1 parent f795b3b commit d36b019

5 files changed

Lines changed: 159 additions & 173 deletions

File tree

SharpPasswordManager/Handlers/IStorageHandler.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@ namespace SharpPasswordManager.Handlers
99
/// <typeparam name="TData"></typeparam>
1010
public interface IStorageHandler<TCategory, TData>
1111
{
12-
int CurrentCategoryIndex { get; set; }
13-
1412
List<TCategory> GetCategories();
15-
List<TData> GetData();
13+
List<TData> GetData(TCategory ofCategory);
1614
void RemoveCategory(TCategory category);
1715
void RemoveData(TData data);
1816
void AddCategory(TCategory category);
19-
void AddData(TData data);
17+
void AddData(TData data, TCategory toCategory);
2018
void ReplaceCategory(TCategory oldCategory, TCategory newCategory);
2119
void ReplaceData(TData oldData, TData newData);
2220
}

SharpPasswordManager/Handlers/StorageHandler.cs

Lines changed: 45 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using SharpPasswordManager.DL.Models;
33
using System;
44
using System.Collections.Generic;
5-
using System.Linq;
65

76
namespace SharpPasswordManager.Handlers
87
{
@@ -14,12 +13,6 @@ public class StorageHandler : IStorageHandler<CategoryModel, DataModel>
1413
private IStorageController<CategoryModel> categoryController;
1514
private IStorageController<DataModel> dataController;
1615

17-
private Dictionary<DataModel, int> usingData = new Dictionary<DataModel, int>();
18-
/// <summary>
19-
/// Selected model of <see cref="CategoryModel"/>.
20-
/// </summary>
21-
public int CurrentCategoryIndex { get; set; } = -1;
22-
2316
private Random random = new Random();
2417

2518
/// <summary>
@@ -46,16 +39,9 @@ public void AddCategory(CategoryModel category)
4639
/// 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.
4740
/// </summary>
4841
/// <param name="category">Adding data</param>
49-
public void AddData(DataModel data)
42+
public void AddData(DataModel data, CategoryModel toCategory)
5043
{
51-
List<int> usingIndexes = new List<int>();
52-
for (int i = 0; i < categoryController.Count(); i++)
53-
{
54-
foreach (var index in categoryController.Get(i).DataIndexes)
55-
{
56-
usingIndexes.Add(index);
57-
}
58-
}
44+
List<int> usingIndexes = GetUsingDataIndexes();
5945

6046
int maxValue = dataController.Count();
6147
int newIndex = random.Next(0, maxValue);
@@ -64,9 +50,18 @@ public void AddData(DataModel data)
6450

6551
dataController.PasteAt(SecureManager.GetIndexOf(newIndex), data);
6652

67-
CategoryModel category = categoryController.Get(CurrentCategoryIndex);
68-
category.DataIndexes.Add(newIndex);
69-
categoryController.PasteAt(CurrentCategoryIndex, category);
53+
List<CategoryModel> categories = categoryController.ToList();
54+
55+
for (int i = 0; i < categories.Count; i++)
56+
{
57+
if (categories[i].Equals(toCategory))
58+
{
59+
CategoryModel newCategory = new CategoryModel { DataIndexes = new List<int>(toCategory.DataIndexes), Name = toCategory.Name };
60+
newCategory.DataIndexes.Add(newIndex);
61+
categoryController.PasteAt(i, newCategory);
62+
break;
63+
}
64+
}
7065
}
7166

7267
/// <summary>
@@ -82,20 +77,19 @@ public List<CategoryModel> GetCategories()
8277
/// Get list of data referenced in CurrentCategory.
8378
/// </summary>
8479
/// <returns></returns>
85-
public List<DataModel> GetData()
80+
public List<DataModel> GetData(CategoryModel ofCategory)
8681
{
8782
List<DataModel> dataList = new List<DataModel>();
88-
CategoryModel currentCategory = categoryController.Get(CurrentCategoryIndex);
89-
dataList.Capacity = currentCategory.DataIndexes.Count();
9083

91-
foreach (var index in currentCategory.DataIndexes)
84+
if (ofCategory.DataIndexes.Count == 0)
85+
return dataList;
86+
87+
dataList.Capacity = ofCategory.DataIndexes.Count;
88+
foreach (var dataIndex in ofCategory.DataIndexes)
9289
{
93-
DataModel data = dataController.Get(SecureManager.GetIndexOf(index));
94-
dataList.Add(data);
90+
dataList.Add(dataController.Get(SecureManager.GetIndexOf(dataIndex)));
9591
}
9692

97-
SetUsingData(currentCategory.DataIndexes);
98-
9993
return dataList;
10094
}
10195

@@ -114,23 +108,20 @@ public void RemoveCategory(CategoryModel category)
114108
/// <param name="data">Data to remove.</param>
115109
public void RemoveData(DataModel data)
116110
{
117-
int index = -1;
118-
foreach (var item in usingData)
111+
List<CategoryModel> categories = GetCategories();
112+
for (int i = 0; i < categories.Count; i++)
119113
{
120-
if (item.Key.Equals(data))
114+
foreach (var dataIndex in categories[i].DataIndexes)
121115
{
122-
index = item.Value;
123-
break;
116+
if (dataController.Get(SecureManager.GetIndexOf(dataIndex)).Equals(data))
117+
{
118+
CategoryModel newCategory = new CategoryModel { DataIndexes = new List<int>(categories[i].DataIndexes), Name = categories[i].Name };
119+
newCategory.DataIndexes.Remove(dataIndex);
120+
categoryController.PasteAt(i, newCategory);
121+
return;
122+
}
124123
}
125124
}
126-
127-
if (index > -1)
128-
{
129-
CategoryModel currentCategory = categoryController.Get(CurrentCategoryIndex);
130-
currentCategory.DataIndexes.Remove(index);
131-
categoryController.PasteAt(CurrentCategoryIndex, currentCategory);
132-
SetUsingData(currentCategory.DataIndexes);
133-
}
134125
}
135126

136127
/// <summary>
@@ -153,24 +144,30 @@ public void ReplaceCategory(CategoryModel oldCategory, CategoryModel newCategory
153144
/// </summary>
154145
public void ReplaceData(DataModel oldData, DataModel newData)
155146
{
156-
foreach (var item in usingData)
147+
List<int> usingIndexes = GetUsingDataIndexes();
148+
149+
foreach (var index in usingIndexes)
157150
{
158-
if (item.Key.Equals(oldData))
151+
if (dataController.Get(SecureManager.GetIndexOf(index)).Equals(oldData))
159152
{
160-
dataController.PasteAt(SecureManager.GetIndexOf(item.Value), newData);
161-
SetUsingData(usingData.Values.ToList());
153+
dataController.PasteAt(SecureManager.GetIndexOf(index), newData);
162154
break;
163155
}
164156
}
165157
}
166158

167-
private void SetUsingData(List<int> indexes)
159+
private List<int> GetUsingDataIndexes()
168160
{
169-
usingData.Clear();
170-
foreach (var index in indexes)
161+
List<int> usingIndexes = new List<int>();
162+
List<CategoryModel> categories = categoryController.ToList();
163+
foreach (var category in categories)
171164
{
172-
usingData.Add(dataController.Get(SecureManager.GetIndexOf(index)), index);
165+
foreach (var index in category.DataIndexes)
166+
{
167+
usingIndexes.Add(index);
168+
}
173169
}
170+
return usingIndexes;
174171
}
175172
}
176173
}

SharpPasswordManager/ViewModels/CategoryViewModel.cs

Lines changed: 45 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,18 @@
55
using System.Collections.ObjectModel;
66
using System.ComponentModel;
77
using System.IO;
8-
using System.Linq;
98
using System.Windows;
109
using System.Windows.Input;
1110

1211
namespace SharpPasswordManager.ViewModels
1312
{
1413
public class CategoryViewModel : INotifyPropertyChanged
1514
{
16-
public delegate void CategoryChangeHandler();
15+
public delegate void CategoryChangeHandler(CategoryModel category);
1716
public event CategoryChangeHandler OnCategoryChanged;
1817

1918
IStorageHandler<CategoryModel, DataModel> storageHandler;
20-
public ObservableCollection<CategoryModel> CategoriesList { get; set; }
19+
public ObservableCollection<CategoryModel> CategoriesList { get; set; } = new ObservableCollection<CategoryModel>();
2120

2221
private CategoryModel selectedCategory;
2322
public CategoryModel SelectedCategory
@@ -26,12 +25,7 @@ public CategoryModel SelectedCategory
2625
set
2726
{
2827
selectedCategory = value;
29-
if (selectedCategory == null)
30-
storageHandler.CurrentCategoryIndex = -1;
31-
else
32-
storageHandler.CurrentCategoryIndex = CategoriesList.IndexOf(SelectedCategory);
33-
34-
OnCategoryChanged?.Invoke();
28+
OnCategoryChanged?.Invoke(selectedCategory);
3529
}
3630
}
3731

@@ -43,27 +37,41 @@ public CategoryViewModel(IStorageHandler<CategoryModel, DataModel> storageHandle
4337

4438
private void GetCategories()
4539
{
40+
int index = -1;
41+
if (SelectedCategory != null)
42+
index = CategoriesList.IndexOf(SelectedCategory);
43+
44+
CategoriesList.Clear();
45+
4646
try
4747
{
4848
CategoriesList = new ObservableCollection<CategoryModel>(storageHandler.GetCategories());
4949
}
5050
catch (FileNotFoundException ex)
51-
{
52-
MessageBox.Show($"File not found {ex.Message}.");
53-
}
51+
{ MessageBox.Show($"File not found {ex.Message}."); }
5452
catch (InvalidOperationException ex)
55-
{
56-
MessageBox.Show($"Can't read data from file {ex.Message}.");
57-
}
53+
{ MessageBox.Show($"Can't read data from file {ex.Message}."); }
54+
catch (Exception ex)
55+
{ MessageBox.Show($"Something is wrong {ex.Message}."); }
5856

5957
OnPropertyChanged(nameof(CategoriesList));
58+
59+
if (index > -1 && index < CategoriesList.Count)
60+
SelectedCategory = CategoriesList[index];
61+
else
62+
SelectedCategory = null;
63+
64+
OnPropertyChanged(nameof(SelectedCategory));
65+
}
66+
67+
public CategoryModel ShareSelectedCategory()
68+
{
69+
return SelectedCategory;
6070
}
6171

6272
public void DataChanged()
6373
{
6474
GetCategories();
65-
SelectedCategory = CategoriesList[storageHandler.CurrentCategoryIndex];
66-
OnPropertyChanged(nameof(CategoriesList));
6775
}
6876

6977
private ICommand addCategoryCmd;
@@ -87,20 +95,15 @@ private void AddCategory()
8795
try
8896
{
8997
storageHandler.AddCategory(newCategory);
90-
GetCategories();
9198
}
9299
catch (FileNotFoundException ex)
93-
{
94-
MessageBox.Show($"File not found {ex.Message}.");
95-
}
100+
{ MessageBox.Show($"File not found {ex.Message}."); }
96101
catch (InvalidOperationException ex)
97-
{
98-
MessageBox.Show($"Can't save data to file {ex.Message}.");
99-
}
102+
{ MessageBox.Show($"Can't write data to file {ex.Message}."); }
103+
catch (Exception ex)
104+
{ MessageBox.Show($"Something is wrong {ex.Message}."); }
100105

101-
SelectedCategory = CategoriesList.LastOrDefault();
102-
OnCategoryChanged?.Invoke();
103-
OnPropertyChanged(nameof(SelectedCategory));
106+
GetCategories();
104107
}
105108
}
106109

@@ -123,21 +126,17 @@ private void DeleteCategory()
123126
{
124127
try
125128
{
126-
storageHandler.RemoveCategory(selectedCategory);
127-
GetCategories();
129+
storageHandler.RemoveCategory(SelectedCategory);
128130
}
129131
catch (FileNotFoundException ex)
130-
{
131-
MessageBox.Show($"File not found {ex.Message}.");
132-
}
132+
{ MessageBox.Show($"File not found {ex.Message}."); }
133133
catch (InvalidOperationException ex)
134-
{
135-
MessageBox.Show($"Can't save data to file {ex.Message}.");
136-
}
134+
{ MessageBox.Show($"Can't save data to file {ex.Message}."); }
135+
catch (Exception ex)
136+
{ MessageBox.Show($"Something is wrong {ex.Message}."); }
137137

138138
SelectedCategory = null;
139-
OnCategoryChanged?.Invoke();
140-
OnPropertyChanged(nameof(CategoriesList));
139+
GetCategories();
141140
}
142141
}
143142

@@ -151,34 +150,25 @@ public ICommand EditCategoryCmd
151150
}
152151
private void EditCategory()
153152
{
154-
CategoryModel oldCategory = new CategoryModel();
155-
oldCategory.Name = selectedCategory.Name;
156-
oldCategory.DataIndexes = new List<int>(selectedCategory.DataIndexes);
157-
158-
CategoryValidateViewModel validateVM = new CategoryValidateViewModel(ref selectedCategory);
153+
CategoryModel newCategory = new CategoryModel { DataIndexes = new List<int>(SelectedCategory?.DataIndexes), Name = SelectedCategory.Name };
154+
CategoryValidateViewModel validateVM = new CategoryValidateViewModel(ref newCategory);
159155
Views.CategoryValidateView validateView = new Views.CategoryValidateView();
160156
validateView.DataContext = validateVM;
161157
validateView.ShowDialog();
162158

163-
if (!selectedCategory.Equals(oldCategory))
159+
if (!SelectedCategory.Equals(newCategory))
164160
{
165161
try
166162
{
167-
storageHandler.ReplaceCategory(oldCategory, selectedCategory);
168-
GetCategories();
163+
storageHandler.ReplaceCategory(SelectedCategory, newCategory);
169164
}
170165
catch (FileNotFoundException ex)
171-
{
172-
MessageBox.Show($"File not found {ex.Message}.");
173-
}
166+
{ MessageBox.Show($"File not found {ex.Message}."); }
174167
catch (InvalidOperationException ex)
175-
{
176-
MessageBox.Show($"Can't save data to file {ex.Message}.");
177-
}
178-
179-
SelectedCategory = CategoriesList[storageHandler.CurrentCategoryIndex];
180-
OnCategoryChanged?.Invoke();
181-
OnPropertyChanged(nameof(CategoriesList));
168+
{ MessageBox.Show($"Can't save data to file {ex.Message}."); }
169+
catch (Exception ex)
170+
{ MessageBox.Show($"Something is wrong {ex.Message}."); }
171+
GetCategories();
182172
}
183173
}
184174

0 commit comments

Comments
 (0)