示例#1
0
 /// <summary>
 /// Deletes a fortress completly.
 /// </summary>
 /// <param name="fortressVm"></param>
 public void DeleteFortress(FortressViewModel fortressVm)
 {
     try
     {
         var enterMasterkeyView = new EnterMasterkeyView()
         {
             PotFortressName = fortressVm.Name,
             PotFortressPath = fortressVm.FullName
         };
         enterMasterkeyView.ShowDialog();
         // If the user entered the valid masterkey
         if (enterMasterkeyView.DialogResult == true)
         {
             if (File.Exists(fortressVm.FullName))
             {
                 File.Delete(fortressVm.FullName);
                 Fortresses.Remove(fortressVm);
                 Communication.InformUser($"{fortressVm.Name} has been deleted.");
             }
         }
     }
     catch (Exception ex)
     {
         ex.SetUserMessage("Couldn't delete the selected fortress. Maybe it has already been deleted.");
         Communication.InformUserAboutError(ex);
         Logger.log.Error($"Error trying to delete a fortess: {ex}");
     }
 }
示例#2
0
        /// <summary>
        /// Delinks an externally added fortress from the list.
        /// </summary>
        /// <param name="deletableVm"></param>
        public void DelinkExternalFortress(FortressViewModel deletableVm)
        {
            try
            {
                if (!File.Exists(IOPathHelper.GetLinkedFortressListFile()))
                {
                    return;
                }

                var linkedFortessFile = File.ReadAllLines(IOPathHelper.GetLinkedFortressListFile()).ToList();

                if (linkedFortessFile.Contains(deletableVm.FullName))
                {
                    linkedFortessFile.Remove(deletableVm.FullName);
                }

                File.WriteAllLines(IOPathHelper.GetLinkedFortressListFile(), linkedFortessFile);
                Fortresses.Remove(deletableVm);
            }
            catch (Exception ex)
            {
                Logger.log.Error($"Error while de-linking a fortress: {ex}");
                ex.SetUserMessage($"Couldn't de-link fortress - An error occured while trying to de-link it. The problem could be solved by restarting the program.");
                Communication.InformUserAboutError(ex);
            }
        }
示例#3
0
        /// <summary>
        /// Loads all fortresses: Default and linked.
        /// </summary>
        public void LoadFortresses()
        {
            try
            {
                // If the fortress folder doesn't exist, a fortress hasn't been created into the default location
                if (!Directory.Exists(IOPathHelper.GetDefaultFortressDirectory()) && !File.Exists(IOPathHelper.GetLinkedFortressListFile()))
                {
                    return;
                }

                var allFortresses = new List <string>();

                // First get all fortresses in the default location
                var defaultFortresses = Directory.GetFiles(IOPathHelper.GetDefaultFortressDirectory()).Where(f => f.EndsWith(TermHelper.GetZippedFileEnding())).ToList();
                allFortresses.AddRange(defaultFortresses);

                // Now look for externally added fortress in the fortress config
                if (File.Exists(IOPathHelper.GetLinkedFortressListFile()))
                {
                    var linkedFortresses = File.ReadAllLines(IOPathHelper.GetLinkedFortressListFile()).ToList();
                    var emptyPaths       = new List <string>();

                    foreach (var path in linkedFortresses)
                    {
                        // If the file exists, we add it to the UI.
                        if (File.Exists(path))
                        {
                            allFortresses.Add(path);
                        }
                        // If the given path does not exist anymore, because the fortress got moved, delete it.
                        else
                        {
                            emptyPaths.Add(path);
                        }
                    }

                    // When empty paths have been found, delete them and tell the User.
                    if (emptyPaths.Count > 0)
                    {
                        foreach (var path in emptyPaths)
                        {
                            linkedFortresses.Remove(path);
                        }
                        File.WriteAllLines(IOPathHelper.GetLinkedFortressListFile(), linkedFortresses);
                        Communication.InformUser($"Old or corrupted paths have been found - they were de-linked from the fortress list.");
                    }
                }

                Fortresses.Clear();

                foreach (var fortress in allFortresses)
                {
                    // If the files does not have the default database ending, skip it.
                    if (!fortress.EndsWith(TermHelper.GetZippedFileEnding()))
                    {
                        break;
                    }

                    var created    = File.GetCreationTime(fortress);
                    var modified   = File.GetLastWriteTime(fortress);
                    var fortressVm = new FortressViewModel(fortress, created, modified, this);
                    if (!fortress.Contains(IOPathHelper.GetDefaultFortressDirectory()))
                    {
                        fortressVm.IsDefaultLocated = false;
                    }

                    Fortresses.Add(fortressVm);
                }
            }
            catch (Exception ex)
            {
                Logger.log.Error($"Error while loading the fortress list: {ex}");
                ex.SetUserMessage("An error occured while trying to load all known fortresses. If the fortress has been moved, try to select it again or restart the program.");
                Communication.InformUserAboutError(ex);
            }
        }