Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cpp/server/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ set(
gzip.cpp gzip.hpp
http.cpp http.hpp
json.hpp
library_controller.cpp library_controller.hpp
log.cpp log.hpp
outputs_controller.cpp outputs_controller.hpp
parsing.cpp parsing.hpp
Expand Down
23 changes: 23 additions & 0 deletions cpp/server/artwork_controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,28 @@ ResponsePtr ArtworkController::getArtwork()
return Response::async(std::move(responseFuture));
}

ResponsePtr ArtworkController::getLibraryArtwork()
{
if (!player_->supportsLibrary())
{
return Response::error(
HttpStatus::S_501_NOT_IMPLEMENTED, "media library is not supported by this player");
}

LibraryItemQuery query;

query.path = param<std::string>("path");
query.subsong = optionalParam<int32_t>("subsong", -1);

auto responseFuture = player_->fetchLibraryArtwork(query).then(
boost::launch::sync, [this](boost::unique_future<ArtworkResult> resultFuture) {
auto result = resultFuture.get();
return getResponse(&result);
});

return Response::async(std::move(responseFuture));
}

ResponsePtr ArtworkController::getResponse(ArtworkResult* result)
{
if (!result->filePath.empty())
Expand Down Expand Up @@ -94,6 +116,7 @@ void ArtworkController::defineRoutes(
routes.useWorkQueue(workQueue);
routes.setPrefix("api/artwork");
routes.get("current", &ArtworkController::getCurrentArtwork);
routes.get("library", &ArtworkController::getLibraryArtwork);
routes.get(":plref/:index", &ArtworkController::getArtwork);
}

Expand Down
1 change: 1 addition & 0 deletions cpp/server/artwork_controller.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class ArtworkController : public ControllerBase

ResponsePtr getCurrentArtwork();
ResponsePtr getArtwork();
ResponsePtr getLibraryArtwork();

static void defineRoutes(Router* router, WorkQueue* workQueue, Player* player, const ContentTypeMap& contentTypes);

Expand Down
1 change: 1 addition & 0 deletions cpp/server/foobar2000/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ set(
common.hpp
player.hpp
player_control.cpp
player_library.cpp
player_misc.cpp
player_options.cpp player_options.hpp
player_playlists.cpp
Expand Down
24 changes: 24 additions & 0 deletions cpp/server/foobar2000/player.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,23 @@ class PlayerImpl final : public Player
OutputsInfo getOutputs() override;
void setOutputDevice(const std::string& typeId, const std::string& deviceId) override;

bool supportsLibrary() override;
LibraryInfo getLibraryInfo() override;

PlaylistItemsResult getLibraryItems(
const LibraryQuery& query, const Range& range, ColumnsQuery* columns) override;

LibraryNodesResult getLibraryNodes(
const LibraryQuery& query, const Range& range, ColumnsQuery* columns) override;

void addLibraryItems(
const PlaylistRef& plref,
const LibraryItemQuery& query,
int32_t targetIndex,
AddItemsOptions options) override;

boost::unique_future<ArtworkResult> fetchLibraryArtwork(const LibraryItemQuery& query) override;

boost::unique_future<ArtworkResult> fetchCurrentArtwork() override;
boost::unique_future<ArtworkResult> fetchArtwork(const ArtworkQuery& query) override;

Expand Down Expand Up @@ -131,6 +148,13 @@ class PlayerImpl final : public Player
std::vector<std::string> evaluatePlaybackColumns(
const TitleFormatVector& compiledColumns);

std::vector<std::string> evaluateItemColumns(
const metadb_handle_ptr& item,
const TitleFormatVector& compiledColumns,
pfc::string8* buffer);

void collectLibraryItems(const LibraryItemQuery& query, metadb_handle_list* outItems);

void makeItemsMask(
t_size playlist,
const std::vector<int32_t>& indexes,
Expand Down
Loading
Loading