/// <summary> /// Returns a (possible empty) list of missing folders. This is done by by getting all relative paths and seeing if each folder actually exists. /// </summary> private static List <string> GetMissingFolders(FileDatabase fileDatabase) { List <object> allRelativePaths = fileDatabase.GetDistinctValuesInColumn(Constant.DBTables.FileData, Constant.DatabaseColumn.RelativePath); List <string> missingRelativePaths = new List <string>(); foreach (string relativePath in allRelativePaths) { string path = Path.Combine(fileDatabase.FolderPath, relativePath); if (!Directory.Exists(path)) { missingRelativePaths.Add(relativePath); } } return(missingRelativePaths); }
// Get the root folder name from the database, and check to see if its the same as the actual root folder. // If not, ask the user if he/she wants to update the database. private void CheckAndCorrectRootFolder(FileDatabase fileDatabase) { // Check the arguments for null if (fileDatabase == null) { // this should not happen // System.Diagnostics.Debug.Print("The fielDatabase was null and it shouldn't be"); TracePrint.PrintStackTrace(1); // No-op return; } List <object> allRootFolderPaths = fileDatabase.GetDistinctValuesInColumn(Constant.DBTables.FileData, Constant.DatabaseColumn.Folder); if (allRootFolderPaths.Count < 1) { // System.Diagnostics.Debug.Print("Checking the root folder name in the database, but no entries were found. Perhaps the database is empty?"); return; } // retrieve and compare the db and actual root folder path names. While there really should be only one entry in the allRootFolderPaths, // we still do a check in case there is more than one. If even one entry doesn't match, we use that entry to ask the user if he/she // wants to update the root folder to match the actual location of the root folder containing the template, data and image files. string actualRootFolderName = fileDatabase.FolderPath.Split(Path.DirectorySeparatorChar).Last(); foreach (string databaseRootFolderName in allRootFolderPaths) { if (databaseRootFolderName.Equals(actualRootFolderName)) { continue; } else { // We have at least one entry where there is a mismatch between the actual root folder and the stored root folder // Consequently, ask the user if he/she wants to update the db entry Dialog.UpdateRootFolder renameRootFolderDialog; renameRootFolderDialog = new Dialog.UpdateRootFolder(this, databaseRootFolderName, actualRootFolderName); bool?result = renameRootFolderDialog.ShowDialog(); if (result == true) { ColumnTuple columnToUpdate = new ColumnTuple(Constant.DatabaseColumn.Folder, actualRootFolderName); fileDatabase.UpdateFiles(columnToUpdate); } return; } } }