// 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)); }