Менеджер закачек

Форум для обсуждения деталей разработки программы SAS.Планета

Модераторы: vdemidov, Tolik

Менеджер закачек

Сообщение zed » 16 июн 2011, 13:57

dm.gif

В общем, появилось желание избавиться от кучи окошек с загрузками и свести их все к одному (т.н. менеджеру закачек), в связи с чем, разыскиваются заинтересованные спецы (по части GUI в основном). Нужно сделать красивого менеджера (хотя бы костяк, для начала) в виде dll, а уже я научу САС отправлять закачки в эту dll.
Итак, ключевые моменты:
Менеджер - это практически только GUI, который получит в своё распоряжение интерфейс качалки. Сама качалка будет создаваться/уничтожаться внутрях САС, наружу будут выведены только её методы Пауза/Продолжить/Отменить + статистика да лог.

Вот этот интерфейс (в таком виде он сейчас в САС):
Код: Выделить всё
IRegionTilesDownload = interface
    ['{4BF3D0E8-3971-4EDC-97F3-44461D6A54FD}']
    procedure SaveSession(ASessionFileName: string);
    procedure Abort;                               

    function GetPaused: Boolean;
    procedure SetPaused(APaused: Boolean);
    property Paused: Boolean read GetPaused write SetPaused;

    function GetFinished: Boolean;
    property Finished: Boolean read GetFinished;

    function GetTotalInRegion: Int64;
    property TotalInRegion: Int64 read GetTotalInRegion;

    function GetDownloaded: Int64;
    property Downloaded: Int64 read GetDownloaded;

    function GetProcessed: Int64;
    property Processed: Int64 read GetProcessed;

    function GetDownloadSize: Double;
    property DownloadSize: Double read GetDownloadSize;

    function GetElapsedTime: TDateTime;
    property ElapsedTime: TDateTime read GetElapsedTime;

    function GetStartTime: TDateTime;
    property StartTime: TDateTime read GetStartTime;

    function GetZoom: Byte;
    property Zoom: Byte read GetZoom;
  end;

Интерфейс лога (сообщения которые сейчас выводятся в Memo):
Код: Выделить всё
ILogForTaskThread = interface(ILogSimple)
    ['{8583BE82-1239-4E0F-9B96-D2810232282A}']
    function GetLastMessages(AMaxRowsCount: Cardinal; var ALastId: Cardinal; out AcntLines: Cardinal): WideString; safecall;
  end;

Ну и придумать ещё какой-нить общий интерфейс (ISASCommonAPI) с парочкой методов, чтобы можно было стартовать сохранённые сессии из менеджера (автоматически, при перезапусках САС), и возможно, управлять видимостью главного окна САС.

Это, что касается со стороны САС. Со стороны dll, должна экспортироваться одна функция:
Код: Выделить всё
function GetDownloadManager(ASASCommonAPI: ISASCommonAPI): IDownloadManager;

которая в качестве параметра получает общий интерфейс, и должна возвратить интерфейс менеджера (в сасе он будет храниться на протяжении всего времени существования программы, и соответственно вызываться эта функция будет при загрузке и инициализации САС).
В этом интерфейсе должны быть как минимум метод:
Код: Выделить всё
procedure ShowUI;

(пользователь нажал на тулбаре кнопочку "Показать менеджера") и метод:
Код: Выделить всё
procedure AddTask(ADownloader: IRegionTilesDownload; ALog: ILogForTaskThread);

(пользователь выделил регион и запустил закачку).

Вот, с большего и всё. Менеджеру даётся полная свобода действий над закачками (расписание, очерёдность и проч.), плюс, можно будет сделать чтобы при сворачивании менеджера он скрывал главное окно САС, а сам прятался в трей.
Хитрости GoogleEarth - то, чего вы не знаете о гугле

За это сообщение автора zed поблагодарил:
Parasite (16 июн 2011, 16:55)
Аватара пользователя
zed
Гуру
 
Сообщения: 2888
ICQ: 357167611
Зарегистрирован: 16 авг 2008, 20:21
Откуда: Беларусь, Могилёв
Благодарил (а): 89 раз.
Поблагодарили: 525 раз.

Re: Менеджер закачек

Сообщение Parasite » 16 июн 2011, 15:05

На это дело был тикет.
Так, к слову. DO WANT. :)
Изображение
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5613
ICQ: 15819243
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 119 раз.
Поблагодарили: 439 раз.

