GeckoFx 60 Скачать + Открыть файл - PullRequest
1 голос
/ 27 января 2020

Я хочу, чтобы встроенный 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?

...