Обрезанная qt пока не получается sad Попробую еще на 4.6, может там дефайны эти получше срабатывают.

А насчет аддона - может на страничке с инфо об игре просто указывать краткую инструкцию, какие файлы можно скачать дополнительно и как их поставить? Потому что устанавливать из ланчера сторонние пакеты будет проблематично - формат и структура архива у них неизвестная, а может и вообще не архивом идти ...

Можно конечно и как-то так сделать:

<addon id="SampleAddon">
  <zip url="http://some.server.ru/super-new-graphics.zip">
    <file source="/1.png" target="/img/1.png" />
    <file source="/2.png" target="/img/2.png" />
  </zip>
  <file url="http://some.server.ru/super-new-track01.mp3" target="/sound/super-new-track01.mp3" />
</addon>

Можно, убираю 0

О! при первом запуске! Идейка кое-какая возникла ...

Может прикрутим небольшой хелп в QTextBrowserе ? И при первом запуске будем его показывать.

Перепилил чтение версии из main.lua, теперь читает только строки, начинающиеся на -- до первого не комментария, и в них ищет теги, причем в конце тега символ $ не обязателен, может стоять просто конец строки. Теперь корректно ? smile

Сделал функцию сравнения строк с версиями.

А насчет скана системных путей действительно надо подумать ... т.к. люди уже поставили туда игры, и они удивятся, что их не видно. Каково ваше мнение ?

P.S. хотя определять этот системный путь опять почти неразрешимая задача ...

Peter wrote:

P.S>
    QRegExp regexVersion("-- \\$Version:(.*)\\$");

А не надо  "^" в начало regexpa???? А то так словится строка: a = 5 -- $Version:
P.P.S. Для instead второй $ необязателен -- но в принципе можно всегда его ставить.

Там полное совпадение со всей строкой, если я не ошибаюсь, в функции exactMatch, поэтому и не писал ^ и $ сейчас доку покурю ...

bool QRegExp::exactMatch ( const QString & str ) const

Returns true if str is matched exactly by this regular expression; otherwise returns false. You can determine how much of the string was matched by calling matchedLength().

For a given regexp string R, exactMatch("R") is the equivalent of indexIn("^R$") since exactMatch() effectively encloses the regexp in the start of string and end of string anchors, except that it sets matchedLength() differently.

For example, if the regular expression is blue, then exactMatch() returns true only for input blue. For inputs bluebell, blutak and lightblue, exactMatch() returns false and matchedLength() will return 4, 3 and 0 respectively.

Может еще учесть что может быть и значение >100 и больше 3х компонент ? Или не стоит ?

Ilja wrote:

Пока перевод qt добавил в корень.
В решение не углублялся, найденный солюшен не сработал.
Если найдете как извлечь путь к нему -- сделайте по науке... wink
Подправил сравнение версий программ -- с "!=" на "<".

Если в системе нет qt, никакие QLibraryInfo::location(QLibraryInfo::TranslationsPath) не помогут smile Поэтому попробовал сделать по аналогии с кодом, используемым в креаторе - сначала пытается найти правильным путем в системе, если нету - берет со своей папки.

Эмм... получается что "1.11.0" < "1.2.0" ... надо бы правильную функцию сделать, которая покомпонентно сравнивает.

To Oreolek:
Ну вот сделал поиск версии и имени игры более корректными, теперь $Version и $Name ищутся до тех пор пока не найдутся, или не кончится файл. Ну и небольшой readme.txt чтобы возникало меньше проблем при сборке.

To Peter:
Кнопка cancel берется из системы, точнее из файлов трансляции qt. Вроде бы нужно кроме нашего qm подгружать системный qm. Вечером посмотрю как это сделано в креаторе.

По расположению файла - наверное правда лучше в свн, ато начитался я вчера нехороших слухов что очень популярные файлы на гуглокоде потом не удаляются и не заменяются wink

Насчет кнопки "применить" ... если ее добавить, то люди будут считать что до ее нажатия изменения не применятся ... вобщем тут надо подумать.

Про хинтбоксы полностью согласен.

Насчет кэширования списка - спорный вопрос. Если человек собирается качать игру, то 3-4кб на обновление списка ему не помешают, и вряд ли его обрадует устаревшая версия игры взятая из кэша smile Имхо лучше пустой список чем неправильный.

Код поиска версии в MainWindow::getLocalGameInfo, версию берет из main.lua, в первой строке ищет имя ($Name), во второй версию ($Version). Давно думал что когда-то придется сделать этот код более корректным ...

Приложи пожалуйста лог файл, который создается при запуске с параметром

instead-launcher -log logfile.txt

И если можно верхние строчки 3 от main.lua в тех файлах которые неправильно определились.

P.S. в системной папке игры не сканируются, только в пользовательской.

Ну вот что-то похожее на работающую версию получилось ...

Под лин и вин правильно определило версию 1.0.5, решил  попробовать на 0.7.4, оно запустилось (т.к. не понимает опций, но я об этом не знал), и через 3 секунды показало что есть обновление до 1.0.6 tongue

У кого есть желание и возможность потестируйте пожалуйста на других версиях, можно и генератор main.lua подпилить под поддержку старых версий, как писал выше Peter. А я на сегодня спать.

P.S. Peter, версия про игру version рулит tongue

P.P.S. Насколько понимаю минимальная версия которая понимате параметры -game -gamespath это 0.8.9 ? После внесения предложенного Peter условия она корректно определяется tongue

А я думаю че за глюк что сообщение не редактируется smile

Вобщем про игру version тоже хорошая идея. И хорошо расширяемая если нам понадобится что-то кроме версии. Но все таки сохранять лучше в файл, а не на stdout. Тогда вариант будет еще и кроссплатформенным.

