Skip to content

Commit

Permalink
Extract progress into its own object
Browse files Browse the repository at this point in the history
  • Loading branch information
blowfishpro committed Aug 29, 2017
1 parent b1a8863 commit ad61311
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 0 deletions.
28 changes: 28 additions & 0 deletions IPatchProgress.cs
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;

namespace ModuleManager
{
public interface IPatchProgress
{
int AppliedPatchCount { get; }
int ErrorCount { get; }
int ExceptionCount { get; }
int NeedsUnsatisfiedCount { get; }
int PatchedNodeCount { get; set; }
float ProgressFraction { get; }
int TotalPatchCount { get; }
Dictionary<String, int> ErrorFiles { get; }

void Error(UrlDir.UrlConfig url, string message);
void Exception(string message, Exception exception);
void Exception(UrlDir.UrlConfig url, string message, Exception exception);
void NeedsUnsatisfiedNode(string url, string path);
void NeedsUnsatisfiedValue(string url, string path, string valName);
void NodeCopied(string url, string patchUrl);
void NodeDeleted(string url, string patchUrl);
void NodePatched(string url, string patchUrl);
void PatchAdded();
void PatchApplied();
}
}
2 changes: 2 additions & 0 deletions ModuleManager.csproj
Expand Up @@ -37,11 +37,13 @@
<Compile Include="Cats\CatOrbiter.cs" />
<Compile Include="Collections\ImmutableStack.cs" />
<Compile Include="Extensions\NodeStackExtensions.cs" />
<Compile Include="IPatchProgress.cs" />
<Compile Include="Logging\IBasicLogger.cs" />
<Compile Include="Logging\ModLogger.cs" />
<Compile Include="MMPatchLoader.cs" />
<Compile Include="ModuleManager.cs" />
<Compile Include="PatchContext.cs" />
<Compile Include="PatchProgress.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs" />
<Compile Include="CustomConfigsManager.cs" />
Expand Down
109 changes: 109 additions & 0 deletions PatchProgress.cs
@@ -0,0 +1,109 @@
using System;
using System.Collections.Generic;
using ModuleManager.Logging;

namespace ModuleManager
{
public class PatchProgress : IPatchProgress
{
public int TotalPatchCount { get; private set; } = 0;

public int AppliedPatchCount { get; private set; } = 0;

public int PatchedNodeCount { get; set; } = 0;

public int ErrorCount { get; private set; } = 0;

public int ExceptionCount { get; private set; } = 0;

public int NeedsUnsatisfiedCount { get; private set; } = 0;

public Dictionary<String, int> ErrorFiles { get; } = new Dictionary<string, int>();

private IBasicLogger logger;

public float ProgressFraction
{
get
{
if (TotalPatchCount > 0)
return (AppliedPatchCount + NeedsUnsatisfiedCount) / (float)TotalPatchCount;
return 0;
}
}

public PatchProgress(IBasicLogger logger)
{
this.logger = logger;
}

public void PatchAdded()
{
TotalPatchCount += 1;
}

public void NodePatched(string url, string patchUrl)
{
logger.Info($"Applying node {patchUrl} to {url}");
PatchedNodeCount += 1;
}

public void NodeCopied(string url, string patchUrl)
{
logger.Info($"Copying Node {url} using {patchUrl}");
}

public void NodeDeleted(string url, string patchUrl)
{
logger.Info($"Deleting Node {url} using {patchUrl}");
}

public void PatchApplied()
{
AppliedPatchCount += 1;
}

public void NeedsUnsatisfiedNode(string url, string path)
{
logger.Info($"Deleting Node in file {url} subnode: {path} as it can't satisfy its NEEDS");
NeedsUnsatisfiedCount += 1;
}

public void NeedsUnsatisfiedValue(string url, string path, string valName)
{
logger.Info($"Deleting value in file {url} subnode: {path} value: {valName} as it can't satisfy its NEEDS");
NeedsUnsatisfiedCount += 1;
}

public void Error(UrlDir.UrlConfig url, string message)
{
ErrorCount += 1;
logger.Error(message);
RecordErrorFile(url);
}

public void Exception(string message, Exception exception)
{
ExceptionCount += 1;
logger.Exception(message, exception);
}

public void Exception(UrlDir.UrlConfig url, string message, Exception exception)
{
Exception(message, exception);
RecordErrorFile(url);
}

private void RecordErrorFile(UrlDir.UrlConfig url)
{
string key = url.parent.url + "." + url.parent.fileExtension;
if (key[0] == '/')
key = key.Substring(1);

if (ErrorFiles.ContainsKey(key))
ErrorFiles[key] += 1;
else
ErrorFiles[key] = 1;
}
}
}

0 comments on commit ad61311

Please sign in to comment.