import { Injectable } from '@angular/core'; import { FileList, FileListResponse } from './filelist' import { Observable, of } from 'rxjs'; import { catchError, map, tap } from 'rxjs/operators'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; @Injectable({ providedIn: 'root' }) export class DataproviderService { private apiUrl = "http://127.0.0.1:616/api.php"; constructor( private http: HttpClient ) { this.mock_EMPTYFILELIST = { subFolderList: [], musicList: [ { fileName: "", fileSize: 0, modifiedTime: 0 } ] } this.mock_BASEFILELIST = { subFolderList: ["AAAA", "BBBB"], musicList: [ { fileName: "CCCCC.mp3", fileSize: 9951652, modifiedTime: 1556423252 } ] } this.mock_FILELISTAAAA = { subFolderList: ["DDDD", "EEEE"], musicList: [ { fileName: "EEEEE.mp3", fileSize: 9951652, modifiedTime: 1556423252 } ] } this.mock_FILELISTBBBB = { subFolderList: ["FFFF", "GGGG"], musicList: [ { fileName: "FFFFF.mp3", fileSize: 9951652, modifiedTime: 1556423252 } ] } } mock_EMPTYFILELIST : FileList; mock_BASEFILELIST : FileList; mock_FILELISTAAAA : FileList; mock_FILELISTBBBB : FileList; getFileList(path : string) : Observable { switch (path) { case "AAAA": return of(this.mock_FILELISTAAAA); case "BBBB": return of(this.mock_FILELISTBBBB); default: return of(this.mock_BASEFILELIST); } } getFileListReal(path : string) : Observable { const body = new HttpParams() .set('do', 'getfilelist') .set('folder', path); return this.http.post(this.apiUrl, body.toString(), { headers: new HttpHeaders() .set('Content-Type', 'application/x-www-form-urlencoded') }).pipe( map(h => h.result.data), catchError(this.handleError(this.mock_EMPTYFILELIST)) ); } private handleError(result?: T) { return (error: any): Observable => { console.error(error); // log to console instead return of(result as T); }; } }