Я хочу, чтобы встроенный GeckoFx 60 загрузил файл, а затем открыл его в приложении по умолчанию. По умолчанию кажется, что GeckoFx ничего не делает, когда клиент запрашивает загрузку файла.
Для обработки запроса на загрузку я включил обработчик событий:
LauncherDialog.Download += LauncherDialog_Download;
Затем я нашел две возможности скачать или открыть файл через HelperAppLauncher. Этот файл сохраняет запрошенный файл во временную папку и открывает его:
private void LauncherDialog_Download(object sender, LauncherDialogEvent e)
{
// direct open, file will be stored in C:\Users\Username\AppData\Local\Temp\
e.HelperAppLauncher.LaunchWithApplication(null, false);
}
Я не нашел способа настроить путь сохранения. Это другое возможное решение позволяет мне самому установить путь сохранения:
private void LauncherDialog_Download(object sender, LauncherDialogEvent e)
{
nsILocalFileWin objTarget = Xpcom.CreateInstance<nsILocalFileWin>("@mozilla.org/file/local;1");
var downloadPath = @Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\CustomFolder\\" + e.Filename;
using (nsAString tmp = new nsAString(downloadPath))
{
objTarget.InitWithPath(tmp);
}
e.HelperAppLauncher.SaveToDisk(objTarget, false);
Task.Run(() =>
{
Thread.Sleep(3000);
System.Diagnostics.Process.Start(downloadPath);
});
}
Это Task.Run()
работает, но довольно уродливо и подвержено ошибкам. Я не мог найти лучшее решение, хотя. Я попытался добавить WebProgressListener
следующим образом:
var webProgressListener = new WebProgressListener();
webProgressListener.OnStatusChangeCallback+= OnStatusChangeCallback;
e.HelperAppLauncher.SetWebProgressListener(webProgressListener);
webProgressListener.IsListening
верно, но мой метод OnStatusChangeCallback
никогда не вызывается. Я делаю что-то неправильно? Есть ли более новый способ?
Как я могу получить уведомление о завершении загрузки? Или как мне установить путь для LaunchWithApplication
?