Skip to content

Commit

Permalink
jsonrpc: make use of the new CVideoDatabase::GetSortedVideos method f…
Browse files Browse the repository at this point in the history
…or sorting and limiting
  • Loading branch information
Montellese committed Jun 9, 2012
1 parent fa329d0 commit 62b0686
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 10 deletions.
11 changes: 9 additions & 2 deletions xbmc/interfaces/json-rpc/FileItemHandler.cpp
Expand Up @@ -175,20 +175,27 @@ void CFileItemHandler::FillDetails(ISerializable* info, CFileItemPtr item, const
}
}

void CFileItemHandler::HandleFileItemList(const char *ID, bool allowFile, const char *resultname, CFileItemList &items, const CVariant &parameterObject, CVariant &result)
void CFileItemHandler::HandleFileItemList(const char *ID, bool allowFile, const char *resultname, CFileItemList &items, const CVariant &parameterObject, CVariant &result, bool sortLimit /* = true */)
{
int size = items.Size();
int start = (int)parameterObject["limits"]["start"].asInteger();
int end = (int)parameterObject["limits"]["end"].asInteger();
end = (end <= 0 || end > size) ? size : end;
start = start > end ? end : start;

Sort(items, parameterObject["sort"]);
if (sortLimit)
Sort(items, parameterObject["sort"]);

result["limits"]["start"] = start;
result["limits"]["end"] = end;
result["limits"]["total"] = size;

if (!sortLimit)
{
start = 0;
end = items.Size();
}

for (int i = start; i < end; i++)
{
CVariant object;
Expand Down
2 changes: 1 addition & 1 deletion xbmc/interfaces/json-rpc/FileItemHandler.h
Expand Up @@ -31,7 +31,7 @@ namespace JSONRPC
{
protected:
static void FillDetails(ISerializable* info, CFileItemPtr item, const CVariant& fields, CVariant &result);
static void HandleFileItemList(const char *ID, bool allowFile, const char *resultname, CFileItemList &items, const CVariant &parameterObject, CVariant &result);
static void HandleFileItemList(const char *ID, bool allowFile, const char *resultname, CFileItemList &items, const CVariant &parameterObject, CVariant &result, bool sortLimit = true);
static void HandleFileItem(const char *ID, bool allowFile, const char *resultname, CFileItemPtr item, const CVariant &parameterObject, const CVariant &validFields, CVariant &result, bool append = true);

static bool FillFileItemList(const CVariant &parameterObject, CFileItemList &list);
Expand Down
29 changes: 22 additions & 7 deletions xbmc/interfaces/json-rpc/VideoLibrary.cpp
Expand Up @@ -35,7 +35,7 @@ JSONRPC_STATUS CVideoLibrary::GetMovies(const CStdString &method, ITransportLaye

CFileItemList items;
JSONRPC_STATUS ret = OK;
if (videodatabase.GetMoviesByWhere("videodb://1/", "", items))
if ((ret = GetVideos(MediaTypeMovie, "videodb://1/", parameterObject, items, result, videodatabase)) == OK)
ret = GetAdditionalMovieDetails(parameterObject, items, result, videodatabase);

videodatabase.Close();
Expand Down Expand Up @@ -114,7 +114,8 @@ JSONRPC_STATUS CVideoLibrary::GetTVShows(const CStdString &method, ITransportLay
return InternalError;

CFileItemList items;
if (videodatabase.GetTvShowsNav("videodb://2/", items))
JSONRPC_STATUS ret = OK;
if ((ret = GetVideos(MediaTypeTvShow, "videodb://2/", parameterObject, items, result, videodatabase)) == OK)
{
bool additionalInfo = false;
for (CVariant::const_iterator_array itr = parameterObject["properties"].begin_array(); itr != parameterObject["properties"].end_array(); itr++)
Expand All @@ -129,7 +130,7 @@ JSONRPC_STATUS CVideoLibrary::GetTVShows(const CStdString &method, ITransportLay
for (int index = 0; index < items.Size(); index++)
videodatabase.GetTvShowInfo("", *(items[index]->GetVideoInfoTag()), items[index]->GetVideoInfoTag()->m_iDbId);
}
HandleFileItemList("tvshowid", true, "tvshows", items, parameterObject, result);
HandleFileItemList("tvshowid", true, "tvshows", items, parameterObject, result, false);
}

videodatabase.Close();
Expand Down Expand Up @@ -188,8 +189,9 @@ JSONRPC_STATUS CVideoLibrary::GetEpisodes(const CStdString &method, ITransportLa
CStdString strPath;
strPath.Format("videodb://2/2/%i/%i/", tvshowID, season);
CFileItemList items;
if (videodatabase.GetEpisodesNav(strPath, items, -1, -1, -1, -1, tvshowID, season))
GetAdditionalEpisodeDetails(parameterObject, items, result, videodatabase);
JSONRPC_STATUS ret = OK;
if ((ret = GetVideos(MediaTypeEpisode, strPath, parameterObject, items, result, videodatabase)) == OK)
ret = GetAdditionalEpisodeDetails(parameterObject, items, result, videodatabase);

videodatabase.Close();
return OK;
Expand Down Expand Up @@ -622,6 +624,19 @@ bool CVideoLibrary::FillFileItemList(const CVariant &parameterObject, CFileItemL
return false;
}

JSONRPC_STATUS CVideoLibrary::GetVideos(MediaType mediaType, const CStdString &strBaseDir, const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase)
{
SortDescription sorting;
sorting.limitStart = (int)parameterObject["limits"]["start"].asInteger();
sorting.limitEnd = (int)parameterObject["limits"]["end"].asInteger();

// TODO: parse sort parameters
sorting.sortBy = SortByNone;
sorting.sortOrder = SortOrderAscending;

return videodatabase.GetSortedVideos(mediaType, strBaseDir, sorting, items) ? OK : InternalError;
}

JSONRPC_STATUS CVideoLibrary::GetAdditionalMovieDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase)
{
if (!videodatabase.Open())
Expand All @@ -640,7 +655,7 @@ JSONRPC_STATUS CVideoLibrary::GetAdditionalMovieDetails(const CVariant &paramete
for (int index = 0; index < items.Size(); index++)
videodatabase.GetMovieInfo("", *(items[index]->GetVideoInfoTag()), items[index]->GetVideoInfoTag()->m_iDbId);
}
HandleFileItemList("movieid", true, "movies", items, parameterObject, result);
HandleFileItemList("movieid", true, "movies", items, parameterObject, result, false);

return OK;
}
Expand All @@ -663,7 +678,7 @@ JSONRPC_STATUS CVideoLibrary::GetAdditionalEpisodeDetails(const CVariant &parame
for (int index = 0; index < items.Size(); index++)
videodatabase.GetEpisodeInfo("", *(items[index]->GetVideoInfoTag()), items[index]->GetVideoInfoTag()->m_iDbId);
}
HandleFileItemList("episodeid", true, "episodes", items, parameterObject, result);
HandleFileItemList("episodeid", true, "episodes", items, parameterObject, result, false);

return OK;
}
Expand Down
2 changes: 2 additions & 0 deletions xbmc/interfaces/json-rpc/VideoLibrary.h
Expand Up @@ -20,6 +20,7 @@
*
*/

#include "utils/DatabaseUtils.h"
#include "utils/StdString.h"
#include "JSONRPC.h"
#include "FileItemHandler.h"
Expand Down Expand Up @@ -69,6 +70,7 @@ namespace JSONRPC
static bool FillFileItemList(const CVariant &parameterObject, CFileItemList &list);

private:
static JSONRPC_STATUS GetVideos(MediaType mediaType, const CStdString &strBaseDir, const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase);
static JSONRPC_STATUS GetAdditionalMovieDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase);
static JSONRPC_STATUS GetAdditionalEpisodeDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase);
static JSONRPC_STATUS GetAdditionalMusicVideoDetails(const CVariant &parameterObject, CFileItemList &items, CVariant &result, CVideoDatabase &videodatabase);
Expand Down

0 comments on commit 62b0686

Please sign in to comment.