From 1f7bf6b9ab11b7d60bc44eaff269a301f9c1f8f6 Mon Sep 17 00:00:00 2001 From: stam Date: Sat, 16 Jan 2021 13:25:29 +0300 Subject: [PATCH 01/16] 1.0.0.7 * show versions from feed --- src/Program.cs | 42 +++++++++++++++++++++++++-------- src/atlassian-downloader.csproj | 8 +++---- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/Program.cs b/src/Program.cs index 517d3ea..f304279 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -24,11 +24,13 @@ namespace EpicMorg.Atlassian.Downloader { /// /// /// - /// Override output directory to download - /// Show all download links from feed without downloading + /// Override output directory to download. + /// Show all download links from feed(s) without downloading. + /// Show all versions from feed(s) without downloading. + /// Show raw json content from feed(s) downloading. /// Override URIs to import. /// - static async Task Main(string outputDir = "atlassian", bool list = false, Uri[] customFeed = null) => await + static async Task Main(string OutputDir = "atlassian", bool ListURL = false, bool ListVersions = false, Uri[] customFeed = null, bool ShowRawJson = false) => await Host .CreateDefaultBuilder() .ConfigureHostConfiguration(configHost => configHost.AddEnvironmentVariables()) @@ -51,11 +53,11 @@ namespace EpicMorg.Atlassian.Downloader { builder.AddSerilog(dispose: true); }); services.AddHostedService(); - services.AddSingleton(new Arguments(outputDir, list, customFeed)); + services.AddSingleton(new Arguments(OutputDir, ListURL, ListVersions, customFeed, ShowRawJson)); }) .RunConsoleAsync(); - public record Arguments(string outputDir = "atlassian", bool list = false, Uri[] customFeed = null); + public record Arguments(string OutputDir = "atlassian", bool ListURL = false, bool ListVersions = false, Uri[] CustomFeed = null, bool ShowRawJson = false); public async Task StartAsync(CancellationToken cancellationToken) { @@ -67,8 +69,8 @@ namespace EpicMorg.Atlassian.Downloader { appBuildType = "[Debug]"; #endif - var feedUrls = arguments.customFeed != null - ? arguments.customFeed.Select(a => a.ToString()).ToArray() + var feedUrls = arguments.CustomFeed != null + ? arguments.CustomFeed.Select(a => a.ToString()).ToArray() : new[] { "https://my.atlassian.com/download/feeds/archived/bamboo.json", "https://my.atlassian.com/download/feeds/archived/clover.json", @@ -106,7 +108,7 @@ namespace EpicMorg.Atlassian.Downloader { var client = new HttpClient(); foreach (var feedUrl in feedUrls) { - var feedDir = Path.Combine(arguments.outputDir, feedUrl[(feedUrl.LastIndexOf('/') + 1)..(feedUrl.LastIndexOf('.'))]); + var feedDir = Path.Combine(arguments.OutputDir, feedUrl[(feedUrl.LastIndexOf('/') + 1)..(feedUrl.LastIndexOf('.'))]); var atlassianJson = await client.GetStringAsync(feedUrl); var callString = "downloads("; var json = atlassianJson[callString.Length..^1]; @@ -114,7 +116,28 @@ namespace EpicMorg.Atlassian.Downloader { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, }); var versionsProg = parsed.GroupBy(a => a.Version).ToDictionary(a => a.Key, a => a.ToArray()); - if (arguments.list) { + if (arguments.ShowRawJson) + { + Console.WriteLine("Not released yet."); + return; + //foreach (var versionProg in versionsProg) + //{ + // foreach (var file in versionProg.Value) + // { + // + // } + //} + } + else if (arguments.ListVersions) + { + foreach (var versionProg in versionsProg) + { + foreach (var file in versionProg.Value) + { + Console.WriteLine(file.Version); + } + } + } else if (arguments.ListURL) { foreach (var versionProg in versionsProg) { foreach (var file in versionProg.Value) { Console.WriteLine(file.ZipUrl); @@ -153,7 +176,6 @@ namespace EpicMorg.Atlassian.Downloader { } logger.LogTrace($"Download complete at {appStartupDate}."); - } diff --git a/src/atlassian-downloader.csproj b/src/atlassian-downloader.csproj index 9c19004..c9dc513 100644 --- a/src/atlassian-downloader.csproj +++ b/src/atlassian-downloader.csproj @@ -11,15 +11,15 @@ favicon.ico EpicMorg.Atlassian.Downloader Atlassian Downloader - Atlassian Downloader by EpicMorg, code by kasthack + Atlassian Downloader by EpicMorg https://github.com/EpicMorg/atlassian-downloader favicon.png git https://github.com/EpicMorg/atlassian-downloader atlassian, donwloader, epicmorg - 1.0.0.6 - 1.0.0.6 - 1.0.0.6 + 1.0.0.7 + 1.0.0.7 + 1.0.0.7 EpicMorg 2021 Atlassian Downloader true From 37dfc25963e3e7f5b80b34200d32c786df481576 Mon Sep 17 00:00:00 2001 From: Konstantin Safonov Date: Sat, 16 Jan 2021 17:25:03 +0300 Subject: [PATCH 02/16] Configure logger --- src/appSettings.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/appSettings.json b/src/appSettings.json index 89e38d3..f7a4941 100644 --- a/src/appSettings.json +++ b/src/appSettings.json @@ -2,7 +2,13 @@ "Serilog": { "MinimumLevel": "Verbose", "WriteTo": [ - "Console", + { + "Name": "Console", + "Args": { + "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console" + } + } + , { "Name": "Logger", "Args": { From fbd0d487293cce0c9fef8aca8ede0b2e186ebe83 Mon Sep 17 00:00:00 2001 From: Konstantin Safonov Date: Sat, 16 Jan 2021 17:27:22 +0300 Subject: [PATCH 03/16] Fix mutually exclusive options, add an option to print JSONs, improve logging, fix hanging after completing the download, fix ctrl-c handling, add auto-removal for incomplete files, refactor the code --- src/DonloaderService.cs | 203 +++++++++++++++++++++++++++ src/Models/DownloadAction.cs | 22 +++ src/Models/DownloaderOptions.cs | 6 + src/Models/ResponseItem.cs | 31 ++++ src/Program.cs | 218 +++++------------------------ src/Properties/launchSettings.json | 8 ++ src/atlassian-downloader.csproj | 1 + 7 files changed, 303 insertions(+), 186 deletions(-) create mode 100644 src/DonloaderService.cs create mode 100644 src/Models/DownloadAction.cs create mode 100644 src/Models/DownloaderOptions.cs create mode 100644 src/Models/ResponseItem.cs create mode 100644 src/Properties/launchSettings.json diff --git a/src/DonloaderService.cs b/src/DonloaderService.cs new file mode 100644 index 0000000..4ec6fc4 --- /dev/null +++ b/src/DonloaderService.cs @@ -0,0 +1,203 @@ +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +namespace EpicMorg.Atlassian.Downloader +{ + class DonloaderService : IHostedService + { + private readonly ILogger logger; + private readonly DownloaderOptions options; + private readonly HttpClient client; + private readonly IHostApplicationLifetime hostApplicationLifetime; + + public DonloaderService(IHostApplicationLifetime hostApplicationLifetime, ILogger logger, HttpClient client, DownloaderOptions options) + { + this.logger = logger; + this.client = client; + this.options = options; + this.hostApplicationLifetime = hostApplicationLifetime; + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + this.SetConsoleTitle(); + var feedUrls = this.GetFeedUrls(); + + logger.LogTrace($"Task started"); + foreach (var feedUrl in feedUrls) + { + if (cancellationToken.IsCancellationRequested) + { + return; + } + var (json, versions) = await this.GetJson(feedUrl, cancellationToken).ConfigureAwait(false); + + switch (options.Action) + { + case DownloadAction.ShowRawJson: + Console.Out.WriteLine(json); + break; + case DownloadAction.Download: + await this.DownloadFilesFromFreed(feedUrl, versions, cancellationToken).ConfigureAwait(false); + break; + case DownloadAction.ListURLs: + foreach (var versionProg in versions) + { + foreach (var file in versionProg.Value) + { + Console.Out.WriteLine(file.ZipUrl); + } + } + break; + case DownloadAction.ListVersions: + foreach (var versionProg in versions) + { + foreach (var file in versionProg.Value) + { + Console.Out.WriteLine(file.Version); + } + } + break; + } + } + logger.LogInformation($"Complete"); + this.hostApplicationLifetime.StopApplication(); + } + + private async Task<(string json, IDictionary versions)> GetJson(string feedUrl, CancellationToken cancellationToken) + { + var atlassianJson = await client.GetStringAsync(feedUrl, cancellationToken).ConfigureAwait(false); + var json = atlassianJson["downloads(".Length..^1]; + var parsed = JsonSerializer.Deserialize(json, new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }); + var versions = parsed.GroupBy(a => a.Version).ToDictionary(a => a.Key, a => a.ToArray()); + + return (json, versions); + } + + private string[] GetFeedUrls() => options.CustomFeed != null + ? options.CustomFeed.Select(a => a.ToString()).ToArray() + : new[] { + "https://my.atlassian.com/download/feeds/archived/bamboo.json", + "https://my.atlassian.com/download/feeds/archived/clover.json", + "https://my.atlassian.com/download/feeds/archived/confluence.json", + "https://my.atlassian.com/download/feeds/archived/crowd.json", + "https://my.atlassian.com/download/feeds/archived/crucible.json", + "https://my.atlassian.com/download/feeds/archived/fisheye.json", + "https://my.atlassian.com/download/feeds/archived/jira-core.json", + "https://my.atlassian.com/download/feeds/archived/jira-servicedesk.json", + "https://my.atlassian.com/download/feeds/archived/jira-software.json", + "https://my.atlassian.com/download/feeds/archived/jira.json", + "https://my.atlassian.com/download/feeds/archived/stash.json", + + "https://my.atlassian.com/download/feeds/current/bamboo.json", + "https://my.atlassian.com/download/feeds/current/clover.json", + "https://my.atlassian.com/download/feeds/current/confluence.json", + "https://my.atlassian.com/download/feeds/current/crowd.json", + "https://my.atlassian.com/download/feeds/current/crucible.json", + "https://my.atlassian.com/download/feeds/current/fisheye.json", + "https://my.atlassian.com/download/feeds/current/jira-core.json", + "https://my.atlassian.com/download/feeds/current/jira-servicedesk.json", + "https://my.atlassian.com/download/feeds/current/jira-software.json", + "https://my.atlassian.com/download/feeds/current/stash.json", + + "https://my.atlassian.com/download/feeds/eap/bamboo.json", + "https://my.atlassian.com/download/feeds/eap/confluence.json", + "https://my.atlassian.com/download/feeds/eap/jira.json", + "https://my.atlassian.com/download/feeds/eap/jira-servicedesk.json", + "https://my.atlassian.com/download/feeds/eap/stash.json" + }; + + private void SetConsoleTitle() + { + const string appBuildType = +#if DEBUG + "[Debug]" +#else + + "[Release]" +#endif + ; + var assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName(); + Console.Title = $@"{assemblyName.Name} {assemblyName.Version} {appBuildType}"; + } + + private async Task DownloadFilesFromFreed(string feedUrl, IDictionary versions, CancellationToken cancellationToken) + { + var feedDir = Path.Combine(options.OutputDir, feedUrl[(feedUrl.LastIndexOf('/') + 1)..(feedUrl.LastIndexOf('.'))]); + logger.LogInformation($"Download from JSON \"{feedUrl}\" started"); + foreach (var version in versions) + { + if (cancellationToken.IsCancellationRequested) + { + return; + } + + var directory = Path.Combine(feedDir, version.Key); + if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + foreach (var file in version.Value) + { + if (cancellationToken.IsCancellationRequested) + { + return; + } + if (file.ZipUrl == null) { continue; } + var serverPath = file.ZipUrl.PathAndQuery; + var outputFile = Path.Combine(directory, serverPath[(serverPath.LastIndexOf("/") + 1)..]); + if (!File.Exists(outputFile)) + { + await DownloadFile(file, outputFile, cancellationToken).ConfigureAwait(false); + } + else + { + logger.LogWarning($"File \"{outputFile}\" already exists. Download from \"{file.ZipUrl}\" skipped."); + } + } + } + logger.LogTrace($"All files from \"{feedUrl}\" successfully downloaded."); + } + + private async Task DownloadFile(ResponseItem file, string outputFile, CancellationToken cancellationToken) + { + if (!string.IsNullOrEmpty(file.Md5)) + { + File.WriteAllText(outputFile + ".md5", file.Md5); + } + try + { + using var outputStream = File.OpenWrite(outputFile); + using var request = await client.GetStreamAsync(file.ZipUrl, cancellationToken).ConfigureAwait(false); + await request.CopyToAsync(outputStream, cancellationToken).ConfigureAwait(false); + } + catch (Exception downloadEx) + { + logger.LogError(downloadEx, $"Failed to download file {file.ZipUrl} to {outputFile}."); + try + { + File.Delete(outputFile); + } + catch (Exception removeEx) + { + logger.LogError(removeEx, $"Failed to remove incomplete file {outputFile}."); + } + } + logger.LogInformation($"File \"{file.ZipUrl}\" successfully downloaded to \"{outputFile}\"."); + } + + public async Task StopAsync(CancellationToken cancellationToken) { } + } +} \ No newline at end of file diff --git a/src/Models/DownloadAction.cs b/src/Models/DownloadAction.cs new file mode 100644 index 0000000..97b3c5e --- /dev/null +++ b/src/Models/DownloadAction.cs @@ -0,0 +1,22 @@ +namespace EpicMorg.Atlassian.Downloader +{ + public enum DownloadAction + { + /// + /// Download application files + /// + Download, + /// + /// Print download URLs and exit + /// + ListURLs, + /// + /// Print available application versions and exit + /// + ListVersions, + /// + /// Print feed JSONs to stdout and exit + /// + ShowRawJson, + } +} \ No newline at end of file diff --git a/src/Models/DownloaderOptions.cs b/src/Models/DownloaderOptions.cs new file mode 100644 index 0000000..ea43012 --- /dev/null +++ b/src/Models/DownloaderOptions.cs @@ -0,0 +1,6 @@ +using System; + +namespace EpicMorg.Atlassian.Downloader +{ + public record DownloaderOptions(string OutputDir, Uri[] CustomFeed, DownloadAction Action) { } +} \ No newline at end of file diff --git a/src/Models/ResponseItem.cs b/src/Models/ResponseItem.cs new file mode 100644 index 0000000..939a3da --- /dev/null +++ b/src/Models/ResponseItem.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +namespace EpicMorg.Atlassian.Downloader +{ + + public partial class ResponseItem + { + public string Description { get; set; } + public string Edition { get; set; } + public Uri ZipUrl { get; set; } + public object TarUrl { get; set; } + public string Md5 { get; set; } + public string Size { get; set; } + public string Released { get; set; } + public string Type { get; set; } + public string Platform { get; set; } + public string Version { get; set; } + public Uri ReleaseNotes { get; set; } + public Uri UpgradeNotes { get; set; } + } +} \ No newline at end of file diff --git a/src/Program.cs b/src/Program.cs index f304279..9559bd2 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -1,202 +1,48 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using Serilog; +using Microsoft.Extensions.Logging; + +using Serilog; + using System; -using System.IO; -using System.Linq; -using System.Net.Http; -using System.Text.Json; -using System.Threading; using System.Threading.Tasks; -namespace EpicMorg.Atlassian.Downloader { - class Program : IHostedService { - - private readonly ILogger logger; - private readonly Arguments arguments; - - public Program(ILogger logger,Arguments arguments) { - this.logger = logger; - this.arguments = arguments; - } - /// - /// - /// +namespace EpicMorg.Atlassian.Downloader +{ + public class Program + { + /// + /// Atlassian archive downloader. See https://github.com/EpicMorg/atlassian-downloader for more info + /// /// Override output directory to download. - /// Show all download links from feed(s) without downloading. - /// Show all versions from feed(s) without downloading. - /// Show raw json content from feed(s) downloading. - /// Override URIs to import. - /// - static async Task Main(string OutputDir = "atlassian", bool ListURL = false, bool ListVersions = false, Uri[] customFeed = null, bool ShowRawJson = false) => await + /// Override URIs to import. + /// Action to perform + static async Task Main(string OutputDir = "atlassian", Uri[] customFeed = null, DownloadAction Action = DownloadAction.Download) => await Host .CreateDefaultBuilder() .ConfigureHostConfiguration(configHost => configHost.AddEnvironmentVariables()) - .ConfigureAppConfiguration((ctx, configuration) => { + .ConfigureAppConfiguration((ctx, configuration) => configuration .SetBasePath(Environment.CurrentDirectory) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true) - .AddEnvironmentVariables(); - }) - .ConfigureServices((ctx, services) => { - - services - .AddOptions() - .AddLogging(builder => { - builder.ClearProviders(); - Log.Logger = new LoggerConfiguration() - .ReadFrom.Configuration(ctx.Configuration) - .CreateLogger(); - builder.AddSerilog(dispose: true); - }); - services.AddHostedService(); - services.AddSingleton(new Arguments(OutputDir, ListURL, ListVersions, customFeed, ShowRawJson)); - }) - .RunConsoleAsync(); - - public record Arguments(string OutputDir = "atlassian", bool ListURL = false, bool ListVersions = false, Uri[] CustomFeed = null, bool ShowRawJson = false); - - public async Task StartAsync(CancellationToken cancellationToken) { - - var appTitle = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name; - var appVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; - var appStartupDate = DateTime.Now; - var appBuildType = "[Release]"; -#if DEBUG - appBuildType = "[Debug]"; -#endif - - var feedUrls = arguments.CustomFeed != null - ? arguments.CustomFeed.Select(a => a.ToString()).ToArray() - : new[] { - "https://my.atlassian.com/download/feeds/archived/bamboo.json", - "https://my.atlassian.com/download/feeds/archived/clover.json", - "https://my.atlassian.com/download/feeds/archived/confluence.json", - "https://my.atlassian.com/download/feeds/archived/crowd.json", - "https://my.atlassian.com/download/feeds/archived/crucible.json", - "https://my.atlassian.com/download/feeds/archived/fisheye.json", - "https://my.atlassian.com/download/feeds/archived/jira-core.json", - "https://my.atlassian.com/download/feeds/archived/jira-servicedesk.json", - "https://my.atlassian.com/download/feeds/archived/jira-software.json", - "https://my.atlassian.com/download/feeds/archived/jira.json", - "https://my.atlassian.com/download/feeds/archived/stash.json", - - "https://my.atlassian.com/download/feeds/current/bamboo.json", - "https://my.atlassian.com/download/feeds/current/clover.json", - "https://my.atlassian.com/download/feeds/current/confluence.json", - "https://my.atlassian.com/download/feeds/current/crowd.json", - "https://my.atlassian.com/download/feeds/current/crucible.json", - "https://my.atlassian.com/download/feeds/current/fisheye.json", - "https://my.atlassian.com/download/feeds/current/jira-core.json", - "https://my.atlassian.com/download/feeds/current/jira-servicedesk.json", - "https://my.atlassian.com/download/feeds/current/jira-software.json", - "https://my.atlassian.com/download/feeds/current/stash.json", - - "https://my.atlassian.com/download/feeds/eap/bamboo.json", - "https://my.atlassian.com/download/feeds/eap/confluence.json", - "https://my.atlassian.com/download/feeds/eap/jira.json", - "https://my.atlassian.com/download/feeds/eap/jira-servicedesk.json", - "https://my.atlassian.com/download/feeds/eap/stash.json" - }; - - Console.Title = $"{appTitle} {appVersion} {appBuildType}"; - logger.LogTrace($"Task started at {appStartupDate}."); - - var client = new HttpClient(); - - foreach (var feedUrl in feedUrls) { - var feedDir = Path.Combine(arguments.OutputDir, feedUrl[(feedUrl.LastIndexOf('/') + 1)..(feedUrl.LastIndexOf('.'))]); - var atlassianJson = await client.GetStringAsync(feedUrl); - var callString = "downloads("; - var json = atlassianJson[callString.Length..^1]; - var parsed = JsonSerializer.Deserialize(json, new JsonSerializerOptions { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - }); - var versionsProg = parsed.GroupBy(a => a.Version).ToDictionary(a => a.Key, a => a.ToArray()); - if (arguments.ShowRawJson) - { - Console.WriteLine("Not released yet."); - return; - //foreach (var versionProg in versionsProg) - //{ - // foreach (var file in versionProg.Value) - // { - // - // } - //} - } - else if (arguments.ListVersions) - { - foreach (var versionProg in versionsProg) - { - foreach (var file in versionProg.Value) - { - Console.WriteLine(file.Version); - } - } - } else if (arguments.ListURL) { - foreach (var versionProg in versionsProg) { - foreach (var file in versionProg.Value) { - Console.WriteLine(file.ZipUrl); - } - } - } else { - logger.LogInformation($"Download from JSON \"{feedUrl}\" started at {appStartupDate}."); - foreach (var versionProg in versionsProg) { - var directory = Path.Combine(feedDir, versionProg.Key); - if (!Directory.Exists(directory)) { - Directory.CreateDirectory(directory); - } - foreach (var file in versionProg.Value) { - if (file.ZipUrl == null) { continue; } - var serverPath = file.ZipUrl.PathAndQuery; - var outputFile = Path.Combine(directory, serverPath[(serverPath.LastIndexOf("/") + 1)..]); - if (!File.Exists(outputFile)) { - if (!string.IsNullOrEmpty(file.Md5)) { - File.WriteAllText(outputFile + ".md5", file.Md5); - } - using var outputStream = File.OpenWrite(outputFile); - using var request = await client.GetStreamAsync(file.ZipUrl).ConfigureAwait(false); - await request.CopyToAsync(outputStream).ConfigureAwait(false); - //Console.ForegroundColor = ConsoleColor.Green; - logger.LogInformation($"File \"{file.ZipUrl}\" successfully downloaded to \"{outputFile}\"."); - // Console.ResetColor(); - } else { - // Console.ForegroundColor = ConsoleColor.Yellow; - logger.LogWarning($"File \"{outputFile}\" already exists. Download from \"{file.ZipUrl}\" skipped."); - // Console.ResetColor(); - } - } - } - logger.LogTrace($"All files from \"{feedUrl}\" successfully downloaded."); - } - } - - logger.LogTrace($"Download complete at {appStartupDate}."); - } - - - public Task StopAsync(CancellationToken cancellationToken) { - throw new NotImplementedException(); - } + .AddEnvironmentVariables()) + .ConfigureServices((ctx, services) => services + .AddOptions() + .AddLogging(builder => + { + Log.Logger = new LoggerConfiguration() + .ReadFrom.Configuration(ctx.Configuration) + .CreateLogger(); + builder + .ClearProviders() + .AddSerilog(dispose: true); + }) + .AddHostedService() + .AddSingleton(new DownloaderOptions(OutputDir, customFeed, Action)) + .AddHttpClient()) + .RunConsoleAsync() + .ConfigureAwait(false); } - - public partial class ResponseArray { - public string Description { get; set; } - public string Edition { get; set; } - public Uri ZipUrl { get; set; } - public object TarUrl { get; set; } - public string Md5 { get; set; } - public string Size { get; set; } - public string Released { get; set; } - public string Type { get; set; } - public string Platform { get; set; } - public string Version { get; set; } - public Uri ReleaseNotes { get; set; } - public Uri UpgradeNotes { get; set; } - } - } \ No newline at end of file diff --git a/src/Properties/launchSettings.json b/src/Properties/launchSettings.json new file mode 100644 index 0000000..1ea6c9f --- /dev/null +++ b/src/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "atlassian-downloader": { + "commandName": "Project", + "commandLineArgs": "--help" + } + } +} \ No newline at end of file diff --git a/src/atlassian-downloader.csproj b/src/atlassian-downloader.csproj index c9dc513..af77227 100644 --- a/src/atlassian-downloader.csproj +++ b/src/atlassian-downloader.csproj @@ -26,6 +26,7 @@ + From c42b0f762670874ee043296c31d747847362726b Mon Sep 17 00:00:00 2001 From: stam Date: Sun, 17 Jan 2021 01:36:35 +0300 Subject: [PATCH 04/16] Revert "Merge branch 'master' into develop" This reverts commit 5e0b74d89f61315a70a238356d6c0066fdc15162, reversing changes made to e0f4bde3e55ec0938295d3506d1a82e9a61772c7. --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index c2e909e..9e1b1aa 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -2,7 +2,7 @@ patreon: epicmorg ko_fi: epicmorg -github: epicmorg, kasthack, stamepicmorg # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +#github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] #open_collective: # Replace with a single Open Collective username #tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel #community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry From 83980e6c7738dface50db7b0557a4ddae3ea2d4e Mon Sep 17 00:00:00 2001 From: Konstantin Safonov Date: Sun, 17 Jan 2021 05:12:33 +0300 Subject: [PATCH 05/16] Fix trailing whitespace, fix case handling --- src/DonloaderService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/DonloaderService.cs b/src/DonloaderService.cs index 4ec6fc4..e91efdc 100644 --- a/src/DonloaderService.cs +++ b/src/DonloaderService.cs @@ -76,10 +76,10 @@ namespace EpicMorg.Atlassian.Downloader private async Task<(string json, IDictionary versions)> GetJson(string feedUrl, CancellationToken cancellationToken) { var atlassianJson = await client.GetStringAsync(feedUrl, cancellationToken).ConfigureAwait(false); - var json = atlassianJson["downloads(".Length..^1]; + var json = atlassianJson.Trim()["downloads(".Length..^1]; var parsed = JsonSerializer.Deserialize(json, new JsonSerializerOptions { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + PropertyNameCaseInsensitive = true }); var versions = parsed.GroupBy(a => a.Version).ToDictionary(a => a.Key, a => a.ToArray()); From e68f68d792095140b1a848fd449b511a76466e97 Mon Sep 17 00:00:00 2001 From: stam Date: Sun, 17 Jan 2021 13:45:28 +0300 Subject: [PATCH 06/16] 1.0.0.7 * sourcetree support --- src/DonloaderService.cs | 13 ++++++++++--- src/Program.cs | 6 +++--- src/appSettings.json | 4 ++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/DonloaderService.cs b/src/DonloaderService.cs index e91efdc..7555758 100644 --- a/src/DonloaderService.cs +++ b/src/DonloaderService.cs @@ -32,7 +32,7 @@ namespace EpicMorg.Atlassian.Downloader this.SetConsoleTitle(); var feedUrls = this.GetFeedUrls(); - logger.LogTrace($"Task started"); + logger.LogInformation($"Task started"); foreach (var feedUrl in feedUrls) { if (cancellationToken.IsCancellationRequested) @@ -116,7 +116,14 @@ namespace EpicMorg.Atlassian.Downloader "https://my.atlassian.com/download/feeds/eap/confluence.json", "https://my.atlassian.com/download/feeds/eap/jira.json", "https://my.atlassian.com/download/feeds/eap/jira-servicedesk.json", - "https://my.atlassian.com/download/feeds/eap/stash.json" + "https://my.atlassian.com/download/feeds/eap/stash.json", + + //https://raw.githubusercontent.com/EpicMorg/atlassian-json/master/json-backups/archived/sourcetree.json + "https://raw.githack.com/EpicMorg/atlassian-json/master/json-backups/archived/sourcetree.json", + + //https://raw.githubusercontent.com/EpicMorg/atlassian-json/master/json-backups/current/sourcetree.json + "https://raw.githack.com/EpicMorg/atlassian-json/master/json-backups/current/sourcetree.json" + }; private void SetConsoleTitle() @@ -168,7 +175,7 @@ namespace EpicMorg.Atlassian.Downloader } } } - logger.LogTrace($"All files from \"{feedUrl}\" successfully downloaded."); + logger.LogInformation($"All files from \"{feedUrl}\" successfully downloaded."); } private async Task DownloadFile(ResponseItem file, string outputFile, CancellationToken cancellationToken) diff --git a/src/Program.cs b/src/Program.cs index 9559bd2..399dc31 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -14,10 +14,10 @@ namespace EpicMorg.Atlassian.Downloader { /// /// Atlassian archive downloader. See https://github.com/EpicMorg/atlassian-downloader for more info - /// + /// + /// Action to perform /// Override output directory to download. - /// Override URIs to import. - /// Action to perform + /// Override URIs to import. static async Task Main(string OutputDir = "atlassian", Uri[] customFeed = null, DownloadAction Action = DownloadAction.Download) => await Host .CreateDefaultBuilder() diff --git a/src/appSettings.json b/src/appSettings.json index f7a4941..330d540 100644 --- a/src/appSettings.json +++ b/src/appSettings.json @@ -1,11 +1,11 @@ { "Serilog": { - "MinimumLevel": "Verbose", + "MinimumLevel": "Information", "WriteTo": [ { "Name": "Console", "Args": { - "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console" + "theme": "Serilog.Sinks.SystemConsole.Themes.SystemConsoleTheme::Literate, Serilog.Sinks.Console" } } , From acbbfa2fb0ef865dd4a47b2700a73bdf275c24b9 Mon Sep 17 00:00:00 2001 From: stam Date: Tue, 19 Jan 2021 14:30:34 +0300 Subject: [PATCH 07/16] configs --- .github/config.yml | 30 ++++++++++++++++++++++++++++++ .github/no-response.yml | 13 +++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 .github/config.yml create mode 100644 .github/no-response.yml diff --git a/.github/config.yml b/.github/config.yml new file mode 100644 index 0000000..11f1df6 --- /dev/null +++ b/.github/config.yml @@ -0,0 +1,30 @@ +# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome + +# Comment to be posted to on first time issues +newIssueWelcomeComment: > + :wave: Thank you for opening your first issue. I'm just an automated bot that's here to help you get the information you need quicker, so please ignore this message if it doesn't apply to your issue. + + If you're looking for support, you should try the Slack group by registering your email address at https://cachethq-slack.herokuapp.com. Alternatively, email support@alt-three.com for our Professional support service (please note, this a paid service.) + + If you're issue is with documentation, you can suggest edits by clicking the **Suggest Edits** link on any page, or open an issue at https://github.com/CachetHQ/Docs + +# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome + +# Comment to be posted to on PRs from first time contributors in your repository +newPRWelcomeComment: > + Congratulations on opening your first Pull Request, this is a momentous day for you and us! :sparkles: + + To help us out, please make sure that you've followed the below: + + - Non-English translations should be submitted to https://translate.cachethq.io + - Documentation should be submitted to https://docs.cachethq.io + - Please make sure that all tests pass! + - Don't worry about StyleCI, it'll fix itself on merge. + +# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge + +# Comment to be posted to on pull requests merged by a first time user +firstPRMergeComment: > + Hooray! Your first Pull Request was merged, here's to many more :rocket: + +# It is recommend to include as many gifs and emojis as possible diff --git a/.github/no-response.yml b/.github/no-response.yml new file mode 100644 index 0000000..7e40c03 --- /dev/null +++ b/.github/no-response.yml @@ -0,0 +1,13 @@ +# Configuration for probot-no-response - https://github.com/probot/no-response + +# Number of days of inactivity before an Issue is closed for lack of response +daysUntilClose: 7 +# Label requiring a response +responseRequiredLabel: more-information-needed +# Comment to post when closing an Issue for lack of response. Set to `false` to disable +closeComment: > + This issue has been automatically closed because there has been no response + to our request for more information from the original author. With only the + information that is currently in the issue, we don't have enough information + to take action. Please reach out if you have or find the answers we need so + that we can investigate further. From 480b43a3c8efdf2fbfbf6ed86040c953ec144f9b Mon Sep 17 00:00:00 2001 From: stam Date: Tue, 19 Jan 2021 16:05:37 +0300 Subject: [PATCH 08/16] readme fix --- README.md | 61 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 3984be1..18c0f96 100644 --- a/README.md +++ b/README.md @@ -7,30 +7,69 @@ Console app written with `c#` and `dotnet5` for downloading all avalible product ![Atlassian Downloader](https://rawcdn.githack.com/EpicMorg/atlassian-downloader/8fd59dfb0514aeff8556761c2f9862185d3489ea/.github/screenshot-1.png) ## Requerments -1. Preinstalled `dotnet5`. Download [here](https://dotnet.microsoft.com/download/dotnet/5.0). +1. Preinstalled`*` `dotnet5`. Download [here](https://dotnet.microsoft.com/download/dotnet/5.0). 2. Supported OS: `win32/win64`, `linux`, `macosx`, `arm/arm64` -## How to +`*` since version `1.0.0.4` application build asstandalone package and do not requre preinstalled `dotnet5`. + +# How to... +## ..bootstrap from scratch 1. `git clone` this repo. 2. `cd` to `/src`. -3. execute `donten run` in `src` folder. +3.1 execute `donten run` in `src` folder. +or +3.2 execute `build.bat(sh)` in `src` folder. 4. by default all data will be downloaded to `src/atlassian` folder and subfolders. -## Usage +## ..install +1. go to `releases` +2. download `package` +3. ... +4. profit! + +# Usage ans settings +## CLI args ``` +atlassian-downloader: + Atlassian archive downloader. See https://github.com/EpicMorg/atlassian-downloader for more info + Usage: atlassian-downloader [options] Options: - --output-dir Override output directory to download [default: atlassian] - --list Show all download links from feed without downloading [default: False] - --custom-feed Override URIs to import. [default: ] - --version Show version information - -?, -h, --help Show help and usage information -``` + --action Action to perform [default: Download] + --output-dir Override output directory to download. [default: atlassian] + --custom-feed Override URIs to import. [default: ] + --version Show version information + -?, -h, --help Show help and usage information -## Supported products: +``` +## Additional settings +File `src/appSettings.json` contains additional settings, like [loglevel](https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.loglevel?view=dotnet-plat-ext-5.0#fields) and [console output theme](https://github.com/serilog/serilog-sinks-console). You can set it up via editing this file. + +### Supported log levels +| Level | Enum | Description +|:-------------|:-------------:|-------------:| +| `Critical` | `5` | Logs that describe an unrecoverable application or system crash, or a catastrophic failure that requires immediate attention. +| `Debug` | `1` | Logs that are used for interactive investigation during development. These logs should primarily contain information useful for debugging and have no long-term value. +| `Error` | `4` | Logs that highlight when the current flow of execution is stopped due to a failure. These should indicate a failure in the current activity, not an application-wide failure. +| `Information` | `2` | Logs that track the general flow of the application. These logs should have long-term value. +| `None` | `6` | Not used for writing log messages. Specifies that a logging category should not write any messages. +| `Trace` | `0` | Logs that contain the most detailed messages. These messages may contain sensitive application data. These messages are disabled by default and should never be enabled in a production environment. +| `Warning` | `3` | Logs that highlight an abnormal or unexpected event in the application flow, but do not otherwise cause the application execution to stop. + +### Supported console themes +The following built-in themes are available, provided by `Serilog.Sinks.Console` package: + + * `ConsoleTheme.None` - no styling + * `SystemConsoleTheme.Literate` - styled to replicate _Serilog.Sinks.Literate_, using the `System.Console` coloring modes supported on all Windows/.NET targets; **this is the default when no theme is specified** + * `SystemConsoleTheme.Grayscale` - a theme using only shades of gray, white, and black + * `AnsiConsoleTheme.Literate` - an ANSI 16-color version of the "literate" theme; we expect to update this to use 256-colors for a more refined look in future + * `AnsiConsoleTheme.Grayscale` - an ANSI 256-color version of the "grayscale" theme + * `AnsiConsoleTheme.Code` - an ANSI 256-color Visual Studio Code-inspired theme + +# Supported products: | Product | Current | Archive | EAP | |-------------|:-------------:|:-------------:|:-------------:| From 2faffc2d3276c3e61be79ed5ee1e674d59a1eba2 Mon Sep 17 00:00:00 2001 From: stam Date: Tue, 19 Jan 2021 16:07:57 +0300 Subject: [PATCH 09/16] readme fix --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 18c0f96..1d1f6cb 100644 --- a/README.md +++ b/README.md @@ -22,12 +22,11 @@ or 4. by default all data will be downloaded to `src/atlassian` folder and subfolders. ## ..install -1. go to `releases` -2. download `package` -3. ... -4. profit! +1. download latest [![Release](https://img.shields.io/github/v/release/EpicMorg/atlassian-downloader?style=flat-square)](https://github.com/EpicMorg/atlassian-downloader/releases) +2. ... +3. profit! -# Usage ans settings +# Usage and settings ## CLI args ``` @@ -50,7 +49,7 @@ File `src/appSettings.json` contains additional settings, like [loglevel](https: ### Supported log levels | Level | Enum | Description -|:-------------|:-------------:|-------------:| +|-------------|:-------------:|-------------| | `Critical` | `5` | Logs that describe an unrecoverable application or system crash, or a catastrophic failure that requires immediate attention. | `Debug` | `1` | Logs that are used for interactive investigation during development. These logs should primarily contain information useful for debugging and have no long-term value. | `Error` | `4` | Logs that highlight when the current flow of execution is stopped due to a failure. These should indicate a failure in the current activity, not an application-wide failure. From 0c8b25734c430bd70ed5e0a40e2d16d60d0923d5 Mon Sep 17 00:00:00 2001 From: stam Date: Tue, 19 Jan 2021 16:13:16 +0300 Subject: [PATCH 10/16] readme fix --- CHANGELOG.md | 3 ++- README.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16bdf32..d0247bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Atlassian Downloader - Changelog -* `1.0.0.6` - added support of `clover`. fixed broken json parsing. added new logger. +* `1.0.0.7` - added `unofficial support` of `sourcetree` via automatic mirror [from github](https://github.com/EpicMorg/atlassian-json). fixed `logger` output, code improvments. +* `1.0.0.6` - added support of `clover`. fixed broken json parsing. added new `logger`. * `1.0.0.5` - added support for `EAP` releases. * `1.0.0.4` - bump version. rewrited build scripts. added support of `arm` and `arm64`. * `1.0.0.3` - some cosmetics improvements. diff --git a/README.md b/README.md index 1d1f6cb..4dd0a79 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ The following built-in themes are available, provided by `Serilog.Sinks.Console` | [![Product](https://img.shields.io/static/v1?label=Atlassian&message=Jira%20Core&color=bright%20green&style=for-the-badge)](https://www.atlassian.com/software/jira/core) | :white_check_mark: | :white_check_mark: | :x: | | [![Product](https://img.shields.io/static/v1?label=Atlassian&message=Jira%20Software&color=bright%20green&style=for-the-badge)](https://www.atlassian.com/software/jira) | :white_check_mark: | :white_check_mark: | :white_check_mark: | | [![Product](https://img.shields.io/static/v1?label=Atlassian&message=Jira%20Servicedesk&color=bright%20green&style=for-the-badge)](https://www.atlassian.com/software/jira/service-management) | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| [![Product](https://img.shields.io/static/v1?label=Atlassian&message=SourceTree&color=yellow&style=for-the-badge)](https://www.atlassian.com/software/sourcetree) | :x: | :x: | :x: | +| [![Product](https://img.shields.io/static/v1?label=Atlassian&message=SourceTree&color=bright%20green&style=for-the-badge)](https://www.atlassian.com/software/sourcetree) | :white_check_mark: | :white_check_mark: | :x: | * Archive of `Atlassian` jsons available [here](https://github.com/EpicMorg/atlassian-json). From 42aec2a48c56001ce27483e2411f773bd359eacc Mon Sep 17 00:00:00 2001 From: stam Date: Tue, 19 Jan 2021 16:19:24 +0300 Subject: [PATCH 11/16] Update config.yml --- .github/config.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/config.yml b/.github/config.yml index 11f1df6..c379cef 100644 --- a/.github/config.yml +++ b/.github/config.yml @@ -4,22 +4,12 @@ newIssueWelcomeComment: > :wave: Thank you for opening your first issue. I'm just an automated bot that's here to help you get the information you need quicker, so please ignore this message if it doesn't apply to your issue. - If you're looking for support, you should try the Slack group by registering your email address at https://cachethq-slack.herokuapp.com. Alternatively, email support@alt-three.com for our Professional support service (please note, this a paid service.) - - If you're issue is with documentation, you can suggest edits by clicking the **Suggest Edits** link on any page, or open an issue at https://github.com/CachetHQ/Docs - # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome # Comment to be posted to on PRs from first time contributors in your repository newPRWelcomeComment: > Congratulations on opening your first Pull Request, this is a momentous day for you and us! :sparkles: - To help us out, please make sure that you've followed the below: - - - Non-English translations should be submitted to https://translate.cachethq.io - - Documentation should be submitted to https://docs.cachethq.io - - Please make sure that all tests pass! - - Don't worry about StyleCI, it'll fix itself on merge. # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge From f57c6e3986cda24926e2aab92218f3aafe7ebf9e Mon Sep 17 00:00:00 2001 From: stam Date: Tue, 19 Jan 2021 19:11:27 +0300 Subject: [PATCH 12/16] CL LF --- src/Program.cs | 70 +++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/Program.cs b/src/Program.cs index 399dc31..a956fbb 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -1,48 +1,48 @@ -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Serilog; -using System; -using System.Threading.Tasks; - +using System; +using System.Threading.Tasks; + namespace EpicMorg.Atlassian.Downloader -{ +{ public class Program { /// /// Atlassian archive downloader. See https://github.com/EpicMorg/atlassian-downloader for more info - /// + /// /// Action to perform - /// Override output directory to download. - /// Override URIs to import. - static async Task Main(string OutputDir = "atlassian", Uri[] customFeed = null, DownloadAction Action = DownloadAction.Download) => await - Host - .CreateDefaultBuilder() - .ConfigureHostConfiguration(configHost => configHost.AddEnvironmentVariables()) - .ConfigureAppConfiguration((ctx, configuration) => - configuration - .SetBasePath(Environment.CurrentDirectory) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true) - .AddEnvironmentVariables()) - .ConfigureServices((ctx, services) => services - .AddOptions() + /// Override output directory to download. + /// Override URIs to import. + static async Task Main(string OutputDir = "atlassian", Uri[] customFeed = null, DownloadAction Action = DownloadAction.Download) => await + Host + .CreateDefaultBuilder() + .ConfigureHostConfiguration(configHost => configHost.AddEnvironmentVariables()) + .ConfigureAppConfiguration((ctx, configuration) => + configuration + .SetBasePath(Environment.CurrentDirectory) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true) + .AddEnvironmentVariables()) + .ConfigureServices((ctx, services) => services + .AddOptions() .AddLogging(builder => - { - Log.Logger = new LoggerConfiguration() - .ReadFrom.Configuration(ctx.Configuration) - .CreateLogger(); - builder - .ClearProviders() - .AddSerilog(dispose: true); - }) - .AddHostedService() - .AddSingleton(new DownloaderOptions(OutputDir, customFeed, Action)) - .AddHttpClient()) - .RunConsoleAsync() + { + Log.Logger = new LoggerConfiguration() + .ReadFrom.Configuration(ctx.Configuration) + .CreateLogger(); + builder + .ClearProviders() + .AddSerilog(dispose: true); + }) + .AddHostedService() + .AddSingleton(new DownloaderOptions(OutputDir, customFeed, Action)) + .AddHttpClient()) + .RunConsoleAsync() .ConfigureAwait(false); - } + } } \ No newline at end of file From 0b95530eed9a961fac304b1d4a148f6fe3b52169 Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 20 Jan 2021 00:39:18 +0300 Subject: [PATCH 13/16] 1.0.0.7 * version page * code improvments --- src/DonloaderService.cs | 346 ++++++++++++++++++++------------ src/Models/DownloaderOptions.cs | 4 +- src/Models/ResponseItem.cs | 50 ++--- src/Program.cs | 9 +- src/atlassian-downloader.csproj | 3 +- 5 files changed, 256 insertions(+), 156 deletions(-) diff --git a/src/DonloaderService.cs b/src/DonloaderService.cs index 7555758..6b865ae 100644 --- a/src/DonloaderService.cs +++ b/src/DonloaderService.cs @@ -1,76 +1,179 @@ -using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -using System; +using System; using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net.Http; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; - +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Reflection; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + namespace EpicMorg.Atlassian.Downloader -{ +{ class DonloaderService : IHostedService - { - private readonly ILogger logger; + { + private readonly ILogger logger; private readonly DownloaderOptions options; private readonly HttpClient client; private readonly IHostApplicationLifetime hostApplicationLifetime; + private readonly string assemblyEnvironment = string.Format("[{1}, {0}]", + System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant(), + System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription); + private readonly string assemblyVersion = Assembly.GetEntryAssembly().GetCustomAttribute().InformationalVersion; + + private readonly string assemblyName = Assembly.GetEntryAssembly().GetCustomAttribute().Product; + const string assemblyBuildType = +#if DEBUG + "[Debug]" +#else + + "[Release]" +#endif + ; public DonloaderService(IHostApplicationLifetime hostApplicationLifetime, ILogger logger, HttpClient client, DownloaderOptions options) - { - this.logger = logger; - this.client = client; + { + this.logger = logger; + this.client = client; this.options = options; this.hostApplicationLifetime = hostApplicationLifetime; } - - public async Task StartAsync(CancellationToken cancellationToken) - { - this.SetConsoleTitle(); - var feedUrls = this.GetFeedUrls(); - - logger.LogInformation($"Task started"); - foreach (var feedUrl in feedUrls) - { - if (cancellationToken.IsCancellationRequested) - { - return; - } - var (json, versions) = await this.GetJson(feedUrl, cancellationToken).ConfigureAwait(false); + public const ConsoleColor DEFAULT = ConsoleColor.Blue; - switch (options.Action) - { - case DownloadAction.ShowRawJson: - Console.Out.WriteLine(json); - break; - case DownloadAction.Download: - await this.DownloadFilesFromFreed(feedUrl, versions, cancellationToken).ConfigureAwait(false); - break; - case DownloadAction.ListURLs: - foreach (var versionProg in versions) - { - foreach (var file in versionProg.Value) + public static void WriteColorLine(string text, params object[] args) + { + Dictionary colors = new() + { + { '!', ConsoleColor.Red }, + { '@', ConsoleColor.Green }, + { '#', ConsoleColor.Blue }, + { '$', ConsoleColor.Magenta }, + { '&', ConsoleColor.Yellow }, + { '%', ConsoleColor.Cyan } + }; + // TODO: word wrap, backslash escapes + text = string.Format(text, args); + string chunk = ""; + bool paren = false; + for (int i = 0; i < text.Length; i++) + { + char c = text[i]; + if (colors.ContainsKey(c) && StringNext(text, i) != ' ') + { + Console.Write(chunk); + chunk = ""; + if (StringNext(text, i) == '(') + { + i++; // skip past the paren + paren = true; + } + Console.ForegroundColor = colors[c]; + } + else if (paren && c == ')') + { + paren = false; + Console.ForegroundColor = DEFAULT; + } + else if (Console.ForegroundColor != DEFAULT) + { + Console.Write(c); + if (c == ' ' && !paren) + Console.ForegroundColor = DEFAULT; + } + else + chunk += c; + } + Console.WriteLine(chunk); + Console.ForegroundColor = DEFAULT; + } + + public static char StringPrev(string text, int index) + { + return (index == 0 || text.Length == 0) ? '\0' : text[index - 1]; + } + + public static char StringNext(string text, int index) + { + return (index < text.Length) ? text[index + 1] : '\0'; + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + SetConsoleTitle(); + if (options.Version) + { + logger.LogInformation($"{assemblyName} {assemblyVersion} {assemblyEnvironment} {assemblyBuildType}"); + Console.BackgroundColor = ConsoleColor.Black; + WriteColorLine("%╔═╦═══════════════════════════════════════════════════════════════════════════════════════╦═╗"); + WriteColorLine("%╠═╝ .''. %╚═%╣"); + WriteColorLine("%║ .:cc;. %║"); + WriteColorLine("%║ .;cccc;. %║"); + WriteColorLine("%║ .;cccccc;. !╔══════════════════════════════════════════════╗ %║"); + WriteColorLine("%║ .:ccccccc;. !║ "+ assemblyName +" !║ %║"); + WriteColorLine("%║ 'ccccccccc;. !╠══════════════════════════════════════════════╣ %║"); + WriteColorLine("%║ ,cccccccccc;. !║ &Code: @kastkack !║ %║"); + WriteColorLine("%║ ,ccccccccccc;. !║ &GFX: @stam !║ %║"); + WriteColorLine("%║ .... .:ccccccccccc;. !╠══════════════════════════════════════════════╣ %║"); + WriteColorLine("%║ .',,'..;cccccccccccc;. !║ &Version: "+ assemblyVersion + " !║ %║"); + WriteColorLine("%║ .,,,,,'.';cccccccccccc;. !║ &GitHub: $EpicMorg/atlassian-downloader !║ %║"); + WriteColorLine("%║ .,;;;;;,'.':cccccccccccc;. !╚══════════════════════════════════════════════╝ %║"); + WriteColorLine("%║ .;:;;;;;;,...:cccccccccccc;. %║"); + WriteColorLine("%║ .;:::::;;;;'. .;:ccccccccccc;. %║"); + WriteColorLine("%║ .:cc::::::::,. ..:ccccccccccc;. %║"); + WriteColorLine("%║ .:cccccc:::::' .:ccccccccccc;. %║"); + WriteColorLine("%║ .;:::::::::::,. .;:::::::::::,. %║"); + WriteColorLine("%╠═╗ ............ ............ %╔═╣"); + WriteColorLine("%╚═╩═══════════════════════════════════════════════════════════════════════════════════════╩═╝"); + Console.ResetColor(); + } + else + { + var feedUrls = this.GetFeedUrls(); + + logger.LogInformation($"Task started"); + foreach (var feedUrl in feedUrls) + { + if (cancellationToken.IsCancellationRequested) + { + return; + } + var (json, versions) = await this.GetJson(feedUrl, cancellationToken).ConfigureAwait(false); + + switch (options.Action) + { + case DownloadAction.ShowRawJson: + Console.Out.WriteLine(json); + break; + case DownloadAction.Download: + await this.DownloadFilesFromFreed(feedUrl, versions, cancellationToken).ConfigureAwait(false); + break; + case DownloadAction.ListURLs: + foreach (var versionProg in versions) { - Console.Out.WriteLine(file.ZipUrl); + foreach (var file in versionProg.Value) + { + Console.Out.WriteLine(file.ZipUrl); + } } - } - break; - case DownloadAction.ListVersions: - foreach (var versionProg in versions) - { - foreach (var file in versionProg.Value) + break; + case DownloadAction.ListVersions: + foreach (var versionProg in versions) { - Console.Out.WriteLine(file.Version); + foreach (var file in versionProg.Value) + { + Console.Out.WriteLine(file.Version); + } } - } - break; - } - } - logger.LogInformation($"Complete"); - this.hostApplicationLifetime.StopApplication(); + break; + } + } + } + logger.LogInformation($"Complete"); + + this.hostApplicationLifetime.StopApplication(); } private async Task<(string json, IDictionary versions)> GetJson(string feedUrl, CancellationToken cancellationToken) @@ -88,94 +191,87 @@ namespace EpicMorg.Atlassian.Downloader private string[] GetFeedUrls() => options.CustomFeed != null ? options.CustomFeed.Select(a => a.ToString()).ToArray() - : new[] { + : new[] { "https://my.atlassian.com/download/feeds/archived/bamboo.json", - "https://my.atlassian.com/download/feeds/archived/clover.json", - "https://my.atlassian.com/download/feeds/archived/confluence.json", - "https://my.atlassian.com/download/feeds/archived/crowd.json", - "https://my.atlassian.com/download/feeds/archived/crucible.json", - "https://my.atlassian.com/download/feeds/archived/fisheye.json", - "https://my.atlassian.com/download/feeds/archived/jira-core.json", - "https://my.atlassian.com/download/feeds/archived/jira-servicedesk.json", - "https://my.atlassian.com/download/feeds/archived/jira-software.json", - "https://my.atlassian.com/download/feeds/archived/jira.json", - "https://my.atlassian.com/download/feeds/archived/stash.json", - + "https://my.atlassian.com/download/feeds/archived/clover.json", + "https://my.atlassian.com/download/feeds/archived/confluence.json", + "https://my.atlassian.com/download/feeds/archived/crowd.json", + "https://my.atlassian.com/download/feeds/archived/crucible.json", + "https://my.atlassian.com/download/feeds/archived/fisheye.json", + "https://my.atlassian.com/download/feeds/archived/jira-core.json", + "https://my.atlassian.com/download/feeds/archived/jira-servicedesk.json", + "https://my.atlassian.com/download/feeds/archived/jira-software.json", + "https://my.atlassian.com/download/feeds/archived/jira.json", + "https://my.atlassian.com/download/feeds/archived/stash.json", + "https://my.atlassian.com/download/feeds/current/bamboo.json", - "https://my.atlassian.com/download/feeds/current/clover.json", - "https://my.atlassian.com/download/feeds/current/confluence.json", - "https://my.atlassian.com/download/feeds/current/crowd.json", - "https://my.atlassian.com/download/feeds/current/crucible.json", - "https://my.atlassian.com/download/feeds/current/fisheye.json", - "https://my.atlassian.com/download/feeds/current/jira-core.json", - "https://my.atlassian.com/download/feeds/current/jira-servicedesk.json", - "https://my.atlassian.com/download/feeds/current/jira-software.json", - "https://my.atlassian.com/download/feeds/current/stash.json", - - "https://my.atlassian.com/download/feeds/eap/bamboo.json", - "https://my.atlassian.com/download/feeds/eap/confluence.json", - "https://my.atlassian.com/download/feeds/eap/jira.json", + "https://my.atlassian.com/download/feeds/current/clover.json", + "https://my.atlassian.com/download/feeds/current/confluence.json", + "https://my.atlassian.com/download/feeds/current/crowd.json", + "https://my.atlassian.com/download/feeds/current/crucible.json", + "https://my.atlassian.com/download/feeds/current/fisheye.json", + "https://my.atlassian.com/download/feeds/current/jira-core.json", + "https://my.atlassian.com/download/feeds/current/jira-servicedesk.json", + "https://my.atlassian.com/download/feeds/current/jira-software.json", + "https://my.atlassian.com/download/feeds/current/stash.json", + + "https://my.atlassian.com/download/feeds/eap/bamboo.json", + "https://my.atlassian.com/download/feeds/eap/confluence.json", + "https://my.atlassian.com/download/feeds/eap/jira.json", "https://my.atlassian.com/download/feeds/eap/jira-servicedesk.json", - "https://my.atlassian.com/download/feeds/eap/stash.json", - - //https://raw.githubusercontent.com/EpicMorg/atlassian-json/master/json-backups/archived/sourcetree.json - "https://raw.githack.com/EpicMorg/atlassian-json/master/json-backups/archived/sourcetree.json", - - //https://raw.githubusercontent.com/EpicMorg/atlassian-json/master/json-backups/current/sourcetree.json - "https://raw.githack.com/EpicMorg/atlassian-json/master/json-backups/current/sourcetree.json" + "https://my.atlassian.com/download/feeds/eap/stash.json", + + //https://raw.githubusercontent.com/EpicMorg/atlassian-json/master/json-backups/archived/sourcetree.json + "https://raw.githack.com/EpicMorg/atlassian-json/master/json-backups/archived/sourcetree.json", + + //https://raw.githubusercontent.com/EpicMorg/atlassian-json/master/json-backups/current/sourcetree.json + "https://raw.githack.com/EpicMorg/atlassian-json/master/json-backups/current/sourcetree.json" }; - private void SetConsoleTitle() - { - const string appBuildType = -#if DEBUG - "[Debug]" -#else - - "[Release]" -#endif - ; - var assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName(); - Console.Title = $@"{assemblyName.Name} {assemblyName.Version} {appBuildType}"; + private void SetConsoleTitle() + { + Console.Title = $@"{assemblyName} {assemblyVersion} {assemblyEnvironment} - {assemblyBuildType}"; } private async Task DownloadFilesFromFreed(string feedUrl, IDictionary versions, CancellationToken cancellationToken) { - var feedDir = Path.Combine(options.OutputDir, feedUrl[(feedUrl.LastIndexOf('/') + 1)..(feedUrl.LastIndexOf('.'))]); - logger.LogInformation($"Download from JSON \"{feedUrl}\" started"); - foreach (var version in versions) - { - if (cancellationToken.IsCancellationRequested) - { - return; - } - - var directory = Path.Combine(feedDir, version.Key); - if (!Directory.Exists(directory)) - { - Directory.CreateDirectory(directory); - } - foreach (var file in version.Value) + + var feedDir = Path.Combine(options.OutputDir, feedUrl[(feedUrl.LastIndexOf('/') + 1)..(feedUrl.LastIndexOf('.'))]); + logger.LogInformation($"Download from JSON \"{feedUrl}\" started"); + foreach (var version in versions) { if (cancellationToken.IsCancellationRequested) { return; } - if (file.ZipUrl == null) { continue; } - var serverPath = file.ZipUrl.PathAndQuery; - var outputFile = Path.Combine(directory, serverPath[(serverPath.LastIndexOf("/") + 1)..]); - if (!File.Exists(outputFile)) + + var directory = Path.Combine(feedDir, version.Key); + if (!Directory.Exists(directory)) { - await DownloadFile(file, outputFile, cancellationToken).ConfigureAwait(false); + Directory.CreateDirectory(directory); } - else + foreach (var file in version.Value) { - logger.LogWarning($"File \"{outputFile}\" already exists. Download from \"{file.ZipUrl}\" skipped."); + if (cancellationToken.IsCancellationRequested) + { + return; + } + if (file.ZipUrl == null) { continue; } + var serverPath = file.ZipUrl.PathAndQuery; + var outputFile = Path.Combine(directory, serverPath[(serverPath.LastIndexOf("/") + 1)..]); + if (!File.Exists(outputFile)) + { + await DownloadFile(file, outputFile, cancellationToken).ConfigureAwait(false); + } + else + { + logger.LogWarning($"File \"{outputFile}\" already exists. Download from \"{file.ZipUrl}\" skipped."); + } } } - } - logger.LogInformation($"All files from \"{feedUrl}\" successfully downloaded."); + logger.LogInformation($"All files from \"{feedUrl}\" successfully downloaded."); + } private async Task DownloadFile(ResponseItem file, string outputFile, CancellationToken cancellationToken) @@ -205,6 +301,8 @@ namespace EpicMorg.Atlassian.Downloader logger.LogInformation($"File \"{file.ZipUrl}\" successfully downloaded to \"{outputFile}\"."); } +#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously public async Task StopAsync(CancellationToken cancellationToken) { } - } +#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + } } \ No newline at end of file diff --git a/src/Models/DownloaderOptions.cs b/src/Models/DownloaderOptions.cs index ea43012..aca9cb8 100644 --- a/src/Models/DownloaderOptions.cs +++ b/src/Models/DownloaderOptions.cs @@ -1,6 +1,6 @@ using System; namespace EpicMorg.Atlassian.Downloader -{ - public record DownloaderOptions(string OutputDir, Uri[] CustomFeed, DownloadAction Action) { } +{ + public record DownloaderOptions(string OutputDir, Uri[] CustomFeed, DownloadAction Action,bool Version) { } } \ No newline at end of file diff --git a/src/Models/ResponseItem.cs b/src/Models/ResponseItem.cs index 939a3da..ce4e66e 100644 --- a/src/Models/ResponseItem.cs +++ b/src/Models/ResponseItem.cs @@ -1,31 +1,31 @@ -using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -using System; +using System; using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net.Http; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; - +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + namespace EpicMorg.Atlassian.Downloader -{ - +{ + public partial class ResponseItem - { - public string Description { get; set; } - public string Edition { get; set; } - public Uri ZipUrl { get; set; } - public object TarUrl { get; set; } - public string Md5 { get; set; } - public string Size { get; set; } - public string Released { get; set; } - public string Type { get; set; } - public string Platform { get; set; } - public string Version { get; set; } - public Uri ReleaseNotes { get; set; } - public Uri UpgradeNotes { get; set; } - } + { + public string Description { get; set; } + public string Edition { get; set; } + public Uri ZipUrl { get; set; } + public object TarUrl { get; set; } + public string Md5 { get; set; } + public string Size { get; set; } + public string Released { get; set; } + public string Type { get; set; } + public string Platform { get; set; } + public string Version { get; set; } + public Uri ReleaseNotes { get; set; } + public Uri UpgradeNotes { get; set; } + } } \ No newline at end of file diff --git a/src/Program.cs b/src/Program.cs index a956fbb..58fff86 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -16,9 +16,10 @@ namespace EpicMorg.Atlassian.Downloader /// Atlassian archive downloader. See https://github.com/EpicMorg/atlassian-downloader for more info /// /// Action to perform - /// Override output directory to download. - /// Override URIs to import. - static async Task Main(string OutputDir = "atlassian", Uri[] customFeed = null, DownloadAction Action = DownloadAction.Download) => await + /// Override output directory to download + /// Override URIs to import + /// Show credits" banner + static async Task Main(string OutputDir = "atlassian", Uri[] customFeed = null, DownloadAction Action = DownloadAction.Download, bool Version = false) => await Host .CreateDefaultBuilder() .ConfigureHostConfiguration(configHost => configHost.AddEnvironmentVariables()) @@ -40,7 +41,7 @@ namespace EpicMorg.Atlassian.Downloader .AddSerilog(dispose: true); }) .AddHostedService() - .AddSingleton(new DownloaderOptions(OutputDir, customFeed, Action)) + .AddSingleton(new DownloaderOptions(OutputDir, customFeed, Action, Version)) .AddHttpClient()) .RunConsoleAsync() .ConfigureAwait(false); diff --git a/src/atlassian-downloader.csproj b/src/atlassian-downloader.csproj index af77227..0c606eb 100644 --- a/src/atlassian-downloader.csproj +++ b/src/atlassian-downloader.csproj @@ -10,7 +10,7 @@ net5.0 favicon.ico EpicMorg.Atlassian.Downloader - Atlassian Downloader + EpicMorg, kasthack, stam Atlassian Downloader by EpicMorg https://github.com/EpicMorg/atlassian-downloader favicon.png @@ -23,6 +23,7 @@ EpicMorg 2021 Atlassian Downloader true + EpicMorg From 0c9ce49dbe7c002ec26e851f1cd4e5a8f7b67eea Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 20 Jan 2021 00:45:15 +0300 Subject: [PATCH 14/16] mkerge conflict resolve https://github.com/EpicMorg/atlassian-downloader/pull/17 --- src/DonloaderService.cs | 74 ++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/src/DonloaderService.cs b/src/DonloaderService.cs index 6b865ae..5166b3b 100644 --- a/src/DonloaderService.cs +++ b/src/DonloaderService.cs @@ -112,12 +112,12 @@ namespace EpicMorg.Atlassian.Downloader WriteColorLine("%║ .:cc;. %║"); WriteColorLine("%║ .;cccc;. %║"); WriteColorLine("%║ .;cccccc;. !╔══════════════════════════════════════════════╗ %║"); - WriteColorLine("%║ .:ccccccc;. !║ "+ assemblyName +" !║ %║"); + WriteColorLine("%║ .:ccccccc;. !║ " + assemblyName + " !║ %║"); WriteColorLine("%║ 'ccccccccc;. !╠══════════════════════════════════════════════╣ %║"); WriteColorLine("%║ ,cccccccccc;. !║ &Code: @kastkack !║ %║"); WriteColorLine("%║ ,ccccccccccc;. !║ &GFX: @stam !║ %║"); WriteColorLine("%║ .... .:ccccccccccc;. !╠══════════════════════════════════════════════╣ %║"); - WriteColorLine("%║ .',,'..;cccccccccccc;. !║ &Version: "+ assemblyVersion + " !║ %║"); + WriteColorLine("%║ .',,'..;cccccccccccc;. !║ &Version: " + assemblyVersion + " !║ %║"); WriteColorLine("%║ .,,,,,'.';cccccccccccc;. !║ &GitHub: $EpicMorg/atlassian-downloader !║ %║"); WriteColorLine("%║ .,;;;;;,'.':cccccccccccc;. !╚══════════════════════════════════════════════╝ %║"); WriteColorLine("%║ .;:;;;;;;,...:cccccccccccc;. %║"); @@ -148,7 +148,7 @@ namespace EpicMorg.Atlassian.Downloader Console.Out.WriteLine(json); break; case DownloadAction.Download: - await this.DownloadFilesFromFreed(feedUrl, versions, cancellationToken).ConfigureAwait(false); + await this.DownloadFilesFromFeed(feedUrl, versions, cancellationToken).ConfigureAwait(false); break; case DownloadAction.ListURLs: foreach (var versionProg in versions) @@ -172,7 +172,7 @@ namespace EpicMorg.Atlassian.Downloader } } logger.LogInformation($"Complete"); - + this.hostApplicationLifetime.StopApplication(); } @@ -180,12 +180,14 @@ namespace EpicMorg.Atlassian.Downloader { var atlassianJson = await client.GetStringAsync(feedUrl, cancellationToken).ConfigureAwait(false); var json = atlassianJson.Trim()["downloads(".Length..^1]; + logger.LogTrace("Downloaded json: {0}", json); var parsed = JsonSerializer.Deserialize(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + logger.LogDebug("Found {0} releases", parsed.Length); var versions = parsed.GroupBy(a => a.Version).ToDictionary(a => a.Key, a => a.ToArray()); - + logger.LogDebug("Found {0} releases", versions.Count); return (json, versions); } @@ -226,52 +228,56 @@ namespace EpicMorg.Atlassian.Downloader //https://raw.githubusercontent.com/EpicMorg/atlassian-json/master/json-backups/current/sourcetree.json "https://raw.githack.com/EpicMorg/atlassian-json/master/json-backups/current/sourcetree.json" - + }; - private void SetConsoleTitle() + private void SetConsoleTitle() { Console.Title = $@"{assemblyName} {assemblyVersion} {assemblyEnvironment} - {assemblyBuildType}"; } - private async Task DownloadFilesFromFreed(string feedUrl, IDictionary versions, CancellationToken cancellationToken) + private async Task DownloadFilesFromFeed(string feedUrl, IDictionary versions, CancellationToken cancellationToken) { - - var feedDir = Path.Combine(options.OutputDir, feedUrl[(feedUrl.LastIndexOf('/') + 1)..(feedUrl.LastIndexOf('.'))]); - logger.LogInformation($"Download from JSON \"{feedUrl}\" started"); - foreach (var version in versions) + + var feedDir = Path.Combine(options.OutputDir, feedUrl[(feedUrl.LastIndexOf('/') + 1)..(feedUrl.LastIndexOf('.'))]); + logger.LogInformation($"Download from JSON \"{feedUrl}\" started"); + foreach (var version in versions) + { + if (cancellationToken.IsCancellationRequested) + { + return; + } + + var directory = Path.Combine(feedDir, version.Key); + if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + foreach (var file in version.Value) { if (cancellationToken.IsCancellationRequested) { return; } - - var directory = Path.Combine(feedDir, version.Key); - if (!Directory.Exists(directory)) + if (file.ZipUrl == null) { - Directory.CreateDirectory(directory); + logger.LogWarning($"Empty ZipUrl found for version '{version.Key}' in {feedUrl}"); + continue; } - foreach (var file in version.Value) + var serverPath = file.ZipUrl.PathAndQuery; + var outputFile = Path.Combine(directory, serverPath[(serverPath.LastIndexOf("/") + 1)..]); + if (!File.Exists(outputFile)) { - if (cancellationToken.IsCancellationRequested) - { - return; - } - if (file.ZipUrl == null) { continue; } - var serverPath = file.ZipUrl.PathAndQuery; - var outputFile = Path.Combine(directory, serverPath[(serverPath.LastIndexOf("/") + 1)..]); - if (!File.Exists(outputFile)) - { - await DownloadFile(file, outputFile, cancellationToken).ConfigureAwait(false); - } - else - { - logger.LogWarning($"File \"{outputFile}\" already exists. Download from \"{file.ZipUrl}\" skipped."); - } + await DownloadFile(file, outputFile, cancellationToken).ConfigureAwait(false); + } + else + { + logger.LogWarning($"File \"{outputFile}\" already exists. Download from \"{file.ZipUrl}\" skipped."); } } - logger.LogInformation($"All files from \"{feedUrl}\" successfully downloaded."); - + } + logger.LogInformation($"All files from \"{feedUrl}\" successfully downloaded."); + } private async Task DownloadFile(ResponseItem file, string outputFile, CancellationToken cancellationToken) From 98409916399b552624ad77a63a11bd2f992393f0 Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 20 Jan 2021 00:52:07 +0300 Subject: [PATCH 15/16] Fixed typo Fixed typo --- src/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Program.cs b/src/Program.cs index 58fff86..85994ad 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -18,7 +18,7 @@ namespace EpicMorg.Atlassian.Downloader /// Action to perform /// Override output directory to download /// Override URIs to import - /// Show credits" banner + /// Show credits banner static async Task Main(string OutputDir = "atlassian", Uri[] customFeed = null, DownloadAction Action = DownloadAction.Download, bool Version = false) => await Host .CreateDefaultBuilder() From 23f092db9c96ecee92b97ce925b2cb46d08c599c Mon Sep 17 00:00:00 2001 From: stam Date: Wed, 20 Jan 2021 01:01:26 +0300 Subject: [PATCH 16/16] release info --- .github/screenshot-1.png | Bin 34842 -> 64475 bytes .github/screenshot-2.png | Bin 0 -> 30628 bytes .github/screenshot-3.png | Bin 0 -> 44654 bytes README.md | 7 +++---- 4 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 .github/screenshot-2.png create mode 100644 .github/screenshot-3.png diff --git a/.github/screenshot-1.png b/.github/screenshot-1.png index 9bba4bba31cb6c7fa479a785b6d72344c12f2f72..8ffc6dde289e74a06103ff256bd99da43e695d64 100644 GIT binary patch literal 64475 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%0DPSrQEC?@37FHUeJiq0$23!)wrGm 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

s>zcEW|NcX`%@ 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 z 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 literal 34842 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

{ygco1k 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%0A=uZL|u`S~YEubO(~0VJG* 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 diff --git a/.github/screenshot-2.png b/.github/screenshot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a41806095e3ed593a27be3bd131af90eee20491e GIT binary patch literal 30628 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 Override output directory to download [default: atlassian] + --custom-feed Override URIs to import [default: ] --action Action to perform [default: Download] - --output-dir Override output directory to download. [default: atlassian] - --custom-feed Override URIs to import. [default: ] - --version Show version information + --version Show credits banner [default: False] -?, -h, --help Show help and usage information - ``` ## Additional settings File `src/appSettings.json` contains additional settings, like [loglevel](https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.loglevel?view=dotnet-plat-ext-5.0#fields) and [console output theme](https://github.com/serilog/serilog-sinks-console). You can set it up via editing this file.