Re: Менеджер закачек

Сообщение zed » 16 июн 2011, 15:12

Parasite писал(а):На это дело был тикет.

Нет, не совсем то. Тут как качалось самим сасом в 1 поток, так и будет качаться именно самим сасом. Единственное, что менеджеру разрешается управлять этими закачками и отображать статистику по ним.

Хотя, вот то что подходит из обсуждения того тикета:
DJ VK писал(а):2. Я бы сделал для всех закачек отдельную панель с таблицей - каждая строка - отдельная закачка. Или дочерние панельки с лампочками и индикаторами. Можно сразу видеть все закачки - можно их вообще не видеть, скрыв панель. И проблемы с пропаданием окошек дочерних тоже больше не будет. Голосую за отдельную панель.
Еще вариант: Панель свернута-Панель краткая (задача, % и живучесть)-Полная таблица в новой форме.
TMS AdvStringGrid прекрасно подойдет - там и прогресс бар, и индикатор -лево-право(для быстрой оценки протух прокси или нет можно юзать), и т.д.

3. Совсем не реальное. хорошо бы задавать очередность закачек - эту прямо щас - одновременно с уже качающимися, а эту добавить в конец - после всех.
Хитрости GoogleEarth - то, чего вы не знаете о гугле
Аватара пользователя
zed
Гуру
 
Сообщения: 2888
ICQ: 357167611
Зарегистрирован: 16 авг 2008, 20:21
Откуда: Беларусь, Могилёв
Благодарил (а): 89 раз.
Поблагодарили: 525 раз.

Re: Менеджер закачек

Сообщение Parasite » 16 июн 2011, 16:55

zed писал(а):
Parasite писал(а):На это дело был тикет.

Нет, не совсем то.

Ну главное ж - начать. Встроенная качалка-то убога в любом случае, хоть у кого-нибудь руки дошли...А там по ходу дела будет видно, авось и тикет в полном объеме проработается. :)
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5613
ICQ: 15819243
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 119 раз.
Поблагодарили: 439 раз.

Re: Менеджер закачек

Сообщение DJ VK » 16 июн 2011, 22:01

присоединяюсь к обсуждению.
из опыта работы в билдере. не думаю что в дельфи все круче в сто раз, dll с гуем дружит конечно, но не настолько сильно, проще уж отдельное приложение и трубу для обмена сообщениями.
То есть внешний качальщик получает управление текстовыми командами.
вобще оптимальна независимая форма, отображаемая либо на полный экран, либо свернутая в маленькую и вписанная в панель непосредственно в окно программы. То есть может даже встроить в программу как новый юнит.
Сам менеджер для меня представлялся когда я поднимал вопрос как большая таблица.
в таблице добавляются новые задания, новой строкой.
Всего существует скажем десяток браузеров. 1 основной и 10 разных прокси взятых из списка. Для каждой строки (закачки) можно задать сколько одновременных потоков идет через данный прокси. Итак пока лимит на каждый прокси не дойдет до 10 очередей в сумме.
на каждую закачку свой прогресс бар,
TMS AdvStringGrid прекрасно подойдет под табличку.
Ну интерфейс уточнится по мере реализации, сразу не пинайте. Готов сотрудничать по gui, семья в отъезде, времени вагон. ;)

итак, до чего дошли руки и не дошли.

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

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

Я планирую начать с абстрактного генератора задач (задается диапазон тайлов) и генерится новое задание. Если кто поделится кодом по реализации соединения (сокета) и прокси, визуализировать задачу будет просто - понравится продолжим вплоть до интеграци....
p/s/ не вижу смысла просто вынести поток закачки за пределы программы и там сделать те же кнопки пауза, стоп и прогресс бар.
Аватара пользователя
DJ VK
Гуру
 
Сообщения: 1467
Зарегистрирован: 16 апр 2009, 13:57
Откуда: 8 км. от МКАД
Благодарил (а): 82 раз.
Поблагодарили: 298 раз.

Re: Менеджер закачек

Сообщение vasketsov » 16 июн 2011, 23:52

DJ VK писал(а):не вижу смысла просто вынести поток закачки за пределы программы и там сделать те же кнопки пауза, стоп и прогресс бар

анлогично.

