mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Archive Indexing into ACompiler
This commit is contained in:
parent
5ce0a79bd4
commit
02631eb503
@ -198,6 +198,86 @@ namespace Wabbajack.Lib
|
||||
.ToDictionary(gh => gh.Key, gh => gh.Select(p => p.g.Key).ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task CleanInvalidArchivesAndFillState()
|
||||
{
|
||||
var remove = (await IndexedArchives.PMap(Queue, async a =>
|
||||
{
|
||||
try
|
||||
{
|
||||
a.State = (await ResolveArchive(a)).State;
|
||||
return null;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return a;
|
||||
}
|
||||
})).NotNull().ToHashSet();
|
||||
|
||||
if (remove.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Utils.Log(
|
||||
$"Removing {remove.Count} archives from the compilation state, this is probably not an issue but reference this if you have compilation failures");
|
||||
remove.Do(r => Utils.Log($"Resolution failed for: ({r.File.Size} {r.File.Hash}) {r.File.FullPath}"));
|
||||
IndexedArchives.RemoveAll(a => remove.Contains(a));
|
||||
}
|
||||
|
||||
protected async Task InferMetas()
|
||||
{
|
||||
async Task<bool> HasInvalidMeta(AbsolutePath filename)
|
||||
{
|
||||
var metaname = filename.WithExtension(Consts.MetaFileExtension);
|
||||
if (!metaname.Exists)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return await DownloadDispatcher.ResolveArchive(metaname.LoadIniFile()) == null;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utils.ErrorThrow(e, $"Exception while checking meta {filename}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var to_find = (await DownloadsPath.EnumerateFiles()
|
||||
.Where(f => f.Extension != Consts.MetaFileExtension && f.Extension != Consts.HashFileExtension)
|
||||
.PMap(Queue, async f => await HasInvalidMeta(f) ? f : default))
|
||||
.Where(f => f.Exists)
|
||||
.ToList();
|
||||
|
||||
if (to_find.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Utils.Log($"Attempting to infer {to_find.Count} metas from the server.");
|
||||
|
||||
await to_find.PMap(Queue, async f =>
|
||||
{
|
||||
var vf = VFS.Index.ByRootPath[f];
|
||||
|
||||
var meta = await ClientAPI.InferDownloadState(vf.Hash);
|
||||
|
||||
if (meta == null)
|
||||
{
|
||||
await vf.AbsoluteName.WithExtension(Consts.MetaFileExtension).WriteAllLinesAsync(
|
||||
"[General]",
|
||||
"unknownArchive=true");
|
||||
return;
|
||||
}
|
||||
|
||||
Utils.Log($"Inferred .meta for {vf.FullPath.FileName}, writing to disk");
|
||||
await vf.AbsoluteName.WithExtension(Consts.MetaFileExtension)
|
||||
.WriteAllTextAsync(meta.GetMetaIniString());
|
||||
});
|
||||
}
|
||||
|
||||
public async Task ExportModList()
|
||||
{
|
||||
|
@ -379,86 +379,6 @@ namespace Wabbajack.Lib
|
||||
return true;
|
||||
}
|
||||
|
||||
private async Task CleanInvalidArchivesAndFillState()
|
||||
{
|
||||
var remove = (await IndexedArchives.PMap(Queue, async a =>
|
||||
{
|
||||
try
|
||||
{
|
||||
a.State = (await ResolveArchive(a)).State;
|
||||
return null;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return a;
|
||||
}
|
||||
})).NotNull().ToHashSet();
|
||||
|
||||
if (remove.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Utils.Log(
|
||||
$"Removing {remove.Count} archives from the compilation state, this is probably not an issue but reference this if you have compilation failures");
|
||||
remove.Do(r => Utils.Log($"Resolution failed for: ({r.File.Size} {r.File.Hash}) {r.File.FullPath}"));
|
||||
IndexedArchives.RemoveAll(a => remove.Contains(a));
|
||||
}
|
||||
|
||||
private async Task InferMetas()
|
||||
{
|
||||
async Task<bool> HasInvalidMeta(AbsolutePath filename)
|
||||
{
|
||||
var metaname = filename.WithExtension(Consts.MetaFileExtension);
|
||||
if (!metaname.Exists)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return await DownloadDispatcher.ResolveArchive(metaname.LoadIniFile()) == null;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utils.ErrorThrow(e, $"Exception while checking meta {filename}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var to_find = (await DownloadsPath.EnumerateFiles()
|
||||
.Where(f => f.Extension != Consts.MetaFileExtension && f.Extension != Consts.HashFileExtension)
|
||||
.PMap(Queue, async f => await HasInvalidMeta(f) ? f : default))
|
||||
.Where(f => f.Exists)
|
||||
.ToList();
|
||||
|
||||
if (to_find.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Utils.Log($"Attempting to infer {to_find.Count} metas from the server.");
|
||||
|
||||
await to_find.PMap(Queue, async f =>
|
||||
{
|
||||
var vf = VFS.Index.ByRootPath[f];
|
||||
|
||||
var meta = await ClientAPI.InferDownloadState(vf.Hash);
|
||||
|
||||
if (meta == null)
|
||||
{
|
||||
await vf.AbsoluteName.WithExtension(Consts.MetaFileExtension).WriteAllLinesAsync(
|
||||
"[General]",
|
||||
"unknownArchive=true");
|
||||
return;
|
||||
}
|
||||
|
||||
Utils.Log($"Inferred .meta for {vf.FullPath.FileName}, writing to disk");
|
||||
await vf.AbsoluteName.WithExtension(Consts.MetaFileExtension)
|
||||
.WriteAllTextAsync(meta.GetMetaIniString());
|
||||
});
|
||||
}
|
||||
|
||||
private async Task IncludeArchiveMetadata()
|
||||
{
|
||||
Utils.Log($"Including {SelectedArchives.Count} .meta files for downloads");
|
||||
|
Loading…
Reference in New Issue
Block a user