From 8fc01be6d194437b84997030f19554ebc0c08f79 Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Mon, 28 Apr 2025 19:38:19 +0530 Subject: [PATCH] [client] Web downloads (non-ideal) --- .../integrations/download_manager_web.dart | 17 ++++++++++++- .../flutter/generated_plugin_registrant.cc | 4 ++++ client/linux/flutter/generated_plugins.cmake | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 2 ++ client/pubspec.lock | 24 +++++++++++++++++++ client/pubspec.yaml | 1 + .../flutter/generated_plugin_registrant.cc | 3 +++ .../windows/flutter/generated_plugins.cmake | 1 + 8 files changed, 52 insertions(+), 1 deletion(-) diff --git a/client/lib/integrations/download_manager_web.dart b/client/lib/integrations/download_manager_web.dart index d5c2893e..9fb25a42 100644 --- a/client/lib/integrations/download_manager_web.dart +++ b/client/lib/integrations/download_manager_web.dart @@ -1,8 +1,23 @@ +import 'package:file_saver/file_saver.dart'; import 'package:flutter/material.dart'; +import 'package:path/path.dart'; import 'package:phylum/libphylum/db/db.dart'; import 'package:phylum/libphylum/phylum_account.dart'; +import 'package:provider/provider.dart'; -void downloadResource(BuildContext context, Resource r) {} +void downloadResource(BuildContext context, Resource r) { + final apiClient = context.read().apiClient; + FileSaver().saveFile( + name: basenameWithoutExtension(r.name), + ext: extension(r.name), + link: LinkDetails( + link: apiClient.createUriBuilder('/api/v1/fs/contents/${r.id}').toString(), + headers: apiClient.requestHeaders, + ), + mimeType: MimeType.custom, + customMimeType: r.contentType, + ); +} class DownloadManager with ChangeNotifier { DownloadManager(PhylumAccount account) : super(); diff --git a/client/linux/flutter/generated_plugin_registrant.cc b/client/linux/flutter/generated_plugin_registrant.cc index 82c61301..2f3a9dd6 100644 --- a/client/linux/flutter/generated_plugin_registrant.cc +++ b/client/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,7 @@ #include "generated_plugin_registrant.h" +#include #include #include #include @@ -14,6 +15,9 @@ #include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) file_saver_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FileSaverPlugin"); + file_saver_plugin_register_with_registrar(file_saver_registrar); g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); file_selector_plugin_register_with_registrar(file_selector_linux_registrar); diff --git a/client/linux/flutter/generated_plugins.cmake b/client/linux/flutter/generated_plugins.cmake index 80d046c0..43f5321c 100644 --- a/client/linux/flutter/generated_plugins.cmake +++ b/client/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + file_saver file_selector_linux irondash_engine_context open_file_linux diff --git a/client/macos/Flutter/GeneratedPluginRegistrant.swift b/client/macos/Flutter/GeneratedPluginRegistrant.swift index 94aaae13..ffdb3428 100644 --- a/client/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/client/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,6 +6,7 @@ import FlutterMacOS import Foundation import device_info_plus +import file_saver import file_selector_macos import irondash_engine_context import open_file_mac @@ -16,6 +17,7 @@ import super_native_extensions func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) + FileSaverPlugin.register(with: registry.registrar(forPlugin: "FileSaverPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) IrondashEngineContextPlugin.register(with: registry.registrar(forPlugin: "IrondashEngineContextPlugin")) OpenFilePlugin.register(with: registry.registrar(forPlugin: "OpenFilePlugin")) diff --git a/client/pubspec.lock b/client/pubspec.lock index 04c6f62c..4623f2b3 100644 --- a/client/pubspec.lock +++ b/client/pubspec.lock @@ -241,6 +241,22 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.2" + dio: + dependency: transitive + description: + name: dio + sha256: "253a18bbd4851fecba42f7343a1df3a9a4c1d31a2c1b37e221086b4fa8c8dbc9" + url: "https://pub.dev" + source: hosted + version: "5.8.0+1" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78" + url: "https://pub.dev" + source: hosted + version: "2.1.1" drift: dependency: "direct main" description: @@ -289,6 +305,14 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.1" + file_saver: + dependency: "direct main" + description: + name: file_saver + sha256: "017a127de686af2d2fbbd64afea97052d95f2a0f87d19d25b87e097407bf9c1e" + url: "https://pub.dev" + source: hosted + version: "0.2.14" file_selector: dependency: "direct main" description: diff --git a/client/pubspec.yaml b/client/pubspec.yaml index b8bc2b86..b257ad15 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -13,6 +13,7 @@ dependencies: drift: ^2.19.1+1 drift_flutter: ^0.2.1 file_selector: ^1.0.3 + file_saver: flutter_state_notifier: background_downloader: hive_ce: ^2.10.0 diff --git a/client/windows/flutter/generated_plugin_registrant.cc b/client/windows/flutter/generated_plugin_registrant.cc index 2b9772ce..87128d6f 100644 --- a/client/windows/flutter/generated_plugin_registrant.cc +++ b/client/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,7 @@ #include "generated_plugin_registrant.h" +#include #include #include #include @@ -14,6 +15,8 @@ #include void RegisterPlugins(flutter::PluginRegistry* registry) { + FileSaverPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FileSaverPlugin")); FileSelectorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("FileSelectorWindows")); IrondashEngineContextPluginCApiRegisterWithRegistrar( diff --git a/client/windows/flutter/generated_plugins.cmake b/client/windows/flutter/generated_plugins.cmake index aa91374a..63e30f1e 100644 --- a/client/windows/flutter/generated_plugins.cmake +++ b/client/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + file_saver file_selector_windows irondash_engine_context permission_handler_windows