[#] Caesium + Android
Andrew Lobanov(station13, 1) — vit01
2016-03-21 13:24:07


Нужна помощь.

У товарища shurshun взникла странная проблема. У меня на руках нет андроид-устройств и потому не могу установить в чём косяк.

При сохранении пустого сообщения, цезий пытается его обработать и сохранить в out, что приводит к логичному падению. Можешь потыкать у себя поплотнее функции save_out() и resave_out() на предмет косячного поведения?

ЗЫЖ Редатор у него nano.

[#] Re: Caesium + Android
vit01(mira, 1) — vit01
2016-03-21 15:34:51


vit01> Там вместо пустоты (0 символов) пишется в файл "\n" (т.е. 1), вот и всё.

Самое простое и действенное решение - поменять .read().блабла в этих функциях на .read().strip().блабла
Оно ещё убережёт от пустоты в конце и в начале файла.

[#] Re: Caesium + Android
vit01(mira, 1) — Andrew Lobanov
2016-03-21 15:13:04


AL> При сохранении пустого сообщения, цезий пытается его обработать и сохранить в out, что приводит к логичному падению.

Обнаруживаю, кстати, другую ошибку у себя: невозможно открыть диалог исходящих сообщений (клиент падает).

Проблема shurshun'а заключается в том, что nano по-умолчанию добавляет пустую строку в конец файла. А vim - не всегда. Следовательно, питон не считает такой файл пустым и пытается распарсить.

Уже протестировал и убедился в этом.

AL> Можешь потыкать у себя поплотнее функции save_out() и resave_out() на предмет косячного поведения?

Могу исправить ошибки и подготовить пулл-реквест, но ты пока что ещё предыдущий не принял к себе =)
А там и кода немного.

[#] Re: Caesium + Android
vit01(mira, 1) — Andrew Lobanov
2016-03-21 15:26:56


AL> Я правильно понимаю, что там просто вместо одной строки получается две? Тогда это легко фиксится.

Там вместо пустоты (0 символов) пишется в файл "\n" (т.е. 1), вот и всё. К андроиду это отношения не имеет.

[#] Re: Caesium + Android
Andrew Lobanov(station13, 1) — vit01
2016-03-21 15:16:04


> Проблема shurshun'а заключается в том, что nano по-умолчанию добавляет пустую строку в конец файла. А vim - не всегда. Следовательно, питон не считает такой файл пустым и пытается распарсить.

Я правильно понимаю, что там просто вместо одной строки получается две? Тогда это легко фиксится.

> Могу исправить ошибки и подготовить пулл-реквест, но ты пока что ещё предыдущий не принял к себе =)
> А там и кода немного.

Смержил, кстати. Спасибо за работу.

[#] Re: Caesium + Android
Andrew Lobanov(station13, 1) — vit01
2016-03-21 15:17:25


> Обнаруживаю, кстати, другую ошибку у себя: невозможно открыть диалог исходящих сообщений (клиент падает).

Это связано с кривыми сообщениями в out/. Проверь битые сообщения там и удали их (для красоты можешь заодно .outcount пофиксить).

[#] Re: Caesium + Android
Andrew Lobanov(station13, 1) — vit01
2016-03-21 15:39:11


> Там вместо пустоты (0 символов) пишется в файл "\n" (т.е. 1), вот и всё. К андроиду это отношения не имеет.

Пустота с точки зрения питона (string.split("\n")) это список с одним элементом. В данном случае получается два элемента. Значит просто правим условие и пушаем.

# В перспективе хочется, конечно, сделать, чтобы функция различала заголовки и отсеивала пустые сообщения с нетронутым заголовком. А ещё лучше, ловить ответ редактора, но с этим пока всё глухо в моих изысканиях. Если кто-нибудь знает как это делается, просьба отписаться.

[#] Re: Caesium + Android
Andrew Lobanov(station13, 1) — vit01
2016-03-21 15:46:30


> Самое простое и действенное решение - поменять .read().блабла в этих функциях на .read().strip().блабла
> Оно ещё убережёт от пустоты в конце и в начале файла.

Пушнул. Спасибо за помощь.

[#] Re: Caesium
vit01(mira, 1) — Andrew Lobanov
2016-03-21 16:21:06


AL> Скинь ошибку чтоли.

Traceback (most recent call last):
File "./caesium.py", line 1194, in <module>
  echo_selector()
  File "./caesium.py", line 656, in echo_selector
 go = not echo_reader("out", out_length, archive, True, True)
  File "./caesium.py", line 951, in echo_reader
 stdscr.addstr(1, 7, nodes[node]["to"][0], color)
 IndexError: list index out of range

[#] Re: Caesium
Andrew Lobanov(station13, 1) — vit01
2016-03-21 16:06:21


> Не лучше. При сохранении пустого файла редактор всё равно завершается успешно (код 0). Как нано, так и вим.

Можно совмещать, на самом деле.

> Удаляю все файлы из out, включая упомянутый .outcount. Создаю новые. Написал 2 сообщения, туда немного текста, сохранил.
> Пытаюсь зайти в диалог неотправленных - валится. Баг воспроизводится как на телефоне, так и на компьютере.

Скинь ошибку чтоли. У себя я спокойно читаю исходящие с последней версией цезия (да и до этого проблем не было).

[#] Re: Caesium
vit01(mira, 1) — Andrew Lobanov
2016-03-21 16:04:01


AL> А ещё лучше, ловить ответ редактора

Не лучше. При сохранении пустого файла редактор всё равно завершается успешно (код 0). Как нано, так и вим.

AL> Это связано с кривыми сообщениями в out/. Проверь битые сообщения там и удали их (для красоты можешь заодно .outcount пофиксить).

Удаляю все файлы из out, включая упомянутый .outcount. Создаю новые. Написал 2 сообщения, туда немного текста, сохранил.
Пытаюсь зайти в диалог неотправленных - валится. Баг воспроизводится как на телефоне, так и на компьютере.

[#] Re: Caesium
Andrew Lobanov(station13, 1) — vit01
2016-03-21 16:39:45


> Вообще этот механизм работы исходящих в цезии кажется каким-то костыльным. У самого в cutiefeed, к примеру, даже счётчик никакой не используется. Клиент просто берёт нужные файлы из каталога и с ними работает.

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

// Когда я забью на эту костыльную базу и сделаю поддержку sqlite, счётчик я уберу, конечно. Но пока пусть будет. Чтение с помощью mc пока никто не отменял =)

[#] Re: Caesium
vit01(mira, 1) — vit01
2016-03-21 16:08:31


vit01> Удаляю все файлы из out, включая упомянутый .outcount. Создаю новые. Написал 2 сообщения, туда немного текста, сохранил.
vit01> Пытаюсь зайти в диалог неотправленных - валится. Баг воспроизводится как на телефоне, так и на компьютере.

Вообще этот механизм работы исходящих в цезии кажется каким-то костыльным. У самого в cutiefeed, к примеру, даже счётчик никакой не используется. Клиент просто берёт нужные файлы из каталога и с ними работает.

[#] Re: Caesium
Andrew Lobanov(station13, 1) — vit01
2016-03-21 16:36:48


> ====
> Traceback (most recent call last):
> File "./caesium.py", line 1194, in <module>
> echo_selector()
> File "./caesium.py", line 656, in echo_selector
> go = not echo_reader("out", out_length, archive, True, True)
> File "./caesium.py", line 951, in echo_reader
> stdscr.addstr(1, 7, nodes[node]["to"][0], color)
> IndexError: list index out of range
> ====

Ошибка исправлена.

[#] Re: Caesium
Andrew Lobanov(station13, 1) — vit01
2016-03-22 06:13:01


vit01> Помню, у меня в out на своём клиенте скапливалось по 500 файлов. И ничего, тормозов не было. Вообще, подсчёт там выполняется всего 1 раз - при запуске клиента. А дальше создание новых идёт инкрементом.

Ну значит надо попробовать.

[#] Re: Caesium
vit01(mira, 1) — Andrew Lobanov
2016-03-22 03:45:40


AL> Проверить счётчик или пролистать всю директорию: что быстрее? А если у меня исходязих несколько сотен? А тысяч?

Помню, у меня в out на своём клиенте скапливалось по 500 файлов. И ничего, тормозов не было. Вообще, подсчёт там выполняется всего 1 раз - при запуске клиента. А дальше создание новых идёт инкрементом.

[#] Re: Caesium
Andrew Lobanov(station13, 1) — gl00my
2016-03-23 08:27:05


> я очень привык к мутту

Кстати, сейчас можно легко и непринуждённо перелопатить управление, поредактировав файл keys.py. Потому как я всё равно люблю GoldEd и не хочу отказываться от схожего управления.

[#] Re: Caesium
vit01(mira, 1) — gl00my
2016-03-23 05:59:17


gl00my> Не могу никак победить цезий с его реакцией на q ;)
Надо читать README.

gl00my> Я нажимаю q - попадаю в vim и у меня нет никакой возможности отменить написание

Чтобы отменить написанное, надо стереть весь текст. А чтобы не наступать на грабли, надо бы обновить клиент и воспользоваться патчем специально для вимеров:

git pull
patch caesium.py < keys_android.patch

// андроид здесь при том, что изначально патч создавался для пользователей этой ОС, но он подойдёт всем

[#] Re: Caesium
gl00my(station13, 8) — vit01
2016-03-23 07:56:12


но какая разница сотру ли я текст или нет если я не делаю w ? я выхожу из вима :q !

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

про остальное, спасибо, попробую.

[#] Re: Caesium
gl00my(station13, 8) — Andrew Lobanov
2016-03-22 23:50:05


Андрей! Все таки надо что то делать с цезием.
Я нажимаю q - попадаю в vim и у меня нет никакой возможности отменить написание
сообщения. Делая :q! я все равно неявно создаю в out эту болванку, которая потом уйдет
при нажатии на S.

Я уверен, что на эти грабли будут наступать многие. :)

[#] Re: Caesium
Andrew Lobanov(station13, 1) — gl00my
2016-03-23 08:27:05


> 2) по хешу

Кстати, хороший вариант. Надо попробовать.

[#] Re: Caesium
gl00my(station13, 8) — Andrew Lobanov
2016-03-23 08:05:06


пока вижу такие варианты:
1) по дате изменения файла. если дата не изменилась, то в виме не делали w
2) по хешу
3) попробовать поиграться с vim - или чем то подобным. но это уже будет вимспецифичным. лучше кмк 1.

[#] Re: Caesium
Andrew Lobanov(station13, 1) — gl00my
2016-03-23 06:14:53


Надо всё таки внимательней читать README =)

Перейти к последнему сообщению в эхе можно с помощью клавиши End. Если редактор уже запущен, а писать уже передумал, то можно удалить все строки и сохранить пустой файл. В таком случае сообщение не попадёт в out. Некрасиво, конечно, но пока я не понял как это лучше сделать.

[#] Re: Caesium
vit01(mira, 1) — gl00my
2016-03-23 08:14:39


gl00my> но какая разница сотру ли я текст или нет если я не делаю w ? я выхожу из вима :q !

Так ты сотри текст и выйди через :wq
В цезии стоит проверка именно на пустой файл.

[#] Re: Caesium
gl00my(station13, 8) — Andrew Lobanov
2016-03-23 09:09:57


о! супер! вечером попробую с ноута.
а сейчас пишу с андроид клиента. отличная штука. :)

[#] Re: Caesium
Andrew Lobanov(station13, 1) — gl00my
2016-03-23 09:04:26


> Андрей! Все таки надо что то делать с цезием.

Я что-то сделал с цезием. Теперь он проверяет менялось ли сообщение при редактировании.

> Я уверен, что на эти грабли будут наступать многие. :)

Так и есть. Точнее, было.

[#] Re: Caesium
vit01(mira, 1) — shurshun
2016-03-23 10:00:24


>>> а сейчас пишу с андроид клиента. отличная штука. :)
AL>> На него тут жаловались и я было подумал, что придётся писать свой, когда подарят смарт =)

И правильно, что жаловались. Цезий превосходит нативный клиент по всем параметрам, исключая простоту установки.

shurshun> Конечно не хватало по началу возможности писать в привычной программе типа quick edit pro, но дело привычки, вполне и в нано освоился.

Хмм, видимо, идёт речь о разных вещах. В Java-клиенте никакого nano не было :)

[#] Re: Caesium
shurshun(station13, 14) — Andrew Lobanov
2016-03-23 09:35:01


>> а сейчас пишу с андроид клиента. отличная штука. :)

AL> На него тут жаловались и я было подумал, что придётся писать свой, когда подарят смарт =)

Идеальный иетерфейс.
Конечно не хватало по началу возможности писать
в привычной программе типа quick edit pro, но,
дело привычки, вполне и в нано освоился

[#] Re: Caesium
Andrew Lobanov(station13, 1) — gl00my
2016-03-23 09:16:10


> а сейчас пишу с андроид клиента. отличная штука. :)

На него тут жаловались и я было подумал, что придётся писать свой, когда подарят смарт =)

[#] Re: Caesium
gl00my(station13, 8) — Andrew Lobanov
2016-03-23 08:54:27


про управление -- можно привыкнуть. это не проблема. но вот детектирование ситуации при которой из редактора вышли без сохранения -- кмк важная фича.