Skip to content

Commit

Permalink
Chart methods
Browse files Browse the repository at this point in the history
  • Loading branch information
yvasyliev committed Jan 6, 2024
1 parent 016f191 commit f9af7f5
Show file tree
Hide file tree
Showing 9 changed files with 273 additions and 19 deletions.
130 changes: 130 additions & 0 deletions src/main/java/io/github/yvasyliev/deezer/DeezerClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
import io.github.yvasyliev.deezer.methods.PagingMethod;
import io.github.yvasyliev.deezer.objects.Album;
import io.github.yvasyliev.deezer.objects.Artist;
import io.github.yvasyliev.deezer.objects.Chart;
import io.github.yvasyliev.deezer.objects.Genre;
import io.github.yvasyliev.deezer.objects.Page;
import io.github.yvasyliev.deezer.objects.Pageable;
import io.github.yvasyliev.deezer.objects.Playlist;
import io.github.yvasyliev.deezer.objects.Podcast;
import io.github.yvasyliev.deezer.objects.Track;
import io.github.yvasyliev.deezer.objects.User;
import lombok.AllArgsConstructor;
Expand All @@ -18,15 +20,18 @@
@AllArgsConstructor
public class DeezerClient {
private static final String ALBUMS = "/albums";
private static final String ARTISTS = "/artists";
private static final String FANS = "/fans";
private static final String PLAYLISTS = "/playlists";
private static final String PODCASTS = "/podcasts";
private static final String RADIO = "/radio";
private static final String RELATED = "/related";
private static final String TOP = "/top";
private static final String TRACKS = "/tracks";

private static final String GET_ALBUM_TEMPLATE = "/album/%d";
private static final String GET_ARTIST_TEMPLATE = "/artist/%d";
private static final String GET_CHART_TEMPLATE = "/chart/%d";
private static final String GET_GENRE_TEMPLATE = "/genre/%d";

private static final String GET_ALBUM_FANS_TEMPLATE = GET_ALBUM_TEMPLATE + FANS;
Expand All @@ -37,6 +42,11 @@ public class DeezerClient {
private static final String GET_ARTIST_RADIO_TEMPLATE = GET_ARTIST_TEMPLATE + RADIO;
private static final String GET_ARTIST_RELATED_TEMPLATE = GET_ARTIST_TEMPLATE + RELATED;
private static final String GET_ARTIST_TOP_TEMPLATE = GET_ARTIST_TEMPLATE + TOP;
private static final String GET_CHART_ALBUMS_TEMPLATE = GET_CHART_TEMPLATE + ALBUMS;
private static final String GET_CHART_ARTIST_TEMPLATE = GET_CHART_TEMPLATE + ARTISTS;
private static final String GET_CHART_PLAYLISTS_TEMPLATE = GET_CHART_TEMPLATE + PLAYLISTS;
private static final String GET_CHART_PODCASTS_TEMPLATE = GET_CHART_TEMPLATE + PODCASTS;
private static final String GET_CHART_TRACKS_TEMPLATE = GET_CHART_TEMPLATE + TRACKS;

private static final TypeReference<Page<Album>> ALBUM_PAGE_TYPE = new TypeReference<Page<Album>>() {
};
Expand All @@ -46,15 +56,21 @@ public class DeezerClient {
};
private static final TypeReference<Artist> ARTIST_TYPE = new TypeReference<Artist>() {
};
private static final TypeReference<Chart> CHART_TYPE = new TypeReference<Chart>() {
};
private static final TypeReference<Genre> GENRE_TYPE = new TypeReference<Genre>() {
};
private static final TypeReference<Page<Playlist>> PLAYLIST_PAGE_TYPE = new TypeReference<Page<Playlist>>() {
};
private static final TypeReference<Page<Podcast>> PODCAST_PAGE_TYPE = new TypeReference<Page<Podcast>>() {
};
private static final TypeReference<Page<Track>> TRACK_PAGE_TYPE = new TypeReference<Page<Track>>() {
};
private static final TypeReference<Page<User>> USER_PAGE_TYPE = new TypeReference<Page<User>>() {
};

private static final long DEFAULT_CHART_ID = 0;

private String accessToken;
private DeezerContext context;

Expand Down Expand Up @@ -166,6 +182,120 @@ public PagingMethod<Playlist> getArtistPlaylists(long artistId) {
return pagingMethod(GET_ARTIST_PLAYLISTS_TEMPLATE, artistId, PLAYLIST_PAGE_TYPE);
}

/**
* Returns a chart of tracks, albums, artists, playlists and podcasts for {@code chart_id=0}.
*
* @return a chart of tracks, albums, artists, playlists and podcasts.
*/
public GetMethod<Chart> getChart() {
return getChart(DEFAULT_CHART_ID);
}

/**
* Returns a chart of tracks, albums, artists, playlists and podcasts by a specified ID.
*
* @param chartId chart ID.
* @return a chart of tracks, albums, artists, playlists and podcasts.
*/
public GetMethod<Chart> getChart(long chartId) {
return getMethod(GET_CHART_TEMPLATE, chartId, CHART_TYPE);
}

/**
* Returns a chart of tracks for {@code chart_id=0}.
*
* @return a chart of tracks.
*/
public PagingMethod<Track> getChartTracks() {
return getChartTracks(DEFAULT_CHART_ID);
}

/**
* Returns a chart of tracks by a specified ID.
*
* @param chartId chart ID.
* @return a chart of tracks.
*/
public PagingMethod<Track> getChartTracks(long chartId) {
return pagingMethod(GET_CHART_TRACKS_TEMPLATE, chartId, TRACK_PAGE_TYPE);
}

/**
* Returns a chart of albums for {@code chart_id=0}.
*
* @return a chart of albums.
*/
public PagingMethod<Album> getChartAlbums() {
return getChartAlbums(DEFAULT_CHART_ID);
}

/**
* Returns a chart of albums by a specified ID.
*
* @param chartId chart ID.
* @return a chart of albums.
*/
public PagingMethod<Album> getChartAlbums(long chartId) {
return pagingMethod(GET_CHART_ALBUMS_TEMPLATE, chartId, ALBUM_PAGE_TYPE);
}

/**
* Returns a chart of artists for {@code chart_id=0}.
*
* @return a chart of artists.
*/
public PagingMethod<Artist> getChartArtists() {
return getChartArtists(DEFAULT_CHART_ID);
}

/**
* Returns a chart of artists by a specified ID.
*
* @param chartId chart ID.
* @return a chart of artists.
*/
public PagingMethod<Artist> getChartArtists(long chartId) {
return pagingMethod(GET_CHART_ARTIST_TEMPLATE, chartId, ARTIST_PAGE_TYPE);
}

/**
* Returns a chart of playlists for {@code chart_id=0}.
*
* @return a chart of playlists.
*/
public PagingMethod<Playlist> getChartPlaylists() {
return getChartPlaylists(DEFAULT_CHART_ID);
}

/**
* Returns a chart of playlists by a specified ID.
*
* @param chartId chart ID.
* @return a chart of playlists.
*/
public PagingMethod<Playlist> getChartPlaylists(long chartId) {
return pagingMethod(GET_CHART_PLAYLISTS_TEMPLATE, chartId, PLAYLIST_PAGE_TYPE);
}

/**
* Returns a chart of podcasts for {@code chart_id=0}.
*
* @return a chart of podcasts.
*/
public PagingMethod<Podcast> getChartPodcasts() {
return getChartPodcasts(DEFAULT_CHART_ID);
}

/**
* Returns a chart of podcasts by a specified ID.
*
* @param chartId chart ID.
* @return a chart of podcasts.
*/
public PagingMethod<Podcast> getChartPodcasts(long chartId) {
return pagingMethod(GET_CHART_PODCASTS_TEMPLATE, chartId, PODCAST_PAGE_TYPE);
}

public GetMethod<Genre> getGenre(long genreId) {
return getMethod(GET_GENRE_TEMPLATE, genreId, GENRE_TYPE);
}
Expand Down
5 changes: 1 addition & 4 deletions src/main/java/io/github/yvasyliev/deezer/objects/Album.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.github.yvasyliev.deezer.objects;

import api.deezer.objects.ChartMember;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
Expand All @@ -13,7 +12,6 @@
import io.github.yvasyliev.deezer.json.MethodToUrlConverter;
import io.github.yvasyliev.deezer.methods.PagingMethod;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.net.URL;
import java.time.Duration;
Expand All @@ -23,9 +21,8 @@
/**
* An album object.
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class Album extends ChartMember implements BaseObject, Pageable {
public class Album implements BaseObject, Pageable {
/**
* The Deezer album id.
*/
Expand Down
41 changes: 41 additions & 0 deletions src/main/java/io/github/yvasyliev/deezer/objects/Chart.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package io.github.yvasyliev.deezer.objects;


import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

/**
* Charts of a specified genre
*/
@Data
public class Chart {
/**
* list of {@link Track}.
*/
@JsonProperty("tracks")
private Page<Track> tracks;

/**
* list of {@link Album}.
*/
@JsonProperty("albums")
private Page<Album> albums;

/**
* list of {@link Artist}.
*/
@JsonProperty("artists")
private Page<Artist> artists;

/**
* list of {@link Playlist}.
*/
@JsonProperty("playlists")
private Page<Playlist> playlists;

/**
* list of {@link Podcast}.
*/
@JsonProperty("podcasts")
private Page<Playlist> podcasts;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.github.yvasyliev.deezer.objects;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
Expand All @@ -10,7 +9,6 @@
*/
@EqualsAndHashCode(callSuper = true)
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Contributor extends Artist {
/**
* Contributor's role.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.github.yvasyliev.deezer.objects;

import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;

@AllArgsConstructor
public enum ExplicitContent {
NOT_EXPLICIT(0),
EXPLICIT(1),
Expand All @@ -11,10 +13,6 @@ public enum ExplicitContent {

private final int id;

ExplicitContent(int id) {
this.id = id;
}

@JsonValue
public int getId() {
return id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public enum ObjectType {
@JsonProperty("artist") ARTIST,
@JsonProperty("genre") GENRE,
@JsonProperty("playlist") PLAYLIST,
@JsonProperty("podcast") PODCAST,
@JsonProperty("track") TRACK,
@JsonProperty("user") USER;
@JsonProperty("user") USER
}
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
package io.github.yvasyliev.deezer.objects;

import api.deezer.objects.ChartMember;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.github.yvasyliev.deezer.json.DurationToLongConverter;
import io.github.yvasyliev.deezer.json.LongToDurationConverter;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.net.URL;
import java.time.Duration;

/**
* A playlist object.
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class Playlist extends ChartMember implements BaseObject, Pageable {
public class Playlist implements BaseObject, Pageable {
/**
* The playlist's Deezer id.
*/
Expand Down
Loading

0 comments on commit f9af7f5

Please sign in to comment.