def update_config(self, config):
        sconfig = {}
        for vn in config:
            if vn[0] != '_':
                sconfig[vn] = config[vn][0]

        zynconf.save_config(sconfig, update_sys=True)
예제 #2
0
    def stop_vncserver(self, save_config=True):
        logging.info("STOPPING VNC SERVICES")

        # Save state and stop engines
        if len(self.zyngui.screens['layer'].layers) > 0:
            self.zyngui.screens['snapshot'].save_last_state_snapshot()
            self.zyngui.screens['layer'].reset()
            restore_state = True
        else:
            restore_state = False

        try:
            check_output("systemctl stop novnc; systemctl stop vncserver@:1",
                         shell=True)
            zynthian_gui_config.vncserver_enabled = 0
            # Update Config
            if save_config:
                zynconf.save_config({
                    "ZYNTHIAN_VNCSERVER_ENABLED":
                    str(zynthian_gui_config.vncserver_enabled)
                })
        except Exception as e:
            logging.error(e)

        # Restore state
        if restore_state:
            self.zyngui.screens['snapshot'].load_last_state_snapshot(True)

        self.fill_list()
	def toggle_loop(self):
		if zynthian_gui_config.audio_play_loop:
			logging.info("Audio play loop OFF")
			zynthian_gui_config.audio_play_loop=False
		else:
			logging.info("Audio play loop ON")
			zynthian_gui_config.audio_play_loop=True
		zynconf.save_config({"ZYNTHIAN_AUDIO_PLAY_LOOP": str(int(zynthian_gui_config.audio_play_loop))})
		self.update_list()
	def select_action(self, i, t='S'):
		profile_fpath=self.list_data[i][0]
		if profile_fpath==self.current_profile:
			logging.info("MIDI PROFILE '%s' IS THE CURRENT PROFILE", profile_fpath)
		else:
			logging.info("LOADING MIDI PROFILE => %s", profile_fpath)
			zynconf.save_config({ 
				"ZYNTHIAN_SCRIPT_MIDI_PROFILE": self.list_data[i][0]
			})
			self.zyngui.reload_midi_config()
		self.zyngui.show_active_screen()
예제 #5
0
 def select_action(self, i, t='S'):
     profile_fpath = self.list_data[i][0]
     if profile_fpath == self.current_profile:
         logging.info("MIDI PROFILE '%s' IS THE CURRENT PROFILE",
                      profile_fpath)
     else:
         logging.info("LOADING MIDI PROFILE => %s", profile_fpath)
         zynconf.save_config(
             {"ZYNTHIAN_SCRIPT_MIDI_PROFILE": self.list_data[i][0]})
         self.zyngui.reload_midi_config()
     self.zyngui.show_active_screen()
예제 #6
0
	def toggle_snapshot_mixer_settings(self):
		if zynthian_gui_config.snapshot_mixer_settings:
			logging.info("Mixer Settings on Snapshots OFF")
			zynthian_gui_config.snapshot_mixer_settings=False
		else:
			logging.info("Mixer Settings on Snapshots ON")
			zynthian_gui_config.snapshot_mixer_settings=True

		# Update Config
		zynconf.save_config({ 
			"ZYNTHIAN_UI_SNAPSHOT_MIXER_SETTINGS": str(int(zynthian_gui_config.snapshot_mixer_settings))
		})

		self.fill_list()
예제 #7
0
	def stop_vncserver(self, save_config=True):
		logging.info("STOPPING VNC SERVICES")

		try:
			check_output("systemctl stop novnc; systemctl stop vncserver@:1", shell=True)
			zynthian_gui_config.vncserver_enabled = 0
			# Update Config
			if save_config:
				zynconf.save_config({ 
					"ZYNTHIAN_VNCSERVER_ENABLED": str(zynthian_gui_config.vncserver_enabled)
				})
		except Exception as e:
			logging.error(e)

		self.fill_list()
예제 #8
0
	def stop_rbpi_headphones(self, save_config=True):
		logging.info("STOPPING RBPI HEADPHONES")

		try:
			check_output("systemctl stop headphones", shell=True)
			zynthian_gui_config.rbpi_headphones = 0
			# Update Config
			if save_config:
				zynconf.save_config({ 
					"ZYNTHIAN_RBPI_HEADPHONES": str(int(zynthian_gui_config.rbpi_headphones))
				})

		except Exception as e:
			logging.error(e)

		self.fill_list()
