// ---------------------------------------------------------------------------- // void TextUI::showPlayedTracks(void) { PlayerItems tracks; m_player->getPlayedTracks( tracks ); int index = 1; std::reverse( tracks.begin(), tracks.end() ); for ( PlayerItems::iterator it=tracks.begin(); it != tracks.end(); it++, index++ ) { CString title = m_player->getTrackFullName( (*it) ); printf( " %d: %s\n", index, (LPCSTR)title ); } }
// ---------------------------------------------------------------------------- // void TextUI::listTracks(void) { PlaylistField playlist_field( "Playlist", m_player ); Form form( &m_text_io ); form.add( playlist_field ); if ( form.play() ) { PlayerItems tracks; m_player->getTracks( playlist_field.getPlaylist(), tracks ); for ( PlayerItems::iterator it=tracks.begin(); it != tracks.end(); it++ ) { TrackInfo track_info; if ( m_player->getTrackInfo( (*it), &track_info ) ) { track_info.track_duration_ms /= 1000; int minutes = track_info.track_duration_ms/60; int seconds = track_info.track_duration_ms%60; printf( "%s by %s [%d:%02d]\n", track_info.track_name, track_info.artist_name, minutes, seconds ); } else printf( "Error reading track info \n" ); } } }
// ---------------------------------------------------------------------------- // void TextUI::listPlaylists() { PlayerItems playlists; m_player->getPlaylists( playlists ); for ( PlayerItems::iterator it=playlists.begin(); it != playlists.end(); it++ ) { PlaylistInfo playlist_info; if ( m_player->getPlaylistInfo((*it), &playlist_info) ) { CString name( playlist_info.playlist_name ); name.Remove( '\n' ); printf( "%s (%d)\n", (LPCSTR)name, playlist_info.playlist_tracks ); } } }
// ---------------------------------------------------------------------------- // bool json_track_list( PlayerItems& tracks, CString& response ) { UINT track_number = 1; AudioInfo audioInfo; JsonBuilder json( response ); json.startObject(); json.startArray( "tracks" ); for ( PlayerItems::iterator it=tracks.begin(); it != tracks.end(); it++, track_number++ ) { CString track_name, artist_name, album_name, full_name; DWORD track_duration_ms; bool starred; if ( !studio.getMusicPlayer()->getTrackInfo( (*it), &track_name, &artist_name, &album_name, &track_duration_ms, &starred ) ) continue; json.startObject(); json.add( "link", (*it) ); json.add( "number", track_number ); json.add ("full_name", studio.getMusicPlayer()->getTrackFullName( (*it) ) ); // Legacy for music match json.add( "track_name", track_name ); json.add( "artist_name", artist_name ); json.add( "album_name", album_name ); json.add( "duration", track_duration_ms ); json.add( "starred", starred ); // Collect any audio info available in the cache and queue up the rest if ( studio.getMusicPlayer()->getTrackAudioInfo( (*it), &audioInfo, 0L ) == OK ) { json.startObject( "audio_info" ); json.add( "key", audioInfo.key ); json.add( "mode", audioInfo.mode ); json.add( "bpm", audioInfo.tempo ); json.endObject( "audio_info" ); } json.endObject(); } json.endArray( "tracks" ); json.endObject(); return true; }
// ---------------------------------------------------------------------------- // bool HttpRestServices::query_music_playlists( Venue* venue, DMXHttpSession* session, CString& response, LPCSTR data ) { JsonBuilder json( response ); json.startObject(); PlayerItems playlists; studio.getMusicPlayer()->getPlaylists( playlists ); json.startArray( "playlists" ); for ( PlayerItems::iterator it=playlists.begin(); it != playlists.end(); it++ ) { json.startObject(); json.add( "link", (*it) ); json.add( "name", studio.getMusicPlayer()->getPlaylistName( (*it) ) ); json.endObject(); } json.endArray( "playlists" ); json.endObject(); return true; }