diff --git a/nxdrive/data/i18n/i18n.json b/nxdrive/data/i18n/i18n.json
index fc5493e5f2..0d0780ec62 100644
--- a/nxdrive/data/i18n/i18n.json
+++ b/nxdrive/data/i18n/i18n.json
@@ -315,6 +315,7 @@
"RELEASE_NOTES_MSG": "Your %1 has been correctly updated to the version %2, please read the release notes for more information.",
"RECENTLY_UPDATED": "Recently updated",
"REFRESH": "Refresh",
+ "REFRESH_AVAILABLE": "New tasks available. Please refresh the page.",
"REMOTE_FOLDER": "Remote folder",
"REPLACE": "Replace",
"REPORT_GENERATED": "Report available:",
diff --git a/nxdrive/data/qml/TaskManager.qml b/nxdrive/data/qml/TaskManager.qml
index ca73d37ff7..302de6b816 100644
--- a/nxdrive/data/qml/TaskManager.qml
+++ b/nxdrive/data/qml/TaskManager.qml
@@ -18,18 +18,34 @@ Rectangle {
}
Rectangle {
- id: buttonzone
- height: 30
+ id: refreshButton
+ objectName: "refresh"
+
+ height: 0
width: parent.width
+ color: refreshBackground
RowLayout {
width: parent.width
height: parent.height
+ ScaledText {
+ id: refreshText
+ text: qsTr("REFRESH_AVAILABLE") + tl.tr
+ font.pointSize: point_size * 1.2
+ leftPadding: 25
+ rightPadding: 5
+ topPadding: 3
+ anchors {
+ centerIn: buttonBackground
+ }
+ }
NuxeoButton {
text: qsTr("REFRESH") + tl.tr
- Layout.alignment: Qt.AlignHCenter
+ Layout.alignment: Qt.AlignRight
Layout.rightMargin: 30
+ primary: false
onClicked: {
tasks_model.loadList(api.get_Tasks_list(engineUid), api.get_username(engineUid))
+ refreshButton.height = 0
}
}
}
@@ -40,7 +56,7 @@ Rectangle {
width: parent.width
height: 50
spacing: 0
- anchors.top: buttonzone.bottom
+ anchors.top: refreshButton.bottom
SettingsTab {
text: qsTr("PENDING_TASKS") + tl.tr
barIndex: bar.currentIndex;
@@ -80,9 +96,10 @@ Rectangle {
ListView {
anchors.fill: parent
+ anchors.top: bar.bottom
anchors.bottomMargin: 52
width: parent.width
- anchors.topMargin: 90
+ anchors.topMargin: refreshButton.height == 0 ? 60 : 90
model: tasks_model.model
delegate: tasksDelegate
visible: !showSelfTasksList
@@ -92,6 +109,9 @@ Rectangle {
rightMargin: 10
spacing: 25
clip: true
+ ScrollBar.vertical: ScrollBar {
+ active: true
+ }
}
Component {
@@ -115,7 +135,7 @@ Rectangle {
anchors.fill: parent
anchors.bottomMargin: 52
width: parent.width
- anchors.topMargin: 90
+ anchors.topMargin: refreshButton.height == 0 ? 60 : 90
model: tasks_model.self_model
delegate: selftasksDelegate
visible: showSelfTasksList
@@ -125,6 +145,9 @@ Rectangle {
rightMargin: 10
spacing: 25
clip: true
+ ScrollBar.vertical: ScrollBar {
+ active: true
+ }
}
}
diff --git a/nxdrive/gui/api.py b/nxdrive/gui/api.py
index 86a3263f61..b76a8699e2 100644
--- a/nxdrive/gui/api.py
+++ b/nxdrive/gui/api.py
@@ -77,6 +77,7 @@ def __init__(self, application: "Application", /) -> None:
self.openAuthenticationDialog.connect(
self.application.open_authentication_dialog
)
+ self.last_task_list = ""
def _json_default(self, obj: Any, /) -> Any:
export = getattr(obj, "export", None)
@@ -525,6 +526,8 @@ def get_Tasks_list(self, engine_uid: str, /) -> list:
wf_name = f"{wf_name} {char}" if char.isupper() else f"{wf_name}{char}"
task.workflowModelName = wf_name[1:]
+ if self.last_task_list == "":
+ self.last_task_list = str(tasks_list)
return tasks_list
@pyqtSlot(str, result=str)
diff --git a/nxdrive/gui/application.py b/nxdrive/gui/application.py
index 3712b923dc..12421ed01f 100644
--- a/nxdrive/gui/application.py
+++ b/nxdrive/gui/application.py
@@ -393,6 +393,7 @@ def init_gui(self) -> None:
)
self.manager.featureUpdate.connect(self._update_feature_state)
+ self.last_engine_uid = ""
def init_workflow(self) -> Workflow:
if not self.manager.engines:
@@ -573,6 +574,7 @@ def _fill_qml_context(self, context: QQmlContext, /) -> None:
"warningContent": "#FF9E00",
"lightTheme": "#FFFFFF",
"darkShadow": "#333333",
+ "refreshBackground": "#d0d1d6",
}
for name, value in colors.items():
@@ -929,7 +931,7 @@ def show_settings(self, section: str, /) -> None:
@pyqtSlot()
def show_systray(self) -> None:
- # self.systray_window.close()
+ self.systray_window.close()
icon = self.tray_icon.geometry()
if not icon or icon.isEmpty():
@@ -1881,6 +1883,7 @@ def fetch_pending_tasks(self, engine: Engine, /) -> list:
except Exception:
log.info("Unable to fetch tasks")
tasks = []
+ self.last_engine_uid = engine.uid
return tasks
def update_status(self, engine: Engine, /) -> None:
diff --git a/nxdrive/poll_workers.py b/nxdrive/poll_workers.py
index 0da895c1c1..6f2cf97658 100644
--- a/nxdrive/poll_workers.py
+++ b/nxdrive/poll_workers.py
@@ -195,5 +195,28 @@ def _poll(self) -> bool:
self.workflow = self.app.workflow
for engine in self.manager.engines.copy().values():
self.workflow.get_pending_tasks(engine, self._first_workflow_check)
+ """
+ if engine.uid == self.app.last_engine_uid:
+ print(f">>>>> engine.uid: {engine.uid!r}")
+ print(f">>>>> self.app.last_engine_uid: {self.app.last_engine_uid!r}")
+ print(">>>>> calling loadlist")
+ task_list = self.app.api.get_Tasks_list(engine.uid)
+ username = self.app.api.get_username(engine.uid)
+ self.app.tasks_model.loadList(task_list, username)
+ #self.app.tasks_model.refresh_models()
+ """
+ if engine.uid == self.app.last_engine_uid:
+ task_list = str(self.app.api.get_Tasks_list(engine.uid))
+ if task_list != self.app.api.last_task_list:
+ self.app.api.last_task_list = task_list
+ from .qt.imports import QObject
+
+ r_button = self.app.task_manager_window.findChild(
+ QObject, "refresh"
+ )
+ r_button.setProperty("height", 30)
+ print(">>>> ")
+ else:
+ print("!!!! ")
return True