mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-16 11:17:49 -06:00
Merge branch '4.0'
Conflicts: cura/OAuth2/AuthorizationService.py -> Code style change vs. fixing logging in while no internet connection.
This commit is contained in:
commit
3040fde9eb
3 changed files with 32 additions and 3 deletions
|
@ -76,6 +76,9 @@ class Account(QObject):
|
||||||
self._error_message.hide()
|
self._error_message.hide()
|
||||||
self._error_message = Message(error_message, title = i18n_catalog.i18nc("@info:title", "Login failed"))
|
self._error_message = Message(error_message, title = i18n_catalog.i18nc("@info:title", "Login failed"))
|
||||||
self._error_message.show()
|
self._error_message.show()
|
||||||
|
self._logged_in = False
|
||||||
|
self.loginStateChanged.emit(False)
|
||||||
|
return
|
||||||
|
|
||||||
if self._logged_in != logged_in:
|
if self._logged_in != logged_in:
|
||||||
self._logged_in = logged_in
|
self._logged_in = logged_in
|
||||||
|
|
|
@ -10,12 +10,16 @@ import requests.exceptions
|
||||||
|
|
||||||
|
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
from UM.Message import Message
|
||||||
from UM.Signal import Signal
|
from UM.Signal import Signal
|
||||||
|
|
||||||
from cura.OAuth2.LocalAuthorizationServer import LocalAuthorizationServer
|
from cura.OAuth2.LocalAuthorizationServer import LocalAuthorizationServer
|
||||||
from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers, TOKEN_TIMESTAMP_FORMAT
|
from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers, TOKEN_TIMESTAMP_FORMAT
|
||||||
from cura.OAuth2.Models import AuthenticationResponse
|
from cura.OAuth2.Models import AuthenticationResponse
|
||||||
|
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
i18n_catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from cura.OAuth2.Models import UserProfile, OAuth2Settings
|
from cura.OAuth2.Models import UserProfile, OAuth2Settings
|
||||||
from UM.Preferences import Preferences
|
from UM.Preferences import Preferences
|
||||||
|
@ -39,6 +43,14 @@ class AuthorizationService:
|
||||||
self._preferences = preferences
|
self._preferences = preferences
|
||||||
self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True)
|
self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True)
|
||||||
|
|
||||||
|
self._unable_to_get_data_message = None # type: Optional[Message]
|
||||||
|
|
||||||
|
self.onAuthStateChanged.connect(self._authChanged)
|
||||||
|
|
||||||
|
def _authChanged(self, logged_in):
|
||||||
|
if logged_in and self._unable_to_get_data_message is not None:
|
||||||
|
self._unable_to_get_data_message.hide()
|
||||||
|
|
||||||
def initialize(self, preferences: Optional["Preferences"] = None) -> None:
|
def initialize(self, preferences: Optional["Preferences"] = None) -> None:
|
||||||
if preferences is not None:
|
if preferences is not None:
|
||||||
self._preferences = preferences
|
self._preferences = preferences
|
||||||
|
@ -161,7 +173,18 @@ class AuthorizationService:
|
||||||
preferences_data = json.loads(self._preferences.getValue(self._settings.AUTH_DATA_PREFERENCE_KEY))
|
preferences_data = json.loads(self._preferences.getValue(self._settings.AUTH_DATA_PREFERENCE_KEY))
|
||||||
if preferences_data:
|
if preferences_data:
|
||||||
self._auth_data = AuthenticationResponse(**preferences_data)
|
self._auth_data = AuthenticationResponse(**preferences_data)
|
||||||
self.onAuthStateChanged.emit(logged_in = True)
|
# Also check if we can actually get the user profile information.
|
||||||
|
user_profile = self.getUserProfile()
|
||||||
|
if user_profile is not None:
|
||||||
|
self.onAuthStateChanged.emit(logged_in = True)
|
||||||
|
else:
|
||||||
|
if self._unable_to_get_data_message is not None:
|
||||||
|
self._unable_to_get_data_message.hide()
|
||||||
|
|
||||||
|
self._unable_to_get_data_message = Message(i18n_catalog.i18nc("@info", "Unable to reach the Ultimaker account server."), title = i18n_catalog.i18nc("@info:title", "Warning"))
|
||||||
|
self._unable_to_get_data_message.addAction("retry", i18n_catalog.i18nc("@action:button", "Retry"), "[no_icon]", "[no_description]")
|
||||||
|
self._unable_to_get_data_message.actionTriggered.connect(self._onMessageActionTriggered)
|
||||||
|
self._unable_to_get_data_message.show()
|
||||||
except ValueError:
|
except ValueError:
|
||||||
Logger.logException("w", "Could not load auth data from preferences")
|
Logger.logException("w", "Could not load auth data from preferences")
|
||||||
|
|
||||||
|
@ -178,3 +201,7 @@ class AuthorizationService:
|
||||||
else:
|
else:
|
||||||
self._user_profile = None
|
self._user_profile = None
|
||||||
self._preferences.resetPreference(self._settings.AUTH_DATA_PREFERENCE_KEY)
|
self._preferences.resetPreference(self._settings.AUTH_DATA_PREFERENCE_KEY)
|
||||||
|
|
||||||
|
def _onMessageActionTriggered(self, _, action):
|
||||||
|
if action == "retry":
|
||||||
|
self.loadAuthDataFromPreferences()
|
||||||
|
|
|
@ -69,8 +69,7 @@ class SolidView(View):
|
||||||
if support_angle_stack is not None and Application.getInstance().getPreferences().getValue("view/show_overhang"):
|
if support_angle_stack is not None and Application.getInstance().getPreferences().getValue("view/show_overhang"):
|
||||||
angle = support_angle_stack.getProperty("support_angle", "value")
|
angle = support_angle_stack.getProperty("support_angle", "value")
|
||||||
# Make sure the overhang angle is valid before passing it to the shader
|
# Make sure the overhang angle is valid before passing it to the shader
|
||||||
# Note: if the overhang angle is set to its default value, it does not need to get validated (validationState = None)
|
if angle is not None and angle >= 0 and angle <= 90:
|
||||||
if angle is not None and global_container_stack.getProperty("support_angle", "validationState") in [None, ValidatorState.Valid]:
|
|
||||||
self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(90 - angle)))
|
self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(90 - angle)))
|
||||||
else:
|
else:
|
||||||
self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0))) #Overhang angle of 0 causes no area at all to be marked as overhang.
|
self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0))) #Overhang angle of 0 causes no area at all to be marked as overhang.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue