[ID CC2024] Апдейт Шредингера

iGrey

Топикстартер
10 лет на форуме
Сообщения
102
Реакции
6
Интересная ситуация.

Скрипт ждет пока на диске не изменится картинка, потом ее апдейтит.

while (MyStatus != LinkStatus.LINK_OUT_OF_DATE)
MyStatus = MyImage.itemLink.status;
MyImage.itemLink.update ();

Визуально картинка меняется.
Но когда скрипт заканчивает работу, Индез считает картинку не проапдейчинной.
1705753604473.png


Ручной апдейт визуально уже ничего не меняет. Т.е. картинка обновлена и не обновлена одновременно. :)
Это баг индеза?
Как то можно забороть?
 

bossrus

шибка умный, аднака
12 лет на форуме
Сообщения
447
Реакции
74
насколько я помню, этот глюк я решил перемещением картинки в другую папку (или переименованием, если лень папки создавать) и переапдейтом на новый линк. тогда работает
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 183
Реакции
10 843
Маленькое лирическое отступление, про то, почему адоба - ламерская контора.
Основной фишкой языка программирования Javascript является так называемая асинхронная обработка событий, в чем прекрасно осведомлены те, кто работает, например, в вебдизайне. Поэтому, вероятно, из самых благих побуждений, стратеги разработки автоматизации адобы выбрали именно этот язык для этой самой автоматизации. Но дальше чтото пошло не так, и глупые индусы, которым за плошку плесневелого риса поручили претворить эту хотелку в жизнь, в своих обезьяньих джунглях слыхом не слыхивали таких умных слов и по простоте душевной просто радостно похерили этот главный козырь, более того, сделав систему линейной и однопоточной, коей она и продолжает оставаться многие годы.
В общем, как вы понимаете, пространства для маневра у вас негусто, попробуйте постучать по шине, разбив код на два независимых скрипта, или, для начала, хотя бы поставить задержку между этими двумя событиями.
 
  • &$#%!
  • Спасибо
Реакции: ~RA~ и iGrey

bossrus

шибка умный, аднака
12 лет на форуме
Сообщения
447
Реакции
74
или, для начала, хотя бы поставить задержку между этими двумя событиями.
мне не помогло, в своё время. хотя я задержку ставил до минуты (понятно, что чисто для тестов. в производстве обрабатывать 1 картинку в минуту — это прям сильно :)
дело не в асинхроне. дело в индизе и его взаимодействии со скриптами
и, кстати, есть смутное ощущение, что я эту тему уже создавал '))')
 

bossrus

шибка умный, аднака
12 лет на форуме
Сообщения
447
Реакции
74
воооо. раскопал. 10 лет теме, почти '))'
какой я был молодой и неопытный '))')
 
  • Спасибо
Реакции: _MBK_

iGrey

Топикстартер
10 лет на форуме
Сообщения
102
Реакции
6
В общем, как вы понимаете, пространства для маневра у вас негусто, попробуйте постучать по шине, разбив код на два независимых скрипта, или, для начала, хотя бы поставить задержку между этими двумя событиями.
Понял.
Раз ошибка не моя, а системная, буду искать пути обхода.
Всем откликнувшемся спасибо.


и, кстати, есть смутное ощущение, что я эту тему уже создавал '))')
Я прочитал вопрос в

как заставить индизайн обновить состояние линков "вотпрямщас"?​

И решил что это не мой случай.
Скрипт видит и обновляет линки. И перерисовывает их в индезе.
А индез потом их теряет.
Поэтому дальше не читал.
Наверное зря.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 183
Реакции
10 843
  • Спасибо
Реакции: iGrey

bossrus

шибка умный, аднака
12 лет на форуме
Сообщения
447
Реакции
74
Ну там же и приводится обходной путь - бридж
кхм. прикольно. первая строка в десятеричной системе, а вторая в восьмеричной. а то, что в кавычках — всегда десятеричная.

если не знать правил, как js воспринимает числа, начинающиеся с 0 — возникает ощущение страшной ошибки. а на самом деле нет. вот я полчаса назад не знал :)
 
Последнее редактирование:

iGrey

Топикстартер
10 лет на форуме
Сообщения
102
Реакции
6
Ну там же и приводится обходной путь - бридж
Картинки из индеза пердавались в фотошоп через бридж.
Сейчас появилась идея открывать их через editoriginal();
Картинки начали обновляться в индезе и вроде все хорошо.
Только надо найти способ делать активним окно Индеза из скрипта фотошопа.
Надо будет подумать.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 183
Реакции
10 843
кхм. прикольно. первая строка в десятеричной системе, а вторая в восьмеричной. а то, что в кавычках — всегда десятеричная.

если не знать правил, как js воспринимает числа, начинающиеся с 0 — возникает ощущение страшной ошибки. а на самом деле нет. вот я полчаса назад не знал :)

Да, фишка в том, что если присутствует цифра 8 или 9 - тоже переводит в десятичную.
Картинки из индеза пердавались в фотошоп через бридж.
Сейчас появилась идея открывать их через editoriginal();
Картинки начали обновляться в индезе и вроде все хорошо.
Только надо найти способ делать активним окно Индеза из скрипта фотошопа.
Надо будет подумать.
А не пробовали делать телодвижения с запуском другого скрипта?
 
  • Спасибо
