gentoo.ru
LeechCraft
leechcraft@conference.gentoo.ru
Пятница, 18 июня 2010< ^ >
0xd34df00d установил(а) тему: http://leechcraft.org | Баг/предложение? http://leechcraft.org/projects/leechcraft/issues | Исходники: git://github.com/0xd34df00d/leechcraft.git | LeechCraft Stable: 0.3.0; unstable: 0.3.65 | Логи: http://tinyurl.com/leechcraft-logs
Конфигурация комнаты
Участники комнаты

GMT+4
[00:23:41] slepnoga вошёл(а) в комнату
[02:16:00] slepnoga вышел(а) из комнаты: Replaced by new connection
[02:16:09] slepnoga вошёл(а) в комнату
[03:46:00] slepnoga вышел(а) из комнаты: Replaced by new connection
[03:46:10] slepnoga вошёл(а) в комнату
[07:18:38] slepnoga вышел(а) из комнаты
[07:49:05] slepnoga вошёл(а) в комнату
[08:00:59] slepnoga вышел(а) из комнаты
[15:07:08] slepnoga вошёл(а) в комнату
[16:06:36] maksbotan вошёл(а) в комнату
[16:07:05] <0xd34df00d> О, а ты уже и тут.
[16:07:10] <maksbotan> да
[16:07:14] <maksbotan> вот смотри
[16:07:23] <maksbotan> в плагине я определяю один класс
[16:07:26] <maksbotan> так?
[16:07:57] <0xd34df00d> Смотри, давай я попробую объяснить, как это будет выглядеть для нас с более личкрафтовой стороны.
[16:08:09] <0xd34df00d> Юзер открывает новую страничку.
[16:09:03] <maksbotan> и?
[16:09:05] <0xd34df00d> Соответственно, появляется новый адресбар. Для этого адресбара твой плагин тем или иным образом создает и возвращает какой-либо наследник QAbstractItemModel, который будет использоваться в дальнейшем на всем протяжении жизни этого адресбара (== этой странички).
[16:09:28] <maksbotan> и?
[16:09:34] <0xd34df00d> По мере ввода текста адресбар излучает сигнал типа textEdited(), к которому ты подсоединяешься.
[16:09:47] <0xd34df00d> В соответствующем слоте ты отменяешь все предыдущие запросы и делаешь новый к гуглу.
[16:10:10] <maksbotan> и?
[16:10:21] <0xd34df00d> Теперь, обработчик ответа на запрос к гуглу: если запрос актуален (не отменен), то ты просто очищаешь тот QAbstractItemModel, который ты мне дал для этого адресбара, от того, что там уже есть, и заполняешь результатами от гугла.
[16:10:22] <0xd34df00d> Всё.
[16:10:42] <maksbotan> ясно
[16:10:51] <maksbotan> то есть сигналов с моей стороны нет?
[16:11:29] <0xd34df00d> Верно.
[16:11:39] <0xd34df00d> Они все спрятаны в ту модель, которую ты мне возвращаешь )
[16:13:02] <maksbotan> а как быть если несколько страничек?
[16:13:24] <0xd34df00d> Ну, для каждой из них у нас отдельная модель.
[16:13:38] <maksbotan> а как плагин их различает?
[16:13:39] <0xd34df00d> Ты смотришь, от какого адресбара пришел сигнал, что там текст поменяли, и работаешь с соответствующей моделью.
[16:14:26] <maksbotan> т.е. мне нужно ещё список всех адресбаров держать?
[16:14:40] <0xd34df00d> По факту, словарь из адресбара в модель.
[16:14:51] <maksbotan> ну да
[16:15:09] <maksbotan> уже уныловато становится както
[16:15:15] <0xd34df00d> Да не, нормуль.
[16:15:19] <0xd34df00d> Другого способа-то особо и нет.
[16:15:28] <maksbotan> к сожалению
[16:15:42] <maksbotan> а чем идентифицируются адресбары?
[16:15:46] <0xd34df00d> Объектом.
[16:15:54] <0xd34df00d> Ну, подозреваю, их можно тупо между собой сравнивать.
[16:16:10] <maksbotan> т.е. ты мне даешь объект своего адресбара?
[16:16:16] <0xd34df00d> Да.
[16:16:26] <0xd34df00d> Адресбар, считай, один из параметров сигнала.
[16:16:52] <maksbotan> тогда ты и по GetModel должен мне его дать
[16:16:56] <maksbotan> чтоб я в словаре его зарегал
[16:18:11] <0xd34df00d> Хм.
[16:18:16] <0xd34df00d> Ну да.
[16:19:24] <maksbotan> а куросс все время работы личкрафтов держит в памяти объект моего плагина
[16:19:31] <0xd34df00d> Да.
[16:19:47] <maksbotan> он вызывает настоящий интерпретатор питона или у него свой?
[16:19:58] <0xd34df00d> Настоящий.
[16:20:21] <maksbotan> круто
[16:29:54] <maksbotan> по SetNewSearchStr я должен делать асинхронный поиск?
[16:30:55] <0xd34df00d> Да.
[16:31:06] <0xd34df00d> Типа, сформировать запрос, отправить его и сразу вернуться.
[16:31:15] <0xd34df00d> Пока ты не вернешься из этой функции, личкрафты будут висеть.
[16:31:49] <maksbotan> хм
[16:32:02] <maksbotan> т.е. мне надо второй поток открывать?
[16:32:10] <maksbotan> который и запишет данные в модель?
[16:32:18] <0xd34df00d> Эээ, не, смотри.
[16:32:24] <0xd34df00d> Стоп, подожди, как у тебя устроена работа с сетью?
[16:32:33] <maksbotan> что значит как?
[16:32:35] <0xd34df00d> Ты можешь асинхронно отправить данные и получить сигнал в том же потоке, когда ответ закончится?
[16:32:42] <maksbotan> врядли
[16:32:57] <0xd34df00d> В Qt именно так все и есть. Делаешь post()/get(), получаешь объект, который излучает finished(), когда ответ будет получен.
[16:33:06] <maksbotan> так
[16:33:13] <maksbotan> нужно поботать питон
[16:33:20] <maksbotan> вечером продолжим разговор
[16:33:22] <maksbotan> ок?
[16:33:24] <0xd34df00d> Окей.
[16:34:02] maksbotan вышел(а) из комнаты
[16:40:50] <mva> maksbotan:
[17:55:47] slepnoga вышел(а) из комнаты
[19:12:15] 0xd34df00d вышел(а) из комнаты
[19:47:26] 0xd34df00d вошёл(а) в комнату
[19:49:48] maksbotan вошёл(а) в комнату
[19:49:56] <maksbotan> mva:
[19:50:01] <mva> maksbotan:
[19:50:05] <maksbotan> что?
[19:50:16] <mva> я тебе на gentoo@ уже сказал
[19:50:20] <mva> что техник был тогда онлайн
[19:51:46] <maksbotan> ясно
[19:51:53] <maksbotan> 0xd34df00d: ну рассказывай
[19:53:19] <0xd34df00d> maksbotan: нуэ.
[19:53:28] <0xd34df00d> maksbotan: тебе нужно реализовать один тупой слот.
[19:53:37] <0xd34df00d> Щас, эклипс просрется, скажу какой.
[19:53:38] <maksbotan> почему тупой?
[19:54:23] <0xd34df00d> Потому что не умный )
[19:55:09] <0xd34df00d> Плюсовая сигнатура такая:
[19:55:10] <0xd34df00d>                 void hookURLCompletionNewStringRequested (LeechCraft::IHookProxy_ptr proxy,
                        QObject *model,
                        const QString& string,
                        int historyItems);
