Replies (12)
- @0xd34df00d:@saransk Да. И ваще, пошли пилить личкрафты.
- @0xd34df00d:@Tremerix Он о других фейсах. Кажется, это первый человек, который собрался обсирать API.
- @saransk:@saransk github.com
Основное:
1. а где ссылка на сами скачиваемые данные? Если оно где-то внутри LeechCraft::Entity, то ее описание я не вижу (бегло пробежался по дереву и не нашел)
2. Где сигналы для обработки ошибок? Например, не смогли отресолвить днс, прицепится к серверу, или лили данные, но вышел дисконнект? Как система сможет обработать все это? Только перезапуском, т.е. если я лил гиг данных, а потом разрыв, то мне будет очень весело, ибо нету обработчика и докачки?
3. Если это универсальный интерфейс для всего, то где возможность частичного скачивания данных (http/ftp/bittorrent/возможно DC++)? Т.е. мне надо выкачать заголовок странички или первые 5кб всех торрент-файлов — как быть?
4. возможно ли сделать такое: указать последовательность закачки данных, скажем сначала выкачать заголовок, потом конец, а потом лить с середины? Это помогло бы частично выкачивать и смотреть фильмы не только с перемоткой по выкачанным частям, но и дало возможность промотать вперед, качать оттуда по мере надобности (как это сделано на ютубах, где можно перетащить бегунок и начать лить кино с середины), zip-архивы (у них индекс в конце) и выкачивать только их части, смотреть частично загруженные картинки, музыку и т.д.. Если картинка в tiff, то можно было бы сразу смотреть несколько ее частей, когда льешь через торренты?
Вторичное:
5. Где многопоточное скачивание (на заре интернетов, когда небыло торрентов, но уже были поисковики по FTP, некоторые качалки находили зеркала файла и лили файло кусочками сразу с нескольких серверов), а главное контроль оного? Вот я для торрентов пользуюсь BitFlu, пришлось немного пропатчить его, дабы он использовал как можно меньшее количество пиров (иначе на канале в 320 килобит большая часть трафика приходится на оверхед, скорость скачивания ПАДАЕТ). Хотелось бы еще допилить возможность управления пирами, но все лень.
6. Это же относится и к контролю скорости, есть скорость скачиваемых/закачиваемых данных, то должно быть и управление (no ways of controlling of bandwidth's usage of a particular plugin — это не слишком красиво)?.
7. Хоть ссылки на опции прикрути, дабы плагины могли что-то глобальное заюзать. Еще бы неплохо иметь ссылки на список забаненых пиров/серверов, дабы туда не лезли (например, я вот не хочу, дабы торренты лились не только из локалки).
Короче, крайне рикомендую почитать "Дырявые Абстракции" Джоела Спольски, есть рюсске перевод. Или я не понял всю гениальность, или слишком много дырок в интерфейсе, который чуть ли не самый главный во всем приложении. - @saransk:@0xd34df00d Гуй я обсирать тоже могу, но буду делать это неохотно, пока свой тулкит не сделаю.
- @saransk:@0xd34df00d ПОЧЕМУ ТЫ НЕ ОТВЕЧАЕШЬ НА МОЙ ОТВЕТ?????7777 ОТВЕЧАЙ, ПОЧЕМУ НЕБЫЛО НИ ЕДИНОГО ОТВЕТА??!!!!!!!11111!11!!1!!!1111
- @0xd34df00d:@saransk 1. structures.h
2. При ошибке можешь бросить еще одну Entity. Олсо, докачка должна хендлиться плагином-качальщиком, а не тем, который отдал задание.
3. ШТО? В Entity кладешь нужную инфу, и все.
4. ШТО? В Entity кладешь нужную инфу, и все.
Насчет пунктов 3 и 4 — я просто понял, что на статических интерфейсах заебешься все подобное делать, поэтому лучше просто стандартизовать типа/параметры Entity в рамках пар/множеств плагинов и не выебываться.
5. Сам мне запили, ок? У меня траффик платный и мне оно не нужно, а я один не могу делать все. А в торрентах все ништяк управляется.
6. Отошли сообщение ;)
7. Щито? В смысле? Блять, нету глобального списка пиров, не должно о нем ядро знать. Ядро вообще ни о чем должно не знать. То, что оно занимается отрисовкой гуев, таббаров и прочего — ошибка, я собираюсь это исправить — вынести в отдельный плагин.
Я спал, блджад. - @saransk:@0xd34df00d
1. Спасибо, поужасался, особенно от DoNotSaveInHistory и DoNotNotifyUser (могу расписать)
2. Непосредственно докачку должен хендлить плагин, тут согласен, а вот сказать юзеру "ой, тут у нас пиздец произошел, но я попробую исправить само!" надобно, а таких сигналов я не видел, или плохо смотрел? И зачем еще раз инициировать закачку при ошибке, если часть уже скачана?
3. Я не видел структуры Entity, а теперь не вижу диапазонов данных в ней. Я так понимаю, что оно по идее должно быть в QVariant Entity_, но вот скажем как для QUrl определить http-ranges?
4. Тут речь уже шла о интерактивной последовательности скачивания, если угодно, то некотором подобии lseek + precache. Т.е. я даю задание "скачай мне кино, ссылка smb://192.168.123.21/movies/pron.avi, начать с позиции 0", как только плагин начинает качать, он парсит заголовок, и передает качальщику "ок, давай выкачай мне кусок с позиции 1200000000 байт" — плагин сам решает, разрывать ли ему коннект, но начинает скачивать данные с указанного места, при этом сохраняя все в единое целое с заголовком. Выкачал индекс — пошел кино смотреть. Юзер тыкнул в середину сикбара — кино пошло качатся с середины, отображаясь сразу. Нажал на паузу — кино продолжает скачиваться. Можно юзать спарс-файлы.
Как помогут множества плагинов здесь, когда закачка фактически атомарна — я не понял.
5. Как я тебе запилю, если интерфейса для этого нет?
6. ок
7. Избавление от гуя — это конечно хорошо, я смогу переделать личкрафты под свой тулкит, но что же тогда будет делать ядро системы? Или кто будет всеми настройками заведовать? У тебя есть свой "реестр", дабы туда все плагины за настройками обращаться могли?
Я тоже. Дневной сон — это хорошо, словно кино посмотрел - @0xd34df00d:@saransk 1. А чо?
2. Util::MakeNotification сделает тебе Entity-уведомление юзера. Инициирование такое дорогое, я понимаю, да.
3. Договорись со всеми плагинами-качальщиками, какое поле в Additional_ для это используется.
4. Аналогично.
Нихуянепонел про атомарность.
5. Ты собрался из одного плагина управлять многопоточным скачиванием в другом? А нахуя? Это детали реализации.
7. Тынепонел. Под свой тулкит вряд ли переделаешь — там иногда возвращается QWIdget, вкладка — QWidget, предоставляемый плагином, етц.
А ядро должно быть тупым Оно соединяет плагины между собой, и все.
У меня есть формат описания диалогов настроек в XML (coresettings.xml, например) + ядро предоставляет наружу некий предефайнед-сторедж для настроек, который можно использовать для миллипиздрических иерархических структур.from idead, 13 months ago, in reply to /9 - @0xd34df00d:@0xd34df00d Реквестирую сотни говен и suggestion'ов по перепиливанию. Пора избавляться от легаси и принятых ранее неправильных решений.from idead, 13 months ago, in reply to /10
- @saransk:@0xd34df00d 1. Если у тебя плагинная архитектура, то представь, что нету ни хистори, ни юзера, а структурку то заполнять надо, что выглядит довольно странно.
2. А нахрена тогда jobFinished (int id)? Странно, что часть сообщений через утилю надо кидать
3. Блеать, для этого стандартизированное апи и нужно, а не "ребята, вы там и апи за меня допишите, а?"
4. Тут скорее надо сигналами обмениваться, вроде jobFinished (int id), при этом их опять желательно стандартизировать
5. Верно, это детали реализации, но скачивание должно быть контролируемым (по идее этим должно рулить ядро)
7. Говно.from Gaim, 13 months ago, in reply to /10