From d9fc378a1bd7fbf5fc0df9870eb0bd237db41784 Mon Sep 17 00:00:00 2001 From: trivernis Date: Tue, 9 Nov 2021 19:37:57 +0100 Subject: [PATCH] Add resolving of files when a path is selected Signed-off-by: trivernis --- mediarepo-ui/src-tauri/Cargo.lock | 30 ++++++++++- mediarepo-ui/src-tauri/Cargo.toml | 2 +- .../native-file-select.component.html | 5 +- .../native-file-select.component.ts | 51 ++++++++++++------- mediarepo-ui/src/app/models/FileOsMetadata.ts | 7 +++ .../filesystem-import.component.html | 14 ++++- .../filesystem-import.component.ts | 23 +++++++-- .../services/import/import.service.spec.ts | 16 ++++++ .../src/app/services/import/import.service.ts | 15 ++++++ 9 files changed, 131 insertions(+), 32 deletions(-) create mode 100644 mediarepo-ui/src/app/models/FileOsMetadata.ts create mode 100644 mediarepo-ui/src/app/services/import/import.service.spec.ts create mode 100644 mediarepo-ui/src/app/services/import/import.service.ts diff --git a/mediarepo-ui/src-tauri/Cargo.lock b/mediarepo-ui/src-tauri/Cargo.lock index 0d1e8d8..2da5f3f 100644 --- a/mediarepo-ui/src-tauri/Cargo.lock +++ b/mediarepo-ui/src-tauri/Cargo.lock @@ -1580,12 +1580,13 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "mediarepo-api" -version = "0.5.1" -source = "git+https://github.com/Trivernis/mediarepo-api.git?rev=b6a287e200eeae1105466ae7851a3a9287efe34b#b6a287e200eeae1105466ae7851a3a9287efe34b" +version = "0.5.3" +source = "git+https://github.com/Trivernis/mediarepo-api.git?rev=827ae9613d18b773a66c80ee803c4e112ca987b9#827ae9613d18b773a66c80ee803c4e112ca987b9" dependencies = [ "async-trait", "chrono", "directories", + "mime_guess", "parking_lot", "rmp-ipc", "serde", @@ -1613,6 +1614,22 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mime_guess" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minisign-verify" version = "0.1.8" @@ -3388,6 +3405,15 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.7" diff --git a/mediarepo-ui/src-tauri/Cargo.toml b/mediarepo-ui/src-tauri/Cargo.toml index efdf95f..b1217cc 100644 --- a/mediarepo-ui/src-tauri/Cargo.toml +++ b/mediarepo-ui/src-tauri/Cargo.toml @@ -30,7 +30,7 @@ features = ["env-filter"] [dependencies.mediarepo-api] git = "https://github.com/Trivernis/mediarepo-api.git" -rev = "b6a287e200eeae1105466ae7851a3a9287efe34b" +rev = "827ae9613d18b773a66c80ee803c4e112ca987b9" features = ["tauri-plugin"] [features] diff --git a/mediarepo-ui/src/app/components/inputs/native-file-select/native-file-select.component.html b/mediarepo-ui/src/app/components/inputs/native-file-select/native-file-select.component.html index aab3dc1..5861d6d 100644 --- a/mediarepo-ui/src/app/components/inputs/native-file-select/native-file-select.component.html +++ b/mediarepo-ui/src/app/components/inputs/native-file-select/native-file-select.component.html @@ -2,12 +2,9 @@ {{label}} - +
- diff --git a/mediarepo-ui/src/app/components/inputs/native-file-select/native-file-select.component.ts b/mediarepo-ui/src/app/components/inputs/native-file-select/native-file-select.component.ts index 5a7dfc5..852ea45 100644 --- a/mediarepo-ui/src/app/components/inputs/native-file-select/native-file-select.component.ts +++ b/mediarepo-ui/src/app/components/inputs/native-file-select/native-file-select.component.ts @@ -1,4 +1,12 @@ -import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; +import { + Component, + EventEmitter, + Input, + OnChanges, + OnInit, + Output, + SimpleChanges +} from '@angular/core'; import {FormControl} from "@angular/forms"; import {dialog} from "@tauri-apps/api"; import {DialogFilter} from "@tauri-apps/api/dialog"; @@ -8,10 +16,10 @@ import {DialogFilter} from "@tauri-apps/api/dialog"; templateUrl: './native-file-select.component.html', styleUrls: ['./native-file-select.component.scss'] }) -export class NativeFileSelectComponent implements OnInit{ +export class NativeFileSelectComponent implements OnInit, OnChanges { - @Input() label: string | undefined; - @Input() mode: "files" | "folders" | "all" = "all"; + + @Input() mode: "files" | "folders" = "files"; @Input() formControlName: string | undefined; @Input() formControl: FormControl | undefined; @Input() startPath: string | undefined; @@ -21,22 +29,19 @@ export class NativeFileSelectComponent implements OnInit{ @Output() fileSelect = new EventEmitter(); public files: string[] = []; + public label: string | undefined; - constructor() { } + constructor() { + } public ngOnInit(): void { - if (!this.label) { - switch (this.mode) { - case "all": - this.label = "Select Files or Folders"; - break; - case "files": - this.label = "Select Files"; - break; - case "folders": - this.label = "Select a folder"; - break; - } + this.setLabel(); + } + + + public ngOnChanges(changes: SimpleChanges): void { + if (changes["mode"]) { + this.setLabel(); } } @@ -59,10 +64,20 @@ export class NativeFileSelectComponent implements OnInit{ }); if (files instanceof Array) { this.files = files; - } else { + } else if (files) { this.files = [files]; } this.fileSelect.emit(this.files); } + private setLabel(): void { + switch (this.mode) { + case "files": + this.label = "Select Files"; + break; + case "folders": + this.label = "Select a folder"; + break; + } + } } diff --git a/mediarepo-ui/src/app/models/FileOsMetadata.ts b/mediarepo-ui/src/app/models/FileOsMetadata.ts new file mode 100644 index 0000000..c218b02 --- /dev/null +++ b/mediarepo-ui/src/app/models/FileOsMetadata.ts @@ -0,0 +1,7 @@ +export type FileOsMetadata = { + name: string, + path: string, + mime_type: string, + created_at: Date, + modified_at: Date, +} diff --git a/mediarepo-ui/src/app/pages/home/import-tab/import-tab-sidebar/filesystem-import/filesystem-import.component.html b/mediarepo-ui/src/app/pages/home/import-tab/import-tab-sidebar/filesystem-import/filesystem-import.component.html index 73e5e0c..033d485 100644 --- a/mediarepo-ui/src/app/pages/home/import-tab/import-tab-sidebar/filesystem-import/filesystem-import.component.html +++ b/mediarepo-ui/src/app/pages/home/import-tab/import-tab-sidebar/filesystem-import/filesystem-import.component.html @@ -1,5 +1,15 @@ - - + + Selection Type + + Folders + Files + + + + diff --git a/mediarepo-ui/src/app/pages/home/import-tab/import-tab-sidebar/filesystem-import/filesystem-import.component.ts b/mediarepo-ui/src/app/pages/home/import-tab/import-tab-sidebar/filesystem-import/filesystem-import.component.ts index dc6c5db..fabc183 100644 --- a/mediarepo-ui/src/app/pages/home/import-tab/import-tab-sidebar/filesystem-import/filesystem-import.component.ts +++ b/mediarepo-ui/src/app/pages/home/import-tab/import-tab-sidebar/filesystem-import/filesystem-import.component.ts @@ -1,4 +1,7 @@ -import { Component, OnInit } from '@angular/core'; +import {Component} from '@angular/core'; +import {FileOsMetadata} from "../../../../../models/FileOsMetadata"; +import {ImportService} from "../../../../../services/import/import.service"; +import {ErrorBrokerService} from "../../../../../services/error-broker/error-broker.service"; @Component({ selector: 'app-filesystem-import', @@ -8,14 +11,24 @@ import { Component, OnInit } from '@angular/core'; export class FilesystemImportComponent { public fileCount: number = 0; - public paths: string[] = []; + public files: FileOsMetadata[] = []; public importTagsFromTxt = true; public deleteAfterImport = false; - constructor() { } + public resolving = false; + + constructor(private errorBroker: ErrorBrokerService, private importService: ImportService) { + } public async setSelectedPaths(paths: string[]) { - this.paths = paths; - this.fileCount = paths.length; + this.resolving = true; + try { + this.files = await this.importService.resolvePathsToFiles(paths); + this.fileCount = this.files.length; + } catch (err) { + console.log(err); + this.errorBroker.showError(err); + } + this.resolving = false; } } diff --git a/mediarepo-ui/src/app/services/import/import.service.spec.ts b/mediarepo-ui/src/app/services/import/import.service.spec.ts new file mode 100644 index 0000000..da66864 --- /dev/null +++ b/mediarepo-ui/src/app/services/import/import.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ImportService } from './import.service'; + +describe('ImportService', () => { + let service: ImportService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ImportService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/mediarepo-ui/src/app/services/import/import.service.ts b/mediarepo-ui/src/app/services/import/import.service.ts new file mode 100644 index 0000000..c089b6e --- /dev/null +++ b/mediarepo-ui/src/app/services/import/import.service.ts @@ -0,0 +1,15 @@ +import { Injectable } from '@angular/core'; +import {FileOsMetadata} from "../../models/FileOsMetadata"; +import {invoke} from "@tauri-apps/api/tauri"; + +@Injectable({ + providedIn: 'root' +}) +export class ImportService { + + constructor() { } + + public async resolvePathsToFiles(paths: string[]): Promise { + return await invoke("plugin:mediarepo|resolve_paths_to_files", {paths}); + } +}