internal Task <BoolWithMessage> ImportMapAsync() { Task <BoolWithMessage> task = Task.Factory.StartNew(() => { List <string> filesCopied; IProgress <double> progress = new Progress <double>(percent => this.ImportProgress = percent * 100); if (IsZipFileImport) { // extract compressed file to correct location if (File.Exists(PathToFileOrFolder) == false) { return(BoolWithMessage.False($"{PathToFileOrFolder} does not exist.")); } if (!FileUtils.CompressedFileHasFile(PathToFileOrFolder, ".umap", FileUtils.SearchType.EndsWith)) { return(BoolWithMessage.False($"{PathToFileOrFolder} does not contain a valid .umap file to import.")); } this.ImportProgress = 0; try { if (FileUtils.CompressedFileHasFile(PathToFileOrFolder, "Content/", FileUtils.SearchType.StartsWith) || FileUtils.CompressedFileHasFile(PathToFileOrFolder, "Content\\", FileUtils.SearchType.StartsWith)) { // extract files to SessionGame/ instead if the zipped up root folder is 'Content/' filesCopied = FileUtils.ExtractCompressedFile(PathToFileOrFolder, SessionPath.ToSessionGame, progress); } else { filesCopied = FileUtils.ExtractCompressedFile(PathToFileOrFolder, SessionPath.ToContent, progress); } string relativePathData = Path.Combine("Content", "Data"); if (filesCopied.Any(f => f.Contains(relativePathData))) { Logger.Info("Checking for files extracted to Data folder ..."); for (int i = filesCopied.Count - 1; i >= 0; i--) { if (filesCopied[i].Contains(relativePathData) && File.Exists(filesCopied[i])) { File.Delete(filesCopied[i]); filesCopied.RemoveAt(i); } } } } catch (Exception e) { Logger.Error(e, "failed to extract file"); UserMessage = $"Failed to extract file: {e.Message}"; return(BoolWithMessage.False($"Failed to extract: {e.Message}.")); } } else { // validate folder exists and contains a valid map file if (Directory.Exists(PathToFileOrFolder) == false) { return(BoolWithMessage.False($"{PathToFileOrFolder} does not exist.")); } if (!MetaDataManager.DoesValidMapExistInFolder(PathToFileOrFolder)) { return(BoolWithMessage.False($"{PathToFileOrFolder} does not contain a valid .umap file to import.")); } filesCopied = FileUtils.CopyDirectoryRecursively(PathToFileOrFolder, SessionPath.ToContent, filesToExclude: FilesToExclude, foldersToExclude: StockFoldersToExclude, doContainsSearch: false, progress); } // create meta data for new map and save to disk MapMetaData metaData = GenerateMetaData(filesCopied); MetaDataManager.SaveMapMetaData(metaData); return(BoolWithMessage.True()); }); return(task); }
internal Task <BoolWithMessage> ImportMapAsync() { Task <BoolWithMessage> task = Task.Factory.StartNew(() => { string sourceFolderToCopy; if (IsZipFileImport) { // extract compressed file before copying if (File.Exists(PathToFileOrFolder) == false) { return(BoolWithMessage.False($"{PathToFileOrFolder} does not exist.")); } // extract files first before copying BoolWithMessage didExtract = BoolWithMessage.False(""); try { Directory.CreateDirectory(PathToTempUnzipFolder); didExtract = FileUtils.ExtractCompressedFile(PathToFileOrFolder, PathToTempUnzipFolder); } catch (Exception e) { Logger.Error(e, "failed to extract zip"); didExtract.Message = e.Message; } if (didExtract.Result == false) { UserMessage = $"Failed to extract file: {didExtract.Message}"; return(BoolWithMessage.False($"Failed to extract: {didExtract.Message}.")); } sourceFolderToCopy = EnsurePathToMapFilesIsCorrect(PathToTempUnzipFolder); } else { // validate folder exists and contains a valid map file if (Directory.Exists(PathToFileOrFolder) == false) { return(BoolWithMessage.False($"{PathToFileOrFolder} does not exist.")); } sourceFolderToCopy = PathToFileOrFolder; bool hasValidMap = MetaDataManager.DoesValidMapExistInFolder(sourceFolderToCopy); if (hasValidMap == false) { return(BoolWithMessage.False($"{PathToFileOrFolder} does not contain a valid .umap file to import.")); } } // create meta data for new map and save to disk MapMetaData metaData = MetaDataManager.CreateMapMetaData(sourceFolderToCopy, true); if (AssetToImport != null) { metaData.AssetName = AssetToImport.ID; } if (IsZipFileImport == false && metaData != null) { metaData.OriginalImportPath = sourceFolderToCopy; } MetaDataManager.SaveMapMetaData(metaData); // copy/move files if (IsZipFileImport) { FileUtils.MoveDirectoryRecursively(sourceFolderToCopy, SessionPath.ToContent, filesToExclude: FilesToExclude, foldersToExclude: AllStockFoldersToExclude, doContainsSearch: false); } else { FileUtils.CopyDirectoryRecursively(sourceFolderToCopy, SessionPath.ToContent, filesToExclude: FilesToExclude, foldersToExclude: AllStockFoldersToExclude, doContainsSearch: false); } if (IsZipFileImport && Directory.Exists(PathToTempUnzipFolder)) { // remove unzipped temp files Directory.Delete(PathToTempUnzipFolder, true); } return(BoolWithMessage.True()); }); return(task); }