Search in sources :

Example 1 with Scrobble

use of com.github.hakko.musiccabinet.domain.model.aggr.Scrobble in project musiccabinet by hakko.

the class ScrobbleServiceTest method differentUsersCanScrobbleSameTrack.

@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void differentUsersCanScrobbleSameTrack() throws ApplicationException {
    Scrobble scrobble1 = new Scrobble(user1, track1, false);
    Scrobble scrobble2 = new Scrobble(user2, track1, false);
    Message message1 = new GenericMessage<Scrobble>(scrobble1);
    Message message2 = new GenericMessage<Scrobble>(scrobble2);
    PollableChannel scrobbleChannel = mock(PollableChannel.class);
    when(scrobbleChannel.receive()).thenReturn(message1, message2, null);
    scrobbleService.setScrobbleChannel(scrobbleChannel);
    scrobbleService.receive();
    assertNotNull(scrobbleService.userScrobbles);
    assertEquals(2, scrobbleService.userScrobbles.keySet().size());
    assertEquals(1, scrobbleService.userScrobbles.get(scrobble1.getLastFmUser()).size());
    assertEquals(1, scrobbleService.userScrobbles.get(scrobble2.getLastFmUser()).size());
}
Also used : GenericMessage(org.springframework.integration.message.GenericMessage) Message(org.springframework.integration.Message) GenericMessage(org.springframework.integration.message.GenericMessage) PollableChannel(org.springframework.integration.core.PollableChannel) Scrobble(com.github.hakko.musiccabinet.domain.model.aggr.Scrobble) Test(org.junit.Test)

Example 2 with Scrobble

use of com.github.hakko.musiccabinet.domain.model.aggr.Scrobble in project musiccabinet by hakko.

the class ScrobbleServiceTest method previousScrobbleGetsRemovedOnImmediateOtherScrobble.

@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void previousScrobbleGetsRemovedOnImmediateOtherScrobble() throws InterruptedException, ApplicationException {
    // differently from test case above, a close subsequent scan of a
    // new track removes the previous scrobble from the queue (not the new).
    Scrobble scrobble1 = new Scrobble(user1, track1, false);
    Thread.sleep(3);
    Scrobble scrobble2 = new Scrobble(user1, track2, false);
    assertFalse(scrobble1.getStartTime().equals(scrobble2.getStartTime()));
    Message message1 = new GenericMessage<Scrobble>(scrobble1);
    Message message2 = new GenericMessage<Scrobble>(scrobble2);
    PollableChannel scrobbleChannel = mock(PollableChannel.class);
    when(scrobbleChannel.receive()).thenReturn(message1, message2, null);
    scrobbleService.setScrobbleChannel(scrobbleChannel);
    scrobbleService.receive();
    assertNotNull(scrobbleService.userScrobbles);
    assertEquals(1, scrobbleService.userScrobbles.keySet().size());
    assertEquals(1, scrobbleService.userScrobbles.get(scrobble1.getLastFmUser()).size());
    assertEquals(track2Id, scrobbleService.userScrobbles.get(scrobble1.getLastFmUser()).getFirst().getTrack().getId());
}
Also used : GenericMessage(org.springframework.integration.message.GenericMessage) Message(org.springframework.integration.Message) GenericMessage(org.springframework.integration.message.GenericMessage) PollableChannel(org.springframework.integration.core.PollableChannel) Scrobble(com.github.hakko.musiccabinet.domain.model.aggr.Scrobble) Test(org.junit.Test)

Example 3 with Scrobble

use of com.github.hakko.musiccabinet.domain.model.aggr.Scrobble in project musiccabinet by hakko.

the class ScrobbleServiceTest method scrobblerIgnoresTooNewSubmissions.

@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void scrobblerIgnoresTooNewSubmissions() throws ApplicationException {
    Scrobble scrobble = new Scrobble(user1, track1, false);
    Message message = new GenericMessage<Scrobble>(scrobble);
    PollableChannel scrobbleChannel = mock(PollableChannel.class);
    when(scrobbleChannel.receive()).thenReturn(message, (Message) null);
    scrobbleService.setScrobbleChannel(scrobbleChannel);
    scrobbleService.receive();
    scrobbleService.scrobbleTracks();
    assertNotNull(scrobbleService.userScrobbles);
    assertEquals(1, scrobbleService.userScrobbles.keySet().size());
    assertEquals(1, scrobbleService.userScrobbles.get(scrobble.getLastFmUser()).size());
    scrobble.setStartTime(scrobble.getStartTime().minusSeconds(10));
    scrobbleService.scrobbleTracks();
    assertEquals(1, scrobbleService.userScrobbles.get(scrobble.getLastFmUser()).size());
    scrobble.setStartTime(scrobble.getStartTime().minusMinutes(10));
    scrobbleService.scrobbleTracks();
    assertEquals(0, scrobbleService.userScrobbles.get(scrobble.getLastFmUser()).size());
}
Also used : GenericMessage(org.springframework.integration.message.GenericMessage) Message(org.springframework.integration.Message) GenericMessage(org.springframework.integration.message.GenericMessage) PollableChannel(org.springframework.integration.core.PollableChannel) Scrobble(com.github.hakko.musiccabinet.domain.model.aggr.Scrobble) Test(org.junit.Test)

