def __main__():
    global scriptDialog
    global settings

    scriptDialog = DeadlineScriptDialog()

    selectedJobs = MonitorUtils.GetSelectedJobs()

    totalJobCount = len(selectedJobs)

    jobCount = 0
    for job in selectedJobs:
        if job.JobPlugin == "3dsmax":
            jobCount += 1

    if totalJobCount != jobCount:
        scriptDialog.ShowMessageBox("One or more selected jobs is NOT a 3dsMax job. Only 3dsMax jobs are supported.", "Error")
        return

    scriptDialog.AllowResizingDialog(True)
    scriptDialog.SetSize(600, 100)
    scriptDialog.SetTitle("Add MAXScript(s) to 3dsMax Job")

    scriptDialog.AddGrid()
    scriptDialog.AddControlToGrid("PreLoadScriptLabel", "LabelControl", "Run Pre-Load Script", 0, 0, "Run a MAXScript specified in the file browser field BEFORE the 3ds Max scene is loaded for rendering by the Slave.", False)
    scriptDialog.AddSelectionControlToGrid("PreLoadScriptBox", "FileBrowserControl", "", "MAXScript File (*.ms)", 0, 1, colSpan=2)

    scriptDialog.AddControlToGrid("PostLoadScriptLabel", "LabelControl", "Run Post-Load Script", 1, 0, "Run a MAXScript specified in the file browser field AFTER the 3ds Max scene is loaded for rendering by the Slave.", False)
    scriptDialog.AddSelectionControlToGrid("PostLoadScriptBox", "FileBrowserControl", "", "MAXScript File (*.ms)", 1, 1, colSpan=2)

    scriptDialog.AddControlToGrid("PreFrameScriptLabel", "LabelControl", "Run Pre-Frame Script", 2, 0, "Run a MAXScript specified in the file browser field BEFORE the Slave renders a frame.", False)
    scriptDialog.AddSelectionControlToGrid("PreFrameScriptBox", "FileBrowserControl", "", "MAXScript File (*.ms)", 2, 1, colSpan=2)

    scriptDialog.AddControlToGrid("PostFrameScriptLabel", "LabelControl", "Run Post-Frame Script", 3, 0, "Run a MAXScript specified in the file browser field AFTER the Slave renders a frame.", False)
    scriptDialog.AddSelectionControlToGrid("PostFrameScriptBox", "FileBrowserControl", "", "MAXScript File (*.ms)", 3, 1, colSpan=2)
    scriptDialog.EndGrid()

    scriptDialog.AddGrid()
    scriptDialog.AddHorizontalSpacerToGrid("HSpacer1", 0, 0)
    applyButton = scriptDialog.AddControlToGrid("ApplyButton", "ButtonControl", "Apply", 0, 1, expand=False)
    applyButton.ValueModified.connect(ApplyButtonPressed)
    closeButton = scriptDialog.AddControlToGrid("CloseButton", "ButtonControl", "Close", 0, 2, expand=False)
    closeButton.ValueModified.connect(CloseButtonPressed)
    scriptDialog.EndGrid()

    settings = ("PreLoadScriptBox", "PostLoadScriptBox", "PreFrameScriptBox", "PostFrameScriptBox")
    scriptDialog.LoadSettings(GetSettingsFilename(), settings)
    scriptDialog.EnabledStickySaving(settings, GetSettingsFilename())

    scriptDialog.ShowDialog(True)
