Сообщения в Caesium + Android

Caesium + Android

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

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

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

ЗЫЖ Редатор у него nano.
Andrew Lobanov to vit01 (2016-03-21 09:24:07) [ссылка]

Re: Caesium + Android

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

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

Уже протестировал и убедился в этом.
AL> Можешь потыкать у себя поплотнее функции save_out() и resave_out() на предмет косячного поведения?
Могу исправить ошибки и подготовить пулл-реквест, но ты пока что ещё предыдущий не принял к себе =)
А там и кода немного.
vit01 to Andrew Lobanov (2016-03-21 11:13:04) [ссылка]

Re: Caesium + Android

Ответ на сообщение
> Проблема shurshun'а заключается в том, что nano по-умолчанию добавляет пустую строку в конец файла. А vim - не всегда. Следовательно, питон не считает такой файл пустым и пытается распарсить.
Я правильно понимаю, что там просто вместо одной строки получается две? Тогда это легко фиксится.
> Могу исправить ошибки и подготовить пулл-реквест, но ты пока что ещё предыдущий не принял к себе =)
> А там и кода немного.
Смержил, кстати. Спасибо за работу.
Andrew Lobanov to vit01 (2016-03-21 11:16:04) [ссылка]

Re: Caesium + Android

Ответ на сообщение
> Обнаруживаю, кстати, другую ошибку у себя: невозможно открыть диалог исходящих сообщений (клиент падает).
Это связано с кривыми сообщениями в out/. Проверь битые сообщения там и удали их (для красоты можешь заодно .outcount пофиксить).
Andrew Lobanov to vit01 (2016-03-21 11:17:25) [ссылка]

Re: Caesium + Android

Ответ на сообщение
AL> Я правильно понимаю, что там просто вместо одной строки получается две? Тогда это легко фиксится.
Там вместо пустоты (0 символов) пишется в файл "\n" (т.е. 1), вот и всё. К андроиду это отношения не имеет.
vit01 to Andrew Lobanov (2016-03-21 11:26:56) [ссылка]

Re: Caesium + Android

Ответ на сообщение
vit01> Там вместо пустоты (0 символов) пишется в файл "\n" (т.е. 1), вот и всё.
Самое простое и действенное решение - поменять .read().блабла в этих функциях на .read().strip().блабла
Оно ещё убережёт от пустоты в конце и в начале файла.
vit01 to vit01 (2016-03-21 11:34:51) [ссылка]

Re: Caesium + Android

Ответ на сообщение
> Там вместо пустоты (0 символов) пишется в файл "\n" (т.е. 1), вот и всё. К андроиду это отношения не имеет.
Пустота с точки зрения питона (string.split("\n")) это список с одним элементом. В данном случае получается два элемента. Значит просто правим условие и пушаем.

# В перспективе хочется, конечно, сделать, чтобы функция различала заголовки и отсеивала пустые сообщения с нетронутым заголовком. А ещё лучше, ловить ответ редактора, но с этим пока всё глухо в моих изысканиях. Если кто-нибудь знает как это делается, просьба отписаться.
Andrew Lobanov to vit01 (2016-03-21 11:39:11) [ссылка]

Re: Caesium + Android

Ответ на сообщение
> Самое простое и действенное решение - поменять .read().блабла в этих функциях на .read().strip().блабла
> Оно ещё убережёт от пустоты в конце и в начале файла.
Пушнул. Спасибо за помощь.
Andrew Lobanov to vit01 (2016-03-21 11:46:30) [ссылка]

Re: Caesium

Ответ на сообщение
AL> А ещё лучше, ловить ответ редактора
Не лучше. При сохранении пустого файла редактор всё равно завершается успешно (код 0). Как нано, так и вим.
AL> Это связано с кривыми сообщениями в out/. Проверь битые сообщения там и удали их (для красоты можешь заодно .outcount пофиксить).
Удаляю все файлы из out, включая упомянутый .outcount. Создаю новые. Написал 2 сообщения, туда немного текста, сохранил.
Пытаюсь зайти в диалог неотправленных - валится. Баг воспроизводится как на телефоне, так и на компьютере.
vit01 to Andrew Lobanov (2016-03-21 12:04:01) [ссылка]

