コード例 #1
0
    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;
        }
    }