def __main__():
    global scriptDialog

    maximumPriority = RepositoryUtils.GetMaximumPriority()

    scriptDialog = DeadlineScriptDialog()
    scriptDialog.SetSize(350, 100)
    scriptDialog.AllowResizingDialog(True)
    scriptDialog.SetTitle("Set/Offset Priority of Selected Jobs")

    scriptDialog.AddGrid()
    scriptDialog.AddControlToGrid("AbsLabel", "LabelControl",
                                  "Absolute Priority:", 0, 0,
                                  "The absolute priority for the job.", False)
    scriptDialog.AddRangeControlToGrid("AbsBox", "RangeControl", 0, 0,
                                       maximumPriority, 0, 1, 0, 1)
    absButton = scriptDialog.AddControlToGrid("AbsButton",
                                              "ButtonControl",
                                              "Apply",
                                              0,
                                              2,
                                              expand=False)
    absButton.ValueModified.connect(AbsButtonPressed)

    scriptDialog.AddControlToGrid("OffsetLabel", "LabelControl",
                                  "Priority Offset:", 1, 0,
                                  "The priority offset.", False)
    scriptDialog.AddRangeControlToGrid("OffsetBox", "RangeControl", 0,
                                       -maximumPriority, maximumPriority, 0, 1,
                                       1, 1)
    offsetButton = scriptDialog.AddControlToGrid("OffsetButton",
                                                 "ButtonControl",
                                                 "Apply",
                                                 1,
                                                 2,
                                                 expand=False)
    offsetButton.ValueModified.connect(OffsetButtonPressed)

    closeButton = scriptDialog.AddControlToGrid("CloseButton",
                                                "ButtonControl",
                                                "Close",
                                                2,
                                                2,
                                                expand=False)
    closeButton.ValueModified.connect(CloseButtonPressed)
    scriptDialog.EndGrid()

    scriptDialog.ShowDialog(False)
def __main__():
    global scriptDialog
    scriptDialog = DeadlineScriptDialog()

    selectedJobs = MonitorUtils.GetSelectedJobs()

    if len(selectedJobs) > 1:
        scriptDialog.ShowMessageBox( "Only one DBR job can be selected at a time.", "Multiple Jobs Selected" )
        return

    job = selectedJobs[0]
    if Job.JobPlugin not in ( "VraySpawner", "VraySwarm", "3dsmax", "3dsCmd", "CoronaDR", "Modo" ):
        scriptDialog.ShowMessageBox( "Only DBR based jobs should use this script.", "Error" )
        return

    if str( job.JobStatus ) not in ( "Suspended", "Failed", "Completed", "Unknown" ):
        scriptDialog.ShowMessageBox( "Only active DBR jobs can be modified.", "Error" )
        return

    if job.JobPlugin in ( "3dsmax", "3dsCmd", "Modo" ):
        vrayDBRJob = bool( job.GetJobPluginInfoKeyValue( "VRayDBRJob" ) )
        vrayRtDBRJob = bool( job.GetJobPluginInfoKeyValue( "VRayRtDBRJob" ) )
        mentalRayDBRJob = bool( job.GetJobPluginInfoKeyValue( "MentalRayDBRJob" ) )
        modoDBRJob = bool( job.GetJobPluginInfoKeyValue( "ModoDBRJob" ) )
        if not ( vrayDBRJob or vrayRtDBRJob or mentalRayDBRJob or modoDBRJob ):
            scriptDialog.ShowMessageBox( "Only DBR off-load based 3dsmax/3dsCmd/Modo jobs should use this script.", "Error" )
            return

    tasks = RepositoryUtils.GetJobTasks( job, True )
    activeTasksCount = 0
    for task in tasks:
        if IsTaskStatusActive( task.TaskStatus ):
            activeTasksCount += 1

    scriptDialog.AllowResizingDialog( False )
    scriptDialog.SetTitle( "Dynamic DBR Control" )

    scriptDialog.AddGrid()
    scriptDialog.AddControlToGrid( "MaxServersLabel", "LabelControl", "Active Servers:", 0, 0 , "This is the maximum number of active Deadline Slaves to be reserved to assist in computing this DBR job.", False )
    scriptDialog.AddRangeControlToGrid( "MaxServersBox", "RangeControl", activeTasksCount, 0, 100, 0, 1, 0, 1 )

    applyButton = scriptDialog.AddControlToGrid( "ApplyButton", "ButtonControl", "Apply", 0, 2, expand=False )
    applyButton.ValueModified.connect(ApplyButtonPressed)
    closeButton = scriptDialog.AddControlToGrid( "CloseButton", "ButtonControl", "Close", 0, 3, expand=False )
    closeButton.ValueModified.connect(CloseButtonPressed)
    scriptDialog.EndGrid()
    
    scriptDialog.ShowDialog( True )
