Browse Source

netmanager support

pull/223/head
Riccardo Cagnasso 6 years ago
parent
commit
21ffee6d2a
4 changed files with 279 additions and 78 deletions
  1. +123
    -76
      resources/ui/settings_jack.ui
  2. +5
    -1
      src/cadence.py
  3. +106
    -1
      src/jacksettings.py
  4. +45
    -0
      src/shared_cadence.py

+ 123
- 76
resources/ui/settings_jack.ui View File

@@ -1387,85 +1387,132 @@ Also known as buffer size</string>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout_16">
<item row="1" column="1">
<widget class="QSpinBox" name="obj_net_multicast_port"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Auto Connect</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Multicast Ip</string>
</property>
</widget>
</item>
<item row="4" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="obj_net_multicast_ip"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Udp Net Port</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Auto Save</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="obj_net_auto_connect">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="obj_net_auto_save">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_4"/>
<widget class="QGroupBox" name="">
<property name="title">
<string>Settings</string>
</property>
<layout class="QGridLayout" name="gridLayout_16">
<item row="1" column="1">
<widget class="QSpinBox" name="obj_net_multicast_port">
<property name="maximum">
<number>65536</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Auto Connect Ports</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Multicast Ip</string>
</property>
</widget>
</item>
<item row="4" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="obj_net_multicast_ip"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Udp Net Port</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Auto Save</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="obj_net_auto_connect">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="obj_net_auto_save">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<widget class="QGroupBox" name="">
<property name="title">
<string>Controls</string>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QCheckBox" name="obj_net_manager_at_boot">
<property name="text">
<string>Start at Boot</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="obj_net_reset">
<property name="text">
<string>Reset Network Settings</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QPushButton" name="obj_net_manager_start">
<property name="text">
<string>Start</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="obj_net_manager_stop">
<property name="text">
<string>Stop</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_7">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</item>


+ 5
- 1
src/cadence.py View File

@@ -1373,6 +1373,10 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW):
self.checkAlsaAudio()
self.checkPulseAudio()

if GlobalSettings.value("JACKNETMANAGER/AutoStart"):
print("loadinternal")
gDBus.jack.LoadInternal("netmanager")

def jackStopped(self):
if self.m_timer500:
self.killTimer(self.m_timer500)
@@ -2386,7 +2390,7 @@ if __name__ == '__main__':

if haveDBus:
gDBus.loop = DBusQtMainLoop(set_as_default=True)
gDBus.bus = dbus.SessionBus(mainloop=gDBus.loop)
gDBus.bus = dbus.SessionBus(mainloop=gDBus.loop)

initSystemChecks()



+ 106
- 1
src/jacksettings.py View File

@@ -30,6 +30,7 @@ else:
from PyQt4.QtGui import QFontMetrics
from PyQt4.QtGui import QDialog, QDialogButtonBox, QMessageBox

from shared_cadence import *
# ------------------------------------------------------------------------------------------------------------
# Imports (Custom Stuff)

@@ -75,13 +76,17 @@ else:

def initBus(bus):
global gJackctl
global jack_control_iface

if not bus:
gJackctl = None
return 1

try:
gJackctl = dbus.Interface(bus.get_object("org.jackaudio.service", "/org/jackaudio/Controller"), "org.jackaudio.Configure")
controller = bus.get_object("org.jackaudio.service", "/org/jackaudio/Controller")
gJackctl = dbus.Interface(controller, "org.jackaudio.Configure")
jack_control_iface = dbus.Interface(
controller, "org.jackaudio.JackControl")
return 0
except:
gJackctl = None
@@ -234,6 +239,10 @@ class JackSettingsW(QDialog):
self.ui.obj_driver_capture.currentIndexChanged[int].connect(self.slot_checkALSASelection)
self.ui.obj_driver_playback.currentIndexChanged[int].connect(self.slot_checkALSASelection)

self.ui.obj_net_manager_start.clicked.connect(self.net_manager_start)
self.ui.obj_net_manager_stop.clicked.connect(self.net_manager_stop)
self.ui.obj_net_reset.clicked.connect(self.net_manager_reset)

# -------------------------------------------------------------
# Load initial settings

@@ -243,6 +252,7 @@ class JackSettingsW(QDialog):
self.checkEngine()
self.loadServerSettings()
self.loadDriverSettings(True) # reset because we'll change it below
self.loadNetSettings()

# -------------------------------------------------------------
# Load selected JACK driver
@@ -716,6 +726,83 @@ class JackSettingsW(QDialog):
else:
print("JackSettingsW::loadDriverSettings() - Unimplemented driver attribute '%s', value: '%s'" % (attribute, str(value)))

def saveNetSettings(self):
path = ['internals', 'netmanager']

isset, default, value = map(
dbus_type_to_python_type,
gJackctl.GetParameterValue(path + ['multicast-ip']))

curvalue = self.ui.obj_net_multicast_ip.text()

