Added song/artist and album/artist synchronization

This commit is contained in:
CappielloAntonio 2021-04-18 17:08:07 +02:00
parent b577ce7e2e
commit ef1deea33a
13 changed files with 476 additions and 20 deletions

View file

@ -21,6 +21,16 @@ public class Album implements Parcelable {
@Ignore
public List<Song> songs;
/*
* TODO: Da capire chi tra albumArtist e artistItems sono i compositori e suonatori dell'album, oppure le comparse
* In teoria AlbumArtist sono i creatori, mentre ArtistItems le comparse
*/
@Ignore
public List<Artist> albumArtists;
@Ignore
public List<Artist> artistItems;
@NonNull
@PrimaryKey
@ColumnInfo(name = "id")
@ -60,12 +70,24 @@ public class Album implements Parcelable {
this.title = itemDto.getName();
this.year = itemDto.getProductionYear() != null ? itemDto.getProductionYear() : 0;
albumArtists = new ArrayList<>();
artistItems = new ArrayList<>();
if (itemDto.getAlbumArtists().size() != 0) {
this.artistId = itemDto.getAlbumArtists().get(0).getId();
this.artistName = itemDto.getAlbumArtists().get(0).getName();
} else if (itemDto.getArtistItems().size() != 0) {
itemDto.getAlbumArtists().forEach(artist -> {
albumArtists.add(new Artist(artist.getId(), artist.getName()));
});
}
else if (itemDto.getArtistItems().size() != 0) {
this.artistId = itemDto.getArtistItems().get(0).getId();
this.artistName = itemDto.getArtistItems().get(0).getName();
itemDto.getArtistItems().forEach(artist -> {
artistItems.add(new Artist(artist.getId(), artist.getName()));
});
}
this.primary = itemDto.getImageTags().containsKey(ImageType.Primary) ? id : null;

View file

@ -0,0 +1,61 @@
package com.cappielloantonio.play.model;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "album_artist_cross")
public class AlbumArtistCross {
@NonNull
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
private int id;
@ColumnInfo(name = "album_id")
private String albumId;
@ColumnInfo(name = "artist_id")
private String artistId;
@ColumnInfo(name = "is_producer")
private boolean isProducer;
public AlbumArtistCross(String albumId, String artistId, boolean isProducer) {
this.albumId = albumId;
this.artistId = artistId;
this.isProducer = isProducer;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAlbumId() {
return albumId;
}
public void setAlbumId(String albumId) {
this.albumId = albumId;
}
public String getArtistId() {
return artistId;
}
public void setArtistId(String artistId) {
this.artistId = artistId;
}
public boolean isProducer() {
return isProducer;
}
public void setProducer(boolean producer) {
isProducer = producer;
}
}

View file

@ -87,6 +87,12 @@ public class Artist implements Parcelable {
}
}
@Ignore
public Artist(String id, String name) {
this.id = id;
this.name = name;
}
@NonNull
public String getId() {
return id;

View file

@ -16,6 +16,8 @@ import org.jellyfin.apiclient.model.entities.ImageType;
import org.jellyfin.apiclient.model.entities.MediaStream;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@Entity(tableName = "song")
@ -46,6 +48,16 @@ public class Song implements Parcelable {
@Ignore
public static final String IS_FAVORITE = "IS_FAVORITE";
/*
* TODO: Da capire chi tra albumArtist e artistItems sono i compositori e suonatori dell'album, oppure le comparse
* In teoria AlbumArtist sono i creatori, mentre ArtistItems le comparse
*/
@Ignore
public List<Artist> albumArtists;
@Ignore
public List<Artist> artistItems;
@NonNull
@PrimaryKey
@ColumnInfo(name = "id")
@ -164,12 +176,24 @@ public class Song implements Parcelable {
this.albumId = itemDto.getAlbumId();
this.albumName = itemDto.getAlbum();
albumArtists = new ArrayList<>();
artistItems = new ArrayList<>();
if (itemDto.getAlbumArtists().size() != 0) {
this.artistId = itemDto.getAlbumArtists().get(0).getId();
this.artistName = itemDto.getAlbumArtists().get(0).getName();
} else if (itemDto.getArtistItems().size() != 0) {
itemDto.getAlbumArtists().forEach(artist -> {
albumArtists.add(new Artist(artist.getId(), artist.getName()));
});
}
else if (itemDto.getArtistItems().size() != 0) {
this.artistId = itemDto.getArtistItems().get(0).getId();
this.artistName = itemDto.getArtistItems().get(0).getName();
itemDto.getArtistItems().forEach(artist -> {
artistItems.add(new Artist(artist.getId(), artist.getName()));
});
}
this.primary = itemDto.getAlbumPrimaryImageTag() != null ? albumId : null;

View file

@ -0,0 +1,49 @@
package com.cappielloantonio.play.model;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "song_artist_cross")
public class SongArtistCross {
@NonNull
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
private int id;
@ColumnInfo(name = "song_id")
private String songId;
@ColumnInfo(name = "artist_id")
private String artistId;
public SongArtistCross(String songId, String artistId) {
this.songId = songId;
this.artistId = artistId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSongId() {
return songId;
}
public void setSongId(String songId) {
this.songId = songId;
}
public String getArtistId() {
return artistId;
}
public void setArtistId(String artistId) {
this.artistId = artistId;
}
}