/
pilot24
/
otchet
Обзор
Документация
Войти
/
pilot24
/
otchet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
ViewModels/MainViewModel.cs
208 строк
7 KB
дилшод
commit1
18 дек 2025, 12:43
18 дек 2025, 12:43
15967d3
Код
Авторство
О чём код?
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using SecurePassLite.Models; using SecurePassLite.Services; using SecurePassLite.Views; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; namespace SecurePassLite.ViewModels { public partial class MainViewModel : ObservableObject { private readonly DatabaseService _dbService; private readonly EncryptionService _encryptionService; [ObservableProperty] private ObservableCollection<PasswordEntry> _passwordEntries = new(); [ObservableProperty] private PasswordEntry _selectedEntry; [ObservableProperty] private string _searchText = ""; [ObservableProperty] private ObservableCollection<string> _categories = new() { "Все" }; [ObservableProperty] private string _selectedCategory = "Все"; [ObservableProperty] private bool _showPassword = false; public MainViewModel(string masterPassword) { _encryptionService = new EncryptionService(masterPassword); _dbService = new DatabaseService(); LoadEntries(); LoadCategories(); } private void LoadEntries() { var entries = _dbService.GetAllEntries(); PasswordEntries = new ObservableCollection<PasswordEntry>(entries); } private void LoadCategories() { Categories.Clear(); Categories.Add("Все"); var dbCategories = _dbService.GetAllCategories(); foreach (var category in dbCategories) { Categories.Add(category); } } [RelayCommand] private void Search() { if (SelectedCategory == "Все" && string.IsNullOrWhiteSpace(SearchText)) { LoadEntries(); } else if (!string.IsNullOrWhiteSpace(SearchText)) { var entries = _dbService.SearchEntries(SearchText); if (SelectedCategory != "Все") { entries = entries.Where(e => e.Category == SelectedCategory).ToList(); } PasswordEntries = new ObservableCollection<PasswordEntry>(entries); } else if (SelectedCategory != "Все") { var entries = _dbService.GetEntriesByCategory(SelectedCategory); PasswordEntries = new ObservableCollection<PasswordEntry>(entries); } } [RelayCommand] private void AddEntry() { var addEditWindow = new AddEditWindow(_encryptionService, null); addEditWindow.Closed += (s, e) => { LoadEntries(); LoadCategories(); }; addEditWindow.ShowDialog(); } [RelayCommand] private void EditEntry() { if (SelectedEntry == null) { MessageBox.Show("Выберите запись для редактирования", "Информация", MessageBoxButton.OK, MessageBoxImage.Information); return; } var addEditWindow = new AddEditWindow(_encryptionService, SelectedEntry); addEditWindow.Closed += (s, e) => { LoadEntries(); LoadCategories(); }; addEditWindow.ShowDialog(); } [RelayCommand] private void DeleteEntry() { if (SelectedEntry == null) { MessageBox.Show("Выберите запись для удаления", "Информация", MessageBoxButton.OK, MessageBoxImage.Information); return; } var result = MessageBox.Show($"Удалить запись '{SelectedEntry.Title}'?", "Подтверждение", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result == MessageBoxResult.Yes) { _dbService.DeleteEntry(SelectedEntry.Id); LoadEntries(); LoadCategories(); } } [RelayCommand] private void ShowPasswordGenerator() { var generator = new PasswordGeneratorDialog(); if (generator.ShowDialog() == true) { // Пароль можно использовать при добавлении новой записи } } [RelayCommand] private void TogglePasswordVisibility() { ShowPassword = !ShowPassword; } [RelayCommand] private void ExportToCsv() { try { var dialog = new Microsoft.Win32.SaveFileDialog { Filter = "CSV файлы (*.csv)|*.csv", DefaultExt = ".csv", FileName = $"passwords_{DateTime.Now:yyyyMMdd_HHmmss}.csv" }; if (dialog.ShowDialog() == true) { var csv = new System.Text.StringBuilder(); csv.AppendLine("Название;Логин;Пароль;Категория;Дата создания"); foreach (var entry in PasswordEntries) { var password = _encryptionService.Decrypt(entry.EncryptedPassword); csv.AppendLine($"\"{entry.Title}\";\"{entry.Username}\";\"{password}\";\"{entry.Category}\";\"{entry.CreatedDate}\""); } System.IO.File.WriteAllText(dialog.FileName, csv.ToString(), System.Text.Encoding.UTF8); MessageBox.Show("Экспорт завершен", "Успех", MessageBoxButton.OK, MessageBoxImage.Information); } } catch (Exception ex) { MessageBox.Show($"Ошибка: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } } [RelayCommand] private void Logout() { var loginWindow = new LoginWindow(); loginWindow.Show(); foreach (Window window in Application.Current.Windows) { if (window is MainWindow) { window.Close(); break; } } } public string GetDecryptedPassword(PasswordEntry entry) { return entry != null ? _encryptionService.Decrypt(entry.EncryptedPassword) : ""; } } }