if curvalue != value:
gJackctl.SetParameterValue(
path + ['multicast-ip'],
python_type_to_jackdbus_type(curvalue, 's'))

isset, default, value = map(
dbus_type_to_python_type,
gJackctl.GetParameterValue(path + ['udp-net-port']))

curvalue = self.ui.obj_net_multicast_port.value()

if curvalue != value:
gJackctl.SetParameterValue(
path + ['udp-net-port'],
python_type_to_jackdbus_type(curvalue, 'u'))

isset, default, value = map(
dbus_type_to_python_type,
gJackctl.GetParameterValue(path + ['auto-connect']))

curvalue = self.ui.obj_net_auto_connect.isChecked()

if curvalue != value:
gJackctl.SetParameterValue(path + ['auto-connect'], curvalue)

isset, default, value = map(
dbus_type_to_python_type,
gJackctl.GetParameterValue(path + ['auto-save']))

curvalue = self.ui.obj_net_auto_save.isChecked()

if curvalue != value:
gJackctl.SetParameterValue(path + ['auto-save'], curvalue)

GlobalSettings = QSettings("Cadence", "GlobalSettings")
GlobalSettings.setValue('JACKNETMANAGER/AutoStart',
self.ui.obj_net_manager_at_boot.isChecked())

def loadNetSettings(self):
path = ['internals', 'netmanager']

_, _, value = map(
dbus_type_to_python_type,
gJackctl.GetParameterValue(path + ['multicast-ip']))

self.ui.obj_net_multicast_ip.setText(value)

_, _, value = map(
dbus_type_to_python_type,
gJackctl.GetParameterValue(path + ['udp-net-port']))

self.ui.obj_net_multicast_port.setValue(value)

_, _, value = map(
dbus_type_to_python_type,
gJackctl.GetParameterValue(path + ['auto-connect']))

self.ui.obj_net_auto_connect.setChecked(value)

_, _, value = map(
dbus_type_to_python_type,
gJackctl.GetParameterValue(path + ['auto-save']))

self.ui.obj_net_auto_save.setChecked(value)

GlobalSettings = QSettings("Cadence", "GlobalSettings")
self.ui.obj_net_manager_at_boot.setChecked(
GlobalSettings.value('JACKNETMANAGER/AutoStart') == "true")
# -----------------------------------------------------------------
# Helper functions

@@ -779,6 +866,7 @@ class JackSettingsW(QDialog):

# Save previous settings
self.saveDriverSettings(False)
self.saveNetSettings()

# Set new Jack driver
self.fDriverName = dbus.String(self.ui.obj_server_driver.item(row, 0).text().lower())
@@ -900,10 +988,27 @@ class JackSettingsW(QDialog):

self.slot_checkDuplexSelection(self.ui.obj_driver_duplex.isChecked())

def net_manager_start(self):
jack_control_iface.LoadInternal("netmanager")

def net_manager_stop(self):
jack_control_iface.UnloadInternal("netmanager")

def net_manager_reset(self):
path = ['internals', 'netmanager']
for _, name, _, _ in gJackctl.GetParametersInfo(path):
gJackctl.ResetParameterValue(path + [name])

GlobalSettings = QSettings("Cadence", "GlobalSettings")
GlobalSettings.setValue('JACKNETMANAGER/AutoStart', False)

self.loadNetSettings()

@pyqtSlot()
def slot_saveJackSettings(self):
self.saveServerSettings()
self.saveDriverSettings(True)
self.saveNetSettings()

@pyqtSlot()
def slot_resetJackSettings(self):


+ 45
- 0
src/shared_cadence.py View File

@@ -20,6 +20,7 @@
# Imports (Global)

from time import sleep
import dbus

if True:
from PyQt5.QtCore import QProcess, QSettings
@@ -164,3 +165,47 @@ def stopAllAudioProcesses(tryCloseJack = True):
process.start("killall", ["-KILL"] + procsKill)
process.waitForFinished()
waitProcsEnd(procsKill, tries)


def bool_convert(str_value):
if str_value.lower() == "false":
return False

if str_value.lower() == "off":
return False

if str_value.lower() == "no":
return False

if str_value == "0":
return False

if str_value.lower() == "(null)":
return False

return bool(str_value)


def dbus_type_to_python_type(dbus_value):
if type(dbus_value) == dbus.Boolean:
return bool(dbus_value)
if type(dbus_value) == dbus.Int32 or type(dbus_value) == dbus.UInt32:
return int(dbus_value)
return dbus_value


def python_type_to_jackdbus_type(value, type_char):
type_char = str(type_char)

if type_char == "b":
return bool_convert(value)
elif type_char == "y":
return dbus.Byte(value)
elif type_char == "i":
return dbus.Int32(value)
elif type_char == "u":
return dbus.UInt32(value)
elif type_char == "s":
return dbus.String(value)

return value

Loading…
Cancel
Save