예제 #1
0
 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;
         }
     }));
 }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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;
            }));
        }
예제 #4
0
        /// <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.
            }
        }