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



Reply via email to