Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/cura/API
diff options
context:
space:
mode:
authorJaime van Kessel <nallath@gmail.com>2020-05-26 12:52:14 +0300
committerJaime van Kessel <nallath@gmail.com>2020-05-26 12:52:14 +0300
commit280d3f07a6b3f6215dcbf99164d3b4d04931c1f6 (patch)
treea03087a28e2c50b15063163e6852b72b3de76e01 /cura/API
parent85d5eab27d920004dbe5b58d056430dedb54ad9c (diff)
parentfad02193abad63c80abc00e42c212f1bad35d831 (diff)
Merge branch 'CURA-7290_manual_account_sync' of github.com:Ultimaker/Cura
Diffstat (limited to 'cura/API')
-rw-r--r--cura/API/Account.py57
1 files changed, 44 insertions, 13 deletions
diff --git a/cura/API/Account.py b/cura/API/Account.py
index 7e8802eddd..c33f1c13d5 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -23,6 +23,7 @@ class SyncState:
SYNCING = 0
SUCCESS = 1
ERROR = 2
+ IDLE = 3
## The account API provides a version-proof bridge to use Ultimaker Accounts
@@ -50,6 +51,7 @@ class Account(QObject):
"""
lastSyncDateTimeChanged = pyqtSignal()
syncStateChanged = pyqtSignal(int) # because SyncState is an int Enum
+ manualSyncEnabledChanged = pyqtSignal(bool)
def __init__(self, application: "CuraApplication", parent = None) -> None:
super().__init__(parent)
@@ -58,7 +60,8 @@ class Account(QObject):
self._error_message = None # type: Optional[Message]
self._logged_in = False
- self._sync_state = SyncState.SUCCESS
+ self._sync_state = SyncState.IDLE
+ self._manual_sync_enabled = False
self._last_sync_str = "-"
self._callback_port = 32118
@@ -106,16 +109,21 @@ class Account(QObject):
:param state: One of SyncState
"""
+ Logger.info("Service {service} enters sync state {state}", service = service_name, state = state)
+
prev_state = self._sync_state
self._sync_services[service_name] = state
if any(val == SyncState.SYNCING for val in self._sync_services.values()):
self._sync_state = SyncState.SYNCING
+ self._setManualSyncEnabled(False)
elif any(val == SyncState.ERROR for val in self._sync_services.values()):
self._sync_state = SyncState.ERROR
+ self._setManualSyncEnabled(True)
else:
self._sync_state = SyncState.SUCCESS
+ self._setManualSyncEnabled(False)
if self._sync_state != prev_state:
self.syncStateChanged.emit(self._sync_state)
@@ -157,11 +165,31 @@ class Account(QObject):
self._logged_in = logged_in
self.loginStateChanged.emit(logged_in)
if logged_in:
- self.sync()
+ self._setManualSyncEnabled(False)
+ self._sync()
else:
if self._update_timer.isActive():
self._update_timer.stop()
+ def _sync(self) -> None:
+ """Signals all sync services to start syncing
+
+ This can be considered a forced sync: even when a
+ sync is currently running, a sync will be requested.
+ """
+
+ if self._update_timer.isActive():
+ self._update_timer.stop()
+ elif self._sync_state == SyncState.SYNCING:
+ Logger.warning("Starting a new sync while previous sync was not completed\n{}", str(self._sync_services))
+
+ self.syncRequested.emit()
+
+ def _setManualSyncEnabled(self, enabled: bool) -> None:
+ if self._manual_sync_enabled != enabled:
+ self._manual_sync_enabled = enabled
+ self.manualSyncEnabledChanged.emit(enabled)
+
@pyqtSlot()
@pyqtSlot(bool)
def login(self, force_logout_before_login: bool = False) -> None:
@@ -212,20 +240,23 @@ class Account(QObject):
def lastSyncDateTime(self) -> str:
return self._last_sync_str
- @pyqtSlot()
- def sync(self) -> None:
- """Signals all sync services to start syncing
+ @pyqtProperty(bool, notify=manualSyncEnabledChanged)
+ def manualSyncEnabled(self) -> bool:
+ return self._manual_sync_enabled
- This can be considered a forced sync: even when a
- sync is currently running, a sync will be requested.
- """
+ @pyqtSlot()
+ @pyqtSlot(bool)
+ def sync(self, user_initiated: bool = False) -> None:
+ if user_initiated:
+ self._setManualSyncEnabled(False)
- if self._update_timer.isActive():
- self._update_timer.stop()
- elif self._sync_state == SyncState.SYNCING:
- Logger.warning("Starting a new sync while previous sync was not completed\n{}", str(self._sync_services))
+ self._sync()
- self.syncRequested.emit()
+ @pyqtSlot()
+ def popupOpened(self) -> None:
+ self._setManualSyncEnabled(True)
+ self._sync_state = SyncState.IDLE
+ self.syncStateChanged.emit(self._sync_state)
@pyqtSlot()
def logout(self) -> None: