void UpdateState(State newState)
        {
            state     = newState;
            progress  = "";
            progCount = 0;

            switch (state)
            {
            case State.Error:
                statusMessage = new Core.StatusMessage()
                {
                    statusMessage = "Something has gone wrong. :(",
                    progressing   = false
                };
                break;

            case State.Idle:
                statusMessage = new Core.StatusMessage()
                {
                    statusMessage = "",
                    progressing   = false
                };
                break;

            case State.FetchingLists:
                statusMessage = new Core.StatusMessage()
                {
                    statusMessage = "Updating Spaces/Assets lists",
                    progressing   = true
                };
                break;

            case State.CreatingSpace:
                statusMessage = new Core.StatusMessage()
                {
                    statusMessage = "Creating new Space",
                    progressing   = true
                };
                break;

            case State.AddingAsset:
                statusMessage = new Core.StatusMessage()
                {
                    statusMessage = "Adding Asset to selected Space",
                    progressing   = true
                };
                break;

            case State.DeletingSpace:
                statusMessage = new Core.StatusMessage()
                {
                    statusMessage = "Deleting the selected Space",
                    progressing   = true
                };
                break;
            }
        }
        //private void BundleUpdated(AvailableBundle.State lastState, AvailableBundle.State newState)
        //{
        //    bundlesUpdated = true;

        //    if (lastState == AvailableBundle.State.Creating && newState != AvailableBundle.State.Error)
        //    {
        //        RefreshAssetList();
        //    }
        //    else if (lastState == AvailableBundle.State.Uploading && newState == AvailableBundle.State.Complete)
        //    {
        //        UpdateState(State.Idle);
        //    }
        //}

        //public void SerializeAvailableBundles()
        //{
        //    if (bundles.Count > 0)
        //    {
        //        if (System.IO.Directory.Exists(Spaces.Core.Constants.SPACES_BUNDLES))
        //            System.IO.Directory.CreateDirectory(Spaces.Core.Constants.SPACES_BUNDLES);

        //        // serialize updated space attributes to CACHE.
        //        using (var writer = new System.IO.StreamWriter(Spaces.Core.Constants.SPACES_BUNDLES + "/AvailableBundles.json"))
        //        {
        //            string spaceJSON = Spaces.Core.JSONTools.LoadToString(bundles);
        //            writer.Write(spaceJSON);
        //        }
        //    }
        //}

        void DrawStatus(Core.StatusMessage status)
        {
            if (System.DateTime.Now.Subtract(start).TotalMilliseconds > 300)
            {
                start     = System.DateTime.Now;
                progCount = (++progCount) % 4;
                progress  = "";

                for (int i = 0; i < progCount; i++)
                {
                    progress += " .";
                }
            }

            if (status.progressing)
            {
                EditorGUILayout.LabelField(status.statusMessage + progress);
            }
            else
            {
                EditorGUILayout.LabelField(status.statusMessage);
            }
        }