예제 #9
0
	def start_rbpi_headphones(self, save_config=True):
		logging.info("STARTING RBPI HEADPHONES")

		try:
			check_output("systemctl start headphones", shell=True)
			zynthian_gui_config.rbpi_headphones = 1
			# Update Config
			if save_config:
				zynconf.save_config({ 
					"ZYNTHIAN_RBPI_HEADPHONES": str(zynthian_gui_config.rbpi_headphones)
				})
			# Call autoconnect after a little time
			sleep(0.5)
			self.zyngui.zynautoconnect_audio()

		except Exception as e:
			logging.error(e)

		self.fill_list()
예제 #10
0
envars_backup_file = "{}/zynthian_envars_backup.sh".format(
    os.environ.get('ZYNTHIAN_CONFIG_DIR', "/zynthian/config"))

if os.path.isfile(input_envars_file):
    try:
        print("Loading config input file '{}' ...".format(input_envars_file))
        config = zynconf.load_config(False, input_envars_file)
    except Exception as e:
        print(
            "ERROR: Config input file {} can't be parsed. Check the syntax! => \n{}"
            .format(input_envars_file, e))
    try:
        print("Saving config backup '{}' ...".format(envars_backup_file))
        shutil.copyfile(envars_file, envars_backup_file)
    except Exception as e:
        print("ERROR: Can't perform a config backup! => \n{}".format(e))
    try:
        print("Updating config on '{}' ...".format(envars_file))
        zynconf.save_config(config, True)
    except Exception as e:
        print("ERROR: Config can't be updated! => \n{}".format(e))
    try:
        print("Deleting config input file '{}' ...".format(input_envars_file))
        os.remove(input_envars_file)
    except Exception as e:
        print("ERROR: Input config file can't be removed! => \n{}".format(e))
else:
    print("Config input file '{}' doesn't exist.".format(update_envars_file))

#--------------------------------------------------------------------
예제 #11
0
    def post(self):
        self.request.arguments[
            'ZYNTHIAN_MIDI_FILTER_OUTPUT'] = self.request.arguments.get(
                'ZYNTHIAN_MIDI_FILTER_OUTPUT', '0')
        self.request.arguments[
            'ZYNTHIAN_MIDI_SYS_ENABLED'] = self.request.arguments.get(
                'ZYNTHIAN_MIDI_SYS_ENABLED', '0')
        self.request.arguments[
            'ZYNTHIAN_MIDI_PRESET_PRELOAD_NOTEON'] = self.request.arguments.get(
                'ZYNTHIAN_MIDI_PRESET_PRELOAD_NOTEON', '0')
        self.request.arguments[
            'ZYNTHIAN_MIDI_SINGLE_ACTIVE_CHANNEL'] = self.request.arguments.get(
                'ZYNTHIAN_MIDI_SINGLE_ACTIVE_CHANNEL', '0')
        self.request.arguments[
            'ZYNTHIAN_MIDI_PROG_CHANGE_ZS3'] = self.request.arguments.get(
                'ZYNTHIAN_MIDI_PROG_CHANGE_ZS3', '0')
        self.request.arguments[
            'ZYNTHIAN_MIDI_RTPMIDI_ENABLED'] = self.request.arguments.get(
                'ZYNTHIAN_MIDI_RTPMIDI_ENABLED', '0')
        self.request.arguments[
            'ZYNTHIAN_MIDI_NETWORK_ENABLED'] = self.request.arguments.get(
                'ZYNTHIAN_MIDI_NETWORK_ENABLED', '0')
        self.request.arguments[
            'ZYNTHIAN_MIDI_TOUCHOSC_ENABLED'] = self.request.arguments.get(
                'ZYNTHIAN_MIDI_TOUCHOSC_ENABLED', '0')
        self.request.arguments[
            'ZYNTHIAN_MIDI_AUBIONOTES_ENABLED'] = self.request.arguments.get(
                'ZYNTHIAN_MIDI_AUBIONOTES_ENABLED', '0')

        escaped_request_arguments = tornado.escape.recursive_unicode(
            self.request.arguments)

        errors = {}

        try:
            freq = float(
                self.request.arguments.get('ZYNTHIAN_MIDI_FINE_TUNING',
                                           '440.0')[0])
            if freq < 392.0 or freq > 493.88:
                errors[
                    'ZYNTHIAN_MIDI_FINE_TUNING'] = "Frequency must be in the range 392.00 - 493.88 Hz!"
        except:
            self.request.arguments['ZYNTHIAN_MIDI_FINE_TUNING'] = 440.0
            errors['ZYNTHIAN_MIDI_FINE_TUNING'] = "Frequency must be a number!"

        filter_error = self.validate_filter_rules(escaped_request_arguments)
        if filter_error:
            errors['ZYNTHIAN_MIDI_FILTER_RULES'] = filter_error

        if not errors:
            # remove fields that start with FILTER_ADD from request_args, so that they won't be passed to update_config
            for filter_add_argument in list(escaped_request_arguments.keys()):
                if filter_add_argument.startswith('FILTER_ADD'):
                    del escaped_request_arguments[filter_add_argument]

            new_profile_script_name = self.get_argument(
                'zynthian_midi_profile_new_script_name')

            if new_profile_script_name:
                #New MIDI profile
                self.current_midi_profile_script = self.PROFILES_DIRECTORY + '/' + new_profile_script_name + '.sh'
                try:
                    #create file as copy of default:
                    zynconf.get_midi_config_fpath(
                        self.current_midi_profile_script)
                    zynconf.update_midi_profile(
                        escaped_request_arguments,
                        self.current_midi_profile_script)
                    mode = os.stat(self.current_midi_profile_script).st_mode
                    mode |= (mode & 0o444) >> 2  # copy R bits to X
                    os.chmod(self.current_midi_profile_script, mode)
                    errors = zynconf.save_config({
                        'ZYNTHIAN_SCRIPT_MIDI_PROFILE':
                        self.current_midi_profile_script
                    })
                    self.load_midi_profile_directories()
                except:
                    errors[
                        'zynthian_midi_profile_new_script_name'] = "Can't create new profile!"

            elif 'zynthian_midi_profile_delete_script' in self.request.arguments and self.get_argument(
                    'zynthian_midi_profile_delete_script') == "1":
                #DELETE
                if self.current_midi_profile_script.startswith(
                        self.PROFILES_DIRECTORY):
                    os.remove(self.current_midi_profile_script)
                    self.current_midi_profile_script = "{}/default.sh".format(
                        self.PROFILES_DIRECTORY)
                    errors = zynconf.save_config({
                        'ZYNTHIAN_SCRIPT_MIDI_PROFILE':
                        self.current_midi_profile_script
                    })
                    self.load_midi_profile_directories()
                else:
                    errors[
                        'zynthian_midi_profile_delete_script'] = 'You can only delete user profiles!'

            else:
                #SAVE
                if self.current_midi_profile_script:
                    updateParameters = []
                    for parameter in escaped_request_arguments:
                        if not parameter.startswith('ZYNTHIAN_'):
                            updateParameters.append(parameter)

                    for k in updateParameters:
                        del escaped_request_arguments[k]

                    zynconf.update_midi_profile(
                        escaped_request_arguments,
                        self.current_midi_profile_script)
                    errors = self.update_config(escaped_request_arguments)
                else:
                    errors[
                        'zynthian_midi_profile_new_script_name'] = 'No profile name!'

            self.reload_midi_config_flag = True

        self.get(errors)
