public async Task <IActionResult> Download(SubsonicRequest request) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(Unauthorized()); } var trackId = request.TrackId; if (trackId != null) { return(await base.StreamTrack(trackId.Value, this.TrackService, this.PlayActivityService, this.SubsonicUser)); } var releaseId = request.ReleaseId; if (releaseId != null) { var releaseZip = await this.ReleaseService.ReleaseZipped(this.SubsonicUser, releaseId.Value); if (!releaseZip.IsSuccess) { return(NotFound("Unknown Release id")); } return(File(releaseZip.Data, "application/zip", (string)releaseZip.AdditionalData["ZipFileName"])); } return(NotFound($"Unknown download id `{ request.id }`")); }
private async Task <IActionResult> AuthenticateUser(SubsonicRequest request) { var appUser = await this.SubsonicService.Authenticate(request); if (!(appUser?.IsSuccess ?? false) || (appUser?.IsNotFoundResult ?? false)) { return(this.BuildResponse(request, appUser.Adapt <SubsonicOperationResult <Response> >())); } this.SubsonicUser = this.UserModelForUser(appUser.Data.User); return(null); }
private IActionResult BuildResponse(SubsonicRequest request, SubsonicOperationResult <Response> response = null, string responseType = null) { if (!Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(Request.ContentType)) { var formCollection = Request.Form; var formDictionary = new Dictionary <string, object>(); if (formCollection?.Any() == true) { foreach (var form in formCollection) { if (!formDictionary.ContainsKey(form.Key)) { formDictionary[form.Key] = form.Value.FirstOrDefault(); } } } } if (response?.ErrorCode.HasValue ?? false) { return(SendError(request, response)); } if (request.IsJSONRequest) { Response.ContentType = "application/json"; var status = response?.Data?.status.ToString(); var version = response?.Data?.version ?? Services.SubsonicService.SubsonicVersion; string jsonResult = null; if (responseType == null) { jsonResult = "{ \"subsonic-response\": { \"status\":\"" + status + "\", \"version\": \"" + version + "\" }}"; } else { jsonResult = "{ \"subsonic-response\": { \"status\":\"" + status + "\", \"version\": \"" + version + "\", \"" + responseType + "\":" + (response?.Data != null ? JsonConvert.SerializeObject(response.Data.Item) : string.Empty) + "}}"; } if ((request?.f ?? string.Empty).Equals("jsonp", StringComparison.OrdinalIgnoreCase)) { jsonResult = request.callback + "(" + jsonResult + ");"; } return(Content(jsonResult)); } Response.ContentType = "application/xml"; return(Ok(response.Data)); }
public async Task <IActionResult> GetSongsByGenre(SubsonicRequest request) { var authResult = await AuthenticateUser(request).ConfigureAwait(false); if (authResult != null) { return(authResult); } var result = await SubsonicService.GetSongsByGenre(request, SubsonicUser).ConfigureAwait(false); return(BuildResponse(request, result, "songsByGenre")); }
public async Task <IActionResult> UnStar(SubsonicRequest request, [FromQueryAttribute] string[] albumId, [FromQueryAttribute] string[] artistId) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.ToggleStar(request, this.SubsonicUser, false, albumId, artistId); return(this.BuildResponse(request, result)); }
public async Task <IActionResult> Search3(SubsonicRequest request) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.Search(request, this.SubsonicUser, SearchVersion.Three); return(this.BuildResponse(request, result, "searchResult3")); }
public async Task <IActionResult> SavePlayQueue(SubsonicRequest request, string username, string current, long?position) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.SavePlayQueue(request, this.SubsonicUser, current, position); return(this.BuildResponse(request, result)); }
public async Task <IActionResult> GetTopSongs(SubsonicRequest request, int?count = 50) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetTopSongs(request, this.SubsonicUser, count); return(this.BuildResponse(request, result, "topSongs")); }
public async Task <IActionResult> AddChatMessage(SubsonicRequest request) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.AddChatMessage(request, this.SubsonicUser); return(this.BuildResponse(request, result)); }
public async Task <IActionResult> UnStar(SubsonicRequest request, [FromQuery] string[] albumId, [FromQuery] string[] artistId) { var authResult = await AuthenticateUser(request).ConfigureAwait(false); if (authResult != null) { return(authResult); } var result = await SubsonicService.ToggleStar(request, SubsonicUser, false, albumId, artistId).ConfigureAwait(false); return(BuildResponse(request, result)); }
public async Task <IActionResult> SetRating(SubsonicRequest request, short rating) { var authResult = await AuthenticateUser(request).ConfigureAwait(false); if (authResult != null) { return(authResult); } var result = await SubsonicService.SetRating(request, SubsonicUser, rating).ConfigureAwait(false); return(BuildResponse(request, result)); }
public async Task <IActionResult> Search3(SubsonicRequest request) { var authResult = await AuthenticateUser(request).ConfigureAwait(false); if (authResult != null) { return(authResult); } var result = await SubsonicService.Search(request, SubsonicUser, SearchVersion.Three).ConfigureAwait(false); return(BuildResponse(request, result, "searchResult3")); }
public async Task <IActionResult> GetTopSongs(SubsonicRequest request, int?count = 50) { var authResult = await AuthenticateUser(request).ConfigureAwait(false); if (authResult != null) { return(authResult); } var result = await SubsonicService.GetTopSongs(request, SubsonicUser, count).ConfigureAwait(false); return(BuildResponse(request, result, "topSongs")); }
public async Task <IActionResult> AddChatMessage(SubsonicRequest request) { var authResult = await AuthenticateUser(request).ConfigureAwait(false); if (authResult != null) { return(authResult); } var result = await SubsonicService.AddChatMessage(request, SubsonicUser).ConfigureAwait(false); return(BuildResponse(request, result)); }
public async Task <IActionResult> GetStarred2(SubsonicRequest request) { var authResult = await AuthenticateUser(request).ConfigureAwait(false); if (authResult != null) { return(authResult); } var result = await SubsonicService.GetStarred(request, SubsonicUser, StarredVersion.Two).ConfigureAwait(false); return(BuildResponse(request, result, "starred")); }
public async Task <IActionResult> GetSimilarSongs2(SubsonicRequest request, int?count = 50) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetSimliarSongs(request, this.SubsonicUser, SimilarSongsVersion.Two, count); return(this.BuildResponse(request, result, "similarSongs2")); }
public async Task <IActionResult> GetSongsByGenre(SubsonicRequest request) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetSongsByGenre(request, this.SubsonicUser); return(this.BuildResponse(request, result, "songsByGenre")); }
public async Task <IActionResult> GetAlbumList2(SubsonicRequest request) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetAlbumList(request, this.SubsonicUser, AlbumListVersions.Two); return(this.BuildResponse(request, result, "albumList")); }
public async Task <IActionResult> GetStarred2(SubsonicRequest request) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetStarred(request, this.SubsonicUser, StarredVersion.Two); return(this.BuildResponse(request, result, "starred")); }
public async Task <IActionResult> GetArtistInfo2(SubsonicRequest request, int?count, bool?includeNotPresent) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetArtistInfo(request, count, includeNotPresent ?? false, ArtistInfoVersion.Two); return(this.BuildResponse(request, result, "artistInfo2")); }
public async Task <IActionResult> GetUser(SubsonicRequest request, string username) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetUser(request, username ?? request.u); return(this.BuildResponse(request, result, "user")); }
public async Task <IActionResult> GetChatMessages(SubsonicRequest request, long?since) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetChatMessages(request, this.SubsonicUser, since); return(this.BuildResponse(request, result, "chatMessages")); }
public async Task <IActionResult> CreateBookmark(SubsonicRequest request, int position, string comment) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.CreateBookmark(request, this.SubsonicUser, position, comment); return(this.BuildResponse(request, result)); }
public async Task <IActionResult> GetIndexes(SubsonicRequest request, long?ifModifiedSince = null) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetIndexes(request, this.SubsonicUser, ifModifiedSince); return(this.BuildResponse(request, result, "indexes")); }
public async Task <IActionResult> SetRating(SubsonicRequest request, short rating) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.SetRating(request, this.SubsonicUser, rating); return(this.BuildResponse(request, result)); }
public async Task <IActionResult> GetMusicDirectory(SubsonicRequest request) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetMusicDirectory(request, this.SubsonicUser); return(this.BuildResponse(request, result, "directory")); }
public async Task <IActionResult> UpdatePlaylist(SubsonicRequest request, [FromQueryAttribute] string playlistId, [FromQueryAttribute] string name, [FromQueryAttribute] string comment, [FromQueryAttribute] bool? @public, [FromQueryAttribute] string[] songIdToAdd, [FromQueryAttribute] int[] songIndexToRemove) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.UpdatePlaylist(request, this.SubsonicUser, playlistId, name, comment, @public, songIdToAdd, songIndexToRemove); return(this.BuildResponse(request, result)); }
public async Task <IActionResult> GetPodcasts(SubsonicRequest request, bool includeEpisodes) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.GetPodcasts(request); return(this.BuildResponse(request, result, "podcasts")); }
public async Task <IActionResult> CreatePlaylist(SubsonicRequest request, string playlistId, string name, string[] songId) { var authResult = await this.AuthenticateUser(request); if (authResult != null) { return(authResult); } var result = await this.SubsonicService.CreatePlaylist(request, this.SubsonicUser, name, songId, playlistId); return(this.BuildResponse(request, result, "playlist")); }
public async Task <IActionResult> GetPlaylists(SubsonicRequest request, string username) { var authResult = await AuthenticateUser(request).ConfigureAwait(false); if (authResult != null) { return(authResult); } var result = await SubsonicService.GetPlaylists(request, SubsonicUser, username).ConfigureAwait(false); return(BuildResponse(request, result, "playlists")); }