def deleteHelper(srclist):
    """
    Takes in a list of full walk path(str) for deletion.
    And render the delete on the display while deleting.
    For Example:
        [filePath1, filePath2, filePath3.......filePath n]
        or
        [DirPath1, DirPath2, DirPath3,...., DirPath n]

    :param srclist: list of paths to file or directory
    :return: NA
    """
    displayPng(workDir + "/Assets/Img/Deleting.png")
    time.sleep(0.2)
    for i in srclist:
        if isdir(i):
            # If given element in a list is a directory
            shutil.rmtree(srclist[0])
        else:
            folder = dirname(i)
            if os.path.exists(i):
                # Check for file existence
                os.remove(i)
            if len(os.listdir(folder)) == 0:
                # If nothing is in the folder, remove the parent folder
                os.rmdir(folder)
    displayPng(workDir + "/Assets/Img/Done.png")
    getAnyKeyEvent()  # Press any key to proceed
    return
Example #2
0
def fileTransferHelper(srclist, dest):
    """
    Pass in list of paths to file, and copy to root destination
    It will create patch's parent folder if not already exist in the destination folder
    For example:
        fileTransferHelper(["..../OP1_File_Organizer/NotUsed/..../patch.aif"], dest = "/..../synth")

    :param srclist: ["pwd/1.aif", "pwd/2.aif", "pwd/3.aif",....., "pwd/n.aif"]
    :param dest: Root of the synth and drum destination folder
    :return: NA
    """

    for i in srclist:
        srcParentFolderName = abspath(join(i, pardir)).split("/")[-1:][0]
        srcBaseName = basename(i)
        distParentFolderName = dest + "/" + str(srcParentFolderName)
        print(distParentFolderName)
        forcedir(distParentFolderName)
        image = Image.new('1', (128, 64))

        if workDir in srclist[0]:
            # Local to OP1
            image.paste(Image.open(workDir + "/Assets/Img/UploadPatches.png").convert("1"))
        else:
            # OP1 to Local
            image.paste(Image.open(workDir + "/Assets/Img/DownloadPatches.png").convert("1"))
        draw = ImageDraw.Draw(image)
        draw.text((20, 63), srcBaseName, font=getFont(), fill="white")
        displayImage(image)
        print(i, distParentFolderName + "/" + srcBaseName)
        shutil.copy2(i, distParentFolderName + "/" + srcBaseName)

    displayPng(workDir + "/Assets/Img/Done.png")
    getAnyKeyEvent()  # Press any key to proceed
    return
Example #3
0
def op1FunDownlaodQue(op1ServiceObj, downloadLst, savePath):
    op = op1ServiceObj
    for i in downloadLst:
        print(i)
        name, link = i

        regex = re.compile(".*?\]")
        result = re.findall(regex, name)
        dsp = name.replace(result[0], "")

        mesg = Image.new('1', (128, 64))
        mesg.paste(Image.open(workDir + "/Assets/Img/downloadIcon.png").convert("1"))
        draw = ImageDraw.Draw(mesg)
        draw.text((5, 35), "Getting patch list", font=getFont(), fill='white')
        draw.text((5, 44), "from op1.fun...", font=getFont(), fill='white')
        displayImage(mesg)
        strzip = op.getPackDownloadURL(link)

        mesg = Image.new('1', (128, 64))
        mesg.paste(Image.open(workDir + "/Assets/Img/downloadIcon.png").convert("1"))
        draw = ImageDraw.Draw(mesg)
        draw.text((20, 35), "Downloading...", font=getFont(), fill='white')
        draw.text((5, 45), dsp, font=getFont(), fill='white')
        displayImage(mesg)
        downloadFile = op.downloadFile(strzip)

        mesg = Image.new('1', (128, 64))
        mesg.paste(Image.open(workDir + "/Assets/Img/downloadIcon.png").convert("1"))
        draw = ImageDraw.Draw(mesg)
        draw.text((25, 35), "Unpacking...", font=getFont(), fill='white')
        draw.text((5, 45), dsp, font=getFont(), fill='white')
        displayImage(mesg)
        try:
            op.unPackageToLocal(downloadFile, savePath)
        except:
            print("unpack error")
        time.sleep(1)

        if len(downloadLst) == 1:
            displayPng(workDir + "/Assets/Img/Done.png")
            getAnyKeyEvent()
            print ("Done Download and unpack")