2 zed:
Я когда писал свой мегапост на тему плагинов (а тут налицо попытка описать по сути плагин) в соответствующей теме, не зря написал там, что плагины по возможности не должны городить свой гуй, даже для своих настроек. Вопрос не в технической (не)возможности запихнуть гуй в dll, с этим проблем никаких, но по сути - пользовательский интерфейс должен быть внутри программы одинаковым. Один соберёт dll на одной версии, программу на другой, разные контролы и т.п. - интерфейс SAP от позапрошлого века покажтеся гениальным творением с точки зрения юзабилити. Нафига заранее подписываться на этот гуёвый колхоз? Если dll всегда будет с программой - так и делайте это в программе. Или это какой-то особенный вид садомазо, разделить логику на 2 части, замутить между ними недо-IPC и ловить новые баги с синхронизациями и блокировками там, где совсем нет никаких показаний к выделению куска кода из программы?

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

Ну вообще-то от "избавиться от кучи окошек" до "т.н. менеджеру закачек" как до Луны в известной незатейливой позе. Достаточно просто складывать (точнее, докать) окошки закачки на закладки в PageControl-е.
Если хочется табличный вид с кнопочками типа даунлоадмастера - да за ради бога, но только не надо выносить его в отдельную dll. А надо чтобы изначально окошки вообще не создавались, а закачки падали в эту таблицу. А окошки пох#рить совсем.
vasketsov
Специалист
 
Сообщения: 901
Зарегистрирован: 25 июл 2009, 21:15
Благодарил (а): 0 раз.
Поблагодарили: 193 раз.

Re: Менеджер закачек

Сообщение zed » 17 июн 2011, 08:53

DJ VK писал(а):То есть внешний качальщик получает управление текстовыми командами.

Менеджер закачек <> внешний качальщик. Это совсем другая тема и я уже постом выше отписывался, что это не тот тикет. Здесь я поднял вопрос внешнего гуя для внутреннего качальщика (как бы это странно не звучало).
DJ VK писал(а):Очень интересует рабочий код создания конкретного соединения под прокси (или без него) и многопоточной работы с соединением.

В интернете полно примеров на данную тему (искать по ключевым компонентам Indy, ICS, Synapse). В САСе используется голый WinInet.
DJ VK писал(а):второй вопрос - как получить список ссылок на скачку для конкретной задачи?

На самом деле не всё так просто: при закачке в сасе используется наверное с десяток различных интерфейсов (если не больше) и даже чтобы вынести простую качалку (единичного тайла) в плагин нужно сильно попотеть. Не говоря уже о закачке региона.
vasketsov писал(а):Если dll всегда будет с программой - так и делайте это в программе.

Некому делать-то. Вот, думал выделю конкретную задачу - написать гуй для качалки - кто-нить возьмёт, да сделает. Типа в дебри САС углубляться не нужно - вот те пара простых интерфейсов, и дерзай. Юзай какие хочешь визуальные компоненты (а не только фриварные, как внутрях САС), пиши в каком хочешь компиляторе, вороти быдло-код направо и налево - главное, чтобы был результат. Естественно, стиль полученного гуя должен гармонировать с САС (хотя, это надо сильно выпендриться, чтоб негармоничный стиль сделать). Но в любом случае, предполагалось сделать опционально: есть dll - юзаем гуй оттуда, нету - живём со старыми окошками.
vasketsov писал(а):Ну вообще-то от "избавиться от кучи окошек" до "т.н. менеджеру закачек" как до Луны в известной незатейливой позе.

Ну, вот такое у меня представление о менеджере - он не качает, он управляет: организует очередь, автоматически сохраняет закачки при выходе из программы и автоматически их подгружает при следуещем старте, предоставляет пользователю структурированную информацию о всём процессе и проч. в том же духе.

P.S. Костылеобразность предложения осознал, будем и дальше жить с окошками.
Хитрости GoogleEarth - то, чего вы не знаете о гугле
Аватара пользователя
zed
Гуру
 
Сообщения: 2888
ICQ: 357167611
Зарегистрирован: 16 авг 2008, 20:21
Откуда: Беларусь, Могилёв
Благодарил (а): 89 раз.
Поблагодарили: 525 раз.

Re: Менеджер закачек

Сообщение vasketsov » 17 июн 2011, 12:37

zed писал(а):Ну, вот такое у меня представление о менеджере - он не качает, он управляет: организует очередь, автоматически сохраняет закачки при выходе из программы и автоматически их подгружает при следуещем старте, предоставляет пользователю структурированную информацию о всём процессе и проч. в том же духе.

