*** These modified files were found in JOE when it aborted on Fri Sep 23 20:31:28 2016
*** JOE was aborted because the terminal closed

*** Файл '(БезИмени)'
mqtt_pulse.py

*** Файл 'mqtt_pulse.py'
#!/usr/bin/python

from pulsectl import Pulse,PulseLoopStop

import threading

sink_name=None
muted=False
volume=None

paLock1=threading.RLock()
paLock2=threading.RLock()
stopFlag=False

def Init():
  global pulse
  pulse = Pulse("mqtt-pa")

def Reconnect():
  pulse.close()
  Init()

def GetDefaultOut():
  return pulse.server_info().default_sink_name

def GetDefaultSink():
  sinkname=GetDefaultOut()
  for sink in pulse.sink_list():
    if sink.name==sinkname:
      return sink

def GetDefaultVolume():
  return pulse.volume_get_all_chans(GetDefaultSink())

def IsDefaultMuted():
  return GetDefaultSink().mute<>0
  
def MuteDefault(mute = True):
  return pulse.mute(GetDefaultSink(),mute)

def EventListener(callback):
  pulse.event_mask_set('all')
  pulse.event_callback_set(callback)
  pulse.event_listen()

def EventProcess(ev):
  raise PulseLoopStop

def AcquirePALock():
  paLock1.acquire()
  
  pulse.event_listen_stop()
  paLock2.acquire()

def ReleasePALock():
  paLock2.release()
  paLock1.release()

def StateProcess():
  global sink_name,muted,volume
  try:
    tname=threading.current_thread().name
#    print tname+">trying to aquire lock"
    AcquirePALock()
#    print tname+">lock aquired"
    current_sink=GetDefaultOut()
    current_vol=round(GetDefaultVolume(),2)
    current_muted=IsDefaultMuted()
    if current_sink<>sink_name:
      sink_name=current_sink
      print tname+">sink: "+sink_name
    if current_vol<>volume:
      volume=current_vol
      print tname+">volume: "+str(volume)
    if current_muted<>muted:
      muted=current_muted
      print tname+">muted: "+str(muted)
  finally:
    ReleasePALock()
#    print tname+">lock released"

def PAListener():
  while not stopFlag:    
#    print "entering wait loop"
    EventListener(EventProcess)
#    print "event or break happened"
    StateProcess()

def RunBackground(process):
  stopFlag=False
  thread = threading.Thread(target=process,name="Background")
  thread.start()

def StopBackground():
  global stopFlag
  stopFlag=True
  pulse.event_listen_stop()

def CommandGetDefaultOut():
  try:
    tname=threading.current_thread().name
#    print tname+">trying to aquire lock"
    AcquirePALock()
#    print tname+">lock aquired"
    result=GetDefaultOut()
  finally:
    ReleasePALock()
#    print tname+">lock released"
  return result

def CommandGetDefaultVolume():
  try:
    tname=threading.current_thread().name
#    print tname+">trying to aquire lock"
    AcquirePALock()
#    print tname+">lock aquired"
    result=GetDefaultVolume()
  finally:
    ReleasePALock()
#    print tname+">lock released"
  return result

def CommandIsDefaultMuted():
  try:
    tname=threading.current_thread().name
#    print tname+">trying to aquire lock"
    AcquirePALock()
#    print tname+">lock aquired"
    result=IsDefaultMuted()
  finally:
    ReleasePALock()
#    print tname+">lock released"
  return result
  
*** Файл '* Startup Log *'
Processing '/etc/joe/joerc'...
Processing '/etc/joe/ftyperc'...
Finished processing /etc/joe/ftyperc
Finished processing /etc/joe/joerc