ExtendScript Работа с файлами

от автора

<- Предыдущая статья: Extendscript Hello World!!!

Всем привет.

В предыдущей статье я рассказал, как написать скрипт для Adobe After Effects. Напомню, что наш скрипт создает окно в интерфейсе программы. В этом окне можно вводить и выполнять код Extendscript — язык сценариев для программ Adobe. Теперь хочу предложит вам некоторое расширение функционала данного плагина. Давайте сделаем так, чтобы он мог загружать и сохранять написанные нами скрипты.

И так, поехали.

Начнем с загрузки скрипта. Для этого добавим кнопку Open и обработчик ее нажатия

var btnOpenFile = win.add('button', undefined, 'open'); btnOpenFile.onClick = function() {    var file = File.openDialog('Открываем скрипт для Adobe AE');     if (!file) return;     if (/\.(jsx|js)$/.test(file.name)) {        file.open("r");                         editText.text = file.read();        file.close();    } else {        alert("Файл " + file.name + " должен иметь расширение .js или .jsx")    } };

Первым делом в обработчике мы вызываем диалоговое окно для открытия файла. Первым аргументом в статический метод File.openDialog передается подсказка для пользователя. Если система поддерживает такую подсказку, она будет отображена. В противном случае этот аргумент будет проигнорирован.

Так же этот метод принимает и второй аргумент — метод или строка (в зависимости от ОС) фильтрации расширения открываемых файлов. Но по какой-то причине в последних версиях AE этот аргумент не работает, поэтому в этом скрипте я его использовать не стал. Вместо этого мы чуть ниже сделаем соответствующую проверку.

Если пользователь выбрал файл, метод File.openDialog возвратит экземпляр класса File. В противном случае, если пользователь нажал Отмена, будет возвращен null. В таком случае мы прерываем работу обработчика

if (!file) return;

Далее мы проверяем расширение выбранного файла. Для этого мы используем регулярное выражение, проверяющее окончание строки с именем выбранного файла.

/\.(jsx|js)$/.test(file.name)

Нас интересуют файлы .js и .jsx. Оба эти расширения интерпретируются AE как сценарии. Если проверка прошла успешно, мы открываем файл для чтения, для этого передаем методу open аргумент “r” — read, передаем нашему текстовому полю содержимое файла и закрываем файл, чтобы он не засорял память программы.

file.open("r");                  editText.text = file.read(); file.close();

Если расширение файла нам не подходит, мы предупреждаем об этом пользователя, на чем работа обработчика завершается.

alert("Файл " + file.name + " должен иметь расширение .js или .jsx")

Можете проверить работу кнопки. Если вы все сделали верно, в текстовом поле отобразится содержимое открытого файла.

Следующим шагом мы сохраним наш скрипт. Для этого добавим кнопку Save.

var btnSaveFile = win.add('button', undefined, 'save'); btnSaveFile.onClick = function() {    var file = File.saveDialog('Сохраняем скрипт для Adobe AE');     if (!file) return;     if (!/\.(jsx|js)$/.test(file.name)) {        file.rename(file.name + '.jsx')    }     file.open('w');    file.write(editText.text);    file.close(); };

Тут почти та же логика, что и в предыдущем блоке. Мы открываем диалоговое окно для сохранения файла.

var file = File.saveDialog('Сохраняем скрипт для Adobe AE');

Если пользователь нажал Отменить File.saveDialog  возвращает null  и мы прерываем  работу обработчика

if (!file) return;

Далее проверяем имя файла указанное в диалоговом окне и, если имя не содержит расширений .js или .jsx, переименовываем файл, добавляя нужное расширение

if (!/\.(jsx|js)$/.test(file.name)) {    file.rename(file.name + '.jsx') }

Имя фала доступно только для чтение, поэтому для его изменения мы используем метод rename.

Запустите и проверьте скрипт. С большой долей вероятности могу предположить, что файл сохраняться не будет. Возможно он будет создан, но тем не менее останется пустым. Дело в том, что по умолчанию в настройках After Effects стоит запрет сценариям на запись файлов. Чтобы это исправить, откройте в меню Preferences > Scripting & Expressions, и отметьте чекбокс Allow Scripts to Write Files and Access Network. После того, как вы нажмете Ок, файлы будут сохраняться.

Ну, вот, собственно, и все. Остался только один нюанс, наши кнопки располагаются друг под другом, что не очень эстетично и удобно. Чтобы это исправить, мы перед тем как добавлять кнопки, добавим элемент group

var btnsGroup = win.add('group');

А сами кнопки будем уже добавлять не в окно, а в эту группу

var btnRun = btnsGroup.add('button', undefined, 'run'); var btnOpenFile = btnsGroup.add('button', undefined, 'open'); var btnSaveFile = btnsGroup.add('button', undefined, 'save');

Теперь кнопки отрисовываются инлайн, что, согласитесь, выглядит гораздо лучше.

На этом пока все. Надеюсь, данный пример был вам полезен. Полный скрипт с подробными комментариями вы можете найти тут. Документацию по работе с файлами в AE Extendscript смотрите тут.

Спасибо за внимание.

<- Предыдущая статья: Extendscript Hello World!!!

ссылка на оригинал статьи https://habr.com/ru/post/541414/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *