# Image Uploader

# Дополнительная информация

## Параметры командной строки

Формат запуска программы из командной строки выглядит следующим образом:

`"Image Uploader.exe" [параметры] файл1 файл2 ... папка1 папка2 ..`

Поддерживаются следующие параметры:

- `/func=addimages` — Add Images dialog
- `/func=addfiles` — Add Files dialog
- `/func=fullscreenshot` — capture the entire screen.
- `/func=windowscreenshot` — capture the active window.
- `/func=windowhandlescreenshot` — capture choosen window control (HWND)
- `/func=freeformscreenshot` — freeform screen capture
- `/func=screenshotdlg` — screenshot dialog
- `/func=downloadimages` — Image Downloader dialog
- `/func=addfolder` — Add folder dialog
- `/func=paste` — paste from clipboard
- `/func=settings` — settings dialog
- `/func=reuploadimages` — re-upload images dialog
- `/func=shortenurl` — URL shortening dialog
- `/func=mediainfo` — MediaInfo dialog
- `/quickshot` — снимок прямоугольной области
- `/quick` и `/noquick` — включение и выключение режима быстрого начала загрузки (пропуск страниц мастера)
- `/mediainfo` — показ технической информации для первого видео файла в командной строке
- `/imageeditor` — open file in the image editor (version >= 1.3.1.4276)
- `/uninstall` — удаление всех записей программы в системном реестре

## Добавление и редактирование серверов

На текущий момент в программе отсутствуют встроенные возможности по модифицированию списка серверов. Вся информация о серверах, доступных в программе, содержится в файлe `servers.xml`, находящемся в подкаталоге `Data` каталога, в который установлена программа, либо в системной папке `%appdata%\Image Uploader`, относящейся к текущему пользователю. Программа использует этот файл в режиме "только для чтения".

Файл составлен в соответствии со стандартом XML и должен быть сохранен в кодировке utf-8.

Утилита автоматического генерирования servers.xml

Скачать IU Helper
Подходит для хостингов с обычной загрузочной формой (работает только в самых простых случаях, без JavaScript, Flash, сессий и т.д. ) Вводите в ней адрес сайта, авторизовываетесь на сайте (если надо), загружаете картинку, затем копируете со страницы адрес картинки и адрес миниатюры (если надо) в текстовые поля, которые находятся ниже, и нажимаете "Анализ". Сгенерированный xml код, обрамленный тегами `<Servers> ... </Servers>`, сохраните в файле `имя_вашего_сервера.xml` в каталоге `Data\Servers` (находящемся в каталоге, в которой установлена программа) либо в системном каталоге `с:\ProgramData\Image Uploader\Servers` (если программа установлена с помощью инсталлятора).

servers.xml должен иметь следующую структуру:

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <Servers>
      <Server>
          ...
      </Server>
      <Server>
          ...
      </Server>
      ...
    </Servers>

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

Каждый вложенный узел `<Server>` имеет следующий вид:

    <Server Name="название_сервера" [атрибуты] >
      <Actions>
        <Action [атрибуты] />
        <Action [атрибуты] />
        ...
      </Actions>
      <Result ImageUrlTemplate="..." ThumbUrlTemplate="..." DownloadUrlTemplate="..."/>
    </Server>

Узел `<Server>` может иметь следующие необязательные атрибуты:

- `Authorize` — указывает, поддерживает ли сервер учетные записи.
  Значения: 0 (по умолчанию) — без авторизации, 1 — сервер поддерживает авторизацию, 2 — авторизация обязательна.
- `FileHost` — указывает на то, что сервер является хостингом для любых типов файлов (не только изображений).
  Значения: 0 (по умолчанию) — хостинг картинок (эквивалентен `Type="image"`), 1 — файловый хостинг (эквивалентен `Type="file"`) .
- `Type` — (ver >= 1.2.8 ) тип сервера. Если задан, то атрибут `FileHost` игнорируется.
  Значения: image (по умолчанию) — хостинг картинок, file — файловый хостинг (при этом `FileHost="1"` тоже обязательно нужно указывать), urlshortening — сервис сокращения ссылок (для них вместо xml-узла `<Server>` следует использовать `<Server2>`).
