Esempio n. 1
0
        public ValueTask ExecuteAsync(IConsole console)
        {
            var co   = console.Output;
            var opts = new LuminaOptions
            {
                CacheFileResources = false
            };

            var ol = new GameData(Path, opts);
            var nl = new GameData(NewPath, opts);

            if (!File.Exists(PathsFile))
            {
                console.Error.WriteLine("paths list file provided does not exist!");
            }

            var paths = File.ReadAllLines(PathsFile);

            Parallel.ForEach(paths, path =>
            {
                var oldMeta = ol.GetFileMetadata(path);
                var newMeta = nl.GetFileMetadata(path);

                if (oldMeta == null || newMeta == null)
                {
                    return;
                }

                if (oldMeta.Value.RawFileSize != newMeta.Value.RawFileSize)
                {
                    co.WriteLine($"size mismatch: {path}");
                    return;
                }

                var oldFile = ol.GetFile(path);
                var newFile = nl.GetFile(path);

                var oHash = oldFile.GetFileHash();
                var nHash = newFile.GetFileHash();

                if (oHash != nHash)
                {
                    co.WriteLine($"hash mismatch: {path}");
                }
            });

            return(default);
Esempio n. 2
0
        public static void Main(string[] args)
        {
            var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            var umbraData   = Path.Combine(appDataPath, "Umbra");
            var dataDir     = new DirectoryInfo(umbraData);

            if (!dataDir.Exists)
            {
                dataDir.Create();
            }

            var logsDir = dataDir.CreateSubdirectory("logs");

            // configure logging first
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.Async(x => x.Console())
                         .WriteTo.Async(x => x.File(
                                            Path.Combine(logsDir.FullName, "umbra_.log"),
                                            rollingInterval: RollingInterval.Day,
                                            retainedFileCountLimit: 14
                                            ))
                         .MinimumLevel.Information()
                         .CreateLogger();

            Locator.CurrentMutable.UseSerilogFullLogger();

            // fix poco yells that rxui spits out, they're annoying and useless
            Locator.CurrentMutable.RegisterConstant(new RxUI.CustomObservableForProperty(), typeof(ICreatesObservableForProperty));

            var configFile = Path.Combine(dataDir.FullName, "config.json");

            var settings = new ConfigurationBuilder <IUmbraSettings>()
                           .UseJsonFile(configFile)
                           .Build();

            Locator.CurrentMutable.RegisterConstant(settings, typeof(IUmbraSettings));

            if (settings.DataPath == null)
            {
                // attempt to guess a data path before asking someone to locate it
                settings.DataPath = GuessClientDataPath();

                // if we still haven't found something, make the user do it for us
                if (settings.DataPath == null)
                {
                    using (var dialog = new System.Windows.Forms.FolderBrowserDialog())
                    {
                        var result = dialog.ShowDialog();
                    }
                }
            }

            Log.Information("using game datapath: {DataPath}", settings.DataPath);

            // init lumina
            var luminaOptions = new LuminaOptions
            {
                CacheFileResources   = true,
                DefaultExcelLanguage = settings.ExcelLanguage
            };

            var lumina = new Lumina.Lumina(
                args.Length > 0 ? args[0] : settings.DataPath,
                luminaOptions
                );

            foreach (var ver in settings.PreviousVersions)
            {
                Log.Information("previous version: {@PrevVersion}", ver);
            }

            Locator.CurrentMutable.RegisterConstant(luminaOptions);
            Locator.CurrentMutable.RegisterConstant(lumina);

            Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly());

            // bootstrap app
            var app = new App();

            app.InitializeComponent();
            app.Run();
        }