Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
 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>();
     }));
 }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }