Skip to content

Commit

Permalink
Add retrieving of artist, album and track number as separate fields.
Browse files Browse the repository at this point in the history
  • Loading branch information
ivarboms committed Feb 26, 2016
1 parent ed67449 commit 42d1988
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 16 deletions.
4 changes: 4 additions & 0 deletions demo/playlists.css
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
background-color: #ffeeee
}

.trackNumber {
background-color: #ffffee
}

.track:hover {
cursor: pointer;
outline: solid 1px black;
Expand Down
11 changes: 5 additions & 6 deletions demo/playlists.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,14 @@ function insertPlaylistContent(tr, data, playlistId) {
var tracks = [];
for (var i = 0; i < data.length; ++i) {
var item = data[i];
//Title is in the format 'artist|track_title|album'.
var elements = item.title.split('|');
var artist = '<span class="artist">' + elements[0] + '</span>';
var title = '<span class="title">' + elements[1] + '</span>';
var album = '<span class="album">' + elements[2] + '</span>';
var artist = '<span class="artist">' + item.artist + '</span>';
var title = '<span class="title">' + item.title + '</span>';
var album = '<span class="album">' + item.album + '</span>';
var trackNumber = '<span class="trackNumber">(' + item.trackNumber + ')</span>';

var active = item.isPlaying ? 'playing' : '';
var span = '<span class="track ' + active + '" data-playlist-id="' + playlistId + '" data-track-id="' + item.id + '">';
span += artist + ' - ' + title + ' - ' + album + '</span>';
span += artist + ' - ' + title + ' - ' + album + ' ' + trackNumber + '</span>';

tracks.push(span);
}
Expand Down
3 changes: 3 additions & 0 deletions foo_rest/Data.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ struct Playlist

struct PlaylistItem
{
std::wstring artist;
std::wstring title;
std::wstring album;
std::wstring trackNumber;
size_t id;
bool isPlaying;
};
32 changes: 27 additions & 5 deletions foo_rest/Foobar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,23 +43,45 @@ std::vector<PlaylistItem> getPlaylistContentImpl(size_t playlistId)
std::vector<PlaylistItem> content;
content.reserve(handles.get_size());

titleformat_object::ptr script;
pfc::string8 pattern("%artist%|%title%|%album%");
static_api_ptr_t<titleformat_compiler>()->compile_safe_ex(script, pattern);
titleformat_object::ptr artistScript;
titleformat_object::ptr titleScript;
titleformat_object::ptr albumScript;
titleformat_object::ptr trackNumberScript;

pfc::string8 artistPattern("%artist%");
pfc::string8 titlePattern("%title%");
pfc::string8 albumPattern("%album%");
pfc::string8 trackNumberPattern("%tracknumber%]");

auto compiler = static_api_ptr_t<titleformat_compiler>();
compiler->compile_safe_ex(artistScript, artistPattern);
compiler->compile_safe_ex(titleScript, titlePattern);
compiler->compile_safe_ex(albumScript, albumPattern);
compiler->compile_safe_ex(trackNumberScript, trackNumberPattern);
static_api_ptr_t<playback_control> playbackControl;

size_t playingPlaylist;
size_t playingItem;
const bool isPlaying = api->get_playing_item_location(&playingPlaylist, &playingItem);
bool isPlayingCurrentPlaylist = playlistId == playingPlaylist && isPlaying;

handles.for_each([&script, &playbackControl, &content, playingItem, isPlayingCurrentPlaylist](const metadb_handle_ptr handle)
handles.for_each([&](const metadb_handle_ptr handle)
{
pfc::string_formatter formattedArtist;
pfc::string_formatter formattedTitle;
playbackControl->playback_format_title_ex(handle, nullptr, formattedTitle, script, nullptr, playback_control::display_level_all);
pfc::string_formatter formattedAlbum;
pfc::string_formatter formattedTrackNumber;

playbackControl->playback_format_title_ex(handle, nullptr, formattedArtist, artistScript, nullptr, playback_control::display_level_all);
playbackControl->playback_format_title_ex(handle, nullptr, formattedTitle, titleScript, nullptr, playback_control::display_level_all);
playbackControl->playback_format_title_ex(handle, nullptr, formattedAlbum, albumScript, nullptr, playback_control::display_level_all);
playbackControl->playback_format_title_ex(handle, nullptr, formattedTrackNumber, trackNumberScript, nullptr, playback_control::display_level_all);

PlaylistItem item;
item.artist = utf8_to_wstring(formattedArtist.c_str());
item.title = utf8_to_wstring(formattedTitle.c_str());
item.album = utf8_to_wstring(formattedAlbum.c_str());
item.trackNumber = utf8_to_wstring(formattedTrackNumber.c_str());
item.id = content.size();
item.isPlaying = isPlayingCurrentPlaylist && item.id == playingItem;

Expand Down
3 changes: 3 additions & 0 deletions foo_rest/Serialization.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ nlohmann::json serialize(const Playlist& playlist)
nlohmann::json serialize(const PlaylistItem& item)
{
nlohmann::json json;
json["artist"] = wstring_to_utf8(item.artist);
json["title"] = wstring_to_utf8(item.title);
json["album"] = wstring_to_utf8(item.album);
json["trackNumber"] = wstring_to_utf8(item.trackNumber);
json["id"] = item.id;
json["isPlaying"] = item.isPlaying;
return json;
Expand Down
8 changes: 4 additions & 4 deletions foo_rest/foo_rest.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,13 @@
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;FOO_REST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>F:\SDKs\foobar2000 2015-08-03;F:\SDKs\boost_1_60_0;C:\dev\libs\foobar2000 sdk 2015-08-03;C:\dev\libs\boost_1_60_0</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>F:\SDKs\foobar2000 2015-08-03;F:\SDKs\boost_1_60_0;C:\dev\libs\foobar2000 sdk 2015-08-03;C:\dev\libs\boost_1_60_0;D:\SDKs\foobar2000 2015-08-03;D:\SDKs\boost_1_60_0</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4503</DisableSpecificWarnings>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>F:\SDKs\foobar2000 2015-08-03\foobar2000\shared\$(Configuration);F:\SDKs\boost_1_60_0\stage\lib;C:\dev\libs\foobar2000 sdk 2015-08-03\foobar2000\shared\$(Configuration);C:\dev\libs\boost_1_60_0\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>F:\SDKs\foobar2000 2015-08-03\foobar2000\shared\$(Configuration);F:\SDKs\boost_1_60_0\stage\lib;C:\dev\libs\foobar2000 sdk 2015-08-03\foobar2000\shared\$(Configuration);C:\dev\libs\boost_1_60_0\stage\lib;D:\SDKs\foobar2000 2015-08-03\foobar2000\shared\$(Configuration);D:\SDKs\boost_1_60_0\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>shared.lib;foobar2000_SDK.lib;pfc.lib;foobar2000_component_client.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
Expand All @@ -122,14 +122,14 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;FOO_REST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>F:\SDKs\foobar2000 2015-08-03;F:\SDKs\boost_1_60_0;C:\dev\libs\foobar2000 sdk 2015-08-03;C:\dev\libs\boost_1_60_0</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>F:\SDKs\foobar2000 2015-08-03;F:\SDKs\boost_1_60_0;C:\dev\libs\foobar2000 sdk 2015-08-03;C:\dev\libs\boost_1_60_0;D:\SDKs\foobar2000 2015-08-03;D:\SDKs\boost_1_60_0</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>F:\SDKs\foobar2000 2015-08-03\foobar2000\shared\$(Configuration);F:\SDKs\boost_1_60_0\stage\lib;C:\dev\libs\foobar2000 sdk 2015-08-03\foobar2000\shared\$(Configuration);C:\dev\libs\boost_1_60_0\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>F:\SDKs\foobar2000 2015-08-03\foobar2000\shared\$(Configuration);F:\SDKs\boost_1_60_0\stage\lib;C:\dev\libs\foobar2000 sdk 2015-08-03\foobar2000\shared\$(Configuration);C:\dev\libs\boost_1_60_0\stage\lib;D:\SDKs\foobar2000 2015-08-03\foobar2000\shared\$(Configuration);D:\SDKs\boost_1_60_0\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>shared.lib;foobar2000_SDK.lib;pfc.lib;foobar2000_component_client.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
Expand Down
6 changes: 5 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ For example usage, see demos in the /demo folder.
<td>/playlist/{id} GET</td>
<td>Returns the items in a specific playlist.</td>
<td>/playlist/1</td>
<td>[ { title, id, isPlaying } ]</td>
<td>[ { artist, title, album, trackNumber, id, isPlaying } ]</td>
</tr>
<tr>
<td>/play/{playlistId}/{trackId} POST</td>
Expand Down Expand Up @@ -89,3 +89,7 @@ For example usage, see demos in the /demo folder.
</tr>
</tbody>
</table>


## Installing
Put foo_rest.dll in `C:\Program Files (x86)\foobar2000\components` (or wherever foobar2000 is installed).

0 comments on commit 42d1988

Please sign in to comment.