def __main__():
    global scriptDialog

    scriptDialog = DeadlineScriptDialog()
    scriptDialog.SetSize(450, 68)
    scriptDialog.AllowResizingDialog(False)
    scriptDialog.SetTitle("Start/Stop Service (For Windows Only)")

    scriptDialog.AddGrid()
    scriptDialog.AddControlToGrid(
        "NameLabel", "LabelControl", "Service Name", 0, 0,
        "The name of the Windows Service to start or stop.", False)
    scriptDialog.AddControlToGrid("NameBox", "TextControl", "", 0, 1)
    scriptDialog.EndGrid()

    scriptDialog.AddGrid()
    scriptDialog.AddHorizontalSpacerToGrid("DummyLabel1", 0, 0)
    startButton = scriptDialog.AddControlToGrid("StartButton",
                                                "ButtonControl",
                                                "Start",
                                                0,
                                                1,
                                                expand=False)
    startButton.ValueModified.connect(StartButtonPressed)
    stopButton = scriptDialog.AddControlToGrid("StopButton",
                                               "ButtonControl",
                                               "Stop",
                                               0,
                                               2,
                                               expand=False)
    stopButton.ValueModified.connect(StopButtonPressed)
    closeButton = scriptDialog.AddControlToGrid("CloseButton",
                                                "ButtonControl",
                                                "Close",
                                                0,
                                                3,
                                                expand=False)
    closeButton.ValueModified.connect(CloseButtonPressed)
    scriptDialog.EndGrid()

    scriptDialog.ShowDialog(True)
Example #5
0
def __main__():
    global scriptDialog

    scriptDialog = DeadlineScriptDialog()
    scriptDialog.AllowResizingDialog(False)
    scriptDialog.SetTitle("Timeouts")

    scriptDialog.AddGrid()
    scriptDialog.AddSelectionControlToGrid(
        "EnableTimeoutsJobScriptsBox", "CheckBoxControl", False,
        "Enable Timeouts For Pre/Post Job Scripts", 0, 0,
        "If checked, then the timeouts for this job will also affect its pre/post job scripts, if any are defined."
    )
    scriptDialog.AddSelectionControlToGrid(
        "UseFrameTimeoutsBox", "CheckBoxControl", False, "Use Frame Timeouts",
        1, 0,
        "If enabled, timeouts will be calculated based on frames instead of by tasks. The timeouts entered for tasks will be used for each frame in that task."
    )

    applyButton = scriptDialog.AddControlToGrid("ApplyButton",
                                                "ButtonControl",
                                                "Apply",
                                                1,
                                                2,
                                                expand=False)
    applyButton.ValueModified.connect(ApplyButtonPressed)

    closeButton = scriptDialog.AddControlToGrid("CloseButton",
                                                "ButtonControl",
                                                "Close",
                                                2,
                                                2,
                                                expand=False)
    closeButton.ValueModified.connect(CloseButtonPressed)

    scriptDialog.EndGrid()

    scriptDialog.ShowDialog(False)
