public Task <IMapset> Import(FileInfo file, TaskListener <IMapset> listener = null) { return(Task.Run <IMapset>(async() => { try { // Start importing the file Mapset mapset = await store.Import(file, listener: listener?.CreateSubListener <Mapset>()); if (mapset != null) { // Mapset must be fully loaded. Mapset loadedMapset = store.LoadData(mapset); if (loadedMapset != null) { // Dispatch mapset imported event on main thread. UnityThread.Dispatch(() => { // Add to all mapsets allMapsets.AddOrReplace(loadedMapset); // Reapply filter Search(lastSearch); OnImportMapset?.Invoke(loadedMapset); return null; }); } else { notificationBox?.Add(new Notification() { Message = $"Failed to load imported mapset ({mapset.Metadata.Artist} - {mapset.Metadata.Title})", Type = NotificationType.Error }); } } else { notificationBox?.Add(new Notification() { Message = $"Failed to import mapset at ({file.FullName})", Type = NotificationType.Error }); } listener?.SetFinished(mapset); return mapset; } catch (Exception e) { Logger.LogError($"Error while importing mapset: {e.Message}\n{e.StackTrace}"); listener?.SetFinished(); return null; } })); }
public IEnumerator TestDispatch() { bool finished = false; int unityThread = Thread.CurrentThread.ManagedThreadId; UnityThread.Initialize(); Task.Run(() => { Assert.AreNotEqual(unityThread, Thread.CurrentThread.ManagedThreadId); Thread.Sleep(500); Assert.IsTrue((bool)UnityThread.Dispatch(() => finished = true)); }); while (!finished) { yield return(null); } }
public Task <IMapset> Load(Guid id, TaskListener <IMapset> listener = null) { return(Task.Run(() => { IMapset mapset = store.Load(id); UnityThread.Dispatch(() => { // If already loaded within all mapsets, replace it. allMapsets.AddOrReplace(mapset); // Search again. Search(lastSearch); // Finished. listener?.SetFinished(mapset); return null; }); return mapset; })); }
/// <summary> /// Parses the raw response data. /// </summary> protected virtual void ParseResponse() { JObject json = UnityThread.Dispatch(() => JsonConvert.DeserializeObject <JObject>(response.TextData)) as JObject; if (json.ContainsKey("type")) { if (json["type"].ToString().Equals("Error", StringComparison.OrdinalIgnoreCase)) { EvaluateFail(json["message"].ToString() ?? "Response error."); } else { ParseResponseData(json["data"]); } } else { EvaluateFail("Unknown response format detected."); // TODO: Output response text to logger. } }