126 (edited by rec 2010-01-23 11:17:08)

Re: [Предложение] Загрузка/обновление игр из Интернета

Ну с /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]].

127 (edited by rec 2010-01-23 15:01:56)

Re: [Предложение] Загрузка/обновление игр из Интернета

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

В исходниках 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

Re: [Предложение] Загрузка/обновление игр из Интернета

В новые игры в эту прогу легко добавлять?

Александр Яковлев, к вашим услугам.

129 (edited by rec 2010-01-23 15:22:18)

Re: [Предложение] Загрузка/обновление игр из Интернета

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

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

Re: [Предложение] Загрузка/обновление игр из Интернета

rec wrote:

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

При том что вариант полностью работоспособный, действительно есть завязка на компилятор и на то, что бинарник потом ничем не обрабатывается, типа тех же strip/upx.

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

Может быть, это здесь уже обсуждалось?

131

Re: [Предложение] Загрузка/обновление игр из Интернета

Идея хорошая, но только до 1-го запуска этого файла нет. smile Вообще, в win версии лучше всего использовать version.txt в каталоге с instead.

С linux -- пока у нас есть -- 1)хвост файла.  2)Внутрь файла. 3) в конфиг.

Re: [Предложение] Загрузка/обновление игр из Интернета

Можно принудительно запускать instead с каким-нибудь ключиком, чтобы он обновлял конфиг и этот файл не отображая GUI. Эта идея тоже здесь уже звучала. Просто этот способ не завязан на компилятор и постобработку исполняемого файла.

Плюс, если позже мы всё таки решим сделать обновление самого instead из launcher-а, способ на основе конфига позволит нам узнать расположение всех файлов, а способ с версией в бинарнике -- нет.

133

Re: [Предложение] Загрузка/обновление игр из Интернета

Odyssey wrote:

Можно принудительно запускать instead с каким-нибудь ключиком, чтобы он обновлял конфиг и этот файл не отображая GUI.

А старые версии, как было неоднократно замечено выше, при этом просто будут запускаться... wink

134

Re: [Предложение] Загрузка/обновление игр из Интернета

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

135

Re: [Предложение] Загрузка/обновление игр из Интернета

С линкой -- вариант. Но все как-то не просто... smile
Еще из разрядов извращений -- есть опция в instead -- -encode -- кодирование квеста. Она берет на вход lua и делает из него кодированный файл... Использовать ее не по назначению... big_smile
Но это так -- шутка...

Может правда линка..

По моему 2 варианта пока осталось:
1) линка (lin) version.txt (win)
2) в хвост (lin) в хвост или version.txt (win)

136

Re: [Предложение] Загрузка/обновление игр из Интернета

Вот наша последняя надежда: wink

-- $Name: Version$
print (stead.version);
os.exit(1)

sdl-instead -nostdgames -gamespath /path/to/version -game version

Ну и в файл можно если нужно... wink

Короче, добавить игру version в launcher big_smile

Как идея. big_smile

P.S. В будущем, наверное стоит сделать апдейтер тем? Или все-таки поставлять пачку тем вместе с инстедом?

137

Re: [Предложение] Загрузка/обновление игр из Интернета

А мне с игрой version идея нравится. Это же синоним опции -version для любой версии instead. smile
Какие у кого мнения?

1) версия внутри .exe/elf
2) игра version в каталоге launcher (main.lua)

Peter:

P.S. Блин! Сорри - я удалил пост река случано smile))   Нажал не ту кнопочку. big_smile Речь шла о том, что идея 1 -- хорошая идея.

138 (edited by rec 2010-01-24 01:22:32)

Re: [Предложение] Загрузка/обновление игр из Интернета

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

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

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

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

139

Re: [Предложение] Загрузка/обновление игр из Интернета

Ну в main.lua можно что угодно написать, main.lua может прямо из launcher генериться, главное тут: os.exit() smile

Не со всеми версиями -- для очень старых нужно будет написать что то:

if type(stead) ~= 'table' then
     --- old version, very old!!!
     print (version)
end

140 (edited by rec 2010-01-24 10:59:11)

Re: [Предложение] Загрузка/обновление игр из Интернета

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

Под лин и вин правильно определило версию 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

141

Re: [Предложение] Загрузка/обновление игр из Интернета

