private void LoadNativeStorage(object invokeUntyped) { try { nativeStorage = NativeStorage.LoadFromAssemblyPath(); } catch (Exception ex) { // Need to swallow this unfortunately because we are on a backrground thread Debug.Fail(ex.Message); } finally { if (nativeStorage == null) { nativeStorage = new NativeStorage(); } } // Ping the UI to let in know the Database is now loaded ISynchronizeInvoke invoke = (ISynchronizeInvoke)invokeUntyped; try { WaitCallback del = delegate(object notused) { this.OnTabPageChanged(this, EventArgs.Empty); }; invoke.Invoke(del, new object[] { null }); } catch (Exception) { // No need to assert. We get this if the user closes the application before // the database finishes loading } }
public void SetUp() { var directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); storage = new NativeStorage(directory.FullName); realmContextFactory = new RealmContextFactory(storage); keyBindingStore = new RealmKeyBindingStore(realmContextFactory); }
public void SetUp() { var directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); storage = new NativeStorage(directory.FullName); realm = new RealmAccess(storage, "test"); keyBindingStore = new RealmKeyBindingStore(realm, new ReadableKeyCombinationProvider()); }
internal static void Main(string[] args) { var dataDirectory = @"..\..\..\StorageGenerator\Data"; var oldFilePath = Path.Combine(dataDirectory, "windows.xml"); var newFilePath = Path.Combine(dataDirectory, "windows.csv"); Console.WriteLine("Reading old data"); var nativeStorage = new NativeStorage(); nativeStorage.ReadXml(oldFilePath); Console.WriteLine($"Converting to a {nameof(BasicSymbolStorage)}"); var storage = new BasicSymbolStorage(); foreach (var name in nativeStorage.NativeNames) { if (name.Kind == NativeNameKind.EnumValue) { continue; } NativeGlobalSymbol symbol; if (!nativeStorage.TryGetGlobalSymbol(name, out symbol)) { Console.WriteLine($"Error: Unable to load {name.Name} {name.Kind}"); continue; } storage.Add(symbol); } Console.WriteLine("Saving new data"); using (var stream = File.Open(newFilePath, FileMode.Create)) { StorageUtil.WriteCsv(stream, storage); } Console.WriteLine("Loading data for sanity check"); using (var stream = File.Open(newFilePath, FileMode.Open)) { var testStorage = StorageUtil.ReadCsv(stream); if (testStorage.Count != storage.Count) { Console.WriteLine("Error: Different count on load"); } } }
// ReSharper disable once UnusedParameter.Local public Startup(IConfiguration configuration) { dataStorage = new NativeStorage("data"); osuContextFactory = new DatabaseContextFactory(dataStorage); cacheContextFactory = new PisstaubeCacheDbContextFactory(dataStorage); dbContextFactory = new PisstaubeDbContextFactory(); // copy paste of OsuGameBase.cs try { using (var db = dbContextFactory.GetForWrite(false)) db.Context.Database.Migrate(); using (var db = osuContextFactory.GetForWrite(false)) db.Context.Migrate(); } catch (Exception e) { Logger.Error(e.InnerException ?? e, "Migration failed! We'll be starting with a fresh database.", LoggingTarget.Database); osuContextFactory.ResetDatabase(); Logger.Log("Database purged successfully.", LoggingTarget.Database); using (var db = osuContextFactory.GetForWrite(false)) db.Context.Migrate(); } // copy paste of OsuGameBase.cs try { using (var db = cacheContextFactory.GetForWrite(false)) db.Context.Migrate(); } catch (Exception e) { Logger.Error(e.InnerException ?? e, "Migration failed! We'll be starting with a fresh database.", LoggingTarget.Database); cacheContextFactory.ResetDatabase(); Logger.Log("Database purged successfully.", LoggingTarget.Database); using (var db = cacheContextFactory.GetForWrite(false)) db.Context.Migrate(); } }
public static void Main(string[] args) { NativeStorage ns = NativeStorage.LoadFromAssemblyPath; NativeSymbolBag bag = new NativeSymbolBag(ns); NativeProcedure ntProc = null; bag.TryFindOrLoadProcedure("FindFirstFileW", ntProc); bag.TryFindOrLoadProcedure("FindNextFileW", ntProc); bag.TryFindOrLoadProcedure("FindClose", ntProc); bag.TryFindOrLoadProcedure("GetSystemDirectoryW", ntProc); bag.TryFindOrLoadProcedure("GetWindowTextW", ntProc); bag.TryFindOrLoadProcedure("EnumWindows", ntProc); bag.TryFindOrLoadProcedure("GetComputerNameW", ntProc); bag.TryFindOrLoadProcedure("CreateWellKnownSid", ntProc); bag.TryFindOrLoadProcedure("CopySid", ntProc); bag.TryFindOrLoadProcedure("IsEqualSid", ntProc); bag.TryFindOrLoadProcedure("SHGetFileInfoW", ntProc); bag.TryFindOrLoadProcedure("GetEnvironmentVariableW", ntProc); bag.TryFindOrLoadProcedure("atoi", ntProc); NativeDefinedType ntDefined = null; NativeTypeDef ntTypedef = null; bag.TryFindOrLoadDefinedType("WNDPROC", ntDefined); bag.TryFindOrLoadDefinedType("WNDENUMPROC", ntDefined); bag.TryFindOrLoadDefinedType("COMSTAT", ntDefined); bag.TryFindOrLoadDefinedType("_DCB", ntDefined); bag.TryFindOrLoadDefinedType("_IMAGE_LINENUMBER", ntDefined); BasicConverter convert = new BasicConverter(LanguageType.VisualBasic, ns); string code = convert.ConvertToPInvokeCode(bag); code = "' Generated File ... Re-Run PInvokeTestGen to regenerate this file" + Constants.vbCrLf + "Namespace Generated" + Constants.vbCrLf + code + Constants.vbCrLf + "End Namespace"; IO.File.WriteAllText(args(0), code); }
private static void Main() { var currentDirectory = new NativeStorage("."); var solutionDirectory = new NativeStorage(".."); currentDirectory.DeleteDirectory("./staging"); if (!Directory.Exists("releases")) { Directory.CreateDirectory("releases"); } var stagingDirectory = currentDirectory.GetStorageForDirectory("staging"); var currentDate = DateTime.Now.ToString("yyyy.Mdd."); currentDate += currentDirectory.GetDirectories("releases").Count(s => s.Contains(currentDate)); var releaseDirectory = currentDirectory.GetStorageForDirectory($"./releases/App-{currentDate}"); Console.WriteLine($"Package: Qsor"); Console.WriteLine($"Release Version: {currentDate}"); Console.WriteLine($"Release Directory: {releaseDirectory.GetFullPath(".")}"); Console.WriteLine($"Changelog: \n{ChangelogGenerator.GenerateChangelog()}"); var logo = solutionDirectory.GetFullPath("Qsor.Game/Resources/Textures/Logo-256x256.png"); var icon = solutionDirectory.GetFullPath("Qsor.Desktop/icon.ico"); RunCommand("dotnet", $"publish -f netcoreapp3.1 Qsor.Desktop --configuration Release --runtime win-x64 -p:Version={currentDate} -o {stagingDirectory.GetFullPath(".")}", solutionDirectory.GetFullPath(".")); RunCommand("./tools/rcedit-x64.exe", $"\"{stagingDirectory.GetFullPath(".")}\\Qsor.exe\" --set-icon \"{icon}\""); RunCommand(NugetPath, $"pack Qsor.Desktop/qsor.nuspec -Version {currentDate} -Properties Configuration=Release -OutputDirectory {stagingDirectory.GetFullPath(".")} -BasePath {stagingDirectory.GetFullPath(".")}", solutionDirectory.GetFullPath(".")); RunCommand(SquirrelPath, $"--releasify {stagingDirectory.GetFullPath($"./Qsor.{currentDate}.nupkg")} --releaseDir {releaseDirectory.GetFullPath(".")} --no-msi --icon {icon} --setupIcon {icon} --loadingGif {logo}", stagingDirectory.GetFullPath(".")); RunCommand("git", $"tag {currentDate}"); RunCommand("git", $"push origin {currentDate}"); File.Move(releaseDirectory.GetFullPath("Setup.exe"), releaseDirectory.GetFullPath("install.exe")); stagingDirectory.DeleteDirectory("."); var req = new JsonWebRequest <GitHubRelease>($"https://api.github.com/repos/Mempler/Qsor/releases") { Method = HttpMethod.Post, }; Console.WriteLine($"Creating release {currentDate}..."); req.AddRaw(JsonConvert.SerializeObject(new GitHubRelease { Name = currentDate, Draft = true, Body = ChangelogGenerator.GenerateChangelog() })); req.AddHeader("Authorization", $"token {GithubAccessToken}"); req.Perform(); var targetRelease = req.ResponseObject; var assetUploadUrl = targetRelease.UploadUrl.Replace("{?name,label}", "?name={0}"); foreach (var a in Directory.GetFiles(releaseDirectory.GetFullPath(".")).Reverse()) { if (Path.GetFileName(a).StartsWith('.')) { continue; } Console.WriteLine($"- Pushing asset {a}..."); var upload = new WebRequest(assetUploadUrl, Path.GetFileName(a)) { Method = HttpMethod.Post, Timeout = 240000, ContentType = "application/octet-stream", }; upload.AddRaw(File.ReadAllBytes(a)); upload.AddHeader("Authorization", $"token {GithubAccessToken}"); upload.Perform(); } }
protected override void LoadComplete() { base.LoadComplete(); InternalChildren = new Drawable[] { new FillFlowContainer { AutoSizeAxes = Axes.Both, Direction = FillDirection.Vertical, Anchor = Anchor.Centre, Origin = Anchor.Centre, Spacing = new Vector2(10), Children = new Drawable[] { new OsuSpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Text = "Migration in progress", Font = OsuFont.Default.With(size: 40) }, new OsuSpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Text = "This could take a few minutes depending on the speed of your disk(s).", Font = OsuFont.Default.With(size: 30) }, new LoadingSpinner(true) { State = { Value = Visibility.Visible } }, new OsuSpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Text = "Please avoid interacting with the game!", Font = OsuFont.Default.With(size: 30) }, } }, }; Beatmap.Value = Beatmap.Default; var originalStorage = new NativeStorage(storage.GetFullPath(string.Empty), host); migrationTask = Task.Run(PerformMigration) .ContinueWith(task => { if (task.IsFaulted) { Logger.Error(task.Exception, $"Error during migration: {task.Exception?.Message}"); } else if (!task.GetResultSafely()) { notifications.Post(new SimpleNotification { Text = "Some files couldn't be cleaned up during migration. Clicking this notification will open the folder so you can manually clean things up.", Activated = () => { originalStorage.PresentExternally(); return(true); } }); } Schedule(this.Exit); }); }