Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plugins {
}

group = 'com.josdem.jmetadata'
version = '1.3.6'
version = '1.3.7'

java {
toolchain {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,12 @@
import com.josdem.jmetadata.model.Metadata;
import com.josdem.jmetadata.service.ImageService;
import com.josdem.jmetadata.service.LastFMCompleteService;
import com.josdem.jmetadata.util.ApplicationState;
import de.umass.lastfm.Album;
import de.umass.lastfm.ImageSize;
import java.awt.Image;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Date;
import java.util.HashMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -44,26 +43,10 @@ public class LastFMCompleteServiceImpl implements LastFMCompleteService {
private final ImageService imageService;
private final LastFMAlbumHelper lastfmHelper;

private final HashMap<String, Album> cachedAlbums = new HashMap<>();

public boolean canLastFMHelpToComplete(Metadata metadata) {
String artist = metadata.getArtist();
String album = metadata.getAlbum();

if (isMetadataIncomplete(metadata) && hasAlbumAndArtist(artist, album)) {
Album info = cachedAlbums.get(metadata.getAlbum());
if (info == null) {
info = lastfmHelper.getAlbum(artist, album);
if (info != null) {
String imageUrl = info.getImageURL(ImageSize.EXTRALARGE);
if (!StringUtils.isEmpty(imageUrl)) {
cachedAlbums.put(metadata.getAlbum(), info);
}
}
}
return info != null;
}
return false;
var artist = metadata.getArtist();
var album = metadata.getAlbum();
return (isMetadataIncomplete(metadata) && hasAlbumAndArtist(artist, album));
}

private boolean hasAlbumAndArtist(String artist, String album) {
Expand All @@ -76,21 +59,26 @@ private boolean isMetadataIncomplete(Metadata metadata) {
|| StringUtils.isEmpty(metadata.getGenre()));
}

public LastfmAlbum getLastFM(Metadata metadata) throws MalformedURLException, IOException {
LastfmAlbum lastfmAlbum = new LastfmAlbum();
public LastfmAlbum getLastFM(Metadata metadata) throws IOException {
if (ApplicationState.lastFmCache.get(metadata.getAlbum()) == null) {
var album = lastfmHelper.getAlbum(metadata.getArtist(), metadata.getAlbum());
if (album != null) {
ApplicationState.lastFmCache.put(metadata.getAlbum(), album);
}
}
var lastfmAlbum = new LastfmAlbum();
setCoverArt(metadata, lastfmAlbum);
setYear(metadata, lastfmAlbum);
setGenre(metadata, lastfmAlbum);
return lastfmAlbum;
}

private void setCoverArt(Metadata metadata, LastfmAlbum lastfmAlbum)
throws MalformedURLException, IOException {
private void setCoverArt(Metadata metadata, LastfmAlbum lastfmAlbum) throws IOException {
if (metadata.getCoverArt() != null) {
return;
}
String imageURL = StringUtils.EMPTY;
Album album = cachedAlbums.get(metadata.getAlbum());
Album album = ApplicationState.lastFmCache.get(metadata.getAlbum());
if (album != null) {
imageURL = album.getImageURL(ImageSize.EXTRALARGE);
log.info("imageURL: {} from album: {}", imageURL, album.getName());
Expand All @@ -105,7 +93,7 @@ private void setGenre(Metadata metadata, LastfmAlbum lastfmAlbum) {
if (!StringUtils.isEmpty(metadata.getGenre()) || StringUtils.isEmpty(metadata.getAlbum())) {
return;
}
Album album = cachedAlbums.get(metadata.getAlbum());
Album album = ApplicationState.lastFmCache.get(metadata.getAlbum());
String genre = StringUtils.EMPTY;
if (album != null) {
genre = lastfmHelper.getGenre(album);
Expand All @@ -123,14 +111,14 @@ private void setYear(Metadata metadata, LastfmAlbum lastfmAlbum) {
return;
}
Date release = null;
Album album = cachedAlbums.get(metadata.getAlbum());
Album album = ApplicationState.lastFmCache.get(metadata.getAlbum());
if (album != null) {
release = album.getReleaseDate();
}
if (release != null) {
log.info("Year date format: " + release);
log.info("Year date format: {}", release);
lastfmAlbum.setYear(lastfmHelper.getYear(release));
log.info("Year metadata format: " + lastfmAlbum.getYear());
log.info("Year metadata format: {}", lastfmAlbum.getYear());
} else {
lastfmAlbum.setYear(StringUtils.EMPTY);
}
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/josdem/jmetadata/util/ApplicationState.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@
package com.josdem.jmetadata.util;

import com.josdem.jmetadata.model.MusicBrainzResponse;
import de.umass.lastfm.Album;
import java.util.HashMap;
import java.util.Map;

public class ApplicationState {

public static final Map<String, MusicBrainzResponse> cache = new HashMap<>();
public static final Map<String, Album> lastFmCache = new HashMap<>();
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.josdem.jmetadata.model.LastfmAlbum;
import com.josdem.jmetadata.model.Metadata;
import com.josdem.jmetadata.service.impl.LastFMCompleteServiceImpl;
import com.josdem.jmetadata.util.ApplicationState;
import de.umass.lastfm.Album;
import de.umass.lastfm.ImageSize;
import java.awt.Image;
Expand Down Expand Up @@ -80,7 +81,6 @@ void shouldCompleteIfNoMetadata(TestInfo testInfo) {
setArtistAndAlbumExpectations();

assertTrue(completeService.canLastFMHelpToComplete(metadata));
verify(lastfmHelper).getAlbum(artist, album);
}

@Test
Expand All @@ -92,7 +92,6 @@ void shouldCompleteIfNoCoverArt(TestInfo testInfo) {
metadata.setGenre(genre);

assertTrue(completeService.canLastFMHelpToComplete(metadata));
verify(lastfmHelper).getAlbum(artist, album);
}

@Test
Expand All @@ -104,7 +103,6 @@ void shouldCompleteIfNoGenre(TestInfo testInfo) {
metadata.setYear(year);

assertTrue(completeService.canLastFMHelpToComplete(metadata));
verify(lastfmHelper).getAlbum(artist, album);
}

@Test
Expand All @@ -116,7 +114,6 @@ void shouldCompleteIfNoYear(TestInfo testInfo) {
metadata.setGenre(genre);

assertTrue(completeService.canLastFMHelpToComplete(metadata));
verify(lastfmHelper).getAlbum(artist, album);
}

@Test
Expand Down Expand Up @@ -162,13 +159,13 @@ void shouldGetLastfm(TestInfo testInfo) throws Exception {
setArtistAndAlbumExpectations();
setImageExpectations();
setYearAndGenreExpectations();
completeService.canLastFMHelpToComplete(metadata);

var lastFMalbum = completeService.getLastFM(metadata);

assertEquals(year, lastFMalbum.getYear());
assertEquals(genre, lastFMalbum.getGenre());
assertEquals(image, lastFMalbum.getImageIcon());
assertEquals(albumFromLastFM, ApplicationState.lastFmCache.get(album));
}

private void setYearAndGenreExpectations() {
Expand Down Expand Up @@ -242,13 +239,13 @@ void shouldNotAskForYearIfAlreadyHasOne(TestInfo testInfo) throws Exception {

@Test
@DisplayName("not complete from lastFM since it does not have info")
void shouldNotCompleteFromLastFM(TestInfo testInfo) {
void shouldNotCompleteFromLastFM(TestInfo testInfo) throws IOException {
log.info(testInfo.getDisplayName());
setArtistAndAlbumExpectations();
when(lastfmHelper.getAlbum(artist, album)).thenReturn(null);

assertFalse(completeService.canLastFMHelpToComplete(metadata));
completeService.getLastFM(metadata);

verify(lastfmHelper).getAlbum(artist, album);
assertNull(ApplicationState.lastFmCache.get(album));
}
}