No internet connection
  1. Home
  2. Macro and Script Help

Reveal Selected Clip: Add directories within session folder to the searched directories in addition to audio files folder.

By Kaspar @Kaspar
    2024-03-20 17:50:25.600Z

    Title

    Reveal Selected Clip: Add directories within session folder to the searched directories in addition to audio files folder.

    What do you expect to happen when you run the script/macro?

    Add directories within the session folder to the searched directories in addition to the audio files folder to be recursively searched.

    Namely:

    Pro Tools session Folder/Video Files
    Pro Tools session Folder/Imports

    I added the following lines to the script but isn't enough clearly:

    65 let videoFilesFolder = ${sessionFolder}/Video Files;
    66 let importsFolder = ${sessionFolder}/Imports;

    74 videoFilesFolder,
    75 importsFolder,

    Are you seeing an error?

    What happens when you run this script?

    It is unable to find files which are present. Namely Video Files in the video files folder.

    How were you running this script?

    I used a keyboard shortcut within the target app

    How important is this issue to you?

    4

    Details

    {
        "inputExpected": "Add directories within the session folder to the searched directories in addition to the audio files folder to be recursively searched.\n\nNamely:\n\nPro Tools session Folder/Video Files\nPro Tools session Folder/Imports\n\nI added the following lines to the script but isn't enough clearly:\n\n\n\n65    let videoFilesFolder = `${sessionFolder}/Video Files`;\n66    let importsFolder = `${sessionFolder}/Imports`;\n\n\n74          videoFilesFolder,\n75          importsFolder,",
        "inputIsError": false,
        "inputWhatHappens": "It is unable to find files which are present. Namely Video Files in the video files folder.",
        "inputHowRun": {
            "key": "-Mpfwh4RkPLb2LPwjePT",
            "title": "I used a keyboard shortcut within the target app"
        },
        "inputImportance": 4,
        "inputTitle": "Reveal Selected Clip: Add directories within session folder to the searched directories in addition to audio files folder."
    }

    Source

    const { searchPaths } = event.props;
    
    function getClipFilename() {
        sf.ui.proTools.appActivateMainWindow();
    
        //Clear search, to ensure Clip Rename will work
        sf.keyboard.press({
            keys: "cmd+shift+d",
        });
    
        // Open Rename, copy Filename and close Rename
        sf.ui.proTools.menuClick({
            menuPath: ["Clip", "Rename..."],
        });
    
        var nameWin = sf.ui.proTools.windows.whoseTitle.is('Name').first;
        nameWin.elementWaitFor({}, `Clip Rename didn't work`);
    
        let clipInfoGrp = nameWin.groups.whoseTitle.is('Clip Info').first;    
        if (clipInfoGrp.frame.h < 30)
            clipInfoGrp.elementClick();
        sf.waitFor({ callback: () => clipInfoGrp.invalidate().frame.h >= 30 }, `Couldn't open Clip Info tab`);
    
        let nameElement = clipInfoGrp.children.whoseRole.is("AXStaticText").allItems[2];
        let name = nameElement.value.value;
    
        nameWin.buttons.whoseTitle.is('OK').first.mouseClickElement();
        nameWin.elementWaitFor({ waitForNoElement: true });
    
        return name;
    }
    
    function locateFile({
        filename,
        searchPaths
    }) {
        var ext = filename.split('.').slice(-1)[0].toLowerCase();
        var filenameLowerCase = filename.toLowerCase();
        var filenameNoExtLowerCase = filename.split('.').slice(0, -1).join('.').toLowerCase();
        var additionalExtensions = ['l', 'c', 'r', 'ls', 'rs', 'lfe'];
    
        var candidates = [];
        for (let searchPath of searchPaths) {
            for (let candidatePath of sf.file.directoryGetFiles({
                path: searchPath,
                searchPattern: `*.${ext}`,
                isRecursive: true
            }).paths.filter(p => {
                var fn = p.split('/').slice(-1)[0].toLowerCase();
                if (fn === filenameLowerCase) return true;
                if (additionalExtensions.some(ae => fn === `${filenameNoExtLowerCase}.${ae}.${ext}`)) return true;
                return false;
            })) {
                candidates.push(candidatePath);
            }
        }
    
        return candidates;
    }
    
    function main() {
    
        let sessionFolder = sf.ui.proTools.mainWindow.sessionPath.split('/').slice(0, -1).join('/');
        let audioFilesFolder = `${sessionFolder}/Audio Files`;
        let videoFilesFolder = `${sessionFolder}/Video Files`;
        let importsFolder = `${sessionFolder}/Imports`;
    
        let clipFilename = getClipFilename();
    
        let candidates = locateFile({
            filename: clipFilename,
            searchPaths: [
                audioFilesFolder,
                videoFilesFolder,
                importsFolder,
                ...(searchPaths || []),
            ],
        });
    
        if (candidates.length === 0)
            log(`Could not find file "${clipFilename}" in search path(s)`);
        else if (candidates.length === 1)  {
            sf.system.exec({ commandLine: `open -R "${candidates[0]}"` });
        } else {
            log('Multiple files found.');
            let selectedPath = sf.interaction.popupSearch({
                items: candidates.map(c => ({
                    name: c,
                }))
            }).item.name;
            sf.system.exec({ commandLine: `open -R "${selectedPath}"` });
        }
    }
    
    main();
    
    

    Links

    User UID: VsW63KQlOvQ4pS3VRklEUcKKQz42

    Feedback Key: sffeedback:VsW63KQlOvQ4pS3VRklEUcKKQz42:-NtRz4TjQ2Pv-A5UoY99

    Feedback ZIP: EwsmayAdDxLpgIBZsNfp+jNSB2M28QCZKNZmKyYgnt+vEHB+DdcImeYHLWPyImhT4Dl34kOwgoUbUpHdKczYagF5vvTLj5DFhacdvDprXq6Bzuv96EjMXn8pictg1239YPF0QIL/BuxlRpORmeIutZljcH8embBdFtKQGQIEVupN28qmwqGLsE4o/kD8KoRkAyrMuR3HAx2Bc8HR/menWqsD8k58gh0t0DCPHw2tDTcPlTkTg/um4wySySzik3f5d0vnCnYUvYrgmnYufB8aExqc6lAN6qEGok/6BY2o5my3bAXJ5289hNGMXrTIlcbJVkkCSSHdHdoctqUbXD21xfTJTBZfbQqcVfwxOdXqX7s=

    • 0 replies