def __main__():
    global vrimgScriptDialog
    global scriptPath
    global vrimgFilenames
    
    vrimgScriptDialog = DeadlineScriptDialog()
    vrimgScriptDialog.SetIcon( os.path.join( RepositoryUtils.GetRootDirectory("plugins/Vrimg2Exr"), "Vrimg2Exr.ico" ) )
    
    selectedJobs = MonitorUtils.GetSelectedJobs()
    if len(selectedJobs) > 1:
        vrimgScriptDialog.ShowMessageBox( "Only one job can be selected at a time.", "Multiple Jobs Selected" )
        return
    
    scriptPath = Path.Combine( RepositoryUtils.GetRootDirectory("scripts/Submission"), "Vrimg2ExrSubmission.py" )
    scriptPath = PathUtils.ToPlatformIndependentPath( scriptPath )
    
    job = selectedJobs[0]
    outputFilenameCount = len(job.JobOutputFileNames)

    if outputFilenameCount == 0:
        vrimgScriptDialog.ShowMessageBox( "Job does not contain any output filename(s).", "Missing Output" )
        return

    for i in range( 0, outputFilenameCount ):
        outputFilename = Path.Combine(  job.JobOutputDirectories[i], job.JobOutputFileNames[i])
        outputFilename = FrameUtils.ReplacePaddingWithFrameNumber( outputFilename, job.JobFramesList[0] )
        if outputFilename.lower().endswith( ".vrimg" ):
            vrimgFilenames.append( outputFilename )
    
    vrimgFilenameCount = len( vrimgFilenames )
    if vrimgFilenameCount > 1:
        dialogWidth = 600
        
        vrimgScriptDialog.AllowResizingDialog( False )
        #vrimgScriptDialog.SetSize( dialogWidth, (vrimgFilenameCount * 32) + 100 )
        vrimgScriptDialog.SetTitle( "Submit Vrimg2Exr Job To Deadline" )
        
        vrimgScriptDialog.AddGrid()
        vrimgScriptDialog.AddControlToGrid( "Label", "LabelControl", "Please select the vrming images to convert to exr.", 0, 0 )
        for i in range( 0, vrimgFilenameCount ):
            outputFilename = vrimgFilenames[ i ]
            outputFilename = RepositoryUtils.CheckPathMapping( outputFilename, False )
            outputFilename = PathUtils.ToPlatformIndependentPath( outputFilename )
            vrimgScriptDialog.AddSelectionControlToGrid( str(i), "CheckBoxControl", (i==0), Path.GetFileName( outputFilename ), i+1, 0 )
        vrimgScriptDialog.EndGrid()
        
        vrimgScriptDialog.AddGrid()
        vrimgScriptDialog.AddHorizontalSpacerToGrid( "DummyLabel1", 0, 0 )
        submitButton = vrimgScriptDialog.AddControlToGrid( "SubmitButton", "ButtonControl", "Submit", 0, 1, expand=False )
        submitButton.ValueModified.connect(SubmitButtonPressed)
        closeButton = vrimgScriptDialog.AddControlToGrid( "CloseButton", "ButtonControl", "Close", 0, 2, expand=False )
        closeButton.ValueModified.connect(CloseButtonPressed)
        vrimgScriptDialog.EndGrid()
        
        vrimgScriptDialog.ShowDialog( True )
    elif vrimgFilenameCount == 1:
        outputFilename = vrimgFilenames[ 0 ]
        outputFilename = RepositoryUtils.CheckPathMapping( outputFilename, False )
        outputFilename = PathUtils.ToPlatformIndependentPath( outputFilename )
        ClientUtils.ExecuteScript( scriptPath, outputFilename )
    else:
        ClientUtils.ExecuteScript( scriptPath, "" )
