Last album section with artist & link

This commit is contained in:
2017-10-07 11:14:49 +02:00
parent 50bc795d5f
commit 94e59930ee
4 changed files with 48 additions and 4 deletions

View File

@@ -1,4 +1,4 @@
<nav>
<a routerLink="/dashboard" routerLinkActive="active">Dashboard</a>
<a routerLink="/dashboard" routerLinkActive="active"><span class="glyphicon glyphicon-home"></span></a>
</nav>
<router-outlet></router-outlet>

View File

@@ -88,8 +88,9 @@
</thead>
<tbody>
<tr *ngFor="let album of lastAddedAlbums">
<td>{{album.key}}</td>
<td><a [routerLink]="['/album', album.key]">{{album.key}}</a></td>
<td>{{album.doc_count}}</td>
<td><a [routerLink]="['/artist', albumArtists[album.key]]">{{albumArtists[album.key]}}</a></td>
</tr>
</tbody>
</table>

View File

@@ -3,6 +3,8 @@ import { Component, OnInit } from '@angular/core';
import { ElsService } from './els.service';
import { Song } from './object/song';
import { Bucket } from './object/bucket';
import { Album } from './object/album';
import { Artist } from './object/artist';
@Component({
selector: 'app-dashboard',
@@ -19,12 +21,15 @@ export class DashboardComponent implements OnInit {
trackCountAlbum = 0;
neverListenSong = 0;
albumArtistCount = 0;
topGenres: Bucket[] = [];
bottomGenres: Bucket[] = [];
mostPlayedSongs: Song[] = [];
lastAddedAlbums: Bucket[] = [];
albumArtists = [];
constructor(private elsService: ElsService) { }
@@ -54,9 +59,25 @@ export class DashboardComponent implements OnInit {
this.elsService.getGenres().subscribe(data => this.topGenres = data);
this.elsService.getGenres('asc').subscribe(data => this.bottomGenres = data);
this.elsService.getGenreCount().subscribe(data => console.log(data));
// this.elsService.getGenreCount().subscribe(data => console.log(data));
this.elsService.getLastAddedAlbums().subscribe(data => this.lastAddedAlbums = data);
this.elsService.getLastAddedAlbums().subscribe(buckets => {
this.lastAddedAlbums = buckets;
buckets.forEach(bucket => {
this.elsService.getArtistFromAlbumName(bucket.key).subscribe(data => {
if (data.length > 1) {
data.forEach(album => {
if (album['Track Count'] === bucket.doc_count) {
console.log(album.Artist.toString());
this.albumArtists[album.Name] = album.Artist.toString();
}
});
} else {
this.albumArtists[data[0].Name] = data[0].Artist.toString();
}
});
});
});
}

View File

@@ -293,9 +293,31 @@ export class ElsService {
'size': 0
}), {headers: this.headers})
.map(res => res.json().aggregations.album.buckets)
// TODO Take in consideration "sum_other_doc_count"
.map((hits: Array<any>) => this.hitsToBuckets(hits));
}
getArtistFromAlbumName(albumname: string): Observable<Album[]> {
return this.http
.post(this.elsUrl + 'album' + ElsService.ACTION_SEARCH,
JSON.stringify({
'query': {
'match_phrase' : {
'Album' : albumname
}
}
}), {headers: this.headers})
.map(res => res.json().hits.hits)
.map((hits: Array<any>) => {
// TODO Use a method (duplicated code ?)
const result: Array<Album> = [];
hits.forEach((hit) => {
result.push(hit._source);
});
return result;
});
}
private hitsToBuckets(hits: Array<any>): Bucket[] {
const result: Array<Bucket> = [];
hits.forEach((bucket) => {