File: RenardoApp.py

package info (click to toggle)
python-renardo 0.9.12-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 216 kB
  • sloc: python: 537; makefile: 7
file content (88 lines) | stat: -rw-r--r-- 3,795 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from .SCFilesHandling import write_sc_renardo_files_in_user_config
from .SuperColliderInstance import SupercolliderInstance
from .PulsarInstance import PulsarInstance
from .RenardoTUI import RenardoTUI
from renardo_gatherer.samples_download import SPackManager

import argparse
import time

class RenardoApp:

    def __init__(self):
        self.sc_instance = None
        self.spack_manager = SPackManager()
        self.args = RenardoApp.parse_args()
        self.sc_instance = SupercolliderInstance()
        self.pulsar_instance = PulsarInstance()
        self.launch()

    def launch(self):

        # if args.cli:
        # if args.dir:
        #     try:
        #         # Use given directory
        #         FoxDotCode.use_sample_directory(args.dir)
        #     except OSError as e:
        #         # Exit with last error
        #         import sys, traceback
        #         sys.exit(traceback.print_exc(limit=1))

        # if args.startup:
        #     try:
        #         FoxDotCode.use_startup_file(args.startup)
        #     except OSError as e:
        #         import sys, traceback
        #         sys.exit(traceback.print_exc(limit=1))
        # if args.no_startup:
        #     FoxDotCode.no_startup()

        if self.args.create_scfiles:
            write_sc_renardo_files_in_user_config()

        if not (self.args.no_tui or self.args.pipe or self.args.foxdot_editor):
            RenardoTUI(self).run()

        if self.args.boot:
            print("Launching Renardo SC module with SCLang...")
            self.sc_instance.start_sclang_subprocess()
            output_line = self.sc_instance.read_stdout_line()
            while "Welcome to" not in output_line:
                print(output_line[:-1]) # remove \n at the end to avoid double newline
                output_line = self.sc_instance.read_stdout_line()
            self.sc_instance.evaluate_sclang_code("Renardo.start;")
            time.sleep(3)

        if self.args.pipe:
            from renardo_lib import handle_stdin, FoxDotCode
            # Just take commands from the CLI
            handle_stdin()
        elif self.args.foxdot_editor:
            from renardo_lib import FoxDotCode
            # Open the GUI
            from FoxDotEditor.Editor import workspace
            FoxDot = workspace(FoxDotCode).run()
        elif self.args.no_tui:
            print("You need to choose a launching mode : TUI, --pipe or --foxdot-editor...")
        print("Quitting...")
    
    @staticmethod
    def parse_args():
        parser = argparse.ArgumentParser(
            prog="renardo",
            description="Live coding with Python and SuperCollider",
            epilog="More information: https://renardo.org/"
        )
        parser.add_argument('-N', '--no-tui', action='store_true', help="does start renardo TUI")
        parser.add_argument('-p', '--pipe', action='store_true', help="run Renardo from the command line interface")
        parser.add_argument('-f', '--foxdot-editor', action='store_true', help="run Renardo with the classic FoxDot code editor")
        # parser.add_argument('-d', '--dir', action='store', help="use an alternate directory for looking up samples")
        # parser.add_argument('-s', '--startup', action='store', help="use an alternate startup file")
        # parser.add_argument('-n', '--no-startup', action='store_true', help="does not load startup.py on boot")
        # store_false => boot default value = True WTF
        parser.add_argument('-b', '--boot', action='store_true', help="Boot SuperCollider Renardo instance automatically")
        parser.add_argument('-c', '--create-scfiles', action='store_true', help="Create Renardo class file and startup file in SuperCollider user conf dir.")

        return parser.parse_args()