Remove debug prints, fix Artist search, implement GetArtistAlbumsAsync

This commit is contained in:
bransoned
2026-01-12 16:10:02 -05:00
parent bdac8ac132
commit 8a66db915d

View File

@@ -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;
// 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)
{ {
return ParseTidalArtist(data); 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,11 +289,12 @@ 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
{
if (externalProvider != "squidwtf") return new List<Album>();
var url = $"{BaseUrl}/artist/?f={externalId}";
var response = await _httpClient.GetAsync(url); var response = await _httpClient.GetAsync(url);
if (!response.IsSuccessStatusCode) return new List<Album>(); if (!response.IsSuccessStatusCode) return new List<Album>();
@@ -293,20 +303,23 @@ public class SquidWTFMetadataService : IMusicMetadataService
var result = JsonDocument.Parse(json); var result = JsonDocument.Parse(json);
var albums = new List<Album>(); var albums = new List<Album>();
if (result.RootElement.TryGetProperty("data", out var data))
if (result.RootElement.TryGetProperty("albums", out var albumsObj) &&
albumsObj.TryGetProperty("items", out var items))
{ {
foreach (var album in data.EnumerateArray()) foreach (var album in items.EnumerateArray())
{ {
albums.Add(ParseDeezerAlbum(album)); albums.Add(ParseTidalAlbum(album));
} }
} }
return albums; return albums;
*/ }
// var albums = new List<Album>(); catch (Exception ex)
// return albums; {
Console.WriteLine("********************** AM I CALLED???"); _logger.LogError(ex, "Failed to get SquidWTF artist albums for {ExternalId}");
return null; return new List<Album>();
}
} }
// --- Parser functions start here --- // --- Parser functions start here ---
@@ -314,7 +327,6 @@ public class SquidWTFMetadataService : IMusicMetadataService
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
{ {