public static string GetProjectThumbnailSavePath(Project project)
        {
            var thumbnailFolder = new DirectoryInfo(string.Format("{0}/{1}", m_PlayerStorage.GetProjectFolder(project), k_ThumbnailFolderName));

            if (!Directory.Exists(thumbnailFolder.FullName))
            {
                Directory.CreateDirectory(thumbnailFolder.FullName);
            }

            var thumbnails = thumbnailFolder.GetFiles()
                             .Where(file => file.Extension.Equals(".png"))
                             .OrderByDescending(file => file.LastWriteTime)
                             .Select(file => file.FullName)
                             .ToArray();

            if (thumbnails.Length >= k_ThumbnailHistoryAmount)
            {
                for (int i = k_ThumbnailHistoryAmount - 1; i < thumbnails.Length; i++)
                {
                    File.Delete(thumbnails[i]);
                }
                Array.Resize(ref thumbnails, k_ThumbnailHistoryAmount);
            }

            return(string.Format("{0}/{1}.png", thumbnailFolder.FullName, Guid.NewGuid().ToString()));
        }
        void OpenProject(Project project)
        {
            m_State = State.OpeningProject;

            // Prepare the folder for project data
            var projectFolder = m_Storage.GetProjectFolder(project);

            Directory.CreateDirectory(projectFolder);

            // Create the ISyncProvider (ReflectClient).
            m_ReflectClient = new ReflectClient(this, m_AuthClient.user, m_AuthClient.storage, project);

            // Create a ReflectPipeline component
            m_ReflectPipeline = gameObject.AddComponent <ReflectPipeline>();

            // Create a basic PipelineAsset
            m_ReflectPipeline.pipelineAsset = CreateBasicPipelineAsset();

            // Assign root transform to the InstanceConverterNode
            m_ReflectPipeline.TryGetNode <InstanceConverterNode>(out var instanceConverter);
            instanceConverter.SetRoot(root, m_ReflectPipeline);

            // Initialize and run the pipeline
            m_ReflectPipeline.InitializeAndRefreshPipeline(m_ReflectClient);
        }
        Task DeleteProjectLocally(CancellationToken token, UnityProject project)
        {
            m_CurrentCount = 0;
            m_TotalCount   = 0;

            var projectFolderPath = m_Storage.GetProjectFolder(project);

            if (!Directory.Exists(projectFolderPath))
            {
                Debug.LogWarning($"Cannot delete locally stored project '{project.ProjectId}'");
                return(Task.CompletedTask);
            }

            // Deleting each file individually is slow. Instead, get all leaf directories and delete them one after the other.
            var projectDirectories = Directory
                                     .EnumerateDirectories(projectFolderPath, "*.*", SearchOption.AllDirectories)
                                     .Where(f => !Directory.EnumerateDirectories(f, "*.*", SearchOption.TopDirectoryOnly).Any()).ToList();

            m_TotalCount = projectDirectories.Count;

            for (int i = 0; i < projectDirectories.Count; ++i)
            {
                token.ThrowIfCancellationRequested();
                Directory.Delete(projectDirectories[i], true);
                m_CurrentCount++;
            }

            Directory.Delete(projectFolderPath, true);
            return(Task.CompletedTask);
        }
 async Task SaveManifestAsync(SyncManifest manifest)
 {
     var folder   = m_Storage.GetProjectFolder(m_Project);
     var fullPath = Path.Combine(folder, manifest.SourceId + ".manifest"); // TODO. Improve how sourceId is saved
     await PlayerFile.SaveManifestAsync(manifest, fullPath);
 }
Exemple #5
0
 public string GetProjectFolder(Project project)
 {
     return(m_LocalStorage.GetProjectFolder(project));
 }