Example #4
0
def renderRename(file="", jsutName=False):
    """
    Given a file path, renders for rename, with confirmation for rename or cancel,
    :param file:
    :return:
    """
    dirPath, originalName = os.path.dirname(file), basename(file)
    newName = list("__________")
    ascii_uppercase, digits, space = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "0123456789", "_"
    curser, charPointer = 15, 0

    while True:
        image = Image.new('1', (128, 64))
        draw = ImageDraw.Draw(image)
        draw.rectangle([(-1, 0), (128, 64)], 'black', 'white')
        draw.rectangle([(0, 0), (128, 10)], 'white')

        if not os.path.exists(file):
            # The given path does not exist, means its creating a new folder
            draw.text((2, 0), str("New Folder"), fill='black', font=getFont())

        elif os.path.isdir(file):
            draw.text((2, 0),
                      str("Rename Folder"),
                      fill='black',
                      font=getFont())
            draw.text((1, 15),
                      str(originalName.split(".")[0]),
                      font=getFont(),
                      fill="white")
        else:
            draw.text((2, 0),
                      str("Rename Patch"),
                      fill='black',
                      font=getFont())
            draw.text((1, 15),
                      str(originalName.split(".")[0]),
                      font=getFont(),
                      fill="white")

        # Render Rename Edit Space
        offset, spacing = 15, 10
        for i in newName:
            draw.text((offset, 35), str(i), font=getFont(), fill="white")
            offset += spacing
        # Render cursor
        draw.text((curser, 45), str("^"), font=getFont(), fill="white")
        displayImage(image)

        key = getKeyStroke()
        if key == "LEFT":
            if curser - spacing >= 15:
                curser -= spacing
                charPointer -= 1
        if key == "RIGHT":
            if curser + spacing < 115:
                curser += spacing
                charPointer += 1
        if key == "UP":
            if newName[charPointer] == "_":
                newName[charPointer] = ascii_uppercase[0]
            elif newName[charPointer] in ascii_uppercase:
                current = ascii_uppercase.index(str(newName[charPointer]))
                if current - 1 >= 0:
                    newName[charPointer] = ascii_uppercase[current - 1]
            elif newName[charPointer] in digits:
                current = digits.index(str(newName[charPointer]))
                if current - 1 >= 0:
                    newName[charPointer] = digits[current - 1]
        if key == "DOWN":
            if newName[charPointer] == "_":
                newName[charPointer] = ascii_uppercase[0]
            elif newName[charPointer] in ascii_uppercase:
                current = ascii_uppercase.index(str(newName[charPointer]))
                if current + 1 < len(ascii_uppercase):
                    newName[charPointer] = ascii_uppercase[current + 1]
            elif newName[charPointer] in digits:
                current = digits.index(str(newName[charPointer]))
                if current + 1 < len(digits):
                    newName[charPointer] = digits[current + 1]
        if key == "CENTER":
            if newName[charPointer] == "_":
                newName[charPointer] = ascii_uppercase[0]
            elif newName[charPointer] in digits:
                newName[charPointer] = space
            elif newName[charPointer] in ascii_uppercase:
                newName[charPointer] = digits[0]
        if key == "A":
            return ""

        if key == "B":
            if jsutName:
                name = ''.join(newName).replace("_", " ").strip()
                if len(name) != 0:
                    rtn = RenderOptionsMenu(["Yes", "Cancel"], "Confirm")
                    if rtn == "Yes":
                        return name
                    else:
                        return ""

            dirlst = os.listdir(dirPath)
            name = ''.join(newName).replace("_", " ").strip()
            if newName in dirlst:
                alreadyExist = Image.new('1', (128, 64))
                draw = ImageDraw.Draw(alreadyExist)
                draw.text((30, 25),
                          "Name Already Exist!",
                          font=getFont(),
                          fill='white')
                displayImage(alreadyExist)
                pass

            if newName not in dirlst and len(name) != 0:
                rtn = RenderOptionsMenu(["Yes", "Cancel"], "Confirm")
                if rtn == "Yes":
                    # print(dirPath + "/" + originalName, dirPath + "/" + name + ".aif")
                    if not os.path.isdir(file):
                        os.rename(dirPath + "/" + originalName,
                                  dirPath + "/" + name + ".aif")
                    else:
                        os.rename(dirPath + "/" + originalName,
                                  dirPath + "/" + name)
                    image = Image.new('1', (128, 64))
                    image.paste(
                        Image.open(workDir +
                                   "/Assets/Img/Done.png").convert("1"))
                    displayImage(image)
                    getAnyKeyEvent()
                    return

                elif rtn == "Cancel":
                    pass
