using Password_Manager; using Microsoft.VisualBasic.FileIO; namespace Profiles { static class ProfileHandler { public static Profile CurrentProfile; public static ProfileList ListOfProfiles; private static string filePath = SpecialDirectories.CurrentUserApplicationData + "\\Profiles.csv"; public static void AddProfile(string profileName, string profilePath) { ListOfProfiles.Add(new Profile(profileName, profilePath)); ChangeProfiles(profileName); } public static void ChangeProfiles(string profileName) { try { CurrentProfile = ListOfProfiles.SearchByName(profileName); } catch (ProfileNotFoundException) { MessageBox.Show("The selected profile cannot be found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } public static void Init() { ListOfProfiles = new ProfileList(); if (File.Exists(filePath)) { LoadProfilesFile(); } else { CreateProfilesFile(); } } private static void LoadProfilesFile() { try { StreamReader sr = new StreamReader(filePath); string[] lines = sr.ReadToEnd().Split("\n"); foreach (string line in lines) { string[] fields = line.Split(','); try { ListOfProfiles.Add(new Profile(fields[0], fields[1])); } catch (IndexOutOfRangeException) { //File is messed up, creating new one sr.Close(); CreateProfilesFile(); break; } } sr.Close(); } catch (IOException e) { MessageBox.Show(e.ToString(), "IO Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private static void TrimLastLine() { try { StreamReader sr = new StreamReader(filePath); List validLines = new List(); while (!sr.EndOfStream) { string? line = sr.ReadLine(); if (line != null) { validLines.Add(line); } } sr.Close(); File.WriteAllLines(filePath, validLines); } catch (IOException e) { MessageBox.Show(e.ToString(), "IO Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (UnauthorizedAccessException e) { MessageBox.Show(e.ToString(), "Can't access profiles file", MessageBoxButtons.OK, MessageBoxIcon.Error); } } public static void SaveProfiles() { try { StreamWriter sw = new StreamWriter(filePath); foreach (Profile p in ListOfProfiles) { sw.WriteLine($"{p.Name},{p.Path}"); } sw.Close(); } catch (IOException e) { MessageBox.Show(e.ToString(), "IO Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (UnauthorizedAccessException e) { MessageBox.Show(e.ToString(), "Can't access profiles file", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private static void CreateProfilesFile() { try { StreamWriter sw = new StreamWriter(filePath); string[] parameters = new string[2]; NewProfileForm np = new NewProfileForm(); np.NewProfileRequest += (string profileName, string profilePath) => { Profile firstProfile = new Profile(profileName, profilePath); ListOfProfiles.Add(firstProfile); ChangeProfiles(firstProfile.Name); sw.WriteLine($"{firstProfile.Name},{firstProfile.Path}"); sw.Close(); TrimLastLine(); }; np.ShowDialog(); } catch (IOException e) { MessageBox.Show(e.ToString(), "IO Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }