pcm-angular/src/app/dataprovider.service.ts
2020-07-13 18:29:25 +08:00

98 lines
2.3 KiB
TypeScript

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<FileList> {
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<FileList> {
const body = new HttpParams()
.set('do', 'getfilelist')
.set('folder', path);
return this.http.post<FileListResponse>(this.apiUrl, body.toString(), {
headers: new HttpHeaders()
.set('Content-Type', 'application/x-www-form-urlencoded')
}).pipe(
map(h => h.result.data),
catchError(this.handleError<FileList>(this.mock_EMPTYFILELIST))
);
}
private handleError<T>(result?: T) {
return (error: any): Observable<T> => {
console.error(error); // log to console instead
return of(result as T);
};
}
}