/***
    * Сергей Исаев, г. Тюмень, 2012 год
    * Версия 0.86 ( PC only )
    * © АНО «Тюменская область сегодня»
    *
    * Скрипт сохраняет оригинальные картинки в папку site/color_images,
    * сохраняет все картинки в формате TIFF в папку ФОТО В ПОЛОСУ,
    * пересвязывает картинки на созданные TIFF
    *
    * Файлы записываются в папку 192.168.11.240/oneday/site/img/ из WindowsXP
    * Файлы записываются в папку /Volumes/oneday/site/img/ из MacOS
    * ресурсы должны существовать!
    
Журнал изменений:
 - Существующие файлы не перезаписываются, а увеличивается индекс фото
 - Если номер не указан, то Номер и Полоса запрашиваются повторно
 - Сохраняется под Специальным расширением 'tif3', чтобы скриптом менять обратно.
 - При запросе номера по нажатию клавиши «Esc» завершает обработку скрипта
 - Не изменяется цветовое пространство файла
 
 Требования:
 - Windows
 - ImageMagic
    */
/*
    Поиск всех невнедренных изображений
    Перебор всех найденных изображений
    Если изобржаение не в папке ФОТО в ПОЛОСУ или не в формате TIFF, то Обработать.
    
*/
function myCreateProgressPanel(srcMaxValue, srcMaxWidth) {
    myProgressPanel = new Window("window", "Экспорт файлов на сервер в формате TIF");
    with (myProgressPanel) {
        myProgressPanel.myProgressBar = add("progressbar", [12, 12, srcMaxWidth, 24], 0, srcMaxValue);
    }
    return myProgressPanel;
}
// Настройка экспорта JPG.
// Возможно не нужны, если копировать оригиналы
app.jpegExportPreferences.exportResolution = 200;
app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.HIGH;
var stringLog = '';
// Платформозависимый путь к папке назначения для Mac и PC
// Если Macintosh, то Mac
if (0 == $.os.indexOf("Macintosh")) {
//    var CONST_SITE_FOLDER = "/Volumes/oneday/site/color_images/";
    var CONST_SITE_FOLDER = "~/Desktop/color_images/";
    var CONST_TIF_FOLDER = "~/Desktop/ФОТО В ПОЛОСУ/";
    var CONST_SLASH = "/";
} else {
// иначе PC
    var CONST_SITE_FOLDER = "\\\\192.168.11.3\\oneday\\site\\color_images\\";
    var CONST_TIF_FOLDER = "\\\\192.168.11.4\\paper\\ФОТО В ПОЛОСУ\\";
    var CONST_SLASH = "\\";
}
// Не копировать фотки из Фото в полосу и Оригиналов изображений
var reProcessed = new RegExp("(ФОТО В ПОЛОСУ)");
var reTIFF = new RegExp("(\.tiff|\.psd)");
// Получает Активную страницу
var activePage = app.activeWindow.activePage;
// Получает Активный документ
var myDocument = app.activeDocument
/*
  *    Начинает обраотку полосы
  */
// Запрашивает номер и полосу
var issueAndPage = prompt(  'Пожалуйста, введите номер и полосу' ,
                                        '000-00' ,
                                        'Запрос номера и полосы');
while (parseInt(issueAndPage) < 1) {
    issueAndPage = prompt(  'Пожалуйста, введите НОМЕР и ПОЛОСУ' ,
                                        '000-00' ,
                                        'Запрос номера и полосы');
}
// Если нажат Escape, то завершить скрипт
if (!issueAndPage) exit();
                                        
