File size: 1,530 Bytes
0f8b3a0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from __future__ import annotations

from typing import TYPE_CHECKING

from velai.dataflow.enums import NodeState
from velai.nodes.base_node import BaseNode

if TYPE_CHECKING:
    from velai.dataflow.nodes import NodeInstance
    from velai.ui.vueflow_canvas import VueFlowCanvas


class ProgressStateUpdater:
    def __init__(self, canvas: VueFlowCanvas) -> None:
        self.canvas = canvas

    async def update(self, node: NodeInstance) -> None:
        """Update the progress UI based on the current state of the node."""
        node_id = node.node_id
        state = node.state

        if state == NodeState.QUEUED:
            await self.canvas.set_node_processing(node_id, True)
            await self.canvas.update_node_progress(node_id, None, None)

        elif state == NodeState.PROCESSING:
            await self.canvas.set_node_processing(node_id, True)
            if isinstance(node, BaseNode):
                # Only show message if it's not None or empty
                msg = node.data.progress_message
                if not msg:
                    msg = None

                await self.canvas.update_node_progress(
                    node_id,
                    node.data.progress_value,
                    msg,
                )
            else:
                await self.canvas.update_node_progress(node_id, None, None)

        elif state == NodeState.IDLE:
            await self.canvas.set_node_processing(node_id, False)
            await self.canvas.update_node_progress(node_id, None, None)