sys.path.append(os.environ.get('ZYNTHIAN_UI_DIR', "/zynthian/zynthian-ui"))
import zynconf

#--------------------------------------------------------------------

soundcard_mixer_0 = os.environ.get('SOUNDCARD_MIXER')

if soundcard_mixer_0 is not None:
    ctrls_0 = soundcard_mixer_0.split(',')

    if len(ctrls_0) > 0:
        ctrls_1 = []
        for ctrl in ctrls_0:
            ctrl = ctrl.strip()
            if ctrl in ("Digital", "ADC", "Master", "Capture", "DAC",
                        "Speaker", "Mic", "Headphone", "HDMI"):
                ctrls_1.append(ctrl + " Left")
                ctrls_1.append(ctrl + " Right")
            else:
                ctrls_1.append(ctrl)
        soundcard_mixer_1 = ",".join(ctrls_1)

        # Update Config
        if soundcard_mixer_1 != soundcard_mixer_0:
            print("Updating SOUNDCARD_MIXER => {}".format(soundcard_mixer_1))
            zynconf.save_config({'SOUNDCARD_MIXER': soundcard_mixer_1})
        else:
            print("SOUNDCARD_MIXER is OK")

#--------------------------------------------------------------------
예제 #13
0
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# For a full copy of the GNU General Public License see the LICENSE.txt file.
# 
#********************************************************************

import os
import sys

sys.path.append(os.environ.get('ZYNTHIAN_UI_DIR',"/zynthian/zynthian-ui"))
import zynconf

#--------------------------------------------------------------------

envar_name = sys.argv[1]
envar_value = sys.argv[2]

# Update Config
zynconf.save_config({ 
	envar_name: envar_value
})

#--------------------------------------------------------------------