- `NeedPassword` — (ver >= 1.2.9 build 4186) нужен ли пароль для авторизации. Необходимо для серверов с авторизацией через OAuth 2.0.
  Значения: 1 (по умолчанию) — нужен, 0 - не нужен (поле ввода пароля будет не активно)
- `Debug` — параметр, предназначенный для тестирования и отладки загрузки на данный сервер. При значении 1 любая загрузка на данный сервер в программе будет сопровождаться отображением информации об отправляемых запросах и принимаемых данных.
- `MaxFileSize` — максимальный размер загружаемого файла, поддерживаемого сервером. Значение указывается в байтах. Значение по умолчанию — 0, что означает, что файл может быть какого угодно размера.
- `MinVersion` — (ver >= 1.3.1 ) Минимальная версия программы, поддерживаемая данным сервером. Следует использовать, если вы используете возможности, отсутствующие в старых версиях (например, функция `include()`). Атрибут должен иметь формат `x.x.x` или `x.x.x.xxxx`. При этом вместо узла `<Server>` следует использовать `<Server3>`.
- `Plugin` — содержит название файла плагина (без расширения .nut), отвечающего за загрузку на этот сервер. Скрипт должен быть расположен в каталоге Data\Scripts, и иметь расширение `.nut`. Если данный атрибут не пустой, весь узел <Actions> игнорируется, и всё взаимодействие с серверами перекладывается на скрипт. Однако, узел Actions всё равно может быть задан, для обратной совместимости с версиями программы < 1.2.5.
  Подробнее о создании плагинов...
- `SupportsFolders` — поддержка альбомов скриптом загрузки. Используется вместе с атрибутом Plugin.
- `RegistrationUrl` — адрес, по которому можно зарегистрироваться на данном сервере.

Узел `<Actions>` (без атрибутов) содержит вложенные узлы Action, каждый из которых обозначает одно действие - запрос к серверу. Запросы выполняются в том порядке, в котором они указаны в файле, т.е. сверху вниз.

    <Action Type="get" Url="http://example.com/" RegExp='id(\d+)' AssignVars="ИмяПеременной:0"
        [дополнительные атрибуты]/>

Каждый узел `<Action>` может иметь следующие атрибуты:

- `Url` — обязательный атрибут. Должен содержать HTTP, HTTPS или FTP адрес. Может содержать переменные.
- `Type` — тип запроса к серверу.
  Может принимать следующие значения:
  - get — метод GET протокола HTTP
  - post — метод POST протокола HTTP
  - login — то же, что и post, но предназначено только для авторизации.
  - upload — POST-запрос в формате multipart/form-data. Именно этот тип запроса используется в большинстве случаев для загрузки файлов.
  - put — загрузка файла с помощью HTTP PUT запроса или загрузка на FTP. Поддерживается лишь некоторыми серверами.
- `PostParams` — список параметров, передаваемых серверу по протоколу POST (Type=post или Type=upload), разделенных точкой с запятой.
  Список имеет следующий вид: `НазваниеПараметра1=Значение1;НазваниеПараметра2=Значение2;...`
  Значения могут содержать названия переменных, которые будут автоматически подставлены (раскрыты) перед выполнением запроса. Также есть особое значение — %filename%, вместо которого в запрос подставляется содержимое загружаемого файла (не надо путать с _FILENAME ).
- `RegExp` — регулярное выражение в формате PCRE. Служит для извлечения необходимой информации (ссылок, идентификаторов) из текста ответа, полученного от сервера (чаще всего HTML страницы). Если сопоставление регулярному выражению не удалось, программа генерирует предупреждение в лог ошибок и повторяет запрос.
- `AssignVars` — в данном атрибуте перечисляются имена новых переменных, и сопоставленные им номера подмасок (subpatterns) регулярного выражения. Параметр AssignVars имеет формат `НазваниеПеременной:НомерПодмаски;...`. Подмаска в регулярном выражении это то, что заключено в круглые скобки. Нумерация подмасок начинается с нуля. Имя переменной может содержать символы A-z, 0-9 и символ подчеркивания. Подробнее о переменных в servers.xml
- `OnlyOnce` — значение 1 означает, что данный запрос будет выполняться лишь 1 раз за всю сессию загрузки. Чаще всего этим запросом является авторизация на сервере. Значение 0 - данный запрос выполняется при загрузке КАЖДОГО файла.
- `Referer` — (опциональный параметр) адрес страницы источника запроса. Используется, если сервер ограничивает запросы с чужих сайтов. По умолчанию программа устанавливает Referer такой же, как и адрес запрашиваемой страницы.
- `Description` — опциональный параметр, содержащий описание текущего действия. Отображается в окне программы.