P.S. оно походу получится еще и совместимым со всеми старыми instead ? smile

Сейчас попробую реализовать вызов.

О! Еще вариант в голову пришел - в linux исполяемый файл называть не sdl-instead, а sdl-instead-1.0.6, и делать на него symlink с именем sdl-instead. Чтением линка можно будет однозначно узнать версию (если не умудрились переименовать tongue).

Oreolek, новые игры добавляются в http://instead-launcher.googlecode.com/ … e_list.xml, формат очень простой.

P.S. достала уже запятая после ссылок smile все время забываю что она внутрь urlа попадет

Не выдержал и все таки реализовал один из вариантов определения версии, и выношу его на ваш суд.

В исходниках instead в main.cpp я добавил строчку:

char *version = "<[VERSION 1.0.5]>";

В ревизии 138 прикрутил поиск этой версии в бинарнике. Проверил - все отлично определяется на обеих платформах, так же корректно отработало на старых бинарниках (вернуло "0").

Если будем использовать такой вариант, то желательно все таки как-то защитить строчку version, от злого компилятора, удаляющего все лишнее. Хотя во время моих экспериментов ни в lin ни в win компилятор эту строку не удалил.

Статик сборка r138 http://instead-launcher.googlecode.com/ … r-r138.zip
P.S. Добавил в вики маленький мануал по ее изготовлению. http://instead.pinebrush.com/wiki/ru/do … ка_под_win

Ну с /usr/share и /usr/local/share проблем особых нет, т.к. тогда бинарник расположен в /usr/bin и соответственно /usr/local/bin (если конечно юзер не постарался), а вот /usr/share/games действительно так просто не найдешь ... А рыть по всем префиксам тоже нельзя, мало ли что там завалялось у пользователя.

Есть еще такой вариант - с использованием pkg-config.
Пишем в /usr/lib/pkgconfig/instead.pc

prefix=/usr
exec_prefix=${prefix}/bin
datarootdir=${prefix}/share
datadir=${datarootdir}

Name: INSTEAD
Description: INSTEAD Interpreter
Version: 1.0.6
Requires: lua, sdl

1) Запрашиваем pkg-config --variable=exec_prefix instead
2) Если исполняемый файл в настройках лежит в том же префиксе - то берем версию через
pkg-config --modversion instead
3) Если pkg-config ничего не выдал, или если префикс другой, то смотрим в stead.lua рядом с исполняемым файлом (локальная установка)
4) Под win смотрим также в stead.lua

Здесь мне не нравится то, что обычно там регистрируются библиотеки, а не софт.

Ну и остается вариант либо с байтами в конец файла, либо со строковой константой внутри, типа [[VERSION 1.0.2]].

Odyssey wrote:

По поводу версии instead:
1) Если допустить, что определение версии может быть платформозависимым, можно под Linux брать версию из stdout'а, а под Win - из какого-нибудь файла в папке instead.

Есть еще такой вариант
1) Для win смотрим version.txt рядом с исполняемым файлом
2) Для lin проверяем два места - рядом с исполняемым файлом (так мы определяем версию локальной установки) и ../share/instead/version.txt - так мы определяем версию системной установки.
3) Если файла нет то как и предлагал Oddysey называем это "1.0.5 или ниже"

Как вам такой вариант ?

P.S. А может правда определять по stead.lua, ища его тем же способом ?

Просто статика, с upx сейчас попробовал - 4.2мб

http://instead-launcher.googlecode.com/ … r-r131.zip

Ну вот собрал, не пугайтесь ...

P.S. Архив не влез, хороший повод попробовать уменьшить размер экзешки smile

P.P.S. Получается 12.3мб экзешка, 5.1мб архив с ней

На старой версии не только stdout будет пуст, но и сама гамка запустится sad

Чето mingw совсем уж медлительное ... раньше такого за ним не замечал, шустрее кутешка собиралась. Ех, пойду поиграюсь пока, часа через 3-4 поди докомпилится, и будет у нас статик сборка launcher чтобы на людях тестить tongue

Ну вот, допилил автопроверку обновлений на старте smile Как понимаю остались вот эти пункты:

1) Все-таки узнать версию instead
2) Собрать статик версию под win

Или есть еще предложения по допиливанию ?

Имеется в виду в xml писать не ссылку на страничку с файлами а на главную smile

Ясно, кстати может в окне обновлении лучше показывать не ссылки сразу на закачку, а на сайт проекта?

Ilja wrote:

Все же, ребят, я бы вынес информацию по приложениям в отдельный файл. Это сделать просто...  И зачем каждый раз грузить все, если без особых проблем можно поделить на части и грузить только то, что нужно? Тем более не нужно заморачивать людей, создающих самостоятельный репозитории информацией о лишней спецификации, которая к ним не относится.

Т.е. разделить на 2 файла - версия ланчера и версия instead ? Ну в принципе логично. Тогда и положить их на соответствующие сайты - один на instead второй на instead-launcher. Да, и кстати тогда уж официальный список обновлений игр разместить на instead-games (после того как допилим).

Тогда за их обновления как раз будут отвечать мэйнтейнеры соответствующих проектов - выпустил версию, выложил архив, перезалил XMLку.

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

Сорри, не обновил страничку smile Оказывается это до меня успели придумать

Да больше вариантов как бы нет, раз под виндой stdout в instead не срабатывает, а под линуксом никаких сопровождающих instead файлов не найти. Единственно еще чтобы instead оставлял в ~/.instead/instead.ver с версией, и опция -ver которая заставит его записать версию и выйти.
Как такой вариант?