Re: Caesium

Ответ на сообщение
> Не лучше. При сохранении пустого файла редактор всё равно завершается успешно (код 0). Как нано, так и вим.
Можно совмещать, на самом деле.
> Удаляю все файлы из out, включая упомянутый .outcount. Создаю новые. Написал 2 сообщения, туда немного текста, сохранил.
> Пытаюсь зайти в диалог неотправленных - валится. Баг воспроизводится как на телефоне, так и на компьютере.
Скинь ошибку чтоли. У себя я спокойно читаю исходящие с последней версией цезия (да и до этого проблем не было).
Andrew Lobanov to vit01 (2016-03-21 12:06:21) [ссылка]

Re: Caesium

Ответ на сообщение
vit01> Удаляю все файлы из out, включая упомянутый .outcount. Создаю новые. Написал 2 сообщения, туда немного текста, сохранил.
vit01> Пытаюсь зайти в диалог неотправленных - валится. Баг воспроизводится как на телефоне, так и на компьютере.
Вообще этот механизм работы исходящих в цезии кажется каким-то костыльным. У самого в cutiefeed, к примеру, даже счётчик никакой не используется. Клиент просто берёт нужные файлы из каталога и с ними работает.
vit01 to vit01 (2016-03-21 12:08:31) [ссылка]

Re: Caesium

Ответ на сообщение
AL> Скинь ошибку чтоли.
Traceback (most recent call last):
File "./caesium.py", line 1194, in 
  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
vit01 to Andrew Lobanov (2016-03-21 12:21:06) [ссылка]

Re: Caesium

Ответ на сообщение
> ====
> Traceback (most recent call last):
> File "./caesium.py", line 1194, in
> 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
> ====
Ошибка исправлена.
Andrew Lobanov to vit01 (2016-03-21 12:36:48) [ссылка]

Re: Caesium

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

// Когда я забью на эту костыльную базу и сделаю поддержку sqlite, счётчик я уберу, конечно. Но пока пусть будет. Чтение с помощью mc пока никто не отменял =)
Andrew Lobanov to vit01 (2016-03-21 12:39:45) [ссылка]

Re: Caesium

Ответ на сообщение
AL> Проверить счётчик или пролистать всю директорию: что быстрее? А если у меня исходязих несколько сотен? А тысяч?
Помню, у меня в out на своём клиенте скапливалось по 500 файлов. И ничего, тормозов не было. Вообще, подсчёт там выполняется всего 1 раз - при запуске клиента. А дальше создание новых идёт инкрементом.
vit01 to Andrew Lobanov (2016-03-21 23:45:40) [ссылка]

Re: Caesium

Ответ на сообщение
vit01> Помню, у меня в out на своём клиенте скапливалось по 500 файлов. И ничего, тормозов не было. Вообще, подсчёт там выполняется всего 1 раз - при запуске клиента. А дальше создание новых идёт инкрементом.
Ну значит надо попробовать.
Andrew Lobanov to vit01 (2016-03-22 02:13:01) [ссылка]

Re: Caesium

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

Я уверен, что на эти грабли будут наступать многие. :)
gl00my to Andrew Lobanov (2016-03-22 19:50:05) [ссылка]

Re: Caesium

Ответ на сообщение
gl00my> Не могу никак победить цезий с его реакцией на q ;)
Надо читать README.
gl00my> Я нажимаю q - попадаю в vim и у меня нет никакой возможности отменить написание
Чтобы отменить написанное, надо стереть весь текст. А чтобы не наступать на грабли, надо бы обновить клиент и воспользоваться патчем специально для вимеров:
git pull
patch caesium.py < keys_android.patch
// андроид здесь при том, что изначально патч создавался для пользователей этой ОС, но он подойдёт всем
vit01 to gl00my (2016-03-23 01:59:17) [ссылка]

Re: Caesium

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

