Hello community, here is the log from the commit of package xpra for openSUSE:Factory checked in at 2019-12-23 22:47:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xpra (Old) and /work/SRC/openSUSE:Factory/.xpra.new.6675 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xpra" Mon Dec 23 22:47:59 2019 rev:12 rq:759006 version:3.0.4 Changes: -------- --- /work/SRC/openSUSE:Factory/xpra/xpra.changes 2019-12-11 12:14:05.712528912 +0100 +++ /work/SRC/openSUSE:Factory/.xpra.new.6675/xpra.changes 2019-12-23 22:49:17.122108439 +0100 @@ -1,0 +2,19 @@ +Mon Dec 23 13:44:02 UTC 2019 - Luigi Baldoni <[email protected]> + +- Update to version 3.0.4 + * fix av-sync + * fix X11 property synchronization error due to race condition + * fix XI2 bindings not loading + * fix ssh upgrades wrongly claimed as supported when paramiko + is not installed + * fix 'wireless' network device detection on Linux + * fix 'Sound Buffer' graph + * fix errors caused by window title error handler + * fix missing 'Packet Encoders' and 'Packet Compressors' with + python3 clients + * distinguish certificate verification errors from other ssl + errors + +- Enable ffmpeg encoder for Leap + +------------------------------------------------------------------- Old: ---- xpra-3.0.3.tar.xz New: ---- xpra-3.0.4.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xpra.spec ++++++ --- /var/tmp/diff_new_pack.KMjiE1/_old 2019-12-23 22:49:18.018108770 +0100 +++ /var/tmp/diff_new_pack.KMjiE1/_new 2019-12-23 22:49:18.026108773 +0100 @@ -19,7 +19,7 @@ %global __requires_exclude ^typelib\\(GtkosxApplication\\)|typelib\\(GdkGLExt\\)|typelib\\(GtkGLExt\\).*$ Name: xpra -Version: 3.0.3 +Version: 3.0.4 Release: 0 Summary: Remote display server for applications and desktops License: GPL-2.0-or-later AND BSD-3-Clause AND LGPL-3.0-or-later AND MIT @@ -43,16 +43,14 @@ BuildRequires: systemd BuildRequires: update-desktop-files BuildRequires: pkgconfig(gtk+-3.0) -BuildRequires: pkgconfig(libavcodec) >= 57 -BuildRequires: pkgconfig(libavformat) >= 57 -BuildRequires: pkgconfig(libswscale) >= 4 +BuildRequires: pkgconfig(libavcodec) >= 58 +BuildRequires: pkgconfig(libavformat) >= 58 +BuildRequires: pkgconfig(libswscale) >= 5 BuildRequires: pkgconfig(libsystemd) BuildRequires: pkgconfig(libwebp) >= 0.4 BuildRequires: pkgconfig(py3cairo) BuildRequires: pkgconfig(pygtk-2.0) -%if 0%{?suse_version} >= 1500 BuildRequires: pkgconfig(vpx) >= 1.4.0 -%endif BuildRequires: pkgconfig(xcomposite) BuildRequires: pkgconfig(xdamage) BuildRequires: pkgconfig(xkbfile) @@ -130,18 +128,8 @@ %build python3 setup.py build \ --verbose \ -%if 0%{?suse_version} > 1500 --with-enc_ffmpeg \ --with-vpx \ -%endif -%if 0%{?suse_version} == 1500 - --with-vpx \ - --without-enc_ffmpeg \ -%endif -%if 0%{?suse_version} < 1500 - --without-vpx \ - --without-enc_ffmpeg \ -%endif --with-dec_avcodec2 \ --with-csc_swscale \ --with-webp \ ++++++ xpra-3.0.3.tar.xz -> xpra-3.0.4.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/MANIFEST.in new/xpra-3.0.4/MANIFEST.in --- old/xpra-3.0.3/MANIFEST.in 2019-09-24 15:53:53.000000000 +0200 +++ new/xpra-3.0.4/MANIFEST.in 2019-12-17 09:37:58.000000000 +0100 @@ -7,9 +7,13 @@ include xpra/buffers/buffers.c include xpra/buffers/xxhash.h include xpra/buffers/xxhash.c +include xpra/buffers/xxh3.h +include xpra/x11/gtk3/gdk_x11_macros.c +include xpra/x11/gtk3/gdk_x11_macros.h include xpra/codecs/cuda_common/*.cu include xpra/codecs/v4l2/video.h include xpra/codecs/dec_avcodec2/register_compat.* +include udev/rules.d/71-xpra-virtual-pointer.rules recursive-include html5 * recursive-include http-headers * recursive-include man * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/NEWS new/xpra-3.0.4/NEWS --- old/xpra-3.0.3/NEWS 2019-12-10 12:20:42.000000000 +0100 +++ new/xpra-3.0.4/NEWS 2019-12-23 17:11:42.000000000 +0100 @@ -1,3 +1,19 @@ +v3.0.4 (2019-12-19) +====================== + -- fix missing undecorated windows on win32 + -- fix av-sync + -- fix X11 property synchronization error due to race condition + -- fix XI2 bindings not loading + -- fix ssh upgrades wrongly claimed as supported when paramiko is not installed + -- fix 'wireless' network device detection on Linux + -- fix 'Sound Buffer' graph + -- fix errors caused by window title error handler + -- fix missing 'Packet Encoders' and 'Packet Compressors' with python3 clients + -- relax RPM dependencies to allow different versions to be installed simultaneously + -- add missing files to MANIFEST + -- distinguish certificate verification errors from other ssl errors + + v3.0.3 (2019-12-10) ====================== -- fix clipboard synchronization with HTML5 client diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/cups/xpraforwarder new/xpra-3.0.4/cups/xpraforwarder --- old/xpra-3.0.3/cups/xpraforwarder 2019-11-18 16:50:49.000000000 +0100 +++ new/xpra-3.0.4/cups/xpraforwarder 2019-12-17 09:37:58.000000000 +0100 @@ -42,7 +42,7 @@ from urllib.parse import urlparse, parse_qs -__version__ = "3.0.3" +__version__ = "3.0.4" #Writes a syslog entry (msg) at the default facility: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/html5/js/Utilities.js new/xpra-3.0.4/html5/js/Utilities.js --- old/xpra-3.0.3/html5/js/Utilities.js 2019-11-18 16:50:49.000000000 +0100 +++ new/xpra-3.0.4/html5/js/Utilities.js 2019-12-17 09:37:58.000000000 +0100 @@ -10,7 +10,7 @@ 'use strict'; var Utilities = { - VERSION : "3.0.3", + VERSION : "3.0.4", exc : function() { console.error.apply(console, arguments); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/svn-info new/xpra-3.0.4/svn-info --- old/xpra-3.0.3/svn-info 2019-12-10 18:47:53.000000000 +0100 +++ new/xpra-3.0.4/svn-info 2019-12-23 17:11:46.000000000 +0100 @@ -4,10 +4,10 @@ Relative URL: ^/tags/v3.0.x/src Repository Root: file:///var/svn/repos/Xpra Repository UUID: 3bb7dfac-3a0b-4e04-842a-767bc560f471 -Revision: 24692 +Revision: 24778 Node Kind: directory Schedule: normal -Last Changed Author: antoine -Last Changed Rev: 24688 -Last Changed Date: 2019-12-10 08:58:31 +0000 (Tue, 10 Dec 2019) +Last Changed Author: totaamwin32 +Last Changed Rev: 24778 +Last Changed Date: 2019-12-19 17:32:30 +0000 (Thu, 19 Dec 2019) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/svn-version new/xpra-3.0.4/svn-version --- old/xpra-3.0.3/svn-version 2019-12-10 18:47:54.000000000 +0100 +++ new/xpra-3.0.4/svn-version 2019-12-23 17:11:46.000000000 +0100 @@ -1 +1 @@ -24692 +24778 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/win32/xpra.iss new/xpra-3.0.4/win32/xpra.iss --- old/xpra-3.0.3/win32/xpra.iss 2019-11-18 16:50:49.000000000 +0100 +++ new/xpra-3.0.4/win32/xpra.iss 2019-12-17 09:37:58.000000000 +0100 @@ -1,9 +1,9 @@ [Setup] AppName=Xpra AppId=Xpra_is1 -AppVersion=3.0.3 -AppVerName=Xpra 3.0.3 -UninstallDisplayName=Xpra 3.0.3 +AppVersion=3.0.4 +AppVerName=Xpra 3.0.4 +UninstallDisplayName=Xpra 3.0.4 AppPublisher=xpra.org AppPublisherURL=http:;xpra.org/ DefaultDirName={pf}\Xpra @@ -16,7 +16,7 @@ Compression=lzma2/max SolidCompression=yes AllowUNCPath=false -VersionInfoVersion=3.0.3 +VersionInfoVersion=3.0.4 VersionInfoCompany=xpra.org VersionInfoDescription=multi-platform screen and application forwarding system WizardImageFile=win32\xpra-logo.bmp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/__init__.py new/xpra-3.0.4/xpra/__init__.py --- old/xpra-3.0.3/xpra/__init__.py 2019-12-10 18:47:54.000000000 +0100 +++ new/xpra-3.0.4/xpra/__init__.py 2019-12-23 17:11:49.000000000 +0100 @@ -4,4 +4,4 @@ # Xpra is released under the terms of the GNU GPL v2, or, at your option, any # later version. See the file COPYING for details. -__version__ = "3.0.3" +__version__ = "3.0.4" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/client/client_window_base.py new/xpra-3.0.4/xpra/client/client_window_base.py --- old/xpra-3.0.3/xpra/client/client_window_base.py 2019-11-26 16:58:06.000000000 +0100 +++ new/xpra-3.0.4/xpra/client/client_window_base.py 2019-12-23 17:11:42.000000000 +0100 @@ -107,6 +107,7 @@ #initialize gravity early: sc = typedict(metadata.dictget("size-constraints", {})) self.window_gravity = OVERRIDE_GRAVITY or sc.intget("gravity", DEFAULT_GRAVITY) + self.set_decorated(metadata.boolget("decorations", True)) def get_desktop_workspace(self): @@ -251,7 +252,7 @@ except Exception as e: log.error("Error parsing window title:") log.error(" %s", e) - title = b"" + title = "" self.set_title(title) if b"icon-title" in metadata: @@ -339,8 +340,14 @@ self.deiconify() if b"decorations" in metadata: - self.set_decorated(metadata.boolget("decorations")) - self.apply_geometry_hints(self.geometry_hints) + decorated = metadata.boolget("decorations", True) + was_decorated = self.get_decorated() + if WIN32 and decorated!=was_decorated: + log.info("decorations flag toggled, now %s, re-initializing window", decorated) + self.idle_add(self._client.reinit_window, self._id, self) + else: + self.set_decorated(metadata.boolget("decorations")) + self.apply_geometry_hints(self.geometry_hints) if b"above" in metadata: above = metadata.boolget("above") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/client/gtk_base/gtk_client_base.py new/xpra-3.0.4/xpra/client/gtk_base/gtk_client_base.py --- old/xpra-3.0.3/xpra/client/gtk_base/gtk_client_base.py 2019-10-20 17:41:25.000000000 +0200 +++ new/xpra-3.0.4/xpra/client/gtk_base/gtk_client_base.py 2019-12-17 09:37:58.000000000 +0100 @@ -1105,6 +1105,8 @@ #GTK2 on OSX doesn't do alpha: if metadata.boolget("has-alpha", False): return (self.ClientWindowClass,) + if not metadata.boolget("decorations", True): + return (self.ClientWindowClass,) return (self.GLClientWindowClass, self.ClientWindowClass) def toggle_opengl(self, *_args): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/client/gtk_base/gtk_client_window_base.py new/xpra-3.0.4/xpra/client/gtk_base/gtk_client_window_base.py --- old/xpra-3.0.3/xpra/client/gtk_base/gtk_client_window_base.py 2019-12-08 12:59:03.000000000 +0100 +++ new/xpra-3.0.4/xpra/client/gtk_base/gtk_client_window_base.py 2019-12-23 17:11:42.000000000 +0100 @@ -929,17 +929,17 @@ def set_x11_property(self, prop_name, dtype, dformat, value): metalog("set_x11_property%s", (prop_name, dtype, dformat, value)) - gdk_window = self.get_window() - if not dtype and not dformat: - #remove prop - prop_del(gdk_window, prop_name) - return dtype = bytestostr(dtype) if dtype=="latin1": value = bytestostr(value) - if PYTHON2: - value = unicode(value) - prop_set(gdk_window, prop_name, dtype, value) + def do_set_prop(): + gdk_window = self.get_window() + if not dtype and not dformat: + #remove prop + prop_del(gdk_window, prop_name) + else: + prop_set(gdk_window, prop_name, dtype, value) + self.when_realized("x11-prop-%s" % prop_name, do_set_prop) def set_class_instance(self, wmclass_name, wmclass_class): if not self.is_realized(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/client/gtk_base/session_info.py new/xpra-3.0.4/xpra/client/gtk_base/session_info.py --- old/xpra-3.0.3/xpra/client/gtk_base/session_info.py 2019-09-24 15:53:59.000000000 +0200 +++ new/xpra-3.0.4/xpra/client/gtk_base/session_info.py 2019-12-23 17:11:42.000000000 +0100 @@ -589,11 +589,11 @@ info = ss.get_info() if info: info = typedict(info) - def intlookup(k): - return int(dictlook(info, k, 0)) - self.sound_out_queue_cur.append(intlookup("queue.cur")) - self.sound_out_queue_min.append(intlookup("queue.min")) - self.sound_out_queue_max.append(intlookup("queue.max")) + def qlookup(attr): + return int(newdictlook(info, ("queue", attr), 0)) + self.sound_out_queue_cur.append(qlookup("cur")) + self.sound_out_queue_min.append(qlookup("min")) + self.sound_out_queue_max.append(qlookup("max")) return not self.is_closed def populate(self, *_args): @@ -811,13 +811,13 @@ def get_encoder_list(caps): from xpra.net import packet_encoding - return [x for x in packet_encoding.ALL_ENCODERS if caps.get(x)] + return [x for x in packet_encoding.ALL_ENCODERS if typedict(caps).rawget(x)] self.client_packet_encoders_label.set_text(", ".join(get_encoder_list(get_network_caps()))) self.server_packet_encoders_label.set_text(", ".join(get_encoder_list(self.client.server_capabilities))) def get_compressor_list(caps): from xpra.net import compression - return [x for x in compression.ALL_COMPRESSORS if caps.get(x)] + return [x for x in compression.ALL_COMPRESSORS if typedict(caps).rawget(x)] self.client_packet_compressors_label.set_text(", ".join(get_compressor_list(get_network_caps()))) self.server_packet_compressors_label.set_text(", ".join(get_compressor_list(self.client.server_capabilities))) return False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/client/mixins/audio.py new/xpra-3.0.4/xpra/client/mixins/audio.py --- old/xpra-3.0.3/xpra/client/mixins/audio.py 2019-12-08 12:59:03.000000000 +0100 +++ new/xpra-3.0.4/xpra/client/mixins/audio.py 2019-12-23 17:11:42.000000000 +0100 @@ -580,7 +580,11 @@ ss.add_data(data, metadata, packet_metadata) if self.av_sync and self.server_av_sync: info = ss.get_info() - queue_used = info.get("queue.cur") or info.get("queue", {}).get("cur") + queue_used = info.get("queue.cur") + if queue_used is None: + qinfo = typedict(info).dictget("queue", None) + if qinfo: + queue_used = typedict(qinfo).intget("cur", None) if queue_used is None: return delta = (self.queue_used_sent or 0)-queue_used diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/exit_codes.py new/xpra-3.0.4/xpra/exit_codes.py --- old/xpra-3.0.3/xpra/exit_codes.py 2019-09-24 15:53:59.000000000 +0200 +++ new/xpra-3.0.4/xpra/exit_codes.py 2019-12-12 11:44:56.000000000 +0100 @@ -22,6 +22,7 @@ EXIT_SSL_FAILURE = 16 EXIT_SSH_KEY_FAILURE = 17 EXIT_CONNECTION_FAILED = 18 +EXIT_SSL_CERTIFICATE_VERIFY_FAILURE = 19 EXIT_STR = { EXIT_OK : "OK", @@ -43,4 +44,5 @@ EXIT_SSL_FAILURE : "SSL_FAILURE", EXIT_SSH_KEY_FAILURE : "SSH_KEY_FAILURE", EXIT_CONNECTION_FAILED : "CONNECTION_FAILED", + EXIT_SSL_CERTIFICATE_VERIFY_FAILURE : "SSL_CERTIFICATE_VERIFY_FAILURE", } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/net/socket_util.py new/xpra-3.0.4/xpra/net/socket_util.py --- old/xpra-3.0.3/xpra/net/socket_util.py 2019-09-24 15:54:00.000000000 +0200 +++ new/xpra-3.0.4/xpra/net/socket_util.py 2019-12-12 11:44:56.000000000 +0100 @@ -236,6 +236,7 @@ from xpra.log import Logger sshlog = Logger("ssh") sshlog("import paramiko", exc_info=True) + ssh_upgrades = False sshlog.error("Error: cannot enable SSH socket upgrades:") sshlog.error(" %s", e) log("setting up SSL sockets: %s", csv(bind_ssl)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/platform/xposix/gui.py new/xpra-3.0.4/xpra/platform/xposix/gui.py --- old/xpra-3.0.3/xpra/platform/xposix/gui.py 2019-09-24 15:54:00.000000000 +0200 +++ new/xpra-3.0.4/xpra/platform/xposix/gui.py 2019-12-12 11:44:56.000000000 +0100 @@ -36,7 +36,7 @@ log.error(" %s", e) return _X11Window -X11XI2 = None +X11XI2 = False def X11XI2Bindings(): global X11XI2 if X11XI2 is False: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/platform/xposix/netdev_query.pyx new/xpra-3.0.4/xpra/platform/xposix/netdev_query.pyx --- old/xpra-3.0.3/xpra/platform/xposix/netdev_query.pyx 2019-09-24 15:54:00.000000000 +0200 +++ new/xpra-3.0.4/xpra/platform/xposix/netdev_query.pyx 2019-12-12 11:44:56.000000000 +0100 @@ -108,8 +108,12 @@ if r >= 0: info["speed"] = edata.speed*1000*1000 #info["duplex"] = duplex: DUPLEX_HALF, DUPLEX_FULL DUPLEX_NONE? - elif first_time("ethtool-%s" % ifname): - log.info("no ethtool interface speed available for %s", ifname) + else: + if first_time("ethtool-%s" % ifname): + log.info("no ethtool interface speed available for %s", ifname) + if ifname.startswith("wl"): + info["adapter-type"] = "wireless" + return info cdef ethtool_drvinfo drvinfo drvinfo.cmd = ETHTOOL_GDRVINFO ifr.ifr_ifru.ifru_data = <void *> &drvinfo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/scripts/main.py new/xpra-3.0.4/xpra/scripts/main.py --- old/xpra-3.0.3/xpra/scripts/main.py 2019-11-26 16:58:06.000000000 +0100 +++ new/xpra-3.0.4/xpra/scripts/main.py 2019-12-12 11:44:57.000000000 +0100 @@ -1408,6 +1408,8 @@ SSLEOFError = getattr(ssl, "SSLEOFError", None) if SSLEOFError and isinstance(e, SSLEOFError): return None + from xpra.exit_codes import EXIT_SSL_FAILURE, EXIT_SSL_CERTIFICATE_VERIFY_FAILURE + status = EXIT_SSL_FAILURE SSLCertVerificationError = getattr(ssl, "SSLCertVerificationError", None) if SSLCertVerificationError and isinstance(e, SSLCertVerificationError): try: @@ -1415,9 +1417,10 @@ except: msg = str(e) #ssllog.warn("host failed SSL verification: %s", msg) + status = EXIT_SSL_CERTIFICATE_VERIFY_FAILURE else: msg = str(e) - raise InitExit(EXIT_SSL_FAILURE, "SSL handshake failed: %s" % msg) + raise InitExit(status, "SSL handshake failed: %s" % msg) return ssl_sock return do_wrap_socket diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/server/mixins/audio_server.py new/xpra-3.0.4/xpra/server/mixins/audio_server.py --- old/xpra-3.0.3/xpra/server/mixins/audio_server.py 2019-09-24 15:54:01.000000000 +0200 +++ new/xpra-3.0.4/xpra/server/mixins/audio_server.py 2019-12-17 09:37:58.000000000 +0100 @@ -39,6 +39,7 @@ self.speaker_codecs = () self.microphone_codecs = () self.sound_properties = typedict() + self.av_sync = False def init(self, opts): self.sound_source_plugin = opts.sound_source @@ -53,6 +54,8 @@ self.pulseaudio_configure_commands = opts.pulseaudio_configure_commands log("AudioServer.init(..) supports speaker=%s, microphone=%s", self.supports_speaker, self.supports_microphone) + self.av_sync = opts.av_sync + log("AudioServer.init(..) av-sync=%s", self.av_sync) def setup(self): self.init_pulseaudio() @@ -73,6 +76,10 @@ def get_server_features(self, _source): return { + "av-sync" : { + "" : self.av_sync, + "enabled" : self.av_sync, + }, "sound_sequence" : True, #legacy flag "sound" : { "ogg-latency-fix" : True, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/server/server_base.py new/xpra-3.0.4/xpra/server/server_base.py --- old/xpra-3.0.3/xpra/server/server_base.py 2019-09-24 15:54:01.000000000 +0200 +++ new/xpra-3.0.4/xpra/server/server_base.py 2019-12-17 09:37:58.000000000 +0100 @@ -148,7 +148,6 @@ self.sharing = opts.sharing self.lock = opts.lock self.idle_timeout = opts.idle_timeout - self.av_sync = opts.av_sync self.bandwidth_detection = opts.bandwidth_detection def setup(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/server/source/audio_mixin.py new/xpra-3.0.4/xpra/server/source/audio_mixin.py --- old/xpra-3.0.3/xpra/server/source/audio_mixin.py 2019-09-24 15:54:01.000000000 +0200 +++ new/xpra-3.0.4/xpra/server/source/audio_mixin.py 2019-12-23 17:11:42.000000000 +0100 @@ -9,7 +9,7 @@ from xpra.net.compression import Compressed from xpra.server.source.stub_source_mixin import StubSourceMixin from xpra.os_util import get_machine_id, get_user_uuid, bytestostr, POSIX -from xpra.util import csv, envbool, flatten_dict, XPRA_AUDIO_NOTIFICATION_ID +from xpra.util import csv, envbool, flatten_dict, typedict, XPRA_AUDIO_NOTIFICATION_ID from xpra.log import Logger log = Logger("sound") @@ -261,7 +261,13 @@ "codec" : codec, "sequence" : sound_source.sequence, }) - #self.update_av_sync_delay_total() + update_av_sync = getattr(self, "update_av_sync_delay_total", None) + if update_av_sync: + update_av_sync() #pylint: disable=not-callable + #run it again after 10 seconds, + #by that point the source info will actually be populated: + from gi.repository import GLib + GLib.timeout_add(10*1000, update_av_sync) def new_sound_buffer(self, sound_source, data, metadata, packet_metadata=None): log("new_sound_buffer(%s, %s, %s, %s) info=%s", @@ -457,11 +463,14 @@ ss = self.sound_source cinfo = "" if ss: + info = typedict(ss.info or {}) try: - encoder_latency = ss.info.get("queue", {}).get("cur", 0) - log("server side queue level: %s", encoder_latency) + qdict = info.dictget("queue") + if qdict: + q = typedict(qdict).intget("cur", 0) + log("server side queue level: %s", q) #get the latency from the source info, if it has it: - encoder_latency = ss.info.get("latency", -1) + encoder_latency = info.intget("latency", -1) if encoder_latency<0: #fallback to hard-coded values: from xpra.sound.gstreamer_util import ENCODER_LATENCY, RECORD_PIPELINE_LATENCY diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/server/source/avsync_mixin.py new/xpra-3.0.4/xpra/server/source/avsync_mixin.py --- old/xpra-3.0.3/xpra/server/source/avsync_mixin.py 2019-09-24 15:54:01.000000000 +0200 +++ new/xpra-3.0.4/xpra/server/source/avsync_mixin.py 2019-12-17 09:37:58.000000000 +0100 @@ -32,14 +32,6 @@ self.av_sync_delta = AV_SYNC_DELTA - def get_server_features(self, _source): - return { - "av-sync" : { - "" : self.av_sync, - "enabled" : self.av_sync_enabled, - } - } - def get_info(self): return { "av-sync" : { @@ -55,7 +47,8 @@ av_sync = c.boolget("av-sync") self.av_sync_enabled = self.av_sync and av_sync self.set_av_sync_delay(int(self.av_sync_enabled) * c.intget("av-sync.delay.default", DEFAULT_AV_SYNC_DELAY)) - log("av-sync: server=%s, client=%s, total=%s", self.av_sync, av_sync, self.av_sync_delay_total) + log("av-sync: server=%s, client=%s, enabled=%s, total=%s", + self.av_sync, av_sync, self.av_sync_enabled, self.av_sync_delay_total) def set_av_sync_delta(self, delta): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/server/window/window_source.py new/xpra-3.0.4/xpra/server/window/window_source.py --- old/xpra-3.0.3/xpra/server/window/window_source.py 2019-10-28 16:04:05.000000000 +0100 +++ new/xpra-3.0.4/xpra/server/window/window_source.py 2019-12-23 17:11:42.000000000 +0100 @@ -159,7 +159,7 @@ self.av_sync = av_sync self.av_sync_delay = av_sync_delay self.av_sync_delay_target = av_sync_delay - self.av_sync_delay_base = 0 + self.av_sync_delay_base = av_sync_delay self.av_sync_frame_delay = 0 self.av_sync_timer = None self.encode_queue = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xpra-3.0.3/xpra/src_info.py new/xpra-3.0.4/xpra/src_info.py --- old/xpra-3.0.3/xpra/src_info.py 2019-12-10 18:47:53.000000000 +0100 +++ new/xpra-3.0.4/xpra/src_info.py 2019-12-23 17:11:46.000000000 +0100 @@ -1,2 +1,2 @@ LOCAL_MODIFICATIONS=0 -REVISION=24692 +REVISION=24778
