import { Injectable } from '@angular/core';
|
import { BehaviorSubject, from, Subject } from 'rxjs';
|
|
export interface FileEntry {
|
name: string;
|
handle: FileSystemHandle;
|
}
|
|
@Injectable({
|
providedIn: 'root'
|
})
|
export class FileLoaderService {
|
|
filesAvailable$: Subject<FileEntry[]> = new BehaviorSubject(new Array());
|
|
files: FileEntry[] = [];
|
|
constructor() { }
|
|
async openDir() {
|
this.updateSubscribers();
|
// Get a file handle by showing a file picker:
|
const handle = await showDirectoryPicker();
|
if (!handle) {
|
// User cancelled, or otherwise failed to open a file.
|
return;
|
}
|
|
from(handle.entries()).subscribe(
|
{
|
next: ([name, handle]) => this.files.push({name, handle}),
|
error: (err) => console.error(err),
|
complete: () => this.updateSubscribers
|
}
|
)
|
}
|
|
private updateSubscribers() {
|
this.filesAvailable$.next(this.files);
|
}
|
}
|