Example #1
0
        // Streaming Events
        public void OpenProject(Project project)
        {
            if (m_AuthClient == null)
            {
                Debug.LogError("Unable to open project without a Authentication Client.");
                return;
            }

            if (m_SelectedProject != null)
            {
                Debug.LogError("Only one project can be opened at a time.");
                return;
            }

            m_SelectedProject = project;

            m_Client = new ReflectClient(this, m_AuthClient.user, m_AuthClient.storage, m_SelectedProject);
            m_Client.manifestUpdated += OnManifestUpdated;
            m_IsManifestDirty         = false;

            m_ReflectPipeline.InitializeAndRefreshPipeline(m_Client);

            // TODO : SaveProjectData(project) saves "project.data" for the offline project.
            // Maybe we need to move/remove this code depends on the design.
            // "project.data" file is using to get "Offline Project List" and "Enable Delete Button" in the project option dialog now
            var storage = new PlayerStorage(ProjectServer.ProjectDataPath, true, false);

            storage.SaveProjectData(project);
        }
    async Task DownloadProject(IPlayerClient client, Project project, string folder)
    {
        lock (m_ProgressLock)
        {
            m_Progress = 0.0f;
        }

        var storage = new PlayerStorage(folder, false, true);

        try
        {
            var manifestEntries = (await client.GetManifestsAsync()).ToArray();

            onProgressChanged?.Invoke(0.0f);

            var total          = manifestEntries.Length;
            var projectPercent = 1.0f / total;

            var localManifests = new Dictionary <string, SyncManifest>();

            IEnumerable <SourceProject> localSourceProjects = null;

            try
            {
                localSourceProjects = storage.LoadProjectManifests(project).ToArray();
            }
            catch (ReflectVersionException)
            {
                if (manifestEntries.Length == 0)
                {
                    throw new Exception($"Cannot open project {project.name} because it has been exported with a different version of Unity Reflect.");
                }
            }

            if (localSourceProjects != null)
            {
                foreach (var sourceProject in localSourceProjects)
                {
                    localManifests.Add(sourceProject.sourceId, sourceProject.manifest);
                }
            }

            storage.SaveProjectData(project);

            for (int i = 0; i < total; ++i)
            {
                var manifestEntry = manifestEntries[i];

                localManifests.TryGetValue(manifestEntry.SourceId, out var oldManifest);

                await DownloadManifestDiff(client, oldManifest, manifestEntry.Manifest, project, manifestEntry.SourceId, storage);
            }
        }
        finally
        {
            client?.Dispose();
        }

        lock (m_ProgressLock)
        {
            m_Progress = 1.0f;
        }
    }
 protected override Task RunInternal(CancellationToken token)
 {
     m_PlayerStorage.SaveProjectData(m_Settings.downloadProject);
     return(DownloadProject(token, m_Client));
 }