use a temporary directory to avoid permission problems

This commit is contained in:
Jakob Ketterl 2019-07-13 17:16:38 +02:00
parent efc5b936f8
commit 935e79c9c2
4 changed files with 18 additions and 7 deletions

View File

@ -237,3 +237,5 @@ google_maps_api_key = ""
# they will start fading out after half of that # they will start fading out after half of that
# in seconds; default: 2 hours # in seconds; default: 2 hours
map_position_retention_time = 2 * 60 * 60 map_position_retention_time = 2 * 60 * 60
temporary_directory = "/tmp"

View File

@ -74,6 +74,10 @@ class dsp(object):
self.unvoiced_quality = 1 self.unvoiced_quality = 1
self.modification_lock = threading.Lock() self.modification_lock = threading.Lock()
self.output = output self.output = output
self.temporary_directory = "/tmp"
def set_temporary_directory(self, what):
self.temporary_directory = what
def chain(self,which): def chain(self,which):
chain = ["nc -v 127.0.0.1 {nc_port}"] chain = ["nc -v 127.0.0.1 {nc_port}"]
@ -468,7 +472,7 @@ class dsp(object):
logger.debug(command_base) logger.debug(command_base)
#create control pipes for csdr #create control pipes for csdr
self.pipe_base_path="/tmp/openwebrx_pipe_{myid}_".format(myid=id(self)) self.pipe_base_path = "{tmp_dir}/openwebrx_pipe_{myid}_".format(tmp_dir=self.temporary_directory, myid=id(self))
self.try_create_pipes(self.pipe_names, command_base) self.try_create_pipes(self.pipe_names, command_base)

View File

@ -275,7 +275,7 @@ class SpectrumThread(csdr.output):
self.props = props = self.sdrSource.props.collect( self.props = props = self.sdrSource.props.collect(
"samp_rate", "fft_size", "fft_fps", "fft_voverlap_factor", "fft_compression", "samp_rate", "fft_size", "fft_fps", "fft_voverlap_factor", "fft_compression",
"csdr_dynamic_bufsize", "csdr_print_bufsizes", "csdr_through" "csdr_dynamic_bufsize", "csdr_print_bufsizes", "csdr_through", "temporary_directory"
).defaults(PropertyManager.getSharedInstance()) ).defaults(PropertyManager.getSharedInstance())
self.dsp = dsp = csdr.dsp(self) self.dsp = dsp = csdr.dsp(self)
@ -295,6 +295,7 @@ class SpectrumThread(csdr.output):
props.getProperty("fft_size").wire(dsp.set_fft_size), props.getProperty("fft_size").wire(dsp.set_fft_size),
props.getProperty("fft_fps").wire(dsp.set_fft_fps), props.getProperty("fft_fps").wire(dsp.set_fft_fps),
props.getProperty("fft_compression").wire(dsp.set_fft_compression), props.getProperty("fft_compression").wire(dsp.set_fft_compression),
props.getProperty("temporary_directory").wire(dsp.set_temporary_directory),
props.collect("samp_rate", "fft_size", "fft_fps", "fft_voverlap_factor").wire(set_fft_averages) props.collect("samp_rate", "fft_size", "fft_fps", "fft_voverlap_factor").wire(set_fft_averages)
] ]
@ -352,7 +353,7 @@ class DspManager(csdr.output):
self.localProps = self.sdrSource.getProps().collect( self.localProps = self.sdrSource.getProps().collect(
"audio_compression", "fft_compression", "digimodes_fft_size", "csdr_dynamic_bufsize", "audio_compression", "fft_compression", "digimodes_fft_size", "csdr_dynamic_bufsize",
"csdr_print_bufsizes", "csdr_through", "digimodes_enable", "samp_rate", "digital_voice_unvoiced_quality", "csdr_print_bufsizes", "csdr_through", "digimodes_enable", "samp_rate", "digital_voice_unvoiced_quality",
"dmr_filter" "dmr_filter", "temporary_directory"
).defaults(PropertyManager.getSharedInstance()) ).defaults(PropertyManager.getSharedInstance())
self.dsp = csdr.dsp(self) self.dsp = csdr.dsp(self)
@ -380,7 +381,8 @@ class DspManager(csdr.output):
self.localProps.getProperty("high_cut").wire(set_high_cut), self.localProps.getProperty("high_cut").wire(set_high_cut),
self.localProps.getProperty("mod").wire(self.dsp.set_demodulator), self.localProps.getProperty("mod").wire(self.dsp.set_demodulator),
self.localProps.getProperty("digital_voice_unvoiced_quality").wire(self.dsp.set_unvoiced_quality), self.localProps.getProperty("digital_voice_unvoiced_quality").wire(self.dsp.set_unvoiced_quality),
self.localProps.getProperty("dmr_filter").wire(self.dsp.set_dmr_filter) self.localProps.getProperty("dmr_filter").wire(self.dsp.set_dmr_filter),
self.localProps.getProperty("temporary_directory").wire(self.dsp.set_temporary_directory)
] ]
self.dsp.set_offset_freq(0) self.dsp.set_offset_freq(0)

View File

@ -8,6 +8,7 @@ import os
from multiprocessing.connection import Pipe from multiprocessing.connection import Pipe
from owrx.map import Map, LocatorLocation from owrx.map import Map, LocatorLocation
import re import re
from owrx.config import PropertyManager
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -16,6 +17,7 @@ logger = logging.getLogger(__name__)
class Ft8Chopper(threading.Thread): class Ft8Chopper(threading.Thread):
def __init__(self, source): def __init__(self, source):
self.source = source self.source = source
self.tmp_dir = PropertyManager.getSharedInstance()["temporary_directory"]
(self.wavefilename, self.wavefile) = self.getWaveFile() (self.wavefilename, self.wavefile) = self.getWaveFile()
self.switchingLock = threading.Lock() self.switchingLock = threading.Lock()
self.scheduler = sched.scheduler(time.time, time.sleep) self.scheduler = sched.scheduler(time.time, time.sleep)
@ -25,7 +27,8 @@ class Ft8Chopper(threading.Thread):
super().__init__() super().__init__()
def getWaveFile(self): def getWaveFile(self):
filename = "/tmp/openwebrx-ft8chopper-{id}-{timestamp}.wav".format( filename = "{tmp_dir}/openwebrx-ft8chopper-{id}-{timestamp}.wav".format(
tmp_dir = self.tmp_dir,
id = id(self), id = id(self),
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S") timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
) )
@ -70,7 +73,7 @@ class Ft8Chopper(threading.Thread):
def decode(self): def decode(self):
def decode_and_unlink(file): def decode_and_unlink(file):
#TODO expose decoding quality parameters through config #TODO expose decoding quality parameters through config
decoder = subprocess.Popen(["jt9", "--ft8", "-d", "3", file], stdout=subprocess.PIPE) decoder = subprocess.Popen(["jt9", "--ft8", "-d", "3", file], stdout=subprocess.PIPE, cwd=self.tmp_dir)
while True: while True:
line = decoder.stdout.readline() line = decoder.stdout.readline()
if line is None or (isinstance(line, bytes) and len(line) == 0): if line is None or (isinstance(line, bytes) and len(line) == 0):