# docimages_core.py
# Sends commands to get images for the manual.
# This is the shared part reused in a bunch of scripts.

# Make sure Audacity is running first and that mod-script-pipe is enabled
# before running this script.

import os
import sys

def startPipes() :
    global tofile
    global fromfile
    global EOL
    if( sys.platform  == 'win32' ):
        print( "pipe-test.py, running on windows" )
        toname = '\\\\.\\pipe\\ToSrvPipe'
        fromname = '\\\\.\\pipe\\FromSrvPipe'
        EOL = '\r\n\0'
    else:
        print( "pipe-test.py, running on linux or mac" )
        toname = '/tmp/audacity_script_pipe.to.' + str(os.getuid())
        fromname = '/tmp/audacity_script_pipe.from.' + str(os.getuid())
        EOL = '\n'

    print( "Write to  \"" + toname +"\"" )
    if not os.path.exists( toname ) :
       print( " ..does not exist.  Ensure Audacity is running with mod-script-pipe." )
       sys.exit();
        
    print( "Read from \"" + fromname +"\"")
    if not os.path.exists( fromname ) :
       print( " ..does not exist.  Ensure Audacity is running with mod-script-pipe." )
       sys.exit();

    print( "-- Both pipes exist.  Good." )

    tofile = open( toname, 'wt' )
    print( "-- File to write to has been opened" )
    fromfile = open( fromname, 'rt')
    print( "-- File to read from has now been opened too\r\n" )


def sendCommand( command ) :
    global tofile
    global EOL
    print( "Send: >>> \n"+command )
    tofile.write( command + EOL )	
    tofile.flush()

def getResponse() :
    """Return the command response."""
    global fromfile
    result = ''
    line = ''
    while True:
        result += line
        line = fromfile.readline()
        if line == '\n' and len(result) > 0:
            break
    return result


def doCommand( command ) :
    sendCommand( command )
    response = getResponse()
    print( "Rcvd: <<< \n" + response )
    return response

def do( command ) :
    doCommand( command )

def quickTest() :
    do( 'Help: Command=Help' )

def setup() :
    global path
    global sample_path
    global result_path
    global sample
    global sample2
    global postfix
    postfix = ''
    path = os.path.abspath(__file__);
    
    path = os.path.dirname( path )
    path = os.path.dirname( path )
    path = os.path.dirname( path )
    path = os.path.join( path, 'tests' )
    result_path = os.path.join( path, 'results' )
    sample_path = os.path.join( path, 'samples' )
    sample      = os.path.join( sample_path, 'FifeAndDrums.wav' )
    sample2     = os.path.join( sample_path, 'FifeAndDrumsStereo.wav' )
   
    startPipes()
    do( 'SetProject: X=10 Y=10 Width=910 Height=800' )

def imageSet(name):
    print("****************** " + name + " ***************************")

def makeWayForTracks(  ) :
    do( 'Select: TrackCount=20' )
    do( 'RemoveTracks' )

def capture( name, what ) :
    global result_path
    global postfix
    name = name.split( '.png' )[0] + postfix + '.png' 
    do( 'Screenshot: Path="'+os.path.join( result_path, name) +'" CaptureWhat=' + what )

def loadExample( name ):
    global sample_path
    makeWayForTracks( )
    do( 'Import2: Filename="'+os.path.join( sample_path, name)+'"' )
    do( 'Select: Start=0 End=0')
    do( 'FitInWindow' )

def loadMonoTrack():
    global sample
    makeWayForTracks( )
    do( 'Import2: Filename="'+sample+'"' )
    do( 'Select: Start=0 End=150')
    do( 'Trim')
    do( 'ZoomSel' )

def loadStereoTrack():
    global sample2
    makeWayForTracks( )
    do( 'Import2: Filename="'+sample2+'"' )
    do( 'Select: Start=0 End=150')
    do( 'Trim')
    do( 'ZoomSel' )
    
def loadMonoTracks( num ) :
    makeWayForTracks( )
    loadMonoTrack()
    do( 'Select: Track=0')
    do( 'SetTrack: Name="Foxy Lady"')
    for i in range( 0, num-1 ):
        do( 'Select')
        do( 'Duplicate' )
    do( 'FitInWindow' )
    do( 'Select: Start=55 End=70 TrackCount=' + str(num))

def loadStereoTracks( num ) :
    makeWayForTracks( )
    loadStereoTrack()
    do( 'SetTrack: Track=0 Name="Foxy Lady"')
    for i in range( 0, num-1 ):
        do( 'Select')
        do( 'Duplicate' )
    do( 'FitInWindow' )
    do( 'Select: Start=55 End=70 TrackCount=' + str(num) )

def makeMonoTracks( num ) :
    makeWayForTracks( )
    for i in range( 0, num ):
        do( 'NewMonoTrack' )
    do( 'SetTrack: Track=0 Name="Foxy Lady"')
    do( 'Select: Start=0 End=150 TrackCount=' + str(num) )
    do( 'Chirp: StartAmp=0.5' )
    do( 'Wahwah' )
    do( 'FitInWindow' )
    do( 'Select: Start=55 End=70')
 
def makeStereoTracks( num ) :
    makeWayForTracks( )
    for i in range( 0, num ):
       do( 'NewStereoTrack' )
    do( 'Select' )
    do( 'SetTrack: Name="Voodoo Children IN STEREO"')
    do( 'Select: Start=0 End=150 TrackCount=' + str(num) )
    do( 'Chirp: StartAmp=0.5' )
    do( 'Wahwah' )
    do( 'FitInWindow' )
    do( 'Select: Start=55 End=70')

try:
    coreLoaded
except NameError:    
    setup()
    coreLoaded=True
    print( "Set up done")
else :
    print( "Already set up")