Перейти к последнему сообщению в эхе можно с помощью клавиши End. Если редактор уже запущен, а писать уже передумал, то можно удалить все строки и сохранить пустой файл. В таком случае сообщение не попадёт в out. Некрасиво, конечно, но пока я не понял как это лучше сделать.
Andrew Lobanov to gl00my (2016-03-23 02:14:53) [ссылка]

Re: Caesium

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

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

про остальное, спасибо, попробую.
gl00my to vit01 (2016-03-23 03:56:12) [ссылка]

Re: Caesium

Ответ на сообщение
пока вижу такие варианты:
1) по дате изменения файла. если дата не изменилась, то в виме не делали w
2) по хешу
3) попробовать поиграться с vim - или чем то подобным. но это уже будет вимспецифичным. лучше кмк 1.
gl00my to Andrew Lobanov (2016-03-23 04:05:06) [ссылка]

Re: Caesium

Ответ на сообщение
gl00my> но какая разница сотру ли я текст или нет если я не делаю w ? я выхожу из вима :q !
Так ты сотри текст и выйди через :wq
В цезии стоит проверка именно на пустой файл.
vit01 to gl00my (2016-03-23 04:14:39) [ссылка]

Re: Caesium

Ответ на сообщение
> 2) по хешу
Кстати, хороший вариант. Надо попробовать.
Andrew Lobanov to gl00my (2016-03-23 04:27:05) [ссылка]

Re: Caesium

Ответ на сообщение
> я очень привык к мутту
Кстати, сейчас можно легко и непринуждённо перелопатить управление, поредактировав файл keys.py. Потому как я всё равно люблю GoldEd и не хочу отказываться от схожего управления.
Andrew Lobanov to gl00my (2016-03-23 04:27:05) [ссылка]

Re: Caesium

Ответ на сообщение
про управление -- можно привыкнуть. это не проблема. но вот детектирование ситуации при которой из редактора вышли без сохранения -- кмк важная фича.
gl00my to Andrew Lobanov (2016-03-23 04:54:27) [ссылка]

Re: Caesium

Ответ на сообщение
> Андрей! Все таки надо что то делать с цезием.
Я что-то сделал с цезием. Теперь он проверяет менялось ли сообщение при редактировании.
> Я уверен, что на эти грабли будут наступать многие. :)
Так и есть. Точнее, было.
Andrew Lobanov to gl00my (2016-03-23 05:04:26) [ссылка]

Re: Caesium

Ответ на сообщение
о! супер! вечером попробую с ноута.
а сейчас пишу с андроид клиента. отличная штука. :)
gl00my to Andrew Lobanov (2016-03-23 05:09:57) [ссылка]

Re: Caesium

Ответ на сообщение
> а сейчас пишу с андроид клиента. отличная штука. :)
На него тут жаловались и я было подумал, что придётся писать свой, когда подарят смарт =)
Andrew Lobanov to gl00my (2016-03-23 05:16:10) [ссылка]

Re: Caesium

Ответ на сообщение
>> а сейчас пишу с андроид клиента. отличная штука. :)
AL> На него тут жаловались и я было подумал, что придётся писать свой, когда подарят смарт =)
Идеальный иетерфейс.
Конечно не хватало по началу возможности писать
в привычной программе типа quick edit pro, но,
дело привычки, вполне и в нано освоился
shurshun to Andrew Lobanov (2016-03-23 05:35:01) [ссылка]

Re: Caesium

Ответ на сообщение
>>> а сейчас пишу с андроид клиента. отличная штука. :)
AL>> На него тут жаловались и я было подумал, что придётся писать свой, когда подарят смарт =)
И правильно, что жаловались. Цезий превосходит нативный клиент по всем параметрам, исключая простоту установки.
shurshun> Конечно не хватало по началу возможности писать в привычной программе типа quick edit pro, но дело привычки, вполне и в нано освоился.
Хмм, видимо, идёт речь о разных вещах. В Java-клиенте никакого nano не было :)
vit01 to shurshun (2016-03-23 06:00:24) [ссылка]