Здорово! У меня работает тоже.

Идеи и мелкие ошибки:

Заметил кнопку cancel (а не "отмена") в диалоге прогресс бара -- это перевод или из системы берется?

Все-таки размер лаунчера не маленький -- видимо будем распространять отдельно. sad

Вопрос по расположению xml файла. Вариант прямо в files хороший. Но еще можно хранить прямо в svn. Что имеет свои плюсы (легко поддерживать) но и минусы (сложный путь).  Наверное правильно и в svn и в downloads... Официально - в downloads но менять сначала в svn...

В настройках неплохо сделать кнопку ok(применить) рядом со (сбросить), котрая задизаблена, а когда что-нибудь поменял-- енаблится. Это чисто психологически -- так как ввожу в поле ввода что-то и интуитивно ищу куда бы нажать... На обсуждение -- я сам gui не программировал практически.

Можно сделать hintboxы на полях ввода настроек.

Если не удалось запустить интерпретатор -- наверное стоит перекидывать на вкладку настроек?

Новые игры -- может стоит кешировать список с сервера? То есть при перезапусках чтобы оставлся прошлый список (если конечно не стоит автозагрузка)?

Оформить красиво о программе. С написанием авторов и сократить путь к instead: http://instead.googlecode.com + ссылка на сайт лаунчера.

P.S. Вообще -- классная штука вышла. smile

142 (edited by Oreolek 2010-01-24 14:18:40)

Re: [Предложение] Загрузка/обновление игр из Интернета

Посмотрел svn, с трудом догадался как собирать исходники.
Теперь новый вопрос - что запускать?
UPD: Нашёл. Теперь он почему-то говорит,что у меня все игры версий 0.1 и 0.2. У меня есть основания ему не доверять.
UPD2:Так, нашёл баг. Квантовый кот у меня, как и положено,стоит в /opt/instead-0.7.2/games/cat/, А ТАКЖЕ в /usr/local/share/instead/games/cat/ И /usr/local/share/stead/games/cat/. Ни одну из игр ваш лаунчер не определяет.

Александр Яковлев, к вашим услугам.

143

Re: [Предложение] Загрузка/обновление игр из Интернета

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

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

instead-launcher -log logfile.txt

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

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

144

Re: [Предложение] Загрузка/обновление игр из Интернета

Oreolek wrote:

Квантовый кот у меня, как и положено,стоит в /opt/instead-0.7.2/games/cat/, А ТАКЖЕ в /usr/local/share/instead/games/cat/ И /usr/local/share/stead/games/cat/. Ни одну из игр ваш лаунчер не определяет.

А что в настройках лаунчера стоит? Лаунчер тупо смотрит в этом каталоге.
По умолчанию он смотрит в : /home/user/.instead/games/

Сканировать и ставить сразу в НЕСКОЛЬКО каталогов -- неоправданное усложнение imho.  Тем более, что фантазию всех линуксоидов он никогда не сможет предугадать. smile

Версии 0.1 это нормально -- я все свои игры нумерую с 0.1 и дальше -- в будущее... smile

145

Re: [Предложение] Загрузка/обновление игр из Интернета

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

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

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

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

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

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

146

Re: [Предложение] Загрузка/обновление игр из Интернета

rec wrote:

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

Это по-моему не правильно. Сам инстед ищет до тех пор, пока не кончатся комментарии. То есть head: это комментарии в начале. Version и Name только в heade!!! Если я в коде напишу -- $Name: а лаунчер ее схватит -- это будет странно....

То есть сканировать нужно до первого не комментария. Причем анализируются только --.

147

Re: [Предложение] Загрузка/обновление игр из Интернета

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

148

Re: [Предложение] Загрузка/обновление игр из Интернета

Ilja wrote:

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

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

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

149

Re: [Предложение] Загрузка/обновление игр из Интернета

rec wrote:

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

По идее, должно быть так:

#define VER(maj,min,rev)   (((maj)*100+(min))*100+(rev))

И тогда уже можно сравнивать. VER(1,11,0) > VER(1,2,0)

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

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

150

Re: [Предложение] Загрузка/обновление игр из Интернета

rec wrote:

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

Да, это так, не лучше чем было. wink
А с QLibraryInfo вообще не вариант... Лучше просто возить с собой.