Skip to content

Commit

Permalink
Merge pull request #21 from YPermitin/develop
Browse files Browse the repository at this point in the history
Реализована очистка временных файлов и загрузка адресных объектов
  • Loading branch information
YPermitin authored Aug 7, 2023
2 parents 761f589 + 04b2848 commit 76b7cbb
Show file tree
Hide file tree
Showing 101 changed files with 5,695 additions and 3,122 deletions.
4 changes: 1 addition & 3 deletions Apps/YPermitin.FIASToolSet.DistributionDownloader/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,7 @@ await lastInfo.DownloadDistributionByFileTypeAsync(
}
});

lastInfo.ExtractDistributionFile(
DistributionFileType.GARFIASXmlComplete,
true);
lastInfo.ExtractDistributionFile(DistributionFileType.GARFIASXmlComplete);
}

Console.WriteLine("Для выхода нажмите любую клавишу...");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,20 @@ public void RemoveVersionWorkingDirectory()
DirectoryInfo versionWorkingDirectory = new DirectoryInfo(pathToVersionDirectory);
versionWorkingDirectory.Delete(true);
}

/// <summary>
/// Удаление файла архива с данными версии дистрибутива ФИАС
/// </summary>
/// <param name="fileType">Тип файла дистрибутива</param>
public void RemoveVersionDataArchive(DistributionFileType fileType)
{
var pathToArchive = GetLocalPathByFileType(fileType);

if (File.Exists(pathToArchive))
{
File.Delete(pathToArchive);
}
}

/// <summary>
/// Скачивание файла дистрибутивая по типу
Expand Down Expand Up @@ -240,23 +254,24 @@ public string GetExtractedDirectory(DistributionFileType fileType)
}

/// <summary>
/// Распаковка архива с файлами дистрибутива
/// Распаковка архива с файлами дистрибутива только по базовым справочникам и корневым файлам.
///
/// ВНИМАНИЕ!!! Перед распаковкой каталог назначения полностью очищается.
/// Если ранее в нем были уже распакованы данные, в т.ч. по регионам, то они будут удалены.
///
/// Данные по регионам не распаковываются.
/// </summary>
/// <param name="fileType">Тип файла дистрибутива</param>
/// <param name="onlyBaseFiles">Распаковать только базовые файлы (файлы по регионам не будут распакованы)</param>
/// <param name="regions">Массив кодов регионов для распаковки</param>
public void ExtractDistributionFile(
DistributionFileType fileType,
bool onlyBaseFiles = false,
string[] regions = null)
/// <param name="removeOldData">Удаление старых данных в каталоге назначения перед распаковкой</param>
public void ExtractDistributionFile(DistributionFileType fileType, bool removeOldData = true)
{
string pathToFile = GetLocalPathByFileType(fileType);
FileInfo fileInfo = new FileInfo(pathToFile);

if (fileInfo.Exists)
{
string directoryToExtract = GetExtractedDirectory(fileType);
if (Directory.Exists(directoryToExtract))
if (removeOldData && Directory.Exists(directoryToExtract))
{
Directory.Delete(directoryToExtract, true);
}
Expand All @@ -267,7 +282,7 @@ public void ExtractDistributionFile(
var entries = zipFile.Entries;
foreach (var entry in entries)
{
int indexEndRegionName = entry.FullName.IndexOf("/");
int indexEndRegionName = entry.FullName.IndexOf("/", StringComparison.Ordinal);
if (indexEndRegionName <= 0)
{
string fileNameToExtract = Path.Combine(
Expand All @@ -276,20 +291,48 @@ public void ExtractDistributionFile(
);
entry.ExtractToFile(fileNameToExtract);
}
else
}
}
}
}

/// <summary>
/// Распаковка данных архива по указанному региону
/// </summary>
/// <param name="fileType">Тип файла дистрибутива</param>
/// <param name="region">Код региона для распаковки</param>
/// <param name="removeOldData">Удаление старых данных в каталоге назначения перед распаковкой</param>
public void ExtractDistributionRegionFiles(
DistributionFileType fileType,
string region,
bool removeOldData = true)
{
string pathToFile = GetLocalPathByFileType(fileType);
FileInfo fileInfo = new FileInfo(pathToFile);
if (removeOldData)
{
RemoveDistributionRegionDirectory(fileType, region);
}

if (fileInfo.Exists)
{
string directoryToExtract = GetExtractedDirectory(fileType);

using (var zipFile = ZipFile.OpenRead(pathToFile))
{
var entries = zipFile.Entries;
foreach (var entry in entries)
{
int indexEndRegionName = entry.FullName.IndexOf("/", StringComparison.Ordinal);
if (indexEndRegionName > 0)
{
bool doExtract = true;

if (onlyBaseFiles)
{
doExtract = false;
}
else if (regions != null)
if (region != null)
{
string regionDirectoryName = entry.FullName.Substring(0, indexEndRegionName);
if (int.TryParse(regionDirectoryName, out _))
{
doExtract = regions.Contains(regionDirectoryName);
doExtract = region == regionDirectoryName;
}
}

Expand All @@ -302,8 +345,10 @@ public void ExtractDistributionFile(
FileInfo fileInfoToExtract = new FileInfo(fileNameToExtract);
if (fileInfoToExtract.Directory != null)
{
if(!fileInfoToExtract.Directory.Exists)
if (!fileInfoToExtract.Directory.Exists)
{
fileInfoToExtract.Directory.Create();
}
}
entry.ExtractToFile(fileNameToExtract);
}
Expand All @@ -313,6 +358,22 @@ public void ExtractDistributionFile(
}
}

/// <summary>
/// Удаление каталога с распакованными данными по региону
/// </summary>
/// <param name="fileType">Тип файла дистрибутива</param>
/// <param name="region">Код региона для распаковки</param>
public void RemoveDistributionRegionDirectory(DistributionFileType fileType,
string region)
{
string directoryToExtract = GetExtractedDirectory(fileType);
string regionDirectory = Path.Combine(directoryToExtract, region);

var regionDirectoryInfo = new DirectoryInfo(regionDirectory);
if(regionDirectoryInfo.Exists)
regionDirectoryInfo.Delete(true);
}

internal FIASDistributionInfo(DownloadFileInfo downloadFileInfo, FIASDistributionBrowserOptions options, IAPIHelper apiHelper)
{
_apiHelper = apiHelper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,6 @@
</Compile>
</ItemGroup>

<ItemGroup>
<Folder Include="Exceptions\" />
</ItemGroup>

<ItemGroup>
<Reference Include="Microsoft.Extensions.Configuration.Abstractions">
<HintPath>..\..\..\..\.nuget\packages\microsoft.extensions.configuration.abstractions\6.0.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll</HintPath>
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace YPermitin.FIASToolSet.DistributionLoader.Exceptions;

public class RegionNotFoundException : Exception
{
public readonly string RegionCode;

public RegionNotFoundException(string message, string regionCode) : base(message)
{
RegionCode = regionCode;
}
}
Loading

0 comments on commit 76b7cbb

Please sign in to comment.