mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-02-09 23:55:10 -05:00
Remove debug prints, fix Artist search, implement GetArtistAlbumsAsync
This commit is contained in:
@@ -6,6 +6,7 @@ using octo_fiesta.Models.Subsonic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
using System.Text.Json.Nodes;
|
||||||
//using Microsoft.Extensions.Logging;
|
//using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace octo_fiesta.Services.SquidWTF;
|
namespace octo_fiesta.Services.SquidWTF;
|
||||||
@@ -56,21 +57,16 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
foreach (var track in items.EnumerateArray())
|
foreach (var track in items.EnumerateArray())
|
||||||
{
|
{
|
||||||
if (count >= limit) break;
|
if (count >= limit) break;
|
||||||
Console.WriteLine("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Do i make it this far?");
|
|
||||||
var song = ParseTidalTrack(track);
|
var song = ParseTidalTrack(track);
|
||||||
songs.Add(song);
|
songs.Add(song);
|
||||||
count++;
|
count++;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Console.WriteLine($"!!!!!!!!!!!!!!!!!!!!!!!!!!![SquidWTF] SearchSongs '{url}' → {songs.Count} songs");
|
|
||||||
return songs;
|
return songs;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine("========== [SquidWTF] SearchSongsAsync EXCEPTION ==========");
|
|
||||||
Console.WriteLine(ex.ToString());
|
|
||||||
Console.WriteLine("===========================================================");
|
|
||||||
return new List<Song>();
|
return new List<Song>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,7 +96,7 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Console.WriteLine($"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!![SquidWTF] SearchAlbums '{url}' → {albums.Count} albums");
|
|
||||||
return albums;
|
return albums;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
@@ -133,12 +129,11 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Console.WriteLine($"!!!!!!!!!!!!!!!!!!!!![SquidWTF] SearchArtists '{url}' → {artists.Count} artists");
|
|
||||||
return artists;
|
return artists;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
Console.WriteLine("except");
|
|
||||||
return new List<Artist>();
|
return new List<Artist>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -158,15 +153,8 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
Albums = await albumsTask,
|
Albums = await albumsTask,
|
||||||
Artists = await artistsTask
|
Artists = await artistsTask
|
||||||
};
|
};
|
||||||
Console.WriteLine($"[SquidWTF] SearchAll '{query}' → {temp.Songs.Count} songs");
|
|
||||||
return temp;
|
return temp;
|
||||||
/*
|
|
||||||
return new SearchResult
|
|
||||||
{
|
|
||||||
Songs = await songsTask,
|
|
||||||
Albums = await albumsTask,
|
|
||||||
Artists = await artistsTask
|
|
||||||
};*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Song?> GetSongAsync(string externalProvider, string externalId)
|
public async Task<Song?> GetSongAsync(string externalProvider, string externalId)
|
||||||
@@ -178,8 +166,6 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
// Use the /info endpoint for full track metadata
|
// Use the /info endpoint for full track metadata
|
||||||
var url = $"{BaseUrl}/info/?id={externalId}";
|
var url = $"{BaseUrl}/info/?id={externalId}";
|
||||||
|
|
||||||
Console.WriteLine($"++++++++++++++ URL FOR GET SONG: {url}");
|
|
||||||
|
|
||||||
var response = await _httpClient.GetAsync(url);
|
var response = await _httpClient.GetAsync(url);
|
||||||
if (!response.IsSuccessStatusCode) return null;
|
if (!response.IsSuccessStatusCode) return null;
|
||||||
|
|
||||||
@@ -207,9 +193,6 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
// Use the /info endpoint for full track metadata
|
// Use the /info endpoint for full track metadata
|
||||||
var url = $"{BaseUrl}/album/?id={externalId}";
|
var url = $"{BaseUrl}/album/?id={externalId}";
|
||||||
|
|
||||||
Console.WriteLine($"++++++++++++++ URL FOR GET ALBUM: {url}");
|
|
||||||
|
|
||||||
|
|
||||||
var response = await _httpClient.GetAsync(url);
|
var response = await _httpClient.GetAsync(url);
|
||||||
if (!response.IsSuccessStatusCode) return null;
|
if (!response.IsSuccessStatusCode) return null;
|
||||||
|
|
||||||
@@ -253,9 +236,7 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Use the /info endpoint for full track metadata
|
// Use the /info endpoint for full track metadata
|
||||||
var url = $"{BaseUrl}/artist/?f={externalId}"; // this has the data for me to count albums and songs
|
var url = $"{BaseUrl}/artist/?f={externalId}";
|
||||||
|
|
||||||
Console.WriteLine($"++++++++++++++ URL FOR GET ARTIST: {url}");
|
|
||||||
|
|
||||||
var response = await _httpClient.GetAsync(url);
|
var response = await _httpClient.GetAsync(url);
|
||||||
if (!response.IsSuccessStatusCode) return null;
|
if (!response.IsSuccessStatusCode) return null;
|
||||||
@@ -263,13 +244,41 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
var json = await response.Content.ReadAsStringAsync();
|
var json = await response.Content.ReadAsStringAsync();
|
||||||
var result = JsonDocument.Parse(json);
|
var result = JsonDocument.Parse(json);
|
||||||
|
|
||||||
if (result.RootElement.TryGetProperty("data", out var data) &&
|
JsonElement? artistSource = null;
|
||||||
data.TryGetProperty("items", out var items))
|
int albumCount = 0;
|
||||||
{
|
|
||||||
return ParseTidalArtist(data);
|
// Think this can maybe switch to something using ParseTidalAlbum
|
||||||
|
if (result.RootElement.TryGetProperty("albums", out var albums) &&
|
||||||
|
albums.TryGetProperty("items", out var albumItems) &&
|
||||||
|
albumItems.GetArrayLength() > 0)
|
||||||
|
{
|
||||||
|
albumCount = albumItems.GetArrayLength();
|
||||||
|
artistSource = albumItems[0].GetProperty("artist");
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
// Think this can maybe switch to something using ParseTidalTrack
|
||||||
|
else if (result.RootElement.TryGetProperty("tracks", out var tracks) &&
|
||||||
|
tracks.GetArrayLength() > 0 &&
|
||||||
|
tracks[0].TryGetProperty("artists", out var artists) &&
|
||||||
|
artists.GetArrayLength() > 0)
|
||||||
|
{
|
||||||
|
artistSource = artists[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (artistSource == null) return null;
|
||||||
|
|
||||||
|
var artistElement = artistSource.Value;
|
||||||
|
var normalizedArtist = new JsonObject
|
||||||
|
{
|
||||||
|
["id"] = artistElement.GetProperty("id").GetInt64(),
|
||||||
|
["name"] = artistElement.GetProperty("name").GetString(),
|
||||||
|
["albums_count"] = albumCount,
|
||||||
|
["picture"] = artistElement.GetProperty("picture").GetString()
|
||||||
|
};
|
||||||
|
|
||||||
|
using var doc = JsonDocument.Parse(normalizedArtist.ToJsonString());
|
||||||
|
return ParseTidalArtist(doc.RootElement);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -280,41 +289,44 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
|
|
||||||
public async Task<List<Album>> GetArtistAlbumsAsync(string externalProvider, string externalId)
|
public async Task<List<Album>> GetArtistAlbumsAsync(string externalProvider, string externalId)
|
||||||
{
|
{
|
||||||
// Not sure about this endpoint/logic right now. Let's just return null for right now.
|
|
||||||
/*
|
|
||||||
if (externalProvider != "deezer") return new List<Album>();
|
|
||||||
|
|
||||||
var url = $"{BaseUrl}/artist/{externalId}/albums";
|
try
|
||||||
var response = await _httpClient.GetAsync(url);
|
{
|
||||||
|
if (externalProvider != "squidwtf") return new List<Album>();
|
||||||
|
|
||||||
if (!response.IsSuccessStatusCode) return new List<Album>();
|
var url = $"{BaseUrl}/artist/?f={externalId}";
|
||||||
|
var response = await _httpClient.GetAsync(url);
|
||||||
|
|
||||||
var json = await response.Content.ReadAsStringAsync();
|
if (!response.IsSuccessStatusCode) return new List<Album>();
|
||||||
var result = JsonDocument.Parse(json);
|
|
||||||
|
|
||||||
var albums = new List<Album>();
|
var json = await response.Content.ReadAsStringAsync();
|
||||||
if (result.RootElement.TryGetProperty("data", out var data))
|
var result = JsonDocument.Parse(json);
|
||||||
{
|
|
||||||
foreach (var album in data.EnumerateArray())
|
|
||||||
{
|
|
||||||
albums.Add(ParseDeezerAlbum(album));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return albums;
|
var albums = new List<Album>();
|
||||||
*/
|
|
||||||
// var albums = new List<Album>();
|
if (result.RootElement.TryGetProperty("albums", out var albumsObj) &&
|
||||||
// return albums;
|
albumsObj.TryGetProperty("items", out var items))
|
||||||
Console.WriteLine("********************** AM I CALLED???");
|
{
|
||||||
return null;
|
foreach (var album in items.EnumerateArray())
|
||||||
}
|
{
|
||||||
|
albums.Add(ParseTidalAlbum(album));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return albums;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Failed to get SquidWTF artist albums for {ExternalId}");
|
||||||
|
return new List<Album>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// --- Parser functions start here ---
|
// --- Parser functions start here ---
|
||||||
|
|
||||||
private Song ParseTidalTrack(JsonElement track, int? fallbackTrackNumber = null)
|
private Song ParseTidalTrack(JsonElement track, int? fallbackTrackNumber = null)
|
||||||
{
|
{
|
||||||
var externalId = track.GetProperty("id").GetInt64().ToString();
|
var externalId = track.GetProperty("id").GetInt64().ToString();
|
||||||
Console.WriteLine($"#### ID GIVEN: {externalId}");
|
|
||||||
|
|
||||||
// Explicit content lyrics value - idk if this will work
|
// Explicit content lyrics value - idk if this will work
|
||||||
int? explicitContentLyrics =
|
int? explicitContentLyrics =
|
||||||
@@ -366,7 +378,6 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
{
|
{
|
||||||
var coverGuid = cover.GetString()?.Replace("-", "/");
|
var coverGuid = cover.GetString()?.Replace("-", "/");
|
||||||
coverArt = $"https://resources.tidal.com/images/{coverGuid}/320x320.jpg";
|
coverArt = $"https://resources.tidal.com/images/{coverGuid}/320x320.jpg";
|
||||||
Console.WriteLine(coverArt);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -539,19 +550,18 @@ public class SquidWTFMetadataService : IMusicMetadataService
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Think of a way to implement album count when this function is called by search function
|
||||||
|
// as the API endpoint in search does not include this data
|
||||||
private Artist ParseTidalArtist(JsonElement artist)
|
private Artist ParseTidalArtist(JsonElement artist)
|
||||||
{
|
{
|
||||||
var externalId = artist.GetProperty("id").GetInt64().ToString();
|
var externalId = artist.GetProperty("id").GetInt64().ToString();
|
||||||
|
|
||||||
// pretty sure this wont work. API response for artists doesnt provide individual artist pic i dont think.
|
|
||||||
string? imageUrl = null;
|
string? imageUrl = null;
|
||||||
if (artist.TryGetProperty("picture", out var picture))
|
if (artist.TryGetProperty("picture", out var picture))
|
||||||
{
|
{
|
||||||
var pictureGuid = picture.GetString()?.Replace("-", "/");
|
var pictureGuid = picture.GetString()?.Replace("-", "/");
|
||||||
imageUrl = $"https://resources.tidal.com/images/{pictureGuid}/320x320.jpg";
|
imageUrl = $"https://resources.tidal.com/images/{pictureGuid}/320x320.jpg";
|
||||||
}
|
}
|
||||||
Console.WriteLine($"{imageUrl}");
|
|
||||||
// also, album count is not implemented because once again API response doesn't seem to track albums properly
|
|
||||||
|
|
||||||
return new Artist
|
return new Artist
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user