Skip to content

Commit

Permalink
Search songs by title
Browse files Browse the repository at this point in the history
  • Loading branch information
geloczi committed Dec 20, 2021
1 parent 018360c commit 2d1c0e6
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,14 @@ public async Task SearchGenresByNameAsync()
Assert.IsTrue(response.Data.Genres.Any(x => x.Name.Contains(TestSong.Additional.Tag.Genre, StringComparison.OrdinalIgnoreCase)));
}

[TestMethod]
public async Task SearchSongsByTitleAsync()
{
var response = await AudioStation.SearchSongsByTitleAsync(TestPageSize, 0, TestSong.Title, SongQueryAdditional.All);
Assert.IsTrue(response.Success);
Assert.IsTrue(response.Data.Songs.Any(x => x.Title.Contains(TestSong.Title, StringComparison.OrdinalIgnoreCase)));
}

[TestMethod]
public async Task Playlist_List()
{
Expand Down
36 changes: 30 additions & 6 deletions SynologyDotNet.AudioStation/AudioStationClient.Song.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,34 @@ public async Task<ApiListRessponse<SongList>> ListSongsAsync(int limit, int offs
.Where(x => additionalFields.HasFlag(x))
.Select(x => x.ToString()))));
}
var result = await Client.QueryListAsync<ApiListRessponse<SongList>>(SYNO_AudioStation_Song, "list", limit, offset, args.ToArray());
return result;
return await Client.QueryListAsync<ApiListRessponse<SongList>>(SYNO_AudioStation_Song, "list", limit, offset, args.ToArray());
}

/// <summary>
/// List songs
/// </summary>
/// <param name="limit">Maximum number of items to return</param>
/// <param name="offset">Start position in the list (use it for paging)</param>
/// <param name="title">Title to search</param>
/// <param name="additionalFields">Additional fields to load</param>
/// <returns></returns>
public async Task<ApiListRessponse<SongList>> SearchSongsByTitleAsync(int limit, int offset, string title, SongQueryAdditional additionalFields)
{
var args = new List<(string, object)>();
args.Add(GetLibraryArg());
args.Add(("title", title));
args.Add(("keyword", title));
if (additionalFields != SongQueryAdditional.None)
{
args.Add(("additional", string.Join(",", (new[] {
SongQueryAdditional.song_audio,
SongQueryAdditional.song_rating,
SongQueryAdditional.song_tag
})
.Where(x => additionalFields.HasFlag(x))
.Select(x => x.ToString()))));
}
return await Client.QueryListAsync<ApiListRessponse<SongList>>(SYNO_AudioStation_Song, "search", limit, offset, args.ToArray());
}

/// <summary>
Expand All @@ -49,8 +75,7 @@ public async Task<ApiListRessponse<SongList>> GetSongByIdAsync(string id)
var args = new List<(string, object)>();
args.Add(("id", id));
args.Add(("additional", "song_tag, song_audio, song_rating")); // request detailed song info
var result = await Client.QueryObjectAsync<ApiListRessponse<SongList>>(SYNO_AudioStation_Song, "getinfo", args.ToArray());
return result;
return await Client.QueryObjectAsync<ApiListRessponse<SongList>>(SYNO_AudioStation_Song, "getinfo", args.ToArray());
}

/// <summary>
Expand All @@ -63,10 +88,9 @@ public async Task<ApiResponse> RateSongAsync(string songId, int rating)
{
if (rating < 0 || rating > 5)
throw new ArgumentOutOfRangeException(nameof(rating), "Value range: 0 - 5");
var result = await Client.QueryObjectAsync<ApiResponse>(SYNO_AudioStation_Song, "setrating",
return await Client.QueryObjectAsync<ApiResponse>(SYNO_AudioStation_Song, "setrating",
("id", songId),
("rating", rating));
return result;
}

/// <summary>
Expand Down

0 comments on commit 2d1c0e6

Please sign in to comment.