2323 signal deleteDataRequest (var node) // Delete node data
2424 signal submitRequest (var node) // Start external computation (submission on farm)
2525 signal stopSubmitRequest (var node) // Stop external computation (interrupt tasks on farm)
26+ signal retrySubmitRequest (var node) // Retry error tasks on farm
2627
2728 SystemPalette { id: activePalette }
2829
@@ -110,9 +111,10 @@ Item {
110111 property bool nodeIsLocked: false
111112 property bool canComputeNode: false
112113 property bool canStopNode: false
113- property bool canRestartNode: false
114+ property bool canRestartNode: false // Node can be restarted, locally or externally
114115 property bool canSubmitNode: false
115116 property bool nodeSubmitted: false
117+ property bool canRetryNode: false // Error tasks can be restarted for external node
116118
117119 property int computeButtonState: NodeActions .ButtonState .LAUNCHABLE
118120 property string computeButtonIcon: {
@@ -171,6 +173,10 @@ Item {
171173 [" ERROR" , " STOPPED" , " KILLED" ].includes (node .globalStatus )
172174 }
173175
176+ function isNodeRetriable (node ) {
177+ return node .globalExecMode == " EXTERN" && [" ERROR" , " STOPPED" , " KILLED" ].includes (node .globalStatus )
178+ }
179+
174180 function updateProperties (node ) {
175181 if (! node) return
176182 // Update properties values
@@ -183,6 +189,7 @@ Item {
183189 actionHeader .computeButtonState = getComputeButtonState (node)
184190 actionHeader .submitButtonState = getSubmitButtonState (node)
185191 actionHeader .canRestartNode = isNodeRestartable (node)
192+ actionHeader .canRetryNode = isNodeRetriable (node)
186193 }
187194
188195 // Set initial state & position
@@ -323,6 +330,34 @@ Item {
323330 }
324331 }
325332 }
333+
334+ // Retry button (for farm submissions that have failed)
335+ MaterialToolButton {
336+ id: retryButton
337+ font .pointSize : 16
338+ text: MaterialIcons .cloud_sync
339+ padding: 6
340+ ToolTip .text : " Retry Submission On Render Farm"
341+ ToolTip .visible : hovered
342+ ToolTip .delay : 1000
343+ visible: actionHeader .canRetryNode
344+ enabled: visible
345+
346+ // Background color
347+ background: Rectangle {
348+ color: {
349+ return retryButton .hovered ? activePalette .highlight : activePalette .button
350+ }
351+ opacity: retryButton .hovered ? 1 : root ._opacity
352+ border .color : retryButton .hovered ? activePalette .highlight : Qt .darker (activePalette .window , 1.3 )
353+ border .width : 1
354+ radius: 3
355+ }
356+
357+ onClicked: {
358+ root .retrySubmitRequest (actionHeader .selectedNode )
359+ }
360+ }
326361 }
327362 }
328363}
0 commit comments