В общем, появилось желание избавиться от кучи окошек с загрузками и свести их все к одному (т.н. менеджеру закачек), в связи с чем, разыскиваются заинтересованные спецы (по части 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);
(пользователь выделил регион и запустил закачку).
Вот, с большего и всё. Менеджеру даётся полная свобода действий над закачками (расписание, очерёдность и проч.), плюс, можно будет сделать чтобы при сворачивании менеджера он скрывал главное окно САС, а сам прятался в трей.