/// <summary> /// Downloads the latest release from github /// </summary> /// <returns></returns> private async Task <string> DownloadRelease(GithubRelease release) { if (release == null) { return(null); } var downloadPath = SidekickPaths.GetDataFilePath("Sidekick-Update.exe"); if (File.Exists(downloadPath)) { File.Delete(downloadPath); } var downloadUrl = release.Assets.FirstOrDefault(x => x.Name == "Sidekick-Setup.exe")?.DownloadUrl; if (downloadUrl == null) { return(null); } var response = await githubClient.Client.GetAsync(downloadUrl); using var downloadStream = await response.Content.ReadAsStreamAsync(); using var fileStream = new FileStream(downloadPath, FileMode.Create, FileAccess.Write, FileShare.None); await downloadStream.CopyToAsync(fileStream); return(downloadPath); }
public static IServiceCollection AddSidekickLogging(this IServiceCollection services, IConfiguration configuration, IHostEnvironment environment) { var sidekickPath = Environment.ExpandEnvironmentVariables("%AppData%\\sidekick"); var logSink = new LogSink(); Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Information) .Enrich.FromLogContext() .WriteTo.File(SidekickPaths.GetDataFilePath("Sidekick_log.log"), rollingInterval: RollingInterval.Day, retainedFileCountLimit: 1, fileSizeLimitBytes: 5242880, rollOnFileSizeLimit: true) .WriteTo.Sink(logSink) .AddSentryLogging(configuration, environment) .CreateLogger(); services.AddLogging(builder => { builder.AddSerilog(); }); services.AddSingleton(logSink); return(services); }
public SidekickContext CreateDbContext(string[] args) { var builder = new DbContextOptionsBuilder <SidekickContext>(); var connectionString = "Filename=" + SidekickPaths.GetDataFilePath("data.db"); builder.UseSqlite(connectionString); return(new SidekickContext(builder.Options)); }
public static IHostBuilder CreateHostBuilder(string[] args) { return(Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration(config => { config.AddJsonFile(SidekickPaths.GetDataFilePath(SaveSettingsHandler.FileName), true, true); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup <Startup>(); })); }
public async Task InitializeAsync() { var mockEnvironment = new Mock <IHostEnvironment>(); var configuration = new ConfigurationBuilder() .AddJsonFile(SidekickPaths.GetDataFilePath(SaveSettingsHandler.FileName), true, true) .Build(); var services = new ServiceCollection() // Building blocks .AddSidekickLogging(configuration, mockEnvironment.Object) .AddSidekickMapper( Assembly.Load("Sidekick.Infrastructure"), Assembly.Load("Sidekick.Persistence")) .AddSidekickMediator( Assembly.Load("Sidekick.Application"), Assembly.Load("Sidekick.Domain"), Assembly.Load("Sidekick.Infrastructure"), Assembly.Load("Sidekick.Mock"), Assembly.Load("Sidekick.Persistence")) // Layers .AddSidekickApplication(configuration) .AddSidekickInfrastructure() .AddSidekickLocalization() .AddSidekickPersistence(); services.AddSingleton <IViewLocator, MockViewLocator>(); services.AddSingleton <IKeybindProvider, MockKeybindProvider>(); services.AddSingleton <IKeyboardProvider, MockKeyboardProvider>(); services.AddSingleton <IProcessProvider, MockProcessProvider>(); var serviceProvider = services.BuildServiceProvider(); Mediator = serviceProvider.GetRequiredService <IMediator>(); await Mediator.Send(new SaveSettingsCommand(new SidekickSettings() { Language_Parser = "en", Language_UI = "en", LeagueId = "Standard", }, true)); await Mediator.Send(new InitializeCommand(true, false)); }
public static IServiceCollection AddSidekickPersistence(this IServiceCollection services) { var connectionString = "Filename=" + SidekickPaths.GetDataFilePath("data.db"); services.AddDbContextPool <SidekickContext>(options => options.UseSqlite(connectionString)); var builder = new DbContextOptionsBuilder <SidekickContext>(); builder.UseSqlite(connectionString); var context = new SidekickContext(builder.Options); context.Database.Migrate(); services.AddTransient <ICacheRepository, CacheRepository>(); services.AddTransient <IPoeNinjaRepository, PoeNinjaRepository>(); services.AddTransient <IItemCategoryRepository, ItemCategoryRepository>(); services.AddTransient <ILeagueRepository, LeagueRepository>(); services.AddTransient <IViewPreferenceRepository, ViewPreferenceRepository>(); return(services); }
public async Task <Unit> Handle(SaveSettingsCommand request, CancellationToken cancellationToken) { var leagueHasChanged = request.Settings.LeagueId != settings.LeagueId; var languageHasChanged = request.Settings.Language_Parser != settings.Language_Parser; if (settings.Language_UI != request.Settings.Language_UI) { await mediator.Send(new SetUiLanguageCommand(request.Settings.Language_UI)); } if (settings.Language_Parser != request.Settings.Language_Parser) { await mediator.Send(new SetGameLanguageCommand(request.Settings.Language_Parser)); } request.Settings.CopyValuesTo(settings); var json = JsonSerializer.Serialize(settings); var defaults = JsonSerializer.Serialize(new SidekickSettings()); var filePath = SidekickPaths.GetDataFilePath(FileName); using var fileStream = File.Create(filePath); using var writer = new Utf8JsonWriter(fileStream, options: new JsonWriterOptions { Indented = true }); using var document = JsonDocument.Parse(json, new JsonDocumentOptions { CommentHandling = JsonCommentHandling.Skip }); using var defaultsDocument = JsonDocument.Parse(defaults, new JsonDocumentOptions { CommentHandling = JsonCommentHandling.Skip }); var root = document.RootElement; var defaultsRoot = defaultsDocument.RootElement; if (root.ValueKind == JsonValueKind.Object) { writer.WriteStartObject(); } else { return(Unit.Value); } foreach (var property in root.EnumerateObject()) { if (defaultsRoot.GetProperty(property.Name).ToString() == property.Value.ToString()) { continue; } property.WriteTo(writer); } writer.WriteEndObject(); writer.Flush(); if (writer.BytesCommitted == 0) { File.Delete(filePath); } if (!request.SkipInitialize && (languageHasChanged || leagueHasChanged)) { await mediator.Send(new ClearCacheCommand()); await mediator.Send(new InitializeCommand(false, false)); } return(Unit.Value); }