Example #5
0
    def actionRouter(self, event):
        # =============Projects Actions ===========
        if event == "act_Backup_Project_From_OP_1":
            if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                displayPng(workDir + "/Assets/Img/BackupProject.png")
                time.sleep(0.1)
                try:
                    tape = OP1Backup()
                    tape.copyToLocal()
                    displayPng(workDir + "/Assets/Img/Done.png")
                    time.sleep(0.1)
                    getAnyKeyEvent()
                except:
                    print("File Transfer Error")
            # self.renderPage(-1, 1)

        if event == "act_Load_Project_From_Local_only_tracks":
            if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                displayPng(workDir + "/Assets/Img/BackupProject.png")
                time.sleep(0.1)
                try:
                    tape = OP1Backup()
                    tape.copyOnlyTapesToLocal()
                    displayPng(workDir + "/Assets/Img/Done.png")
                    time.sleep(0.1)
                    getAnyKeyEvent()
                except:
                    print("File Transfer Error")
            self.renderPage(-1, 1)

        if event == "act_Load_Project_From_Local":
            # rtn = "RETURN"
            while True:
                temp = RenderOptionsMenu(getDirFileList(savePaths["Local_Projects"]), "Projects")
                if temp == "RETURN":
                    break
                else:
                    rtn = RenderOptionsMenu(["Upload", "Rename", "Delete"])
                    if rtn == "Upload":
                        if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                            displayPng(workDir + "/Assets/Img/UploadingProject.png")
                            time.sleep(0.1)
                            try:
                                tape = OP1Backup()
                                tape.loadProjectToOP1(os.path.join(savePaths["Local_Projects"], temp))
                            except:
                                print("File Transfer Error")

                    elif rtn == "Rename":
                        renderRename(os.path.join(savePaths["Local_Projects"], temp))
                    elif rtn == "Delete":
                        deleteHelper([os.path.join(savePaths["Local_Projects"], temp)])
                    elif rtn == "RETURN":
                        pass

        # ===========Patches Actions===========
        if event == "OP1_Synth_Patches":
            if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                renderFolders(config["OP_1_Mounted_Dir"] + "/synth", "Backup", savePaths["Local_Synth"])

        if event == "OP1_Drum_Patches":
            if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                renderFolders(config["OP_1_Mounted_Dir"] + "/drum", "Backup", savePaths["Local_Drum"])

        if event == "UploadSynthPatches":
            renderFolders(savePaths["Local_Synth"], "Upload", config["OP_1_Mounted_Dir"] + "/synth")

        if event == "UploadDrumPatches":
            renderFolders(savePaths["Local_Drum"], "Upload", config["OP_1_Mounted_Dir"] + "/drum")

        if event == "act_5_Backup_All_Patches":
            if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                image = Image.new('1', (128, 64))
                image.paste(Image.open(workDir + "/Assets/Img/DownloadPatches.png").convert("1"))
                displayImage(image)
                time.sleep(0.1)
                try:
                    bk = OP1Backup()
                    bk.backupOP1Patches()

                    displayPng(workDir + "/Assets/Img/Done.png")
                    time.sleep(0.1)
                    getAnyKeyEvent()
                except:
                    print("File Transfer Error")

        # =================== OP-Z Action Routes ====================
        if event == "act_Freeze_State_OPZ":
            if check_OP_Z_Connection() and config["OP_Z_Mounted_Dir"] != "":
                displayPng(workDir + "/Assets/Img/BackupProject.png")
                time.sleep(0.1)
                try:
                    state = OP1Backup()
                    if state.backupOPZState():
                        displayPng(workDir + "/Assets/Img/Done.png")
                        time.sleep(0.1)
                        getAnyKeyEvent()
                except:
                    print("File Transfer Error")
            # self.renderPage(-1, 1)

        if event == "act_Recall_State_To_OPZ":
            # rtn = "RETURN"
            while True:
                temp = RenderOptionsMenu(getDirFileList(savePaths["OP_Z_Local_Backup_States_Path"]), "Recall State")
                if temp == "RETURN":
                    break
                else:
                    rtn = RenderOptionsMenu(["Upload", "Rename", "Delete"])
                    if rtn == "Upload":
                        if check_OP_Z_Connection():
                            displayPng(workDir + "/Assets/Img/UploadingProject.png")
                            time.sleep(0.1)
                            try:
                                state = OP1Backup()
                                print("Recall File: ", os.path.join(savePaths["OP_Z_Local_Backup_States_Path"], temp))
                                state.loadStateToOPZ(os.path.join(savePaths["OP_Z_Local_Backup_States_Path"], temp))
                                displayPng(workDir + "/Assets/Img/Done.png")
                                time.sleep(0.1)
                                getAnyKeyEvent()
                            except:
                                print("File Transfer Error")

                    elif rtn == "Rename":
                        renderRename(os.path.join(savePaths["OP_Z_Local_Backup_States_Path"], temp))
                    elif rtn == "Delete":
                        deleteHelper([os.path.join(savePaths["OP_Z_Local_Backup_States_Path"], temp)])
                    elif rtn == "RETURN":
                        pass
            # self.renderPage(-1, 1)

        if event == "OPZ_Patches":
            if check_OP_Z_Connection() and config["OP_Z_Mounted_Dir"] != "":
                renderOPZFolder(config["OP_Z_Mounted_Dir"] + "/samplepacks", "Choose From OP-1 Lib")

        if event == "MIDI_Host":
            midi = MidiTool()
            midi.usbMIDIOut()

        if event == "OP1FUN_BrowsePacks" or event == "OP1FUN_DownloadAllPacks":

            Connecting = Image.new('1', (128, 64))
            draw = ImageDraw.Draw(Connecting)
            draw.text((0, 30), "Connecting to Wifi..", font=getFont(), fill='white')
            # draw.text((5, 35), "WIFI..", font=getFont(), fill='white')
            displayImage(Connecting)

            if not internetIsOn():
                displayPng(workDir + "/Assets/Img/NoWifi.png")
                getAnyKeyEvent()
                noWifiMesg = Image.new('1', (128, 64))
                draw = ImageDraw.Draw(noWifiMesg)
                draw.rectangle([(0, 0), (128, 10)], 'white')
                draw.text((30, 0), "No Internet", font=getFont(), fill='black')
                draw.text((5, 15), "Connect to Wifi AP", font=getFont(), fill='white')
                draw.text((5, 40), "Then assign", font=getFont(), fill='white')
                draw.text((5, 50), "Available Wifi", font=getFont(), fill='white')
                displayImage(noWifiMesg)
                getAnyKeyEvent()
            else:
                Connecting = Image.new('1', (128, 64))
                draw = ImageDraw.Draw(Connecting)
                draw.text((0, 30), "Logging into op1.fun", font=getFont(), fill='white')
                displayImage(Connecting)

                op = op1funRequests()
                userAccount = op.getUserAccount()
                if "" in userAccount:
                    Connecting = Image.new('1', (128, 64))
                    draw = ImageDraw.Draw(Connecting)
                    draw.text((5, 30), "No Login Info!", font=getFont(), fill='white')
                    displayImage(Connecting)
                else:
                    packlst = op.getPackList()
                    if event == "OP1FUN_DownloadAllPacks" and packlst:
                        op1FunDownlaodQue(op, packlst, savePaths["Local_Patches"])

                    elif event == "OP1FUN_BrowsePacks" and packlst:
                        rtn = ""
                        while "RETURN" not in rtn:
                            rtn = RenderOptionsMenu([i[0] for i in packlst], "User:"******"RETURN" not in rtn:
                                actRtn = RenderOptionsMenu(["Download To Local", "Download To OP1"], "Pack: " + rtn)
                                download = []
                                for i in packlst:
                                    name, link = i
                                    if name == rtn:
                                        download.append((name, link))
                                if "Download To Local" == actRtn:
                                    op1FunDownlaodQue(op, download, savePaths["Local_Patches"])
                                if "Download To OP1" == actRtn:
                                    if check_OP_1_Connection():
                                        op1FunDownlaodQue(op, download, config["OP_1_Mounted_Dir"])
                            else:
                                break

        # ===================== Server ==================
        if event == "Check_IP":
            import logging
            logging.basicConfig(level=logging.DEBUG, filename="/home/pi/OP1_File_Organizer/logfile.txt", filemode="a+",
                                format="%(asctime)-15s %(levelname)-8s %(message)s")
            logging.info("In Check IP")
            username = "******"
            IP = ""
            try:
                # SSH = SSH_Service()
                # logging.info("After SSH initialized : ", SSH)
                # IP = SSH.get_ip_address()
                IP = get_ip_address()
                logging.info("Getting the IP Address: ", IP)
                username = os.getlogin()
                logging.info("Getting the User Name: ", username)

                # print(SSH.get_ip_address())
                # print(SSH.get_current_connected())
                # SSH.start_SSH_Service()

                IP = IP.replace(".", " . ")

                IPDisplay = Image.new('1', (128, 64))
                draw = ImageDraw.Draw(IPDisplay)
                draw.rectangle([(0, 0), (128, 10)], 'white')
                draw.text((50, 0), "SSH IP", font=getFont(), fill='black')
                draw.text((5, 15), "User : "******"IP : " + IP, font=getFont(), fill='white')
                draw.text((5, 50), "Password : sys paswd", font=getFont(), fill='white')
                displayImage(IPDisplay)
                getAnyKeyEvent()

            except:
                IPDisplay = Image.new('1', (128, 64))
                draw = ImageDraw.Draw(IPDisplay)
                draw.rectangle([(0, 0), (128, 10)], 'white')
                draw.text((50, 0), "SSH IP", font=getFont(), fill='black')
                draw.text((5, 15), "User : "******"IP : " + IP, font=getFont(), fill='white')
                draw.text((5, 50), "Password : sys paswd", font=getFont(), fill='white')
                displayImage(IPDisplay)
                getAnyKeyEvent()
                # Display = Image.new('1', (128, 64))
                # draw = ImageDraw.Draw(Display)
                # draw.rectangle([(0, 0), (128, 10)], 'white')
                # draw.text((5, 25), "Wifi is not ready." + IP, font=getFont(), fill='white')
                # draw.text((5, 35), "Please try later....." + IP, font=getFont(), fill='white')
                # displayImage(Display)
                # getAnyKeyEvent()

        if event == "Server IP":
            try:
                SSH = SSH_Service()
                IP = SSH.get_ip_address()

                IPDisplay = Image.new('1', (128, 64))
                draw = ImageDraw.Draw(IPDisplay)
                draw.rectangle([(0, 0), (128, 10)], 'white')
                draw.text((30, 0), "Browser App", font=getFont(), fill='black')
                draw.text((0, 15), "Connect To Wifi", font=getFont(), fill='white')
                draw.text((0, 25), "Open Browser, Then", font=getFont(), fill='white')
                draw.text((0, 35), "-------------------------------------------------------", font=getSmallFont(),
                          fill='white')
                draw.text((0, 40), "http://" + IP + ":", font=getFont(), fill='white')
                draw.text((10, 53), "/5000/files", font=getFont(), fill='white')

                displayImage(IPDisplay)
                getAnyKeyEvent()
            except:
                pass
        # ===========Eject Actions===========
        if event == "act_ESC_Eject":
            try:
                unmounting = Image.new('1', (128, 64))
                draw = ImageDraw.Draw(unmounting)
                draw.text((0, 25), "Ejecting....", font=getFont(), fill='white')
                displayImage(unmounting)
                if unmount_OP_1():
                    time.sleep(1)
                    # unmounted = Image.new('1', (128, 64))
                    # draw = ImageDraw.Draw(unmounted)
                    # draw.text((0, 25), "Ejected", font=getFont(), fill='white')
                    # displayImage(unmounted)
                    # time.sleep(1)
            except:
                pass

        # ========= POWER OFF ====================
        if event == "act_POWER_OFF":
            image = Image.new('1', (128, 64))
            image.paste(Image.open(workDir + "/Assets/Img/PowerOff.png").convert("1"))
            displayImage(image)
            time.sleep(1.0)
            # call("sudo shutdown -h now", shell=True)
            call("sudo poweroff", shell=True)

        if event == "checkStorage":
            image = Image.new('1', (128, 64))
            image.paste(Image.open(workDir + "/Assets/Img/Storage_64.png").convert("1"))
            draw = ImageDraw.Draw(image)

            if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                sampler, synth, drum = update_Current_Storage_Status()
            else:
                sampler, synth, drum = 42, 100, 42

            Disk = str(subprocess.check_output("df -h | awk '$NF==\"/\"{printf \"%d/%dGB %s\", $3,$2,$5}'", shell=True))
            Disk = Disk.replace("b\'", "")
            Disk = Disk.replace("\'", "")
            draw.text((50, 13), str(Disk), font=getFont(), fill="white")  # Disk Storage Render
            draw.text((28, 48), str(config["Max_Synth_Sampler_patches"] - sampler), font=getFont(), fill="white")
            draw.text((70, 48), str(config["Max_Synth_Synthesis_patches"] - synth), font=getFont(), fill="white")
            draw.text((112, 48), str(config["Max_Drum_Patches"] - drum), font=getFont(), fill="white")
            displayImage(image)
            getAnyKeyEvent()  # Press any key to proceed
        self.renderPage(-1, 1)
Example #6
0
    def actionRouter(self, event):
        # =============Projects Actions ===========
        if event == "act_Backup_Project_From_OP_1":
            if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                displayPng(workDir + "/Assets/Img/BackupProject.png")
                time.sleep(0.1)
                try:
                    tape = TapeBackup()
                    tape.copyToLocal()
                    displayPng(workDir + "/Assets/Img/Done.png")
                    time.sleep(0.1)
                    getAnyKeyEvent()
                except:
                    print("File Transfer Error")
                    self.renderErrorMessagePage("File Transfer Error")
            self.renderPage(-1, 1)

        if event == "act_Load_Project_From_Local":
            # rtn = "RETURN"
            while True:
                temp = RenderOptionsMenu(
                    getDirFileList(savePaths["Local_Projects"]), "Projects")
                if temp == "RETURN":
                    break
                else:
                    # while rtn == "RETURN":
                    rtn = RenderOptionsMenu(["Upload", "Rename", "Delete"])
                    # temp = RenderOptionsMenu(getDirFileList(savePaths["Local_Projects"]), "Projects")
                    if rtn == "Upload":
                        pass
                    elif rtn == "Rename":
                        renderRename(
                            os.path.join(savePaths["Local_Projects"], temp))
                    elif rtn == "Delete":
                        deleteHelper(
                            [os.path.join(savePaths["Local_Projects"], temp)])
                    elif rtn == "RETURN":
                        pass

            self.renderPage(-1, 1)

        # ===========Patches Actions===========
        if event == "OP1_Synth_Patches":
            if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                renderFolders(config["OP_1_Mounted_Dir"] + "/synth", "Backup",
                              savePaths["Local_Synth"])
            self.renderPage(-1, 1)

        if event == "OP1_Drum_Patches":
            if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                renderFolders(config["OP_1_Mounted_Dir"] + "/drum", "Backup",
                              savePaths["Local_Drum"])
            self.renderPage(-1, 1)

        if event == "UploadSynthPatches":
            renderFolders(savePaths["Local_Synth"], "Upload",
                          config["OP_1_Mounted_Dir"] + "/synth")
            self.renderPage(-1, 1)

        if event == "UploadDrumPatches":
            renderFolders(savePaths["Local_Drum"], "Upload",
                          config["OP_1_Mounted_Dir"] + "/drum")
            self.renderPage(-1, 1)

        if event == "act_5_Backup_All_Patches":
            image = Image.new('1', (128, 64))
            image.paste(
                Image.open(workDir +
                           "/Assets/Img/BackupProject.png").convert("1"))
            displayImage(image)
            time.sleep(0.1)
            self.renderPage(-1, 1)

        if event == "USB_MIDI_In_Test":
            startMidi()
            self.renderPage(-1, 1)

        if event == "USB_MIDI_Out_Test":
            usbMIDIOut()
            self.renderPage(-1, 1)

        # ===========Eject Actions===========
        if event == "act_ESC_Eject_OP_1":
            try:
                if unmount_OP_1():
                    print("Ejected")
            except:
                print("Error")
            self.renderPage(-1, 1)

        # ============= MOUNT OPTION ==============
        if event == "act_ESC_Mount_OP_1":
            try:
                if do_mount():
                    print("Mounted")
            except:
                print("Error")
            self.renderPage(-1, 1)
        # ========= POWER OFF ====================
        if event == "act_POWER_OFF":
            image = Image.new('1', (128, 64))
            image.paste(
                Image.open(workDir + "/Assets/Img/PowerOff.png").convert("1"))
            displayImage(image)
            time.sleep(1.0)
            call("sudo shutdown -h now", shell=True)

        if event == "checkStorage":
            if check_OP_1_Connection() and config["OP_1_Mounted_Dir"] != "":
                image = Image.new('1', (128, 64))
                image.paste(
                    Image.open(workDir +
                               "/Assets/Img/Storage_64.png").convert("1"))
                draw = ImageDraw.Draw(image)
                sampler, synth, drum = update_Current_Storage_Status()
                Disk = subprocess.check_output(
                    "df -h | awk '$NF==\"/\"{printf \"%d/%dGB %s\", $3,$2,$5}'",
                    shell=True)
                draw.text((50, 13), Disk, font=getFont(),
                          fill="white")  # Disk Storage Render
                draw.text((28, 48),
                          str(config["Max_Synth_Sampler_patches"] - sampler),
                          font=getFont(),
                          fill="white")
                draw.text((70, 48),
                          str(config["Max_Synth_Synthesis_patches"] - synth),
                          font=getFont(),
                          fill="white")
                draw.text((112, 48),
                          str(config["Max_Drum_Patches"] - drum),
                          font=getFont(),
                          fill="white")
                displayImage(image)
                getAnyKeyEvent()  # Press any key to proceed
            else:
                print("Not Connected")
            self.renderPage(-1, 1)
    def actionRouter(self, event):
        # =============Projects Actions ===========
        if event == "act_Backup_Project_From_OP_1":
            image = Image.new('1', (128, 64))
            image.paste(
                Image.open(workDir +
                           "/Assets/Img/BackupProject.png").convert("1"))
            displayImage(image)
            time.sleep(0.1)
            try:
                tape = TapeBackup()
                tape.copyToLocal()
            except:
                print("File Transfer Error")

            image = Image.new('1', (128, 64))
            image.paste(
                Image.open(workDir + "/Assets/Img/Done.png").convert("1"))
            displayImage(image)
            time.sleep(0.1)
            getAnyKeyEvent()
            self.renderPage(-1, 1)

        if event == "act_Load_Project_From_Local":
            renderFolders(savePaths["Local_Projects"], "Upload")
            self.renderPage(-1, 1)

        # ===========Patches Actions===========
        if event == "OP1_Synth_Patches":
            option = "RETURN"
            # while option == "RETURN":
            renderFolders(savePaths["OP_1_Synth"], "Backup")
            self.renderPage(-1, 1)

        if event == "OP1_Drum_Patches":
            renderFolders(savePaths["OP_1_Drum"], "Backup")
            self.renderPage(-1, 1)

        if event == "UploadSynthPatches":
            # option = "RETURN"
            # while option == "RETURN":
            renderFolders(savePaths["Local_Synth"], "Upload")
            # if option == "Upload":
            #     print("Upload")
            # if option == "Rename":
            #     print("Rename")
            # if option == "Delete":
            #     print("Delete")

            self.renderPage(-1, 1)

        if event == "UploadDrumPatches":
            renderFolders(savePaths["Local_Drum"], "Upload")
            self.renderPage(-1, 1)

        if event == "act_5_Backup_All_Patches":
            self.renderPage(-1, 1)

        # ===========Eject Actions===========
        if event == "act_ESC_Eject_OP_1":
            # unmount_OP_1()
            cmd = "sudo umount " + config["OP_1_Mounted_Dir"]
            try:
                os.system(cmd)
            except:
                pass
            print("Ejected")
            time.sleep(5)
            start()
            # pass

        if event == "checkStorage":
            image = Image.new('1', (128, 64))
            image.paste(
                Image.open(workDir +
                           "/Assets/Img/Storage_64.png").convert("1"))
            draw = ImageDraw.Draw(image)
            sampler, synth, drum = update_Current_Storage_Status()
            Disk = subprocess.check_output(
                "df -h | awk '$NF==\"/\"{printf \"%d/%dGB %s\", $3,$2,$5}'",
                shell=True)
            draw.text((50, 13), Disk, font=getFont(),
                      fill="white")  # Disk Storage Render
            draw.text((28, 48),
                      str(config["Max_Synth_Sampler_patches"] - sampler),
                      font=getFont(),
                      fill="white")
            draw.text((70, 48),
                      str(config["Max_Synth_Synthesis_patches"] - synth),
                      font=getFont(),
                      fill="white")
            draw.text((112, 48),
                      str(config["Max_Drum_Patches"] - drum),
                      font=getFont(),
                      fill="white")
            displayImage(image)
            getAnyKeyEvent()  # Press any key to proceed
            self.renderPage(-1, 1)