Example #7
0
def __main__():
    global scriptDialog
    global settings

    scriptDialog = DeadlineScriptDialog()
    scriptDialog.AllowResizingDialog(False)
    scriptDialog.SetTitle("IPMI - Remote Command")

    # Check at least 1 Pulse machine has been defined in Deadline
    pulseNames = RepositoryUtils.GetPulseNames(True)

    if len(pulseNames) == 0:
        scriptDialog.ShowMessageBox(
            "At least 1 Pulse server must exist in Deadline for this script to function correctly!",
            "Error")
        return

    pulseNames = list(pulseNames)

    scriptDialog.AddGrid()
    scriptDialog.AddControlToGrid(
        "IPMILabel0", "LabelControl",
        "Select valid Pulse to execute IPMI command via:", 0, 0,
        "Select which Pulse to execute IPMI command.", False)
    PulseSelected = scriptDialog.AddComboControlToGrid(
        "PulseName", "ComboControl", "", pulseNames, 0, 1,
        "List of Pulse Servers registered in Deadline.", False)
    PulseSelected.ValueModified.connect(PulseSelectionChanged)

    scriptDialog.AddControlToGrid("IPMILabel1", "LabelControl",
                                  "IPMI Command to execute:", 1, 0,
                                  "Select which IPMI command to execute.",
                                  False)
    CommandSelected = scriptDialog.AddComboControlToGrid(
        "Command", "ComboControl", "power on",
        ("power on", "soft power off", "power off", "power reset"), 1, 1,
        "List of IPMI Commands.", False)
    CommandSelected.ValueModified.connect(CommandSelectionChanged)
    scriptDialog.EndGrid()

    scriptDialog.AddGrid()
    scriptDialog.AddHorizontalSpacerToGrid("DummyLabel0", 0, 0)
    executeButton = scriptDialog.AddControlToGrid("ExecuteButton",
                                                  "ButtonControl",
                                                  "Execute",
                                                  0,
                                                  1,
                                                  expand=False)
    executeButton.ValueModified.connect(ExecuteButtonPressed)
    closeButton = scriptDialog.AddControlToGrid("CloseButton",
                                                "ButtonControl",
                                                "Close",
                                                0,
                                                2,
                                                expand=False)
    closeButton.ValueModified.connect(CloseButtonPressed)
    scriptDialog.EndGrid()

    settings = ("PulseName", "Command")

    scriptDialog.LoadSettings(GetSettingsFilename(), settings)
    scriptDialog.EnabledStickySaving(settings, GetSettingsFilename())

    scriptDialog.Shown.connect(InitializeDialog)

    scriptDialog.ShowDialog(True)