Типичный вид xml-узла Result:

    <Result ImageUrlTemplate="$(Image)" ThumbUrlTemplate="$(Thumb)" DownloadUrlTemplate="$(View)"/>

Атрибуты узла Result:

- `ImageUrlTemplate` — строка-шаблон для генерации ПРЯМОЙ ссылки на картинку или файл.
- `ThumbUrlTemplate` — строка-шаблон для генерации ПРЯМОЙ ссылки на файл миниатюры. Если не задан, программа будет сама генерировать миниатюры, даже если включена опция "Использовать серверные миниатюры". Генерирование миниатюры будет невозможно, если параметр ImageUrlTemplate не задан или принимает пустое значение.
- `DownloadUrlTemplate` — строка-шаблон для генерации ссылки на страницу просмотра, скачивания и т.п.

Каждый из этих атрибутов может содержать переменные.

Один из атрибутов — ImageUrlTemplate или DownloadUrlTemplate — должен быть обязательно задан. Программа использует тот или иной атрибут в зависимости от настроек, и в зависимости от того, какой из атрибутов задан, а какой нет. По-умолчанию предпочтение отдается прямой ссылке. В случае использования загрузочного скрипта (атрибут Plugin узла Server), все атрибуты всё равно должны иметь непустые значения.

### Переменные в строках и атрибутах

Все переменные, доступные для использования в атрибутах узлов Action и Result, задаются в параметре AssignVars, или же встроены в саму программу.

Название переменной может содержать алфавитно-цифровые символы (A-z, 0-9) и символ подчеркивания. Имена переменных чувствительны к регистру. Если название переменной начинается с символа подчеркивания, это означает, что данная переменная не будет удалена после загрузки файла, и она останется в памяти на всю сессию загрузки. Однако это не означает, что её значение не может быть перезаписано.

Список встроенных переменных:

- `_FILENAME` — имя загружаемого файла (без пути к файлу).
- `_FILENAMEWITHOUTEXT` — имя загружаемого файла без расширения.
- `_FILEEXT` — расширение файла.
- `_THUMBWIDTH` — ширина миниатюры.
- `_RAND16BITS` — случайное число от 0 до 65535. Генерируется только один раз при загрузке каждого файла.
- `_LOGIN` — имя пользователя (задана, если пользователь включил авторизацию в настройках)
- `_PASSWORD` — пароль пользователя.
- `_ORIGINALURL` — ссылка, которую надо сократить (только для серверов сокращения ссылок).

Для подстановки значений переменных в строковые параметры используются конструкции вида `$(ИмяПеременной)`. Количество подставляемых переменных не ограничивается. Если переменная не существует, вместо неё будет подставлена пустая строка.

Пример:

    <Server Name="slil.ru" FileHost="1">
            <Actions>
                 <Action Type="upload" Url="http://zalil.ru/upload/" PostParams="file=%filename%;submit=Send"
    		RegExp='http://slil.ru/(\d*)' AssignVars="File:0"/>
            </Actions>
            <Result DownloadUrlTemplate="http://slil.ru/$(File)"/>
    </Server>

В строке `AssignVars="File:0"` задается переменная с именем File и ей присваивается некоторое числовое значение, полученное из первой подмаски регулярного выражения (например, `File=12345`). Затем созданная переменная используется в параметре `DownloadUrlTemplate="http://slil.ru/$(File)"`, который в результате подстановки принимает значение `http://slil.ru/12345`. Полученную ссылку пользователь видит в окне программы.

Преобразование переменных с помощью фильтров (version >= 1.2.9)

Переменные можно преобразовывать при выводе. Пример: `$(Переменная|НазваниеФильтра)`

Список фильтров:

`urlencode` - процентное кодирование. Пример `Url="http://example.com?filename=$(_FILENAME|urlencode)"`

## Создание плагинов

Для расширенной поддержки серверов в программе используются скрипты на языке Squirrel 2.

Scripting API

Документация языка Squirrel
Документация стандартной библиотеки языка Squirrel

Они должны быть сохранены в кодировке utf-8 в файлах с расширением `.nut`.