2015-01-14 12:12:47 +01:00
|
|
|
/*
|
|
|
|
* Copyright 2015 Synced Synapse. All rights reserved.
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
2015-03-09 22:35:18 +01:00
|
|
|
package org.xbmc.kore.service;
|
2015-01-14 12:12:47 +01:00
|
|
|
|
|
|
|
import android.content.ContentValues;
|
|
|
|
|
2015-03-09 22:35:18 +01:00
|
|
|
import org.xbmc.kore.jsonrpc.type.VideoType;
|
|
|
|
import org.xbmc.kore.jsonrpc.type.AudioType;
|
|
|
|
import org.xbmc.kore.jsonrpc.type.LibraryType;
|
|
|
|
import org.xbmc.kore.provider.MediaContract;
|
|
|
|
import org.xbmc.kore.utils.Utils;
|
2015-01-14 12:12:47 +01:00
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Util functions for the Library Sync Service
|
|
|
|
*/
|
|
|
|
public class SyncUtils {
|
|
|
|
|
|
|
|
public static final String LIST_DELIMETER = ", ";
|
|
|
|
|
|
|
|
/**
|
2015-03-09 22:35:18 +01:00
|
|
|
* Returns {@link android.content.ContentValues} from a {@link org.xbmc.kore.jsonrpc.type.VideoType.DetailsMovie} movie
|
2015-01-14 12:12:47 +01:00
|
|
|
* @param hostId Host id for this movie
|
2015-03-09 22:35:18 +01:00
|
|
|
* @param movie {@link org.xbmc.kore.jsonrpc.type.VideoType.DetailsMovie}
|
2015-01-14 12:12:47 +01:00
|
|
|
* @return {@link android.content.ContentValues} with the movie values
|
|
|
|
*/
|
|
|
|
public static ContentValues contentValuesFromMovie(int hostId, VideoType.DetailsMovie movie) {
|
|
|
|
ContentValues movieValues = new ContentValues();
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.HOST_ID, hostId);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.MOVIEID, movie.movieid);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.FANART, movie.fanart);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.THUMBNAIL, movie.thumbnail);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.PLAYCOUNT, movie.playcount);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.DATEADDED, movie.dateadded);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.TITLE, movie.title);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.FILE, movie.file);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.PLOT, movie.plot);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.DIRECTOR, Utils.listStringConcat(movie.director, LIST_DELIMETER));
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.RUNTIME, movie.runtime);
|
|
|
|
if (movie.streamdetails != null) {
|
|
|
|
if (movie.streamdetails.audio.size() > 0) {
|
|
|
|
// Get the stream with the most channels and concat all the languages
|
|
|
|
VideoType.Streams.Audio selectedStream = movie.streamdetails.audio.get(0);
|
|
|
|
List<String> languages = new ArrayList<String>(movie.streamdetails.audio.size());
|
|
|
|
for (int j = 0; j < movie.streamdetails.audio.size(); j++) {
|
|
|
|
VideoType.Streams.Audio stream = movie.streamdetails.audio.get(0);
|
|
|
|
if (stream.channels > selectedStream.channels) {
|
|
|
|
selectedStream = stream;
|
|
|
|
}
|
|
|
|
languages.add(stream.language);
|
|
|
|
}
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.AUDIO_CHANNELS, selectedStream.channels);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.AUDIO_CODEC, selectedStream.codec);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.AUDIO_LANGUAGE,
|
|
|
|
Utils.listStringConcat(languages, LIST_DELIMETER));
|
|
|
|
}
|
|
|
|
if (movie.streamdetails.subtitle.size() > 0) {
|
|
|
|
// Concat all subtitle languages
|
|
|
|
ArrayList<String> subtitles = new ArrayList<String>(movie.streamdetails.subtitle.size());
|
|
|
|
for (int j = 0; j < movie.streamdetails.subtitle.size(); j++) {
|
|
|
|
subtitles.add(movie.streamdetails.subtitle.get(j).language);
|
|
|
|
}
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.SUBTITLES_LANGUAGES,
|
|
|
|
Utils.listStringConcat(subtitles, LIST_DELIMETER));
|
|
|
|
}
|
|
|
|
if (movie.streamdetails.video.size() > 0) {
|
|
|
|
// We're only getting the first video channel...
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.VIDEO_ASPECT,
|
|
|
|
movie.streamdetails.video.get(0).aspect);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.VIDEO_CODEC,
|
|
|
|
movie.streamdetails.video.get(0).codec);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.VIDEO_HEIGHT,
|
|
|
|
movie.streamdetails.video.get(0).height);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.VIDEO_WIDTH,
|
|
|
|
movie.streamdetails.video.get(0).width);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.COUNTRIES,
|
|
|
|
Utils.listStringConcat(movie.country, LIST_DELIMETER));
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.GENRES,
|
|
|
|
Utils.listStringConcat(movie.genre, LIST_DELIMETER));
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.IMDBNUMBER, movie.imdbnumber);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.MPAA, movie.mpaa);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.RATING, movie.rating);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.SET, movie.set);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.SETID, movie.setid);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.STUDIOS,
|
|
|
|
Utils.listStringConcat(movie.studio, LIST_DELIMETER));
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.TAGLINE, movie.tagline);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.TOP250, movie.top250);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.TRAILER, movie.trailer);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.VOTES, movie.votes);
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.WRITERS,
|
|
|
|
Utils.listStringConcat(movie.writer, LIST_DELIMETER));
|
|
|
|
movieValues.put(MediaContract.MoviesColumns.YEAR, movie.year);
|
|
|
|
|
|
|
|
return movieValues;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2015-03-09 22:35:18 +01:00
|
|
|
* Returns {@link android.content.ContentValues} from a {@link org.xbmc.kore.jsonrpc.type.VideoType.Cast} movie cast
|
2015-01-14 12:12:47 +01:00
|
|
|
* @param hostId Host id for this movie
|
2015-03-09 22:35:18 +01:00
|
|
|
* @param cast {@link org.xbmc.kore.jsonrpc.type.VideoType.Cast}
|
2015-01-14 12:12:47 +01:00
|
|
|
* @return {@link android.content.ContentValues} with the cast values
|
|
|
|
*/
|
|
|
|
public static ContentValues contentValuesFromCast(int hostId, VideoType.Cast cast) {
|
|
|
|
ContentValues castValues = new ContentValues();
|
|
|
|
castValues.put(MediaContract.MovieCastColumns.HOST_ID, hostId);
|
|
|
|
castValues.put(MediaContract.MovieCastColumns.NAME, cast.name);
|
|
|
|
castValues.put(MediaContract.MovieCastColumns.ORDER, cast.order);
|
|
|
|
castValues.put(MediaContract.MovieCastColumns.ROLE, cast.role);
|
|
|
|
castValues.put(MediaContract.MovieCastColumns.THUMBNAIL, cast.thumbnail);
|
|
|
|
|
|
|
|
return castValues;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns {@link android.content.ContentValues} from a {@link VideoType.DetailsTVShow} show
|
|
|
|
* @param hostId Host id for this tvshow
|
2015-03-09 22:35:18 +01:00
|
|
|
* @param tvshow {@link org.xbmc.kore.jsonrpc.type.VideoType.DetailsTVShow}
|
2015-01-14 12:12:47 +01:00
|
|
|
* @return {@link android.content.ContentValues} with the tvshow values
|
|
|
|
*/
|
|
|
|
public static ContentValues contentValuesFromTVShow(int hostId, VideoType.DetailsTVShow tvshow) {
|
|
|
|
ContentValues tvshowValues = new ContentValues();
|
|
|
|
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.HOST_ID, hostId);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.TVSHOWID, tvshow.tvshowid);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.FANART, tvshow.fanart);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.THUMBNAIL, tvshow.thumbnail);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.PLAYCOUNT, tvshow.playcount);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.TITLE, tvshow.title);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.DATEADDED, tvshow.dateadded);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.FILE, tvshow.file);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.PLOT, tvshow.plot);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.EPISODE, tvshow.episode);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.IMDBNUMBER, tvshow.imdbnumber);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.MPAA, tvshow.mpaa);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.PREMIERED, tvshow.premiered);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.RATING, tvshow.rating);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.STUDIO,
|
|
|
|
Utils.listStringConcat(tvshow.studio, LIST_DELIMETER));
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.WATCHEDEPISODES, tvshow.watchedepisodes);
|
|
|
|
tvshowValues.put(MediaContract.TVShowsColumns.GENRES,
|
|
|
|
Utils.listStringConcat(tvshow.genre, LIST_DELIMETER));
|
|
|
|
|
|
|
|
return tvshowValues;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns {@link android.content.ContentValues} from a {@link VideoType.DetailsSeason} tv
|
|
|
|
* show season
|
|
|
|
* @param hostId Host id for this season
|
2015-03-09 22:35:18 +01:00
|
|
|
* @param season {@link org.xbmc.kore.jsonrpc.type.VideoType.DetailsSeason}
|
2015-01-14 12:12:47 +01:00
|
|
|
* @return {@link android.content.ContentValues} with the season values
|
|
|
|
*/
|
|
|
|
public static ContentValues contentValuesFromSeason(int hostId, VideoType.DetailsSeason season) {
|
|
|
|
ContentValues seasonValues = new ContentValues();
|
|
|
|
|
|
|
|
seasonValues.put(MediaContract.SeasonsColumns.HOST_ID, hostId);
|
|
|
|
seasonValues.put(MediaContract.SeasonsColumns.TVSHOWID, season.tvshowid);
|
|
|
|
seasonValues.put(MediaContract.SeasonsColumns.SEASON, season.season);
|
|
|
|
seasonValues.put(MediaContract.SeasonsColumns.LABEL, season.label);
|
|
|
|
seasonValues.put(MediaContract.SeasonsColumns.FANART, season.fanart);
|
|
|
|
seasonValues.put(MediaContract.SeasonsColumns.THUMBNAIL, season.thumbnail);
|
|
|
|
seasonValues.put(MediaContract.SeasonsColumns.EPISODE, season.episode);
|
|
|
|
seasonValues.put(MediaContract.SeasonsColumns.SHOWTITLE, season.showtitle);
|
|
|
|
seasonValues.put(MediaContract.SeasonsColumns.WATCHEDEPISODES, season.watchedepisodes);
|
|
|
|
return seasonValues;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns {@link android.content.ContentValues} from a {@link VideoType.DetailsEpisode} tv show episode
|
|
|
|
* @param hostId Host id for this episode
|
|
|
|
* @param episode {@link VideoType.DetailsEpisode}
|
|
|
|
* @return {@link android.content.ContentValues} with the eppisode values
|
|
|
|
*/
|
|
|
|
public static ContentValues contentValuesFromEpisode(int hostId, VideoType.DetailsEpisode episode) {
|
|
|
|
ContentValues episodeValues = new ContentValues();
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.HOST_ID, hostId);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.EPISODEID, episode.episodeid);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.TVSHOWID, episode.tvshowid);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.SEASON, episode.season);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.EPISODE, episode.episode);
|
|
|
|
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.FANART, episode.fanart);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.THUMBNAIL, episode.thumbnail);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.PLAYCOUNT, episode.playcount);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.DATEADDED, episode.dateadded);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.TITLE, episode.title);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.FILE, episode.file);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.PLOT, episode.plot);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.DIRECTOR, Utils.listStringConcat(episode.director, LIST_DELIMETER));
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.RUNTIME, episode.runtime);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.FIRSTAIRED, episode.firstaired);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.RATING, episode.rating);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.SHOWTITLE, episode.showtitle);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.WRITER, Utils.listStringConcat(episode.writer, LIST_DELIMETER));
|
|
|
|
|
|
|
|
if (episode.streamdetails.audio.size() > 0) {
|
|
|
|
// Get the stream with the most channels and concat all the languages
|
|
|
|
VideoType.Streams.Audio selectedStream = episode.streamdetails.audio.get(0);
|
|
|
|
List<String> languages = new ArrayList<String>(episode.streamdetails.audio.size());
|
|
|
|
for (int j = 0; j < episode.streamdetails.audio.size(); j++) {
|
|
|
|
VideoType.Streams.Audio stream = episode.streamdetails.audio.get(0);
|
|
|
|
if (stream.channels > selectedStream.channels) {
|
|
|
|
selectedStream = stream;
|
|
|
|
}
|
|
|
|
languages.add(stream.language);
|
|
|
|
}
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.AUDIO_CHANNELS, selectedStream.channels);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.AUDIO_CODEC, selectedStream.codec);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.AUDIO_LANGUAGE, Utils.listStringConcat(languages, LIST_DELIMETER));
|
|
|
|
}
|
|
|
|
if (episode.streamdetails.subtitle.size() > 0) {
|
|
|
|
// Concat all subtitle languages
|
|
|
|
ArrayList<String> subtitles = new ArrayList<String>(episode.streamdetails.subtitle.size());
|
|
|
|
for (int j = 0; j < episode.streamdetails.subtitle.size(); j++) {
|
|
|
|
subtitles.add(episode.streamdetails.subtitle.get(j).language);
|
|
|
|
}
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.SUBTITLES_LANGUAGES, Utils.listStringConcat(subtitles, LIST_DELIMETER));
|
|
|
|
}
|
|
|
|
if (episode.streamdetails.video.size() > 0) {
|
|
|
|
// We're only getting the first video channel...
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.VIDEO_ASPECT,
|
|
|
|
episode.streamdetails.video.get(0).aspect);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.VIDEO_CODEC,
|
|
|
|
episode.streamdetails.video.get(0).codec);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.VIDEO_HEIGHT,
|
|
|
|
episode.streamdetails.video.get(0).height);
|
|
|
|
episodeValues.put(MediaContract.EpisodesColumns.VIDEO_WIDTH,
|
|
|
|
episode.streamdetails.video.get(0).width);
|
|
|
|
}
|
|
|
|
|
|
|
|
return episodeValues;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns {@link android.content.ContentValues} from a {@link AudioType.DetailsArtist} artist
|
|
|
|
* @param hostId Host id for this movie
|
|
|
|
* @param artist {@link AudioType.DetailsArtist}
|
|
|
|
* @return {@link android.content.ContentValues} with the artist values
|
|
|
|
*/
|
|
|
|
public static ContentValues contentValuesFromArtist(int hostId, AudioType.DetailsArtist artist) {
|
|
|
|
ContentValues castValues = new ContentValues();
|
|
|
|
castValues.put(MediaContract.ArtistsColumns.HOST_ID, hostId);
|
|
|
|
castValues.put(MediaContract.ArtistsColumns.ARTISTID, artist.artistid);
|
|
|
|
castValues.put(MediaContract.ArtistsColumns.ARTIST, artist.artist);
|
|
|
|
castValues.put(MediaContract.ArtistsColumns.DESCRIPTION, artist.description);
|
|
|
|
castValues.put(MediaContract.ArtistsColumns.GENRE,
|
|
|
|
Utils.listStringConcat(artist.genre, LIST_DELIMETER));
|
|
|
|
castValues.put(MediaContract.ArtistsColumns.FANART, artist.fanart);
|
|
|
|
castValues.put(MediaContract.ArtistsColumns.THUMBNAIL, artist.thumbnail);
|
|
|
|
|
|
|
|
return castValues;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns {@link android.content.ContentValues} from a {@link LibraryType.DetailsGenre} genre
|
|
|
|
* @param hostId Host id for the genres
|
|
|
|
* @param genre {@link LibraryType.DetailsGenre}
|
|
|
|
* @return {@link android.content.ContentValues} with the genre values
|
|
|
|
*/
|
|
|
|
public static ContentValues contentValuesFromAudioGenre(int hostId, LibraryType.DetailsGenre genre) {
|
|
|
|
ContentValues castValues = new ContentValues();
|
|
|
|
castValues.put(MediaContract.AudioGenres.HOST_ID, hostId);
|
|
|
|
castValues.put(MediaContract.AudioGenres.GENREID, genre.genreid);
|
|
|
|
castValues.put(MediaContract.AudioGenres.TITLE, genre.title);
|
|
|
|
castValues.put(MediaContract.AudioGenres.THUMBNAIL, genre.thumbnail);
|
|
|
|
|
|
|
|
return castValues;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns {@link android.content.ContentValues} from a {@link AudioType.DetailsAlbum} album
|
|
|
|
* @param hostId Host id for the album
|
|
|
|
* @param album {@link AudioType.DetailsAlbum}
|
|
|
|
* @return {@link android.content.ContentValues} with the album values
|
|
|
|
*/
|
|
|
|
public static ContentValues contentValuesFromAlbum(int hostId, AudioType.DetailsAlbum album) {
|
|
|
|
ContentValues castValues = new ContentValues();
|
|
|
|
castValues.put(MediaContract.Albums.HOST_ID, hostId);
|
|
|
|
castValues.put(MediaContract.Albums.ALBUMID, album.albumid);
|
|
|
|
castValues.put(MediaContract.Albums.FANART, album.fanart);
|
|
|
|
castValues.put(MediaContract.Albums.THUMBNAIL, album.thumbnail);
|
|
|
|
castValues.put(MediaContract.Albums.DISPLAYARTIST, album.displayartist);
|
|
|
|
castValues.put(MediaContract.Albums.RATING, album.rating);
|
|
|
|
castValues.put(MediaContract.Albums.TITLE, album.title);
|
|
|
|
castValues.put(MediaContract.Albums.YEAR, album.year);
|
|
|
|
castValues.put(MediaContract.Albums.ALBUMLABEL, album.albumlabel);
|
|
|
|
castValues.put(MediaContract.Albums.DESCRIPTION, album.description);
|
|
|
|
castValues.put(MediaContract.Albums.PLAYCOUNT, album.playcount);
|
|
|
|
castValues.put(MediaContract.Albums.GENRE, Utils.listStringConcat(album.genre, LIST_DELIMETER));
|
|
|
|
|
|
|
|
return castValues;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns {@link android.content.ContentValues} from a {@link AudioType.DetailsSong} song
|
|
|
|
* @param hostId Host id for the song
|
|
|
|
* @param song {@link AudioType.DetailsSong}
|
|
|
|
* @return {@link android.content.ContentValues} with the song values
|
|
|
|
*/
|
|
|
|
public static ContentValues contentValuesFromSong(int hostId, AudioType.DetailsSong song) {
|
|
|
|
ContentValues songValues = new ContentValues();
|
|
|
|
songValues.put(MediaContract.Songs.HOST_ID, hostId);
|
|
|
|
songValues.put(MediaContract.Songs.ALBUMID, song.albumid);
|
|
|
|
songValues.put(MediaContract.Songs.SONGID, song.songid);
|
|
|
|
songValues.put(MediaContract.Songs.DURATION, song.duration);
|
|
|
|
songValues.put(MediaContract.Songs.THUMBNAIL, song.thumbnail);
|
|
|
|
songValues.put(MediaContract.Songs.FILE, song.file);
|
|
|
|
songValues.put(MediaContract.Songs.TRACK, song.track);
|
|
|
|
songValues.put(MediaContract.Songs.TITLE, song.title);
|
|
|
|
|
|
|
|
return songValues;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns {@link android.content.ContentValues} from a {@link VideoType.DetailsMusicVideo} music video
|
|
|
|
* @param hostId Host id
|
2015-03-09 22:35:18 +01:00
|
|
|
* @param musicVideo {@link org.xbmc.kore.jsonrpc.type.VideoType.DetailsMusicVideo}
|
2015-01-14 12:12:47 +01:00
|
|
|
* @return {@link android.content.ContentValues} with the music video values
|
|
|
|
*/
|
|
|
|
public static ContentValues contentValuesFromMusicVideo(int hostId,
|
|
|
|
VideoType.DetailsMusicVideo musicVideo) {
|
|
|
|
ContentValues musicVideoValues = new ContentValues();
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.HOST_ID, hostId);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.MUSICVIDEOID, musicVideo.musicvideoid);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.FANART, musicVideo.fanart);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.THUMBNAIL, musicVideo.thumbnail);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.PLAYCOUNT, musicVideo.playcount);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.TITLE, musicVideo.title);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.FILE, musicVideo.file);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.PLOT, musicVideo.plot);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.DIRECTOR, Utils.listStringConcat(musicVideo.director, LIST_DELIMETER));
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.RUNTIME, musicVideo.runtime);
|
|
|
|
if (musicVideo.streamdetails != null) {
|
|
|
|
if (musicVideo.streamdetails.audio.size() > 0) {
|
|
|
|
// Get the stream with the most channels and concat all the languages
|
|
|
|
VideoType.Streams.Audio selectedStream = musicVideo.streamdetails.audio.get(0);
|
|
|
|
List<String> languages = new ArrayList<String>(musicVideo.streamdetails.audio.size());
|
|
|
|
for (int j = 0; j < musicVideo.streamdetails.audio.size(); j++) {
|
|
|
|
VideoType.Streams.Audio stream = musicVideo.streamdetails.audio.get(0);
|
|
|
|
if (stream.channels > selectedStream.channels) {
|
|
|
|
selectedStream = stream;
|
|
|
|
}
|
|
|
|
languages.add(stream.language);
|
|
|
|
}
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.AUDIO_CHANNELS, selectedStream.channels);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.AUDIO_CODEC, selectedStream.codec);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.AUDIO_LANGUAGE,
|
|
|
|
Utils.listStringConcat(languages, LIST_DELIMETER));
|
|
|
|
}
|
|
|
|
if (musicVideo.streamdetails.subtitle.size() > 0) {
|
|
|
|
// Concat all subtitle languages
|
|
|
|
ArrayList<String> subtitles = new ArrayList<String>(musicVideo.streamdetails.subtitle.size());
|
|
|
|
for (int j = 0; j < musicVideo.streamdetails.subtitle.size(); j++) {
|
|
|
|
subtitles.add(musicVideo.streamdetails.subtitle.get(j).language);
|
|
|
|
}
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.SUBTITLES_LANGUAGES,
|
|
|
|
Utils.listStringConcat(subtitles, LIST_DELIMETER));
|
|
|
|
}
|
|
|
|
if (musicVideo.streamdetails.video.size() > 0) {
|
|
|
|
// We're only getting the first video channel...
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.VIDEO_ASPECT,
|
|
|
|
musicVideo.streamdetails.video.get(0).aspect);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.VIDEO_CODEC,
|
|
|
|
musicVideo.streamdetails.video.get(0).codec);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.VIDEO_HEIGHT,
|
|
|
|
musicVideo.streamdetails.video.get(0).height);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.VIDEO_WIDTH,
|
|
|
|
musicVideo.streamdetails.video.get(0).width);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.ALBUM, musicVideo.album);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.ARTIST,
|
|
|
|
Utils.listStringConcat(musicVideo.artist, LIST_DELIMETER));
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.GENRES,
|
|
|
|
Utils.listStringConcat(musicVideo.genre, LIST_DELIMETER));
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.STUDIOS,
|
|
|
|
Utils.listStringConcat(musicVideo.studio, LIST_DELIMETER));
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.TAG,
|
|
|
|
Utils.listStringConcat(musicVideo.tag, LIST_DELIMETER));
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.TRACK, musicVideo.track);
|
|
|
|
musicVideoValues.put(MediaContract.MusicVideosColumns.YEAR, musicVideo.year);
|
|
|
|
|
|
|
|
return musicVideoValues;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|