diff --git a/build.gradle b/build.gradle index 46487ed..feeeb39 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ plugins { } group = 'com.josdem.jmetadata' -version = '1.3.6' +version = '1.3.7' java { toolchain { diff --git a/src/main/java/com/josdem/jmetadata/service/impl/LastFMCompleteServiceImpl.java b/src/main/java/com/josdem/jmetadata/service/impl/LastFMCompleteServiceImpl.java index 224ee99..119fa3e 100644 --- a/src/main/java/com/josdem/jmetadata/service/impl/LastFMCompleteServiceImpl.java +++ b/src/main/java/com/josdem/jmetadata/service/impl/LastFMCompleteServiceImpl.java @@ -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; @@ -44,26 +43,10 @@ public class LastFMCompleteServiceImpl implements LastFMCompleteService { private final ImageService imageService; private final LastFMAlbumHelper lastfmHelper; - private final HashMap 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) { @@ -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()); @@ -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); @@ -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); } diff --git a/src/main/java/com/josdem/jmetadata/util/ApplicationState.java b/src/main/java/com/josdem/jmetadata/util/ApplicationState.java index de4c0da..52b69d9 100644 --- a/src/main/java/com/josdem/jmetadata/util/ApplicationState.java +++ b/src/main/java/com/josdem/jmetadata/util/ApplicationState.java @@ -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 cache = new HashMap<>(); + public static final Map lastFmCache = new HashMap<>(); } diff --git a/src/test/java/com/josdem/jmetadata/service/LastFMCompleteServiceTest.java b/src/test/java/com/josdem/jmetadata/service/LastFMCompleteServiceTest.java index ec3bacb..ab7b278 100644 --- a/src/test/java/com/josdem/jmetadata/service/LastFMCompleteServiceTest.java +++ b/src/test/java/com/josdem/jmetadata/service/LastFMCompleteServiceTest.java @@ -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; @@ -80,7 +81,6 @@ void shouldCompleteIfNoMetadata(TestInfo testInfo) { setArtistAndAlbumExpectations(); assertTrue(completeService.canLastFMHelpToComplete(metadata)); - verify(lastfmHelper).getAlbum(artist, album); } @Test @@ -92,7 +92,6 @@ void shouldCompleteIfNoCoverArt(TestInfo testInfo) { metadata.setGenre(genre); assertTrue(completeService.canLastFMHelpToComplete(metadata)); - verify(lastfmHelper).getAlbum(artist, album); } @Test @@ -104,7 +103,6 @@ void shouldCompleteIfNoGenre(TestInfo testInfo) { metadata.setYear(year); assertTrue(completeService.canLastFMHelpToComplete(metadata)); - verify(lastfmHelper).getAlbum(artist, album); } @Test @@ -116,7 +114,6 @@ void shouldCompleteIfNoYear(TestInfo testInfo) { metadata.setGenre(genre); assertTrue(completeService.canLastFMHelpToComplete(metadata)); - verify(lastfmHelper).getAlbum(artist, album); } @Test @@ -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() { @@ -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)); } }