[19:55:30] <0xd34df00d> Соответственно, в пейтоне это
def hookURLCompletionNewStringRequested (proxy, model, string, historyItems).
[19:55:36] <mva> 0xd34df00d: дедфуде
[19:55:41] <0xd34df00d> proxy — некий объект, он тебе не нужен.
[19:55:42] <maksbotan> объясни что значит каждый параметр
[19:55:49] <mva> ставь креатор, блджать, и о пиши, наконец, гуи
[19:55:50] <mva> !
[19:56:11] <0xd34df00d> model — объект, у которого есть метод addItem (title, url), оба параметра — строки.
[19:56:22] <0xd34df00d> string — строка, которую ввел юзер в адресбар.
[19:56:50] <0xd34df00d> historyItems — количество элементов для этой строки, полученных тупо из хистори. Оно тебе тоже не нужно.
[19:56:56] <0xd34df00d> mva: щито? А причем там креатор?
[19:57:26] <maksbotan> креатор рулит
[19:57:29] <maksbotan> еклипс фигня
[19:57:35] <maksbotan> разве непонятно?
[19:58:45] <mva> 0xd34df00d: в нём гуеписалка встроена :)
[19:58:55] <0xd34df00d> Куэмельная штоле?
[19:58:58] <mva> т.е. дизайнер интегрирован
[19:59:06] <0xd34df00d> Так она это, то самое, начиная с Qt 4.7 только.
[19:59:16] <mva> и да, qml там тоже есть
[19:59:20] <mva> но только с 2.0+
[19:59:23] <0xd34df00d> Хм.
[19:59:26] <0xd34df00d> Qt Designer я и так юзаю.
[19:59:31] <0xd34df00d> Нахрена мне для него креатор?
[19:59:38] <mva> AiO же
[19:59:40] <mva> :)
[20:00:11] <0xd34df00d> Ох ё.
[20:00:15] <0xd34df00d> У него редактор уебанский.
[20:00:41] <maksbotan> своя конфа значит можно?
[20:00:43] <maksbotan> да, фуд?
[20:01:29] <0xd34df00d> Да.
[20:01:37] <0xd34df00d> Ты не видел, что происходит на @cjr, лол.
[20:01:52] <maksbotan> хм
[20:01:55] <maksbotan> надо глянуть
[20:02:04] <0xd34df00d> Не надо!
[20:03:07] <maksbotan> поздно
[20:03:30] <maksbotan> о_О
[20:03:33] <maksbotan> ну  вы даете
[20:18:26] <maksbotan> 0xd34df00d: а класс то мне нужен?
[20:18:35] <maksbotan> или прямо в модуле слот объявлять?
[20:18:45] <0xd34df00d> Прямо в модуле эту функцию объявлять.
[20:19:01] <0xd34df00d> И писать ее сиплюсплюсный прототип в строчку в файле ExportedSlots рядом со скриптом.
[20:19:33] <maksbotan> ясно
[20:19:48] <maksbotan> а каким методом пихать инфу в модель?
[20:20:06] <0xd34df00d> addItem же.
[20:20:09] <0xd34df00d> title — название.
[20:20:14] <0xd34df00d> url — адрес, обсна.
[20:20:18] <0xd34df00d> s/обсна/собсна/
[20:20:36] <maksbotan> ой
[20:20:39] <maksbotan> уже забыл
[20:20:43] <maksbotan> а фавиконы?
[20:21:09] <0xd34df00d> Фавиконы оно само фетчит.
[20:21:16] <maksbotan> личкрафты?
[20:21:18] <maksbotan> круто
[20:21:19] <0xd34df00d> Правда, асинхронно, и в вебките это глючит.
[20:21:58] <maksbotan> кстати
[20:22:11] <maksbotan> а функция не должна возвращаться сразу же?
[20:22:26] <maksbotan> т.е. я могу получать данные от гугля в ней же?
[20:22:33] <0xd34df00d> Должна.
[20:22:50] <0xd34df00d> Асинхронность, друг мой, залог здорового самочувствия!
[20:23:04] <maksbotan> а я имею право тред запустить в своем плагине или нет?
[20:23:27] <0xd34df00d> Конечно имеешь.
[20:23:53] <0xd34df00d> А чо, в этом вашем пейтоне нет ничо асинхронного?
[20:24:12] <maksbotan> вроде как нет
[20:24:14] <0xd34df00d> Просто тред в некотором смысле дороже асинхронного IO.
[20:24:19] <maksbotan> почему?
[20:27:56] <0xd34df00d> Ну блин.
[20:28:04] <0xd34df00d> Ну тред же запускать надо, у него свои структуры и все такое.
[20:28:19] <0xd34df00d> А вся асинхронность диспатчится осью, в некотором смысле.
[20:43:54] slepnoga вошёл(а) в комнату
[21:29:48] 0xd34df00d вышел(а) из комнаты
[21:32:21] 0xd34df00d вошёл(а) в комнату
[21:53:14] maksbotan вышел(а) из комнаты
[21:58:36] slepnoga вышел(а) из комнаты
[22:36:39] NightNord вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!