/src/NzbDrone.Core/Configuration/DeploymentInfoProvider.cs

https://github.com/NzbDrone/NzbDrone
C# | 116 lines | 95 code | 21 blank | 0 comment | 10 complexity | 2e112841793f5be97308f1be0d54e104 MD5 | raw file
  1. using NzbDrone.Common.Disk;
  2. using NzbDrone.Common.EnvironmentInfo;
  3. using NzbDrone.Common.Extensions;
  4. using NzbDrone.Core.Update;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Text.RegularExpressions;
  11. using System.Threading.Tasks;
  12. namespace NzbDrone.Core.Configuration
  13. {
  14. public interface IDeploymentInfoProvider
  15. {
  16. string PackageVersion { get; }
  17. string PackageAuthor { get; }
  18. string PackageGlobalMessage { get; }
  19. string PackageBranch { get; }
  20. UpdateMechanism PackageUpdateMechanism { get; }
  21. string PackageUpdateMechanismMessage { get; }
  22. string ReleaseVersion { get; }
  23. string ReleaseBranch { get; }
  24. bool IsExternalUpdateMechanism { get; }
  25. UpdateMechanism DefaultUpdateMechanism { get; }
  26. string DefaultBranch { get; }
  27. }
  28. public class DeploymentInfoProvider : IDeploymentInfoProvider
  29. {
  30. public DeploymentInfoProvider(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider)
  31. {
  32. var bin = appFolderInfo.StartUpFolder;
  33. var packageInfoPath = Path.Combine(bin, "..", "package_info");
  34. var releaseInfoPath = Path.Combine(bin, "release_info");
  35. PackageUpdateMechanism = UpdateMechanism.BuiltIn;
  36. DefaultBranch = "main";
  37. if (Path.GetFileName(bin) == "bin" && diskProvider.FileExists(packageInfoPath))
  38. {
  39. var data = diskProvider.ReadAllText(packageInfoPath);
  40. PackageVersion = ReadValue(data, "PackageVersion");
  41. PackageAuthor = ReadValue(data, "PackageAuthor");
  42. PackageGlobalMessage = ReadValue(data, "PackageGlobalMessage");
  43. PackageUpdateMechanism = ReadEnumValue(data, "UpdateMethod", UpdateMechanism.BuiltIn);
  44. PackageUpdateMechanismMessage = ReadValue(data, "UpdateMethodMessage");
  45. PackageBranch = ReadValue(data, "Branch");
  46. ReleaseVersion = ReadValue(data, "ReleaseVersion");
  47. if (PackageBranch.IsNotNullOrWhiteSpace())
  48. {
  49. DefaultBranch = PackageBranch;
  50. }
  51. }
  52. if (diskProvider.FileExists(releaseInfoPath))
  53. {
  54. var data = diskProvider.ReadAllText(releaseInfoPath);
  55. ReleaseVersion = ReadValue(data, "ReleaseVersion", ReleaseVersion);
  56. ReleaseBranch = ReadValue(data, "Branch");
  57. if (ReleaseBranch.IsNotNullOrWhiteSpace())
  58. {
  59. DefaultBranch = ReleaseBranch;
  60. }
  61. }
  62. DefaultUpdateMechanism = PackageUpdateMechanism;
  63. }
  64. private static string ReadValue(string fileData, string key, string defaultValue = null)
  65. {
  66. var match = Regex.Match(fileData, "^" + key + "=(.*)$", RegexOptions.Multiline);
  67. if (match.Success)
  68. {
  69. return match.Groups[1].Value.Trim();
  70. }
  71. return defaultValue;
  72. }
  73. private static T ReadEnumValue<T>(string fileData, string key, T defaultValue)
  74. where T : struct
  75. {
  76. var value = ReadValue(fileData, key);
  77. if (value != null && Enum.TryParse<T>(value, true, out var result))
  78. {
  79. return result;
  80. }
  81. return defaultValue;
  82. }
  83. public string PackageVersion { get; private set; }
  84. public string PackageAuthor { get; private set; }
  85. public string PackageGlobalMessage { get; private set; }
  86. public string PackageBranch { get; private set; }
  87. public UpdateMechanism PackageUpdateMechanism { get; private set; }
  88. public string PackageUpdateMechanismMessage { get; private set; }
  89. public string ReleaseVersion { get; private set; }
  90. public string ReleaseBranch { get; set; }
  91. public bool IsExternalUpdateMechanism => PackageUpdateMechanism >= UpdateMechanism.External;
  92. public UpdateMechanism DefaultUpdateMechanism { get; private set; }
  93. public string DefaultBranch { get; private set; }
  94. }
  95. }