def __main__():
    global rvioScriptDialog
    global scriptPath

    rvioScriptDialog = DeadlineScriptDialog()
    rvioScriptDialog.SetIcon(
        Path.Combine(RepositoryUtils.GetRootDirectory("plugins/RVIO"),
                     "RVIO.ico"))

    selectedJobs = MonitorUtils.GetSelectedJobs()
    if len(selectedJobs) > 1:
        rvioScriptDialog.ShowMessageBox(
            "Only one job can be selected at a time.",
            "Multiple Jobs Selected")
        return

    scriptPath = Path.Combine(
        RepositoryUtils.GetRootDirectory("scripts/Submission"),
        "RVIOSubmission.py")
    scriptPath = PathUtils.ToPlatformIndependentPath(scriptPath)

    job = selectedJobs[0]
    outputFilenameCount = len(job.JobOutputFileNames)

    if outputFilenameCount == 0:
        rvioScriptDialog.ShowMessageBox(
            "Job does not contain any output filename(s).", "Missing Output")
        return

    versionId = ""
    if outputFilenameCount > 0:
        versionId = job.GetJobExtraInfoKeyValue("VersionId")
        if versionId != "":
            lines = []
            lines.append("VersionId=%s" % versionId)

            if job.GetJobExtraInfoKeyValue("EntityId") != "":
                lines.append("EntityId=%s" %
                             job.GetJobExtraInfoKeyValue("EntityId"))
            if job.GetJobExtraInfoKeyValue("EntityType") != "":
                lines.append("EntityType=%s" %
                             job.GetJobExtraInfoKeyValue("EntityType"))
            if job.GetJobExtraInfoKeyValue("ProjectId") != "":
                lines.append("ProjectId=%s" %
                             job.GetJobExtraInfoKeyValue("ProjectId"))
            if job.GetJobExtraInfoKeyValue("TaskId") != "":
                lines.append("TaskId=%s" %
                             job.GetJobExtraInfoKeyValue("TaskId"))

            if job.JobExtraInfo0 != "":
                lines.append("TaskName=%s" % job.JobExtraInfo0)
            elif job.GetJobExtraInfoKeyValue("TaskName") != "":
                lines.append("TaskName=%s" %
                             job.GetJobExtraInfoKeyValue("TaskName"))

            if job.JobExtraInfo1 != "":
                lines.append("ProjectName=%s" % job.JobExtraInfo1)
            elif job.GetJobExtraInfoKeyValue("ProjectName") != "":
                lines.append("ProjectName=%s" %
                             job.GetJobExtraInfoKeyValue("ProjectName"))

            if job.JobExtraInfo2 != "":
                lines.append("EntityName=%s" % job.JobExtraInfo2)
            elif job.GetJobExtraInfoKeyValue("EntityName") != "":
                lines.append("EntityName=%s" %
                             job.GetJobExtraInfoKeyValue("EntityName"))

            if job.JobExtraInfo3 != "":
                lines.append("VersionName=%s" % job.JobExtraInfo3)
            elif job.GetJobExtraInfoKeyValue("VersionName") != "":
                lines.append("VersionName=%s" %
                             job.GetJobExtraInfoKeyValue("VersionName"))

            if job.JobExtraInfo4 != "":
                lines.append("Description=%s" % job.JobExtraInfo4)
            elif job.GetJobExtraInfoKeyValue("Description") != "":
                lines.append("Description=%s" %
                             job.GetJobExtraInfoKeyValue("Description"))

            if job.JobExtraInfo5 != "":
                lines.append("UserName=%s" % job.JobExtraInfo5)
            elif job.GetJobExtraInfoKeyValue("UserName") != "":
                lines.append("UserName=%s" %
                             job.GetJobExtraInfoKeyValue("UserName"))

            shotgunSettingsPath = Path.Combine(
                ClientUtils.GetUsersSettingsDirectory(),
                "RVIOSettingsShotgun.ini")
            File.WriteAllLines(shotgunSettingsPath, tuple(lines))

    if outputFilenameCount > 1:
        rvioScriptDialog.AllowResizingDialog(False)
        rvioScriptDialog.SetTitle("Submit RVIO Quicktime Job To Deadline")

        rvioScriptDialog.AddGrid()
        rvioScriptDialog.AddControlToGrid(
            "Label", "LabelControl",
            "Please select the output images to create a QuickTime MOV using RVIO",
            0, 0)
        for i in range(0, outputFilenameCount):
            outputFilename = Path.Combine(job.JobOutputDirectories[i],
                                          job.JobOutputFileNames[i])
            outputFilename = FrameUtils.ReplacePaddingWithFrameNumber(
                outputFilename, job.JobFramesList[0])
            outputFilename = RepositoryUtils.CheckPathMapping(
                outputFilename, False)
            outputFilename = PathUtils.ToPlatformIndependentPath(
                outputFilename)
            rvioScriptDialog.AddSelectionControlToGrid(
                str(i), "CheckBoxControl", (i == 0),
                Path.GetFileName(outputFilename), i + 1, 0)

        rvioScriptDialog.EndGrid()
        rvioScriptDialog.AddGrid()
        rvioScriptDialog.AddHorizontalSpacerToGrid("DummyLabel1", 0, 0)
        submitButton = rvioScriptDialog.AddControlToGrid("SubmitButton",
                                                         "ButtonControl",
                                                         "Submit",
                                                         0,
                                                         1,
                                                         expand=False)
        submitButton.ValueModified.connect(SubmitButtonPressed)
        closeButton = rvioScriptDialog.AddControlToGrid("CloseButton",
                                                        "ButtonControl",
                                                        "Close",
                                                        0,
                                                        2,
                                                        expand=False)
        closeButton.ValueModified.connect(CloseButtonPressed)
        rvioScriptDialog.EndGrid()

        rvioScriptDialog.ShowDialog(True)
    else:
        outputFilename = Path.Combine(job.JobOutputDirectories[0],
                                      job.JobOutputFileNames[0])
        outputFilename = FrameUtils.ReplacePaddingWithFrameNumber(
            outputFilename, job.JobFramesList[0])
        outputFilename = RepositoryUtils.CheckPathMapping(
            outputFilename, False)
        outputFilename = PathUtils.ToPlatformIndependentPath(outputFilename)

        arguments = [
            outputFilename,
        ]
        if versionId != "":
            arguments.append("EnableShotgun")

        ClientUtils.ExecuteScript(scriptPath, arguments)
