From ad61311dcc5cd6c9ed2973e6470a9dc2a4797e1f Mon Sep 17 00:00:00 2001 From: blowfish Date: Mon, 28 Aug 2017 23:31:54 -0700 Subject: [PATCH] Extract progress into its own object --- IPatchProgress.cs | 28 +++++++++++ ModuleManager.csproj | 2 + PatchProgress.cs | 109 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 IPatchProgress.cs create mode 100644 PatchProgress.cs diff --git a/IPatchProgress.cs b/IPatchProgress.cs new file mode 100644 index 00000000..e3c0a067 --- /dev/null +++ b/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 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(); + } +} diff --git a/ModuleManager.csproj b/ModuleManager.csproj index 01e02301..450001fa 100644 --- a/ModuleManager.csproj +++ b/ModuleManager.csproj @@ -37,11 +37,13 @@ + + diff --git a/PatchProgress.cs b/PatchProgress.cs new file mode 100644 index 00000000..64e02d03 --- /dev/null +++ b/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 ErrorFiles { get; } = new Dictionary(); + + 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; + } + } +}