98 lines
2.9 KiB
C#
98 lines
2.9 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Net;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Katteker
|
|
{
|
|
/// <summary>
|
|
/// Helps handle the Changelog.
|
|
/// </summary>
|
|
public static class ChangelogHelper
|
|
{
|
|
/// <summary>
|
|
/// Format the Changelog as Html compilant file.s
|
|
/// </summary>
|
|
/// <param name="text"></param>
|
|
/// <param name="extension"></param>
|
|
/// <returns></returns>
|
|
public static string ChangelogAsHtml(this string text, string extension)
|
|
{
|
|
string result;
|
|
switch (extension)
|
|
{
|
|
case ".txt":
|
|
var plainText = WebUtility.HtmlEncode(text);
|
|
result = plainText.Replace(Environment.NewLine, "<br />");
|
|
break;
|
|
case ".md":
|
|
result = new MarkdownSharp.Markdown().Transform(text);
|
|
break;
|
|
default:
|
|
result = text;
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Load changelog from Web or use the local file, if it fails.
|
|
/// </summary>
|
|
/// <param name="filename"></param>
|
|
/// <param name="path"></param>
|
|
/// <returns></returns>
|
|
public static async Task<string> LoadChangelogAsync(string filename, string path)
|
|
{
|
|
if (!string.IsNullOrEmpty(filename) || !string.IsNullOrEmpty(path))
|
|
{
|
|
if (!path.EndsWith("/", StringComparison.Ordinal))
|
|
path += "/";
|
|
var changelog = await ReadFromRemoteFile(path + filename) ?? ReadFromLocalFile(filename);
|
|
return changelog;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private static async Task<string> ReadFromRemoteFile(string path)
|
|
{
|
|
var webReq = WebRequest.Create(path);
|
|
try
|
|
{
|
|
using (var response = await webReq.GetResponseAsync().ConfigureAwait(false))
|
|
using (var sr = new StreamReader(response.GetResponseStream()))
|
|
{
|
|
return await sr.ReadToEndAsync().ConfigureAwait(false);
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
// ignore;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private static string ReadFromLocalFile(string filename)
|
|
{
|
|
try
|
|
{
|
|
var changelogFilename = Path.GetFileName(filename);
|
|
if (changelogFilename == null) return null;
|
|
|
|
var currentChangelogPath = Path.Combine(Environment.CurrentDirectory, changelogFilename);
|
|
if (File.Exists(currentChangelogPath))
|
|
{
|
|
return File.ReadAllText(currentChangelogPath);
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
// ignore;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
} |