Example 4 with Scrobble

use of com.github.hakko.musiccabinet.domain.model.aggr.Scrobble in project musiccabinet by hakko.

the class ScrobbleServiceTest method skipsIdenticalScrobble.

@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void skipsIdenticalScrobble() throws InterruptedException, ApplicationException {
    // a second scrobble of the same track is just silently thrown away.
    // verify by checking that it's the original scrobble (check startTime)
    // that remains in the queue when a dupe is scrobbled.
    Scrobble scrobble1 = new Scrobble(user1, track1, false);
    Thread.sleep(3);
    Scrobble scrobble2 = new Scrobble(user1, track1, false);
    Message message1 = new GenericMessage<Scrobble>(scrobble1);
    Message message2 = new GenericMessage<Scrobble>(scrobble2);
    PollableChannel scrobbleChannel = mock(PollableChannel.class);
    when(scrobbleChannel.receive()).thenReturn(message1, message2, null);
    scrobbleService.setScrobbleChannel(scrobbleChannel);
    scrobbleService.receive();
    assertNotNull(scrobbleService.userScrobbles);
    assertEquals(1, scrobbleService.userScrobbles.keySet().size());
    assertEquals(1, scrobbleService.userScrobbles.get(scrobble1.getLastFmUser()).size());
    assertEquals(scrobble1.getStartTime(), scrobbleService.userScrobbles.get(scrobble1.getLastFmUser()).getFirst().getStartTime());
}
Also used : GenericMessage(org.springframework.integration.message.GenericMessage) Message(org.springframework.integration.Message) GenericMessage(org.springframework.integration.message.GenericMessage) PollableChannel(org.springframework.integration.core.PollableChannel) Scrobble(com.github.hakko.musiccabinet.domain.model.aggr.Scrobble) Test(org.junit.Test)

Example 5 with Scrobble

use of com.github.hakko.musiccabinet.domain.model.aggr.Scrobble in project musiccabinet by hakko.

the class UpdateNowPlayingService method receive.

@SuppressWarnings("unchecked")
public void receive() {
    while (true) {
        Message<Scrobble> message = (Message<Scrobble>) scrobbleChannel.receive();
        if (message == null || message.equals(FINISHED_MESSAGE)) {
            break;
        } else {
            try {
                LOG.debug("Try updating now playing.");
                Scrobble scrobble = message.getPayload();
                Scrobble previous = getPrevious(scrobble);
                LOG.debug("previous: " + previous + ", scrobble = " + scrobble);
                if (previous != null && tooClose(scrobble, previous) && scrobble.getTrack().getId() == previous.getTrack().getId()) {
                    LOG.debug("Same track was scrobbled just recently, ignore.");
                } else {
                    addScrobble(scrobble);
                    WSResponse wsResponse = client.updateNowPlaying(message.getPayload());
                    LOG.debug("Successful: " + wsResponse.wasCallSuccessful());
                    LOG.debug("Response: " + wsResponse.getResponseBody());
                }
            } catch (ApplicationException e) {
                LOG.warn("Could not update now playing at last.fm.", e);
            }
        }
    }
}
Also used : ApplicationException(com.github.hakko.musiccabinet.exception.ApplicationException) Message(org.springframework.integration.Message) Scrobble(com.github.hakko.musiccabinet.domain.model.aggr.Scrobble) WSResponse(com.github.hakko.musiccabinet.ws.lastfm.WSResponse)

Aggregations

Scrobble (com.github.hakko.musiccabinet.domain.model.aggr.Scrobble)12 Test (org.junit.Test)5 Message (org.springframework.integration.Message)5 WSResponse (com.github.hakko.musiccabinet.ws.lastfm.WSResponse)4 PollableChannel (org.springframework.integration.core.PollableChannel)4 GenericMessage (org.springframework.integration.message.GenericMessage)4 LastFmUser (com.github.hakko.musiccabinet.domain.model.library.LastFmUser)3 ApplicationException (com.github.hakko.musiccabinet.exception.ApplicationException)2 Track (com.github.hakko.musiccabinet.domain.model.music.Track)1 NameValuePair (org.apache.http.NameValuePair)1 DateTime (org.joda.time.DateTime)1