Example #9
0
def __main__():
    global djvScriptDialog
    global scriptPath
    
    djvScriptDialog = DeadlineScriptDialog()
    djvScriptDialog.SetIcon( Path.Combine( RepositoryUtils.GetRootDirectory("plugins/DJV"), "DJV.ico" ) )
    
    selectedJobs = MonitorUtils.GetSelectedJobs()
    if len(selectedJobs) > 1:
        djvScriptDialog.ShowMessageBox( "Only one job can be selected at a time.", "Multiple Jobs Selected" )
        return
    
    scriptPath = Path.Combine( RepositoryUtils.GetRootDirectory("scripts/Submission"), "DJVSubmission.py" )
    scriptPath = PathUtils.ToPlatformIndependentPath( scriptPath )
    
    job = selectedJobs[0]
    outputFilenameCount = len(job.JobOutputFileNames)

    if outputFilenameCount == 0:
        djvScriptDialog.ShowMessageBox( "Job does not contain any output filename(s).", "Missing Output" )
        return

    versionId = ""
    if outputFilenameCount > 0:        
        versionId = job.GetJobExtraInfoKeyValue( "VersionId" )
        if versionId != "":
            lines = []
            lines.append( "VersionId=%s" % versionId )
            
            if job.GetJobExtraInfoKeyValue( "EntityId" ) != "":
                lines.append( "EntityId=%s" % job.GetJobExtraInfoKeyValue( "EntityId" ) )
            if job.GetJobExtraInfoKeyValue( "EntityType" ) != "":
                lines.append( "EntityType=%s" % job.GetJobExtraInfoKeyValue( "EntityType" ) )
            if job.GetJobExtraInfoKeyValue( "ProjectId" ) != "":
                lines.append( "ProjectId=%s" % job.GetJobExtraInfoKeyValue( "ProjectId" ) )
            if job.GetJobExtraInfoKeyValue( "TaskId" ) != "":
                lines.append( "TaskId=%s" % job.GetJobExtraInfoKeyValue( "TaskId" ) )
                
            if job.JobExtraInfo0 != "":
                lines.append( "TaskName=%s" % job.JobExtraInfo0 )
            elif job.GetJobExtraInfoKeyValue( "TaskName" ) != "":
                lines.append( "TaskName=%s" % job.GetJobExtraInfoKeyValue( "TaskName" ) )
            
            if job.JobExtraInfo1 != "":
                lines.append( "ProjectName=%s" % job.JobExtraInfo1 )
            elif job.GetJobExtraInfoKeyValue( "ProjectName" ) != "":
                lines.append( "ProjectName=%s" % job.GetJobExtraInfoKeyValue( "ProjectName" ) )
            
            if job.JobExtraInfo2 != "":
                lines.append( "EntityName=%s" % job.JobExtraInfo2 )
            elif job.GetJobExtraInfoKeyValue( "EntityName" ) != "":
                lines.append( "EntityName=%s" % job.GetJobExtraInfoKeyValue( "EntityName" ) )
            
            if job.JobExtraInfo3 != "":
                lines.append( "VersionName=%s" % job.JobExtraInfo3 )
            elif job.GetJobExtraInfoKeyValue( "VersionName" ) != "":
                lines.append( "VersionName=%s" % job.GetJobExtraInfoKeyValue( "VersionName" ) )
            
            if job.JobExtraInfo4 != "":
                lines.append( "Description=%s" % job.JobExtraInfo4 )
            elif job.GetJobExtraInfoKeyValue( "Description" ) != "":
                lines.append( "Description=%s" % job.GetJobExtraInfoKeyValue( "Description" ) )
                
            if job.JobExtraInfo5 != "":
                lines.append( "UserName=%s" % job.JobExtraInfo5 )
            elif job.GetJobExtraInfoKeyValue( "UserName" ) != "":
                lines.append( "UserName=%s" % job.GetJobExtraInfoKeyValue( "UserName" ) )
            
            shotgunSettingsPath = Path.Combine( ClientUtils.GetUsersSettingsDirectory(), "DJVSettingsShotgun.ini" )
            File.WriteAllLines( shotgunSettingsPath, tuple(lines) )
    
    if outputFilenameCount > 1:
        djvScriptDialog.AllowResizingDialog( False )
        djvScriptDialog.SetTitle( "Submit DJV QuickTime Job To Deadline" )
        
        djvScriptDialog.AddGrid()
        djvScriptDialog.AddControlToGrid( "Label", "LabelControl", "Please select the output images to create a QuickTime MOV using DJV", 0, 0 )
        for i in range( 0, outputFilenameCount ):
            outputFilename = Path.Combine(  job.JobOutputDirectories[i], job.JobOutputFileNames[i])
            outputFilename = FrameUtils.ReplacePaddingWithFrameNumber( outputFilename, job.JobFramesList[0] )
            outputFilename = RepositoryUtils.CheckPathMapping( outputFilename, False )
            outputFilename = PathUtils.ToPlatformIndependentPath( outputFilename )
            djvScriptDialog.AddSelectionControlToGrid( str(i), "CheckBoxControl", (i==0), Path.GetFileName( outputFilename ), i+1, 0 )
        
        djvScriptDialog.EndGrid()
        djvScriptDialog.AddGrid()
        djvScriptDialog.AddHorizontalSpacerToGrid( "DummyLabel1", 0, 0 )
        submitButton = djvScriptDialog.AddControlToGrid( "SubmitButton", "ButtonControl", "Submit", 0, 1, expand=False )
        submitButton.ValueModified.connect(SubmitButtonPressed)
        closeButton = djvScriptDialog.AddControlToGrid( "CloseButton", "ButtonControl", "Close", 0, 2, expand=False )
        closeButton.ValueModified.connect(CloseButtonPressed)
        djvScriptDialog.EndGrid()
        
        djvScriptDialog.ShowDialog( True )
    else:
        JobName = job.JobName
        JobID = job.JobId
        FramesList = job.JobFrames
        
        # Unable to handle nth Frame based FramesList at the moment, until Deadline.Scripting API Function improved in a future release of Deadline (~v5.1?)
        FrameRange = FramesList.split( "-" )
        FrameRange = FramesList.split( "," )
        
        # Throw Error if the Frame List is not in the form "0-100"
        if len(FrameRange) >= 4:
            djvScriptDialog.ShowMessageBox( "DJV presently does not support handling nth Frame based render input sequences.", "Error!" )
            CloseDJVDialog()
            return

        startFrame = FrameRange[0] # get first item in list
        endFrame = FrameRange[-1] # get last item in list, no matter how long it is
        FramesList = startFrame + "-" + endFrame
        
        outputFilename = Path.Combine(  job.JobOutputDirectories[0], job.JobOutputFileNames[0])
        outputFilename = FrameUtils.ReplacePaddingWithFrameNumber( outputFilename, job.JobFramesList[0] )
        outputFilename = RepositoryUtils.CheckPathMapping( outputFilename, False )
        outputFilename = PathUtils.ToPlatformIndependentPath( outputFilename )
        
        InputImages = outputFilename.replace( "\\", "/" )
        OutputMovie = ""
        
        if outputFilename and len(outputFilename) > 0:
            imgDirectory = Path.GetDirectoryName( outputFilename )
            if imgDirectory != None:
                imgFilename = Path.GetFileNameWithoutExtension( outputFilename )

                # Job Script hard-wired to QuickTime MOV until above Deadline.Scripting API Function improved to handle nth frame based render output sequences. Deadline (~v5.1?)
                OutputMovie = ( imgDirectory.replace( "\\", "/" ) + "/" + imgFilename + ".mov" )
        
        arguments = [ InputImages, OutputMovie, JobID, JobName, FramesList ]
        if versionId != "":
            arguments.append( "EnableShotgun" )
        
        ClientUtils.ExecuteScript( scriptPath, arguments )