Выделенное примечательно тем, что оно а) может быть сделано ДО менеджера закачек, б) полезно сейчас и в) по факту реализации его потом переползёт в него без изменений. В принципе, это даже не забота менеджера закачек в смысле управления закачками, выдачей информации по потокам и т.п. Это просто отдельная сериализация и десериализация закачек. В принципе, даже код внутри саса есть, это сохранение и загрузка сессии закачки. Оно хоть и убогое, и процент выполнения после загрузки сессии частенько больше 100 бывает, но тем не менее.Сама по себе "простыня" с закачками никак не связана с (де)сериализацией.

zed писал(а):это надо сильно выпендриться, чтоб негармоничный стиль сделать

Это только кажется. В нулевом приближении сразу же встаёт проблема перевода качалки на язык саса. В предложенных интерфейсах я не углядел передачи языка в качалку (и информировании качалки об его изменении). Возможно, конечно, имелось в виду неявно, что качалка как и все плагины по умолчанию умеет каким-то образом определять язык саса и подстраиваться под него...
Да даже выравнивание элементов управления и отступ от границы клиентской зоны будут глаза резать, если сделать это криво.
vasketsov
Специалист
 
Сообщения: 901
Зарегистрирован: 25 июл 2009, 21:15
Благодарил (а): 0 раз.
Поблагодарили: 193 раз.

Re: Менеджер закачек

Сообщение vasketsov » 17 июн 2011, 13:08

zed писал(а):будем и дальше жить с окошками.

Как вполне простой рабочий вариант до реализации менеждера закачек к ЧМ по футболу в России:
1. Берём окошко закачки. Существующие объекты сваливаем в один компонент (руками или через Frame), нужные свойства высовываем из него наружу, и удаляем всё с окошка. Кидаем на него TPageControl (ну или аналог из используемой библиотеки), Align=alClient.
2. При создании закачки нюхаем какую-то системную опцию (при желании можно как-то более хитро, чтобы словить некоторые вкусности в виде группировки закачек по окошкам в соответствии с сервисом, зумом, областью выделения и т.п.), чтобы определить, надо ли создавать новое окошко закачки (если окошек ещё нету или требуется всегда создавать новое окошко) или можно присосаться к существующему (и к какому именно). Если надо создавать - создаём окошко из шага 1. В результате этого шага имеем определённое место, куда будет падать закачка (рабочее окошко). Если опцию не публиковать - по умолчанию будет по-старому и ничего никуда у юзеров не отъедет.
3. Создаём в рабочем окошке TTabSheet (ну или аналог из используемой библиотеки) и кидаем на него компонент из шага 1 (или сразу создаём наследника от TTabSheet со всеми контролами). Играемся с высотой окошка закачки (либо увеличить высоту окошка на высоту закладки, либо что ещё лучше - разрешить изменение размеров окошка). Запускаем.
4. Если в рабочем окошке одна закладка - можно скрывать её ярлычки, тогда вообще будет как сейчас, не отличить. А можно и не скрывать, а использовать как информационное поле.
5. Надо будет как-то придумать, что отображать в заголовке (закладки и окна, скорее всего логично будет дублировать текст в заголовке окна от текущей активной закладки). Потому что просто текст типа закачка 30% или загрузка завершена 100% очевидно будет выглядеть глупо. Впрочем, это опять же общая проблема, сейчас тоже достаточно свернуть окошки закачек, чтобы потом путаться, какой надо раскрыть.
vasketsov
Специалист
 
Сообщения: 901
Зарегистрирован: 25 июл 2009, 21:15
Благодарил (а): 0 раз.
Поблагодарили: 193 раз.

Re: Менеджер закачек

Сообщение DJ VK » 17 июн 2011, 18:29

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

Текст для свернутого менеджера количество задач и сколько выполнено. + индикатор есть ли связь с инетом вообще.
текст свернутой закачки - название карты, масштаб (или группа таковых), количество скачанных тайлов 100 из 1000 + проценты
Аватара пользователя
DJ VK
Гуру
 
Сообщения: 1467
Зарегистрирован: 16 апр 2009, 13:57
Откуда: 8 км. от МКАД
Благодарил (а): 82 раз.
Поблагодарили: 298 раз.

След.

Вернуться в Раздел для разработчиков программы SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1