Реакции: iGrey

iGrey

Топикстартер
10 лет на форуме
Сообщения
102
Реакции
6
А не пробовали делать телодвижения с запуском другого скрипта?
Ну почти так.
Внутренний лентяй велел вернуться к первоначальной работающей версии скрипта без всяких editOriginal и добавить апдейт линков в скрипт сохранения верстки.
Для себя тему закрыл.
Всем еще раз спасибо.
 

Drawer

Участник
Сообщения
1 796
Реакции
793
как заставить индизайн обновить состояние линков "вотпрямщас"?
Ок, может не понял всю глубину проблемы... почему у меня все работает в CS6 и префлайт не спотыкается?:)
app.activeDocument.links.everyItem().update(); (в чем смысл обновления конкретного линка?)
Или это в более новых версиях так?
 

iGrey

Топикстартер
10 лет на форуме
Сообщения
102
Реакции
6
Ок, может не понял всю глубину проблемы... почему у меня все работает в CS6 и префлайт не спотыкается?:)
app.activeDocument.links.everyItem().update(); (в чем смысл обновления конкретного линка?)
Или это в более новых версиях так?
Скрипт работает с одной конкретной картинкой выделенной в индезайне.
Передает ее в фотошоп, ждет пока шоп не отработает и не сохранит картинку, потом ее апдейтит.
Проблема в том, что скрипт картинку 100% апдейтит. (на пробу, добавлял в скрипт все возможные варианты апдейта всех картинок). Но после завершения работы скрипта, индез считает ее не проапдейченной.
Это удивляет и немного напрягает.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 183
Реакции
10 843
Это удивляет и немного напрягает.
Вероятно, это от того, что вы недавно в теме.
В адобовской объектной модели и в SDK (особенно в SDK) есть очень много гораздо более удивительных и не менее напрягающих вещей. Вы плагины к AI или ID еще не пробовали писать? ;)
 

Drawer

Участник
Сообщения
1 796
Реакции
793
Передает ее в фотошоп, ждет пока шоп не отработает и не сохранит картинку, потом ее апдейтит.
Я конечно не воспроизводил этот сценарий полностью, но просто после изменения файла запуск скрипта с апдейтом всех линков не вызывает спотыкания.
Может предоставите упрощенный вариант рабочего скрипта чтобы попробовать понять что именно не так?
 

iGrey

Топикстартер
10 лет на форуме
Сообщения
102
Реакции
6
Я конечно не воспроизводил этот сценарий полностью, но просто после изменения файла запуск скрипта с апдейтом всех линков не вызывает спотыкания.
Может предоставите упрощенный вариант рабочего скрипта чтобы попробовать понять что именно не так?
Вот код.
JavaScript:
with (app)
{
            with (activeDocument)
        {
            imagePreferences.preserveBounds = false; 
            if  (documentPreferences.documentBleedOutsideOrRightOffset>10) var MySdvig = 17;
            else var MySdvig = 5;
           
            MyImage = selection [0]; // Получаем имидж для обработки
            if (MyImage.constructor.name != "Image") MyImage = MyImage.graphics[0];
           
            myPath = MyImage.itemLink.filePath;
            MyStatus = MyImage.itemLink.status;
            // Запускаем фотошоп
            var bt = new BridgeTalk();
            bt.target = "photoshop";
            var myScript = AddBleed.toString() + '\r';
            myScript += 'AddBleed(\"' + myPath + '\",' + MySdvigPS*2 +');';
            bt.body = myScript;   
            bt.send(100);
           
             while (MyStatus != LinkStatus.LINK_OUT_OF_DATE)
                    MyStatus = MyImage.itemLink.status;
            MyImage.itemLink.update ();
        }
    imagePreferences.preserveBounds = true; 
}

function AddBleed (myPath, myBleed)
{
with (app) {
try {
var myPsDoc = open(new File(myPath));
with (myPsDoc) {
MyBackr = layers[0].isBackgroundLayer;
layers[0].isBackgroundLayer = false;
preferences.rulerUnits = Units.MM;
resizeCanvas (width.value + myBleed, height.value + myBleed, AnchorPosition.MIDDLECENTER);
doAction("FILL_GENERATE", "WORK");
layers[0].isBackgroundLayer=MyBackr;
save ();
close ();
}
}
catch (myError) {
}
}
}

Лишнее убрал.
 

iGrey

Топикстартер
10 лет на форуме
Сообщения
102
Реакции
6
Вероятно, это от того, что вы недавно в теме.
В адобовской объектной модели и в SDK (особенно в SDK) есть очень много гораздо более удивительных и не менее напрягающих вещей. Вы плагины к AI или ID еще не пробовали писать? ;)
Из меня скриптописатель примерно такой же как и балерина. :)
Я просто нахожу в инете куски чужого кода и пытаюсь адаптировать его к своим задачам.
А так, я ни разу не программист :(
 

Drawer

Участник
Сообщения
1 796
Реакции
793
У меня этот скрипт открывает выделенный линк в PS, меняет канвас сайз и висит так, пока не закроешь с сохранением. После перехожу в ID линк обновляется, префлайт ошибок не выдает 'hz'