diff --git a/res/static/misc/MaterialIcons.woff2 b/res/static/misc/MaterialIcons.woff2
new file mode 100644
index 0000000..5492a6e
Binary files /dev/null and b/res/static/misc/MaterialIcons.woff2 differ
diff --git a/res/static/style/layout.css b/res/static/style/layout.css
index 849197a..7ececaa 100644
--- a/res/static/style/layout.css
+++ b/res/static/style/layout.css
@@ -14,7 +14,7 @@
font-display: block;
src: local('Material Icons'),
local('MaterialIcons-Regular'),
- url(/res/misc/MaterialIcons-Regular.ttf) format('truetype');
+ url(/res/misc/MaterialIcons.woff2) format('truetype');
}
.icon {
@@ -31,6 +31,7 @@
direction: ltr;
text-rendering: optimizeLegibility;
vertical-align: middle;
+ font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}
.icon_unicode {
diff --git a/svelte/src/filesystem/FilesystemAPI.js b/svelte/src/filesystem/FilesystemAPI.js
index 47ce0a4..6da0678 100644
--- a/svelte/src/filesystem/FilesystemAPI.js
+++ b/svelte/src/filesystem/FilesystemAPI.js
@@ -117,3 +117,13 @@ export const fs_timeseries = async (path, start, end, interval = 60) => {
)
)
}
+
+export const fs_import = async (parent_dir_path = "", filelist = []) => {
+ const form = new FormData()
+ form.append("action", "import")
+ form.append("files", JSON.stringify(filelist))
+
+ return await fs_check_response(
+ await fetch(fs_path_url(parent_dir_path), { method: "POST", body: form })
+ )
+}
diff --git a/svelte/src/filesystem/filemanager/FileImporter.svelte b/svelte/src/filesystem/filemanager/FileImporter.svelte
new file mode 100644
index 0000000..f804cd2
--- /dev/null
+++ b/svelte/src/filesystem/filemanager/FileImporter.svelte
@@ -0,0 +1,45 @@
+
+
+ {import_files(e.detail)}}
+ multi_select={true}
+ title="Import files from file list">
+
diff --git a/svelte/src/filesystem/filemanager/FileManager.svelte b/svelte/src/filesystem/filemanager/FileManager.svelte
index 9c606cd..fa47d79 100644
--- a/svelte/src/filesystem/filemanager/FileManager.svelte
+++ b/svelte/src/filesystem/filemanager/FileManager.svelte
@@ -5,6 +5,7 @@ import CreateDirectory from './CreateDirectory.svelte'
import ListView from './ListView.svelte'
import GalleryView from './GalleryView.svelte'
import Button from '../../layout/Button.svelte';
+import FileImporter from './FileImporter.svelte';
let dispatch = createEventDispatcher()
export let fs_navigator
@@ -16,6 +17,7 @@ let uploader
let mode = "viewing"
let creating_dir = false
let show_hidden = false
+let file_importer
$: selected_files = state.children.reduce((acc, file) => {
if (file.fm_selected) {
@@ -301,8 +303,13 @@ onMount(() => {
+