Revert "Revert "Merge branch 'fix_garbled_fonts_macos' into 3.0""

This reverts commit e07e7bc9e7.

Contributes to issue CURA-4414.
This commit is contained in:
Ghostkeeper 2017-10-05 10:58:49 +02:00
parent ff41b043b1
commit d458fcde5c
No known key found for this signature in database
GPG key ID: C5F96EE2BC0F7E75
12 changed files with 75 additions and 13 deletions

View file

@ -378,7 +378,7 @@ Cura.MachineAction
},
Button {
id: btnOk
text: catalog.i18nc("@action:button", "Ok")
text: catalog.i18nc("@action:button", "OK")
onClicked:
{
manualPrinterDialog.accept()

View file

@ -27,6 +27,7 @@ import zlib
from time import time
from time import sleep
from time import gmtime
i18n_catalog = i18nCatalog("cura")
@ -1132,6 +1133,11 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
else:
Logger.log("w", "Unable to save authentication for id %s and key %s", self._authentication_id, self._getSafeAuthKey())
# Request 'system' printer data once, when we know we have authentication, so we know we can set the system time.
url = QUrl("http://" + self._address + self._api_prefix + "system")
system_data_request = QNetworkRequest(url)
self._manager.get(system_data_request)
else: # Got a response that we didn't expect, so something went wrong.
Logger.log("e", "While trying to authenticate, we got an unexpected response: %s", reply.attribute(QNetworkRequest.HttpStatusCodeAttribute))
self.setAuthenticationState(AuthState.NotAuthenticated)
@ -1151,6 +1157,27 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
else:
pass
elif self._api_prefix + "system" in reply_url:
# Check if the printer has time, and if this has a valid system time.
try:
data = json.loads(bytes(reply.readAll()).decode("utf-8"))
except json.decoder.JSONDecodeError:
Logger.log("w", "Received an invalid authentication request reply from printer: Not valid JSON.")
return
if "time" in data and "utc" in data["time"]:
try:
printer_time = gmtime(float(data["time"]["utc"]))
Logger.log("i", "Printer has system time of: %s", str(printer_time))
except ValueError:
printer_time = None
if printer_time is not None and printer_time.tm_year < 1990:
# The system time is not valid, sync our current system time to it, so we at least have some reasonable time in the printer.
Logger.log("w", "Printer system time invalid, setting system time")
url = QUrl("http://" + self._address + self._api_prefix + "system/time/utc")
put_request = QNetworkRequest(url)
put_request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
self._manager.put(put_request, str(time()).encode())
elif reply.operation() == QNetworkAccessManager.PostOperation:
if "/auth/request" in reply_url:
# We got a response to requesting authentication.

View file

@ -31,6 +31,7 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin):
self._zero_conf = None
self._browser = None
self._printers = {}
self._cluster_printers_seen = {} # do not forget a cluster printer when we have seen one, to not 'downgrade' from Connect to legacy printer
self._api_version = "1"
self._api_prefix = "/api/v" + self._api_version + "/"
@ -218,12 +219,16 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin):
## Because the model needs to be created in the same thread as the QMLEngine, we use a signal.
def addPrinter(self, name, address, properties, force_cluster=False):
cluster_size = int(properties.get(b"cluster_size", -1))
if force_cluster or cluster_size >= 0:
was_cluster_before = name in self._cluster_printers_seen
if was_cluster_before:
Logger.log("d", "Printer [%s] had Cura Connect before, so assume it's still equipped with Cura Connect.", name)
if force_cluster or cluster_size >= 0 or was_cluster_before:
printer = NetworkClusterPrinterOutputDevice.NetworkClusterPrinterOutputDevice(
name, address, properties, self._api_prefix, self._plugin_path)
else:
printer = NetworkPrinterOutputDevice.NetworkPrinterOutputDevice(name, address, properties, self._api_prefix)
self._printers[printer.getKey()] = printer
self._cluster_printers_seen[printer.getKey()] = name # Cluster printers that may be temporary unreachable or is rebooted keep being stored here
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack and printer.getKey() == global_container_stack.getMetaDataEntry("um_network_key"):
if printer.getKey() not in self._old_printers: # Was the printer already connected, but a re-scan forced?

View file

@ -11,7 +11,7 @@ Button {
UM.I18nCatalog { id: catalog; name: "cura"; }
height: UM.Theme.getSize("save_button_save_to_button").height
tooltip: catalog.i18nc("@info:tooltip", "Opens the print jobs page with your default web browser.")
tooltip: catalog.i18nc("@info:tooltip", "Opens the print jobs page with your default web browser.")
text: catalog.i18nc("@action:button", "View print jobs")
// FIXME: This button style is copied and duplicated from SaveButton.qml