// Извлекает номер выпуска
issueNumber = parseInt(issueAndPage);
issueFolder = '';
if (issueNumber < 10) {
    issueFolder = '00' + issueNumber + '/';
} else if (issueNumber < 100) {
    issueFolder = '0' + issueNumber + '/';
} else {
    issueFolder = '' + issueNumber + '/';
}
// Надо запоминать номер фотки, чтобы фотки не повторялись!!!!
var maxProgressBarValue = activePage.allGraphics.length*20;
var myProgressPanel = myCreateProgressPanel(maxProgressBarValue, 400);
myProgressPanel.show();
for (var iCounter = 0; iCounter < activePage.allGraphics.length; iCounter++) {
    var someGraphics = activePage.allGraphics[iCounter];
    var someLink = someGraphics.itemLink;
    var sourceImageFilename = someLink.filePath;
    
    var filenameArray = someLink.name.split ('.');
    var fileExt = filenameArray[filenameArray.length-1].toLowerCase();
    // Изменяет значение прогресс бара
    myProgressPanel.myProgressBar.value = iCounter*20;
    var colorFile = new File(someLink.filePath);
    if (reProcessed.test(someLink.filePath) && reTIFF.test(someLink.filePath)) {
        stringLog += "\n" + someLink.name + ' уже сохранен.';
    } else if (someLink.status == LinkStatus.LINK_EMBEDDED) {
        stringLog += "\n" + someLink.name + ' внедрен.';
    } else if (!colorFile.exists) {
            stringLog += "\n" + someLink.name + ' файл НЕ НАЙДЕН.';
    } else {
        //Получает номер картинки
        var imgFolder = new Folder(CONST_TIF_FOLDER+issueFolder);
        if (imgFolder.exists) {
            imgFiles = imgFolder.getFiles(issueAndPage+'*');
            imgNumber = imgFiles.length + 1;
        } else {
            imgFolder.create();
            imgNumber = 1;
        }
        
        // Создает папку для исходника
        var colorFolder = new Folder(CONST_SITE_FOLDER+issueFolder);
        if (!colorFolder.exists) {
            colorFolder.create();
        }       
        
        // Проверяется тип файла
         if ( (fileExt == 'tif') || (fileExt == 'tiff') || (fileExt == 'psd') || (fileExt == 'pdf') || (fileExt == 'eps')) {
             // Просто скопировать
             destFileExt = '.' + fileExt;
             doConvert = false;
         } else {
             // Скопировать и преобразовать в TIF
             destFileExt = '.tif';
             doConvert = true;
         }
         // Экспортирует файл в папку ФОТО В ПОЛОСУ
        paperFile = new File(CONST_TIF_FOLDER+issueFolder+issueAndPage+'-'+imgNumber+destFileExt);
        while (paperFile.exists) {
            imgNumber++;
            paperFile = new File(CONST_TIF_FOLDER+issueFolder+issueAndPage+'-'+imgNumber+destFileExt);
        }
        colorFile.copy(paperFile);
         myProgressPanel.myProgressBar.value = iCounter *20 + 1;
        // Сохраняет исходник
        var colorFile = new File(someLink.filePath);
        if (colorFile.exists) {
            colorFile.copy(CONST_SITE_FOLDER+issueFolder+issueAndPage+'-'+imgNumber+'.'+fileExt);
        }
         myProgressPanel.myProgressBar.value = iCounter *20 + 2;
        // Пересвязывает картинку экспортированным файлом
        someLink.relink(paperFile);
         // Если надо конвертировать, то конвертировать
         if (doConvert) {
             // Создать скрипт конвертации
             scriptFile = new File('C:\\Users\\Public\\'+issueAndPage+'-'+imgNumber+'.cmd');
             scriptFile.encoding = 'UTF-8';
             scriptFile.open('w');
             scriptFile.writeln("echo OFF");
             scriptFile.writeln("chcp 65001");
//             scriptFile.writeln('set srcfile='+colorFile.fsName);
//             scriptFile.writeln('set dstfile='+paperFile.fsName);
             scriptFile.writeln('convert "'+colorFile.fsName+'" -compress None "'+paperFile.fsName+'"');
             scriptFile.writeln('forfiles /P C:\\Users\\Public\\ /S /M *.cmd /D -2 /C "cmd /c /del /q @path"');
//             scriptFile.writeln('echo OPERATION IS DONE %dstfile%');
//             scriptFile.writeln('pause');
             scriptFile.close();
             // Запустить скрипт
             scriptFile.execute();
         }
/*
        // Создание файла со специальным расширением
        paperFile = new File(CONST_TIF_FOLDER+issueFolder+issueAndPage+'-'+imgNumber+'.tiftmp');
        colorFile.copy(paperFile);
*/
        
        // Перегоняет файл в TIF
//        paperFile.execute();
        // В зависимости от someLink.linkType можно задать разные перекодировки изображений
        
        // Цикл с задержкой для преобразования JPG в TIF. (Фото 5МБ примерно на 15 секунд)
        var secondsToSleep = Math.floor(colorFile.length/500/17);
        for (var i = 3; i < 20; i++) {
            $.sleep(secondsToSleep);
            myProgressPanel.myProgressBar.value = iCounter *20 + i;
        }
                
        stringLog += "\n" + someLink.name + ' сохранен.';
    }
 
}   
myProgressPanel.myProgressBar.value = maxProgressBarValue;
alert('Экспорт фотографий на сервер в формате TIFF завершен.'+"\n"+stringLog);
//alert(stringLog);