/// <summary>
 /// Check if a specific version of Blender is present
 /// </summary>
 public bool IsVersionAvailable(string version)
 {
     //if (!SystemInfo.IsOS(SystemInfo.OS_MACOS))
     return(Directory.Exists(GetVersionPath(version, SystemInfo.GetOSName())));
     //else
     //    return File.Exists(GetVersionPath(version, SystemInfo.GetOSName()) + ".dmg");
 }
 public ComputerInfoResponse Packet_ComputerInfo(ComputerInfoRequest req)
 {
     return(new ComputerInfoResponse()
     {
         Cores = Environment.ProcessorCount,
         Name = Environment.MachineName,
         OS = SystemInfo.GetOSName()
     });
 }
        /// <summary>
        /// Renders a batch of render settings in a single Blender instance.
        /// </summary>
        public List <string> RenderBatch(string version, string file, BlenderRenderSettings[] batch, Action <BlenderProcess> beforeStart = null)
        {
            if (Busy)
            {
                throw new InvalidOperationException("Currently already rendering");
            }
            Busy = true;

            try
            {
                Directory.CreateDirectory(Path.GetFullPath(RenderData));
                string os         = SystemInfo.GetOSName();
                string blenderDir = GetVersionPath(version, os);

                try
                {
                    FinalizeSettings(batch);
                }
                catch (Exception ex)
                {
                    throw new Exception("Failed to parse/finalize settings due to:" + ex.Message);
                }

                string json = JsonSerializer.Serialize(batch);
                UseTemporaryFile(json, (path) =>
                {
                    string cmd = $"{blenderDir}/blender";

                    //MacOS has to be special.
                    if (SystemInfo.IsOS(SystemInfo.OS_MACOS))
                    {
                        cmd = $"{blenderDir}/Contents/MacOS/Blender";
                    }

                    string arg = $"--factory-startup -noaudio -b \"{Path.GetFullPath(file)}\" -P \"{GetRenderScriptPath()}\" -- \"{path}\"";


                    RenderProcess = new BlenderProcess(cmd, arg);
                    if (beforeStart != null)
                    {
                        beforeStart(RenderProcess);
                    }

                    RenderProcess.Run();
                });
                return(batch.Select(x => x.Output).ToList());
            }
            finally
            {
                RenderSession = null;
                RenderProcess = null;
                Busy          = false;
            }
        }
        public static bool IsVersionValid(string blenderDataPath, string version)
        {
            string os         = SystemInfo.GetOSName();
            string blenderDir = GetVersionPath(blenderDataPath, version, os);

            if (!Directory.Exists(blenderDir))
            {
                return(false);
            }
            return(File.Exists(GetVersionExecutablePath(blenderDataPath, version)));
        }
        public static string GetVersionExecutablePath(string blenderDataPath, string version)
        {
            string os         = SystemInfo.GetOSName();
            string blenderDir = GetVersionPath(blenderDataPath, version, os);
            string executable = null;

            switch (os)
            {
            case SystemInfo.OS_WINDOWS64:
                executable = $"{blenderDir}/blender.exe";
                break;

            case SystemInfo.OS_LINUX64:
                executable = $"{blenderDir}/blender";
                break;

            case SystemInfo.OS_MACOS:
                executable = $"{blenderDir}/Contents/MacOS/Blender";
                break;
            }
            return(executable);
        }
        /// <summary>
        /// Prepare a version of Blender
        /// </summary>
        /// <param name="version"></param>
        public void Prepare(string version)
        {
            BlenderVersion v = BlenderVersion.FindVersion(version, SystemInfo.RelativeToApplicationDirectory("VersionCache"), SystemInfo.RelativeToApplicationDirectory("VersionCustom"));

            if (v == null)
            {
                throw new ArgumentException("Version not found");
            }

            string targetDir = GetVersionPath(version, SystemInfo.GetOSName());

            if (Directory.Exists(targetDir))
            {
                Console.WriteLine($"{version} already present");
            }
            else if (v.IsCustom)
            {
                throw new ArgumentException("Custom version missing");
            }
            else
            {
                Download(SystemInfo.GetOSName(), v);
            }
        }
Ejemplo n.º 7
0
        public SyncResponse Packet_SyncNetwork(SyncNetworkRequest req)
        {
            try
            {
                if (!sessions.Contains(req.SessionID))
                {
                    sessions.Add(req.SessionID);
                }

                SessionData session = SessionData.GetOrCreate(req.SessionID);

                string uploadID = Guid.NewGuid().ToString();
                if (req.FileID != session.FileID)
                {
                    session.UpdatingFile();

                    string path = null;
                    switch (SystemInfo.GetOSName())
                    {
                    case SystemInfo.OS_WINDOWS64:
                        path = req.WindowsPath;
                        break;

                    case SystemInfo.OS_LINUX64:
                        path = req.LinuxPath;
                        break;

                    case SystemInfo.OS_MACOS:
                        path = req.MacOSPath;
                        break;

                    default:
                        throw new NotImplementedException("Unknown OS");
                    }
                    string sessionPath = SessionUtil.GetSessionNetworkPath(path, req.SessionID);
                    if (!File.Exists(sessionPath))
                    {
                        throw new InvalidOperationException($"File does not exist [{sessionPath}]");
                    }

                    session.IsNetworked   = true;
                    session.NetworkedPath = sessionPath;
                    session.UpdatedFile(req.FileID);
                }

                return(new SyncResponse()
                {
                    Success = true,
                    SameFile = req.FileID == session.FileID,
                    UploadID = uploadID
                });
            }
            catch (Exception ex)
            {
                return(new SyncResponse()
                {
                    Success = false,
                    Message = "Failed due to exception:" + ex.Message
                });
            }
        }
 /// <summary>
 /// Returns OS version, Blender formatted (eg. windows64, linux64)
 /// </summary>
 public string GetOSVersion()
 {
     return(SystemInfo.GetOSName());
 }