2 * Copyright (C) 2005-2010 Team XBMC
5 * This Program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
10 * This Program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with XBMC; see the file COPYING. If not, write to
17 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
18 * http://www.gnu.org/copyleft/gpl.html
22 #include "AudioLibrary.h"
23 #include "music/MusicDatabase.h"
26 #include "music/tags/MusicInfoTag.h"
27 #include "music/Song.h"
28 #include "Application.h"
30 using namespace MUSIC_INFO;
32 using namespace JSONRPC;
34 JSON_STATUS CAudioLibrary::GetArtists(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result)
36 CMusicDatabase musicdatabase;
37 if (!musicdatabase.Open())
40 int genreID = parameterObject["genreid"].asInt();
42 // Add "artist" to "fields" array by default
43 Value param = parameterObject;
44 if (!param.isMember("fields"))
45 param["fields"] = Value(arrayValue);
46 param["fields"].append("artist");
49 if (musicdatabase.GetArtistsNav("", items, genreID, false))
50 HandleFileItemList("artistid", false, "artists", items, param, result);
52 musicdatabase.Close();
56 JSON_STATUS CAudioLibrary::GetAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result)
58 CMusicDatabase musicdatabase;
59 if (!musicdatabase.Open())
62 int artistID = parameterObject["artistid"].asInt();
63 int genreID = parameterObject["genreid"].asInt();
64 int start = parameterObject["limits"]["start"].asInt();
65 int end = parameterObject["limits"]["end"].asInt();
70 if (musicdatabase.GetAlbumsNav("", items, genreID, artistID, start, end))
71 HandleFileItemList("albumid", false, "albums", items, parameterObject, result);
73 musicdatabase.Close();
77 JSON_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result)
79 int albumID = parameterObject["albumid"].asInt();
81 CMusicDatabase musicdatabase;
82 if (!musicdatabase.Open())
86 if (!musicdatabase.GetAlbumInfo(albumID, album, NULL))
88 musicdatabase.Close();
92 Json::Value validFields;
93 MakeFieldsList(parameterObject, validFields);
96 musicdatabase.GetAlbumPath(albumID, path);
98 CFileItemPtr m_albumItem( new CFileItem(path, album) );
99 m_albumItem->SetLabel(album.strAlbum);
100 CMusicDatabase::SetPropertiesFromAlbum(*m_albumItem, album);
101 m_albumItem->SetMusicThumb();
102 HandleFileItem("albumid", false, "albumdetails", m_albumItem, parameterObject, validFields, result);
104 musicdatabase.Close();
108 JSON_STATUS CAudioLibrary::GetSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result)
110 CMusicDatabase musicdatabase;
111 if (!musicdatabase.Open())
112 return InternalError;
114 int artistID = parameterObject["artistid"].asInt();
115 int albumID = parameterObject["albumid"].asInt();
116 int genreID = parameterObject["genreid"].asInt();
119 if (musicdatabase.GetSongsNav("", items, genreID, artistID, albumID))
120 HandleFileItemList("songid", true, "songs", items, parameterObject, result);
122 musicdatabase.Close();
126 JSON_STATUS CAudioLibrary::GetSongDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result)
128 int idSong = parameterObject["songid"].asInt();
130 CMusicDatabase musicdatabase;
131 if (!musicdatabase.Open())
132 return InternalError;
135 if (!musicdatabase.GetSongById(idSong, song))
137 musicdatabase.Close();
138 return InvalidParams;
141 Json::Value validFields;
142 MakeFieldsList(parameterObject, validFields);
143 HandleFileItem("songid", false, "songdetails", CFileItemPtr( new CFileItem(song) ), parameterObject, validFields, result);
145 musicdatabase.Close();
149 JSON_STATUS CAudioLibrary::GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result)
151 CMusicDatabase musicdatabase;
152 if (!musicdatabase.Open())
153 return InternalError;
155 // Add "genre" to "fields" array by default
156 Value param = parameterObject;
157 if (!param.isMember("fields"))
158 param["fields"] = Value(arrayValue);
159 param["fields"].append("genre");
162 if (musicdatabase.GetGenresNav("", items))
163 HandleFileItemList("genreid", false, "genres", items, param, result);
165 musicdatabase.Close();
169 JSON_STATUS CAudioLibrary::ScanForContent(const CStdString &method, ITransportLayer *transport, IClient *client, const Value ¶meterObject, Value &result)
171 g_application.getApplicationMessenger().ExecBuiltIn("updatelibrary(music)");
175 bool CAudioLibrary::FillFileItemList(const Value ¶meterObject, CFileItemList &list)
177 CMusicDatabase musicdatabase;
178 bool success = false;
180 if (musicdatabase.Open())
182 if (parameterObject["artistid"].isInt() || parameterObject["albumid"].isInt() || parameterObject["genreid"].isInt())
184 int artistID = parameterObject.get("artistid", -1).asInt();
185 int albumID = parameterObject.get("albumid", -1).asInt();
186 int genreID = parameterObject.get("genreid", -1).asInt();
188 success = musicdatabase.GetSongsNav("", list, genreID, artistID, albumID);
190 if (parameterObject["songid"].isInt())
192 int songID = parameterObject.get("songid", -1).asInt();
196 if (musicdatabase.GetSongById(songID, song))
198 list.Add(CFileItemPtr(new CFileItem(song)));
204 musicdatabase.Close();